Имя: Пароль:
1C
1С v8
Параметр в СКД
0 zametatel
 
06.06.16
14:07
Проблема в следующем. Создаю внешний отчет с помощью СКД по продажам в разрезе групп товаров (эти группы в справочнике Шаблон..., связанный со справочником Номенклатура). Во вложенном запросе прописываю условие к справочнику Номенклатура следующим образом:
        ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ
            (ВЫБРАТЬ
            ШаблонОтчетаПоОтгрузкамДляУМК.Группа
            ИЗ
            Справочник.ШаблонОтчетаПоОтгрузкамДляУМК КАК ШаблонОтчетаПоОтгрузкамДляУМК
            ГДЕ
            ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка)

И далее на вкладке Связи внутренним соединяю Продажи с этим Шаблоном с условием ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка
Отчет выводит правильно, но только если выбрать определенный элемент спр.Шаблон в пользовательском режиме. А мне нужен отчет по всем элементам. На галочку "Доступен список значений" ругается несовместимостью типов.
1 Fragster
 
гуру
06.06.16
14:19
я бы копал в сторону "произвльная иерархия СКД" и убрал бы такое условие из запроса вообще.
2 azernot
 
06.06.16
14:20
Самое простое, и без особой переделки - убрать соединение на вкладке "Связи"
в условиях прописать так:

Номенклатура.Ссылка В ИЕРАРХИИ
            (ВЫБРАТЬ
            ШаблонОтчетаПоОтгрузкамДляУМК.Группа
            ИЗ
            Справочник.ШаблонОтчетаПоОтгрузкамДляУМК КАК ШаблонОтчетаПоОтгрузкамДляУМК
            ГДЕ
            ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка)
ИЛИ &Ссылка = Значение(Справочник.Шаблон.ПустаяСсылка)

Понятно, что "Шаблон" - это идентификатор справочника в конфигураторе.
Но вообще, если у тебя "Продажи" - это регистр, правильнее перенести условия в параметры виртуальной таблицы. Опубликуй полный текст запроса в СКД, попробуем посмотреть.
3 zametatel
 
06.06.16
14:23
ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Бренд КАК Бренд
ПОМЕСТИТЬ спрНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ
            (ВЫБРАТЬ
                ШаблонОтчетаПоОтгрузкамДляУМК.Группа
            ИЗ
                Справочник.ШаблонОтчетаПоОтгрузкамДляУМК КАК ШаблонОтчетаПоОтгрузкамДляУМК
            ГДЕ
                ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Регистратор,
    Продажи.Номенклатура,
    СУММА(Продажи.Стоимость) КАК Стоимость,
    Продажи.Контрагент
ПОМЕСТИТЬ Продажи
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания

СГРУППИРОВАТЬ ПО
    Продажи.Регистратор,
    Продажи.Номенклатура,
    Продажи.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиСебестоимость.Регистратор,
    ПродажиСебестоимость.Номенклатура,
    СУММА(ПродажиСебестоимость.Количество) КАК Количество,
    СУММА(ПродажиСебестоимость.Стоимость) КАК Себестоимость
ПОМЕСТИТЬ СебестоимостьПродаж
ИЗ
    РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
ГДЕ
    ПродажиСебестоимость.Период МЕЖДУ &ДатаНачала И &ДатаОкончания

СГРУППИРОВАТЬ ПО
    ПродажиСебестоимость.Номенклатура,
    ПродажиСебестоимость.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Стоимость,
    ЕСТЬNULL(СебестоимостьПродаж.Себестоимость, "-") КАК Себестоимость,
    Контрагенты.Регион,
    ВЫБОР
        КОГДА &ТоварВыбор
            ТОГДА спрНоменклатура.Ссылка
        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    КОНЕЦ КАК Товар,
    ВЫБОР
        КОГДА спрНоменклатура.Бренд <> ЗНАЧЕНИЕ(Справочник.Бренд.ПустаяСсылка)
            ТОГДА спрНоменклатура.Бренд
        ИНАЧЕ &Прочие
    КОНЕЦ КАК Бренд,
    ШаблонОтчетаПоОтгрузкамДляУМК.Группа КАК ГруппаТоваров
ИЗ
    Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО Продажи.Контрагент = Контрагенты.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ СебестоимостьПродаж КАК СебестоимостьПродаж
        ПО Продажи.Регистратор = СебестоимостьПродаж.Регистратор
            И Продажи.Номенклатура = СебестоимостьПродаж.Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ спрНоменклатура КАК спрНоменклатура
        ПО Продажи.Номенклатура = спрНоменклатура.Ссылка
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШаблонОтчетаПоОтгрузкамДляУМК КАК ШаблонОтчетаПоОтгрузкамДляУМК
        ПО (ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка)
4 zametatel
 
06.06.16
14:24
(1) ммм...Новичок я. Что подразумевается под произвольной иерархией?
5 zametatel
 
06.06.16
14:29
(2) не работает
6 azernot
 
06.06.16
14:32
ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Бренд КАК Бренд
ПОМЕСТИТЬ спрНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ
            (ВЫБРАТЬ
                ШаблонОтчетаПоОтгрузкамДляУМК.Группа
            ИЗ
                Справочник.ШаблонОтчетаПоОтгрузкамДляУМК КАК ШаблонОтчетаПоОтгрузкамДляУМК
            ГДЕ
                ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка)
    ИЛИ &Ссылка = Значение(Справочник.Шаблон.ПустаяСсылка)                
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Продажи.Регистратор,
    Продажи.Номенклатура,
    СУММА(Продажи.Стоимость) КАК Стоимость,
    Продажи.Контрагент
ПОМЕСТИТЬ Продажи
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И Продажи.Номенклатура в (Выбрать спрНоменклатура.Ссылка из спрНоменклатура)  

СГРУППИРОВАТЬ ПО
    Продажи.Регистратор,
    Продажи.Номенклатура,
    Продажи.Контрагент
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ПродажиСебестоимость.Регистратор,
    ПродажиСебестоимость.Номенклатура,
    СУММА(ПродажиСебестоимость.Количество) КАК Количество,
    СУММА(ПродажиСебестоимость.Стоимость) КАК Себестоимость
ПОМЕСТИТЬ СебестоимостьПродаж
ИЗ
    РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
ГДЕ
    ПродажиСебестоимость.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ПродажиСебестоимость.Номенклатура в (Выбрать спрНоменклатура.Ссылка из спрНоменклатура)  

СГРУППИРОВАТЬ ПО
    ПродажиСебестоимость.Номенклатура,
    ПродажиСебестоимость.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Стоимость,
    ЕСТЬNULL(СебестоимостьПродаж.Себестоимость, 0) КАК Себестоимость,
    Контрагенты.Регион,
    ВЫБОР
        КОГДА &ТоварВыбор
            ТОГДА спрНоменклатура.Ссылка
        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    КОНЕЦ КАК Товар,
    ВЫБОР
        КОГДА спрНоменклатура.Бренд <> ЗНАЧЕНИЕ(Справочник.Бренд.ПустаяСсылка)
            ТОГДА спрНоменклатура.Бренд
        ИНАЧЕ &Прочие
    КОНЕЦ КАК Бренд,
    ШаблонОтчетаПоОтгрузкамДляУМК.Группа КАК ГруппаТоваров
ИЗ
    Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО Продажи.Контрагент = Контрагенты.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ СебестоимостьПродаж КАК СебестоимостьПродаж
        ПО Продажи.Регистратор = СебестоимостьПродаж.Регистратор
            И Продажи.Номенклатура = СебестоимостьПродаж.Номенклатура


Не сказать, что запрос хороший.. Насколько оправдано использование реальных таблиц регистров, а не виртуальных типа "Обороты"...
Но попробуй вот так.
7 zametatel
 
06.06.16
14:38
(6) не хочет...
Возможно, (1) прав. Надо поразбираться с произвольной иерархией
8 azernot
 
06.06.16
14:40
(7) "Не хочет" - очень неинформативное сообщение.
Не хочет - нужно заставить.

Что конкретно получается,  если выполнить запрос из (6)?
В прпааметрах СКД для параметра "Ссылка" ууказан тип "Справочник.Шаблон"?
9 zametatel
 
06.06.16
14:43
(8) стоит
10 zametatel
 
06.06.16
14:43
"Не хочет" - отчет пустой
11 azernot
 
06.06.16
14:45
(10) В самом отчёте, если нажать кнопку выбора в "параметрах" сразу проваливается в форму списка справочника "Шаблоны"? Или сначала даёт выбор типа "Поле компоновки данных"?
12 azernot
 
06.06.16
14:48
(10) если отчёт пустой, значит параметр "Ссылка" у тебя и не элемент справочника Шаблоны, и не пустая ссылка справочника Шаблоны.. а что-то другое, например Неопределено, или ещё какая фигня.
(это я тактично обхожу другие проблемы типа отсутствия записей в Продажах за выбранный период)
13 zametatel
 
06.06.16
14:49
(11)Дает выбор. Но насколько я понимаю, это в Настройках скд решается. При попытке добавить список значений в запрос (6), ругается все тем же "Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов."
14 azernot
 
06.06.16
14:51
При попытке добавить список значений в запрос (6), ругается все тем же "Неверные параметры в операции сравнения

А зачем ты пытаешься задать список значений? Ты хочешь шаблоны списком задавать?
15 azernot
 
06.06.16
14:52
(13) Даёт выбор чего? Список шаблонов? Тип поля?
Слушай, ты или отвечаешь подробно, или решаешь свои проблемы сам. Я не буду вытягивать из тебя ответы клещами.
16 zametatel
 
06.06.16
14:56
(14)Я хочу, чтобы у меня выводились данные по всем элементам справочника Шаблон, а не по тому элементу, который выберет пользователь. В этом и есть суть проблемы.
(15) В самом отчете для параметра Ссылка дает на выбор справочник Шаблон или Поле компоновки данных
17 azernot
 
06.06.16
14:59
(16) Мы и решаем твою проблему. Если пользователь выберет шаблон - отчёт сформируется по группе номенклатуры шаблона, если не выберет - по всей номенклатуре.

(15) А попробуй выбрать "Справочник.Шаблон", и потом не выбирать сам элемент. Отчёт должен сформироваться по всей номенклатуре.
18 zametatel
 
06.06.16
15:03
(17) нет, не формирует. В справочнике Шаблон нет самой номенклатуры, есть Элементы, которые по реквизиту Группа соответствуют группам верхнего уровня из справочника Номенклатура
19 Fragster
 
гуру
06.06.16
15:04
самое простое - поменять параметр на отбор или сделать параметр необязательным
20 zametatel
 
06.06.16
15:05
(19) Тогда каким образом будет связана Номенклатура из Продаж с Группой товаров из справочника Шаблон?
21 Fragster
 
гуру
06.06.16
15:06
{ГДЕ
            ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка = &Ссылка}
22 Fragster
 
гуру
06.06.16
15:06
и галку с параметра снимай
23 zametatel
 
06.06.16
15:08
(22) Был такой вариант. Не формирует отчет
24 Fragster
 
гуру
06.06.16
15:10
тогда (1)
25 azernot
 
06.06.16
15:21
Зайдём с другой стороны, вообще без параметров. Но при этом шаблон доступен в отборах.
Понятно, что решение не очень красивое, в текущем варианте работает только на 8-ми уровнях иерархии в справочнике Номенклатура, и не учитывает возможность пересечения иерархии в справочнике шаблонов...

ВЫБРАТЬ
    СпрНоменклатура.Ссылка,
    СпрНоменклатура.Артикул КАК Бренд,
    ШаблонОтчетаПоОтгрузкамДляУМК.Группа КАК Группа
ПОМЕСТИТЬ спрНоменклатура
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШаблонОтчетаПоОтгрузкамДляУМК КАК ШаблонОтчетаПоОтгрузкамДляУМК
        ПО (ВЫБОР
                КОГДА СпрНоменклатура.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                КОГДА СпрНоменклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ШаблонОтчетаПоОтгрузкамДляУМК.Группа
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
{ГДЕ
    ШаблонОтчетаПоОтгрузкамДляУМК.Ссылка.* КАК Шаблон}

///////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
    Продажи.Регистратор,
    Продажи.Номенклатура,
    СУММА(Продажи.Стоимость) КАК Стоимость,
    Продажи.Контрагент
ПОМЕСТИТЬ Продажи
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И Продажи.Номенклатура в (Выбрать спрНоменклатура.Ссылка из спрНоменклатура)  

СГРУППИРОВАТЬ ПО
    Продажи.Регистратор,
    Продажи.Номенклатура,
    Продажи.Контрагент
;

////////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
    ПродажиСебестоимость.Регистратор,
    ПродажиСебестоимость.Номенклатура,
    СУММА(ПродажиСебестоимость.Количество) КАК Количество,
    СУММА(ПродажиСебестоимость.Стоимость) КАК Себестоимость
ПОМЕСТИТЬ СебестоимостьПродаж
ИЗ
    РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
ГДЕ
    ПродажиСебестоимость.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ПродажиСебестоимость.Номенклатура в (Выбрать спрНоменклатура.Ссылка из спрНоменклатура)  

СГРУППИРОВАТЬ ПО
    ПродажиСебестоимость.Номенклатура,
    ПродажиСебестоимость.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Стоимость,
    ЕСТЬNULL(СебестоимостьПродаж.Себестоимость, 0) КАК Себестоимость,
    Контрагенты.Регион,
    ВЫБОР
        КОГДА &ТоварВыбор
            ТОГДА спрНоменклатура.Ссылка
        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    КОНЕЦ КАК Товар,
    ВЫБОР
        КОГДА спрНоменклатура.Бренд <> ЗНАЧЕНИЕ(Справочник.Бренд.ПустаяСсылка)
            ТОГДА спрНоменклатура.Бренд
        ИНАЧЕ &Прочие
    КОНЕЦ КАК Бренд,
    спрНоменклатура.Группа КАК ГруппаТоваров
ИЗ
    Продажи КАК Продажи
        Внутреннее СОЕДИНЕНИЕ спрНоменклатура КАК спрНоменклатура
        ПО Продажи.Номенклатура = спрНоменклатура.Ссылка

        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО Продажи.Контрагент = Контрагенты.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ СебестоимостьПродаж КАК СебестоимостьПродаж
        ПО Продажи.Регистратор = СебестоимостьПродаж.Регистратор
            И Продажи.Номенклатура = СебестоимостьПродаж.Номенклатура
26 zametatel
 
06.06.16
17:10
(25) попробую такой вариант, спасибо. Но проблема еще в том, что мне нужны данные из Шаблона тоже выводить. Соответственно, привязывать их к номенклатуре продаж. Т.е. у меня отчет строится таким образом:
- Регион
   - ГруппаТоваров(спр.Шаблон)
     - Бренд
       - Товар
27 zametatel
 
06.06.16
17:15
а все промежуточные подгруппы между элементом спрШаблон, соответствующим одному из верхних уровней групп Номенклатуры, и самим элементом Номенклатуры мне не нужны
28 azernot
 
06.06.16
17:16
(26) Я это понял, поэтому в (25) есть поле "Группа", которое как раз и получается из справочника "шаблоны".
29 azernot
 
06.06.16
17:17
(27) Расчёт на то, что в "шаблонах" не встречается ситуация, когда одна группа находится в другой. В этом случае, данные начнут задваиваться.
30 zametatel
 
06.06.16
17:20
(29) вроде нет. Сейчас буду пробовать
31 zametatel
 
07.06.16
09:18
(25) все получилось!! Спасибо!!!!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан