Цены не по подразделения в Альфа-Авто 5.1
В Альфа-авто цены привязаны к подразделениям. Когда становится много организаций, это перестает быть удобным, т.к. каждая организация привязывается к отдельному подразделению.
Я подумал, что самый простой способ решения проблемы — это добавление в подразделения поле «Подразделение цены», которое будет указывать, какую цену брать:
Запустил глобальный поиск, чтобы найти все обращения к регистру Цены. К моему удивлению, в Альфа-авто цены всегда вычисляются только в одной функции:
Я так обрадовался этому, потому что уже отравлен этим дублированием функционала в типовых 1С ради мнимой «производительности». Зато внесение модификаций в современные типовые становится адом. А тут достаточно поменять только в одном месте.
Посмотрел, какой формируется запрос по ценам:
ВЫБРАТЬ ПЕРВЫЕ 1 ЦеныСрезПоследних.Цена КАК Цена, ВЫБОР КОГДА ЦеныСрезПоследних.ЕдиницаИзмерения=ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка) ТОГДА 1 ИНАЧЕ ЦеныСрезПоследних.ЕдиницаИзмерения.Коэффициент КОНЕЦ КАК Коэффициент, 0 + ВЫБОР КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение0 ТОГДА 0 КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение1 ТОГДА 1 КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение2 ТОГДА 2 ИНАЧЕ 999 КОНЕЦ КАК ПолеДляСортировки ИЗ РегистрСведений.Цены.СрезПоследних(&Момент, ТипЦен=&ТипЦен И Номенклатура=&Номенклатура И Контрагент=&Контрагент И ПодразделениеКомпании В (&МассивПодразделений)) КАК ЦеныСрезПоследних ГДЕ 0 + ВЫБОР КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение0 ТОГДА 0 КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение1 ТОГДА 1 КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение2 ТОГДА 2 ИНАЧЕ 999 КОНЕЦ < 999 И ЦеныСрезПоследних.Цена <> 0 УПОРЯДОЧИТЬ ПО ПолеДляСортировки
И до меня дошло, что он использует все дерево подразделений, т.е. берет сначала цены по текущему подразделению, потом по его родителю и потом по главному подразделению.
Но это хорошо, если проектировать сначала. Потому что если у главного подразделения есть подразделения А и Б и на них уже назначены цены, то если я введу между ними подразделение Промежуточное, цены назначенные на Б уже не будут браться из Промежуточного подразделения.
Поэтому я решил не отказываться от своего плана и воплотил его в изменениях в эту функцию, внес их в цикл подбора подразделений:
Пока Истина Цикл //Осипов 2021-08-01 +++ //Подмена подразделения, если указано, что нужно подменять... РасчПодразделение = ТекущееПодразделение; Если ЗначениеЗаполнено(ТекущееПодразделение) И ЗначениеЗаполнено(ТекущееПодразделение._ПодразделениеЦены) Тогда РасчПодразделение = ТекущееПодразделение._ПодразделениеЦены; КонецЕсли; //Запрос.УстановитьПараметр("Подразделение"+ПеременнаяЦикла,ТекущееПодразделение); //--- // Отбор подразделений //Осипов 2021-08-01 +++ //Подмена подразделения, если указано, что нужно подменять... //МассивПодразделений.Добавить(ТекущееПодразделение); МассивПодразделений.Добавить(РасчПодразделение); //--- // Сортировка подразделений ТекстЗапросаНачало = ТекстЗапросаНачало + " | КОГДА ЦеныСрезПоследних.ПодразделениеКомпании = &Подразделение"+ПеременнаяЦикла+" | ТОГДА "+ПеременнаяЦикла; //Осипов 2021-08-01 +++ //Подмена подразделения, если указано, что нужно подменять... //Запрос.УстановитьПараметр("Подразделение"+ПеременнаяЦикла,ТекущееПодразделение); Запрос.УстановитьПараметр("Подразделение"+ПеременнаяЦикла, РасчПодразделение); //---
Подробнее про ценообразование в Альфа-авто можно почитать тут.
Объем план: 1 час. Среда: Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1 (5.1.10.09)
Свежие комментарии