Доработка типовой функции УТ 11.5 для обновления зависящих видов цен.
Например, мы с помощью Простой мониторинг цен (так просто ещё не было) считываем цены и регистрируем их в базе 1С как цены поставщика. Так же хотим, чтобы в зависимости от цен поставщика/конкурента, наши цены автоматически бы изменялись по той или иной формуле. Добавляем в справочник видов цен вид цены с формулой, например - "ЦенаКонкурента*0.9". Для автоматического расчета используем процедуру из общего модуля "УстановкаЦенСервер":
// Запускает обновление цен по видам цен
//
// Параметры:
// ВидыЦен - массив - элементов типа СправочникСсылка.ВидыЦен - виды цен, по которым необходимо обновить цены.
// ПараметрыОбновленияЦен - Структура - со свойствами. Может содержать:
// * ВариантОбновленияЦен - Число - вариант формирования видов цен (0 - все, 1- Только выбранные, 2 - Выбранные и зависисмые, 3 - Все кроме выбранных).
//
Процедура ВыполнитьОбновлениеЦен(ВидыЦен, ПараметрыОбновленияЦен) Экспорт
// Вставить содержимое метода.
//ПродолжитьВызов(ВидыЦен, ПараметрыОбновленияЦен, СписокНоменклатуры);
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеЦен);
Если ПустаяСтрока(ИмяПользователя()) Тогда
УстановитьПривилегированныйРежим(Истина);
КонецЕсли;
ВариантОбновленияЦен = ПараметрыОбновленияЦен.ВариантОбновленияЦен;
Если ВариантОбновленияЦен <> 0 И Не ЗначениеЗаполнено(ВидыЦен) Тогда
Возврат;
КонецЕсли;
МассивВидовЦен = ВидыЦен.ВыгрузитьКолонку("ВидЦены");
// инициализация структур для рассчета
СтруктураФормы = ИнициализироватьСтруктуруФормы();
СтруктураФормы.Объект.ВидыЦен = ВидыЦен.Скопировать(,"ВидЦены");
УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(СтруктураФормы);
СтруктураФормы.ТаблицаНастройкиКомпоновкиДанных = ПолучитьИзВременногоХранилища(СтруктураФормы.АдресХранилищаНастройкиКомпоновкиДанных);
СтруктураФормы.ВыбранныеЦены.Колонки.Добавить("СхемаКомпоновкиДанных");
Для каждого СтрокаВидЦен Из СтруктураФормы.ВыбранныеЦены Цикл
Схема = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СтрокаВидЦен.АдресСхемыКомпоновкиДанных));
СтрокаВидЦен.СхемаКомпоновкиДанных = Схема.Получить();
//<< 18.08.2022
Если ПараметрыОбновленияЦен.Свойство("СписокНоменклатуры")
и ВидыЦен.Найти(СтрокаВидЦен.Ссылка,"ВидЦены") <> Неопределено Тогда
СтрокаВидЦен.Выбрана = Истина;
НайденаяСтрока = СтруктураФормы.ТаблицаНастройкиКомпоновкиДанных.Найти(СтрокаВидЦен.Ссылка,"ВидЦены");
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(
НайденаяСтрока.НастройкиКомпоновкиДанных.Отбор,
"Номенклатура",
ВидСравненияКомпоновкиДанных.ВСписке,
ПараметрыОбновленияЦен.СписокНоменклатуры,
Неопределено,
Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
КонецЕсли;
//>> 18.08.2022
КонецЦикла;
// применить настройки варианта обновления цен (0 - все цены; 1 - вбыранные; 2 - выбранные и зависимые; 3 - все кроме выбранных)
Если ВариантОбновленияЦен = 0 Тогда
// все цены
УстановкаЦенКлиентСервер.ИнвертироватьВыбранныеЦены(СтруктураФормы);
ИначеЕсли ВариантОбновленияЦен = 1 Тогда
// Только выбранные цены
// Ничего дополнительно не делаем
ИначеЕсли ВариантОбновленияЦен = 2 Тогда
// Выбранные и зависимые цены
УстановкаЦенКлиентСервер.ВыбратьВсеЗависимыеЦены(СтруктураФормы);
ИначеЕсли ВариантОбновленияЦен = 3 Тогда
// Все кроме выбранных цен
УстановкаЦенКлиентСервер.ИнвертироватьВыбранныеЦены(СтруктураФормы);
КонецЕсли;
// заполнить товары по отборам номенклатуры
УстановкаЦенСервер.ПостроитьДеревоЦен(СтруктураФормы);
Для индекс = 1 По 2 Цикл
СтруктураФормы.ДеревоЦен.Строки.Очистить();
УстановитьЦены(МассивВидовЦен, СтруктураФормы, ?(индекс = 1, "Обновление", "Обнуление"));
КонецЦикла;
КонецПроцедуры