Имя: Пароль:
1C
1С v8
Помогите настроить СКД
0 al_zzz
 
29.08.12
11:14
Суть проблемы такова:
Требуется сделать отчет по остаткам с суммами. Цена может браться как из регистра сведений "Цены номенклатуры" или из регистра сведений "Цены себестоимости". Вопрос: как правильно сделать настройку, чтобы в параметре пользователь мог выбирать либо перечисление "Тип цен себестоимости" либо элемент справочника "Тип цен номенклатуры" и в зависимости от этого выбиралась цена из соответствующего регистра?
1 al_zzz
 
29.08.12
11:23
Ап-ну, пожалуй!
2 Ns33
 
29.08.12
11:30
Как-то так: (единственно, завести перечисление для выбора)

ВЫБРАТЬ
   СпрНоменклатура.Ссылка,
   ВЫБОР
       КОГДА &Парам = ИСТИНА
           ТОГДА ЦеныСрезПоследних.Цена
       ИНАЧЕ Цены1СрезПоследних.Цена
   КОНЕЦ КАК Цена
ИЗ
   Справочник.Номенклатура КАК СпрНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
       ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены1.СрезПоследних КАК Цены1СрезПоследних
       ПО Цены1СрезПоследних.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
   НЕ СпрНоменклатура.ЭтоГруппа
3 kabanoff
 
29.08.12
11:32
Правильней всего будет заключить необязательные соединения в фигурные скобки {}. А вот при выборе поля компоновка сама их подтянет.
4 Ns33
 
29.08.12
11:39
(3) Согласен, но из-за "ВЫБОР КОГДА" она их все равно в результирующий запрос тянет (смотрю в консоли СКД).
5 kabanoff
 
29.08.12
12:11
(4) Вариант 1. Можно попробовать сделать Цену вычисляемым полем, а из запроса ее убрать. Т.е. вынести два ценовых ресурса в пользовательские поля компоновки (через {}), по желанию разработчика их можно сделать недоступными для выбора пользователю. И затем создать вычисляемое поле с конструкцией выбора:

ВЫБОР
       КОГДА &Парам = ИСТИНА
           ТОГДА Цена1Регистра
       ИНАЧЕ Цена2Регистра
   КОНЕЦ


Вариант 2. Можно сделать так:

ВЫБРАТЬ
   СпрНоменклатура.Ссылка,
   ВЫБОР
       КОГДА &Парам = ИСТИНА
           ТОГДА ЦеныСрезПоследних.Цена
       ИНАЧЕ Цены1СрезПоследних.Цена
   КОНЕЦ КАК Цена
ИЗ
   Справочник.Номенклатура КАК СпрНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(, &Парам = ИСТИНА) КАК ЦеныСрезПоследних
       ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены1.СрезПоследних(, &Парам = ЛОЖЬ) КАК Цены1СрезПоследних
       ПО Цены1СрезПоследних.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
   НЕ СпрНоменклатура.ЭтоГруппа
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший