Имя: Пароль:
1C
1С v8
СКД: условие на параметр
0 Вжескрыылг
 
19.10.12
09:05
По условиям задачи цены номенклатуры в общем случае задаются в каждом подразделении, но в подразделении может указываться подразделение ценообразования, если сетка цен совпадает с ним. Т.о. по сравнению с типовыми решениями в РС "Цены номенклатуры" добавлено измерение "Подразделение", а у спр. "Подразделения" есть реквизит "ПодразделениеЦенообразования". Пишем отчет "Прайс-лист". Параметр "Подразделение" в пользовательских настройках. Юзер выбирает свое подразделение. Если Подразделение.ПодразделениеЦенообразования заполнено, то в условие запроса или отбор (пробовал) должно подставляться оно, иначе само подразделение. Где и как правильно написать?
1 vicof
 
19.10.12
09:06
ВЫБОР КОГДА ТОГДА КОНЕЦ, если правильно понял писанину
2 Вжескрыылг
 
19.10.12
09:08
(1) где?
3 vicof
 
19.10.12
09:09
в запросе, вестимо
4 Goggy
 
19.10.12
09:12
(2) ты кинь что есть, а тут тебе конкретней подскажут.
5 Godofsin
 
19.10.12
09:16
Заведи переменную и заполняй ее в вычисляемых значениях
6 Вжескрыылг
 
19.10.12
09:18
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
   ЦеныНоменклатурыСрезПоследних.Подразделение КАК Подразделение,
   ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
   ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
   ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
   ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения
{ВЫБРАТЬ
   Номенклатура.*,
   Подразделение.*,
   ТипЦен.*,
   Цена,
   Валюта.*,
   ЕдиницаИзмерения.*}
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), ) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
   ЦеныНоменклатурыСрезПоследних.Цена > 0 И (Здесь, что ли? Ругается на конструкцию "Выбор")
{ГДЕ
   ЦеныНоменклатурыСрезПоследних.Номенклатура.*,
   ЦеныНоменклатурыСрезПоследних.Подразделение.*,
   ЦеныНоменклатурыСрезПоследних.ТипЦен.*,
   ЦеныНоменклатурыСрезПоследних.Цена,
   ЦеныНоменклатурыСрезПоследних.Валюта.*}
7 vicof
 
19.10.12
09:19
не в где, а в ВЫБРАТЬ
8 Вжескрыылг
 
19.10.12
09:25
Написал
ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.Подразделение.ПодразделениеЦенообразования = Значение(Справочник.Подразделения.ПустаяСсылка) Тогда
       ЦеныНоменклатурыСрезПоследних.Подразделение
ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Подразделение.ПодразделениеЦенообразования
КОНЕЦ КАК Подразделение,

для подр. с заполненным подр. ценообразования ничего не выводит.
9 Rovan
 
гуру
19.10.12
09:27
(0) "Юзер выбирает свое подразделение. Если Подразделение.ПодразделениеЦенообразования заполнено, то в условие запроса или отбор (пробовал) должно подставляться оно, иначе само подразделение. "

вот и проверяй это в момент передачи параметра в запрос
10 Вжескрыылг
 
19.10.12
09:28
(8) вместо
   ЦеныНоменклатурыСрезПоследних.Подразделение КАК Подразделение,
11 Вжескрыылг
 
19.10.12
09:50
(9) где лежит значение? Подр. у меня в отборах пользовательских настроек.
Запарился искать:
КомпоновщикНастроек.Настройки.Отбор.Элементы -нет,
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Подразделение") = Неопределено,
ПользовательскиеНастройки.Элементы.Найти("Подразделение") = Неопределено
Не подскажешь, где лежит?
12 vicof
 
19.10.12
09:55
(11)
ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.Подразделение.ПодразделениеЦенообразования = Значение(Справочник.Подразделения.ПустаяСсылка) Тогда
       ЦеныНоменклатурыСрезПоследних.Подразделение
ИНАЧЕ
&ПодразделениеКотороеВыбираетПользователь
КОНЕЦ КАК Подразделение

или отбор добавь
13 Вжескрыылг
 
19.10.12
10:24
(12) Не взлетело.. Подразделение появилось а параметрах и не делает отбор. Если завести в отборы, то все как прежде
14 Вжескрыылг
 
19.10.12
10:25
Попробую КомпоновщикНастроек.ПользовательскиеНастройки.Элементы
15 Вжескрыылг
 
22.10.12
12:28
(0) вычисляемое поле, конструкции в
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Подразделение В Выбор ... Конец) КАК ЦеныНоменклатурыСрезПоследних не помогло.
Понятно, что нужное подразделение надо подсовывать до конструкции "ИЗ". В результате пока сделал так: в запросе
ГДЕ
   ЦеныНоменклатурыСрезПоследних.Цена > 0 И Подразделение = &ПодразделениеЦенообразования
в параметрах новый "Подразделение", ограничение доступности истина, "ПодразделениеЦенообразования" ограничение доступности ложь и включать в пользовательские настройки.
В модуле формы
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   
   ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
   Для Индекс = 0 По ПользовательскиеНастройки.Количество() - 1 Цикл
       Элемент = ПользовательскиеНастройки.Получить(Индекс);
       Если Строка(Элемент.Параметр) = "Подразделение" Тогда
           Подразделение= Элемент.Значение;
           Если ЗначениеЗаполнено(Подразделение.ПодразделениеЦенообразования) Тогда
               Подразделение = Подразделение.ПодразделениеЦенообразования;
           КонецЕсли;
           Элемент = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПодразделениеЦенообразования");
           Элемент.Значение = Подразделение;
           Прервать;
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший