В первой статье приведен полный листинг процедуры, в которой мы ожидаем найти реализацию стратегии ценообразования.
Для обозримости, исключим из нее все, что (на наш взгляд) прямо не относится к предмету нашего интереса.
Получилось так: ... нет, не получилось. Уважаемый читатель. Разобрать эту процедуру - не два байта. В следующих строках моего письма пойдут логи моего первого прохода по представленному коду. Не ждите здесь чего-то на пальцах разжеванного. Подключайтесь к чтению кода, пожалуйста.
Вот верите? Тот случай редкий, когда хочется уже быть приятным и не надменным. Позитива хочется. Стратегии ценообразования!
Если ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗагружаетсяИзЯндексМаркет Тогда
Если ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗагружаетсяСOzon Тогда
... для означенных видов цен загружаем с сайта, Яндекс или Озон
Ну, что же, тоже стратегия. Назовем ее "По рынку".
С остальными видами начинается гранд-конструирование какой-то структуры, явно с какими-то очень сериозными намерениями
СтруктураФормы = Новый Структура();
СтруктураФормы.Вставить("Дата", КонецДня(ТекущаяДатаСеанса()));
СтруктураФормы.Вставить("Модифицированность", Ложь);
СтруктураФормы.Вставить("Объект", ИнициализироватьОбъект());
СтруктураФормы.Вставить("КодФормы", "ОбработкаЗаполненияЦен_тест");
СтруктураФормы.Вставить("ВыбранныеЦены", ИнициализироватьТаблицуВыбранныеЦены());
СтруктураФормы.Вставить("ДеревоЦен", Новый ДеревоЗначений());
СтруктураФормы.Вставить("ИспользоватьЦеновыеГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьЦеновыеГруппы"));
СтруктураФормы.Вставить("ИспользоватьХарактеристикиНоменклатуры", ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры"));
СтруктураФормы.Вставить("ИспользоватьУпаковкиНоменклатуры", ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры"));
СтруктураФормы.Вставить("ИспользоватьСерииНоменклатуры", ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры"));
СтруктураФормы.Вставить("ИспользоватьНесколькоВидовЦен", ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен"));
СтруктураФормы.Вставить("ИспользуетсяЦенообразование25", ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(КонецДня(ТекущаяДатаСеанса())));
СтруктураФормы.Вставить("АдресХранилищаКэшаДанных", "");
СтруктураФормы.Вставить("ВариантГруппировки", Неопределено);
СтруктураФормы.Вставить("ВыбранныеЦеныИзменены", Ложь);
СтруктураФормы.Вставить("РассчитыватьАвтоматически", Истина);
СтруктураФормы.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор());
СтруктураФормы.Вставить("АдресХранилищаПараметровСхемКомпоновкиПоВидамЦен", "");
СтруктураФормы.Вставить("АдресХранилищаНастройкиКомпоновкиДанных", "");
СтруктураФормы.Вставить("ТаблицаНастройкиКомпоновкиДанных");
... вот и опции подошли.
Белый и пушистый, говоришь? Надолго тебя не хватит. Что там было с ФО_20 и ФО_25? А не важно, грузим обе. Сюпри-из :)
Автор, будь осторожен и внимателен! Их тошнит от тебя, а не от их собственного кода, помни об этом!
ДокументУстановкиЦен = Документы.УстановкаЦенНоменклатуры.ПустаяСсылка();
СтруктураФормы.Объект.Вставить("Товары", ДокументУстановкиЦен.Товары);
СтруктураФормы.Объект.Вставить("Товары2_5", ДокументУстановкиЦен.Товары2_5);
Процедура ИнициализироватьВыбранныеЦеныНоменклатуры(Форма, МассивВидоВЦен = Неопределено,ТаблицаВидовЦен = Неопределено)
... в цикле по справочнику ВидыЦен заполняет СтруктураФормы - много букв, пока пропустим.
Отдельно (следом) получаем СтрокаВидЦен.СхемаКомпоновкиДанных
// заполнить товары по отборам номенклатуры
УстановкаЦенСервер.ПостроитьДеревоЦен(СтруктураФормы);
И дальше:
УстановитьЦены(МассивВидовЦен, СтруктураФормы, ?(Индекс = 1, "Обновление", "Обнуление"))
Итак, мы получили для исследования еще две процедуры. Ну, мы ведь не ждали, что будет легко, верно?
Как отправляемся за ценами на сторонние сайты, мы видели. Теперь надо искать, когда сработают функциональные опции (и, может быть, что-то еще).
Может оказаться, что они работают в уже загруженных в структуру формы СКД и формулах.
Далее мы скопипастим сюда две найденные процедуры, ПостроитьДеревоЦен и УстановитьЦены. Во второй из них, небольшой самой по себе (мы ее и не станем копипастить), нас ждет еще одна:
УстановкаЦенСервер.РассчитатьЦены(СтруктураФормы, ПараметрыРасчета)
... после чего уже имеем результат:
Документы.УстановкаЦенНоменклатуры.ЗаписатьИзмененияЦенНаСервере(СтруктураФормы, ТекстКомментария, 1);
Хорошее время, чтобы вспомнить Генри и его друзей. Он занимался математикой. Ученый. И стал применять всякие умные формулы к чисто эмпирическим маркетинговым приемчикам. Потом как-то структурировал презентации, и получилось то, что теперь называется "стратегиями ценообразования". То есть, строго говоря, это - не научная теория. Уже в процессе его коммерческой деятельности, как он сам рассказывает, появляются новые и новые эмпирические штучки, которые его "удивляют". Остается только снабдить эти штучки красивыми графиками (диаграммами), и дело пошло. В этом смысле - относительно появления новых штучек - предсказательная сила этой "науки" равна нулю.
Но его практические рекомендации чаще выстреливают, чем не выстреливают. Но выстреливают они не от того, что математика. Ценообразование , и вся экономика в целом, выстреливают тогда, когда продавец и покупатель находят взаимовыгодный компромисс. Покупатель получает удовлетворение какой-то своей хотелки за некоторую сумму денег, а продавец покрывает (не всегда) свои затраты и сколько-то сверху.
А теперь построим дерево цен и спрячем строительство под катом. Разбирать будем в следующий раз. Там действительно много букв, не раскрывайте кат, если у вас в этом нет реальной необходимости. В конфигураторе это выглядит не настолько пугающе.
// Формирует таблицу цен на форме
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма. Может содержать:
// * Объект - ОбработкаОбъект.ПрайсЛист, ДокументОбъект.УстановкаЦенНоменклатуры - ДанныеФормыСтруктура
// * ВыбранныеЦены - ТаблицаЗначений - с колонками:
// ** Ссылка - СправочникСсылка.ВидыЦен, СправочникСсылка.ВидыЦенПоставщиков - Виды цен
// ** Идентификатор - Строка - Идентификатор для формул
// ** Наименование - Строка - Наименование видов цен
// * СохраненныеДокументы - ТаблицаЗначений - (необязательное) с колонками:
// ** Ссылка - ДокументСсылка.РегистрацияЦенНоменклатурыПоставщика -
// * Элементы - ЭлементыФормы - Могут содержать:
// ** ДеревоЦен - ДеревоЗначений, ТаблицаФормы, ДанныеФормыЭлементДерева, ДанныеФормыДерево - основной элемент формы с деревом цен
// * ДеревоЦен - ДеревоЗначений, ТаблицаФормы, ДанныеФормыЭлементДерева, ДанныеФормыДерево - основной элемент формы с деревом цен
// * КомпоновщикНастроекОтбор - КомпоновщикНастроекКомпоновкиДанных
// ИмяТаблицы - Строка - Имя таблицы
//
Процедура ПостроитьДеревоЦен(Форма) Экспорт
ИспользуетсяЦенообразование25 = Форма.ИспользуетсяЦенообразование25;
ЭтоРегистрацияЦенПоставщика = ЭтоРегистрацияЦенПоставщика(Форма);
ДобавляемыеКолонкиТаблицыЦен = Новый Массив();
УдаляемыеКолонкиТаблицыЦен = Новый Массив();
УдаляемыеЭлементы = Новый Массив();
УсловныеОформления = Новый Массив();
ВариантГруппировки = Форма.ВариантГруппировки;
Если ТипЗнч(Форма.ДеревоЦен) = Тип("ДанныеФормыКоллекция") Тогда
ДеревоЗначений = Новый ТаблицаЗначений;
Иначе
ДеревоЗначений = Новый ДеревоЗначений;
КонецЕсли;
ДеревоЗначений.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ДеревоЗначений.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ДеревоЗначений.Колонки.Добавить("ИндексКартинки", Новый ОписаниеТипов("Число"));
ДеревоЗначений.Колонки.Добавить("ЕдиницаИзмерения", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
ДеревоЗначений.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("ХарактеристикиИспользуются", Новый ОписаниеТипов("Булево"));
Если ЗначениеЗаполнено(ВариантГруппировки) Тогда
ДеревоЗначений.Колонки.Добавить("ИерархияЭтоГруппа", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("ЭтоИерархия", Новый ОписаниеТипов("Булево"));
КонецЕсли;
Если ЭтоРегистрацияЦенПоставщика Тогда
ДеревоЗначений.Колонки.Добавить("НоменклатураПартнера", Новый ОписаниеТипов("СправочникСсылка.НоменклатураКонтрагентов"));
Если ЭтоЗагрузкаЦенПоставщикаИзВнешнихФайлов(Форма) Тогда
ДеревоЗначений.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("НоменклатураНаименование", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("ХарактеристикаНаименование", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("СерияНаименование", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("УпаковкаНаименование", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("НоменклатураСопоставленаАвтоматически", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("ЭтоДубль", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("СтрокаСопоставлена", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("КоличествоНоменклатурыДляВыбора", Новый ОписаниеТипов("Число"));
ДеревоЗначений.Колонки.Добавить("КодОтличается", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("АртикулОтличается", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("НоменклатураНаименованиеОтличается", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("ЦенаНеРаспознана", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("ЦеныИзменены", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
ДеревоЗначений.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
КонецЕсли;
Иначе
ДеревоЗначений.Колонки.Добавить("ВидНоменклатуры", Новый ОписаниеТипов("СправочникСсылка.ВидыНоменклатуры"));
ДеревоЗначений.Колонки.Добавить("ХарактеристикаЦО", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатурыДляЦенообразования"));
ДеревоЗначений.Колонки.Добавить("СерияЦО", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатурыДляЦенообразования"));
ДеревоЗначений.Колонки.Добавить("УпаковкаЦО", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
ДеревоЗначений.Колонки.Добавить("СерииИспользуются", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("УпаковкиИспользуются", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("ЦеноваяГруппа", Новый ОписаниеТипов("СправочникСсылка.ЦеновыеГруппы"));
ДеревоЗначений.Колонки.Добавить("РеквизитСортировки", Новый ОписаниеТипов("Число"));
КонецЕсли;
Для Каждого ВидЦены Из Форма.ВыбранныеЦены Цикл
Если ВидЦены.Выбрана Или ВидЦены.Влияет Тогда
ИмяКолонки = ВидЦены.ИмяКолонки;
Если ЭтоРегистрацияЦенПоставщика Тогда
ДеревоЗначений.Колонки.Добавить( ИмяКолонки, ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля(ДопустимыйЗнак.Неотрицательный), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("СтараяЦена" + ИмяКолонки, ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля(ДопустимыйЗнак.Неотрицательный), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ПроцентИзменения" + ИмяКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(05, 2, ДопустимыйЗнак.Любой)), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("СуммаИзменения" + ИмяКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой)), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ИзмененаВручную" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ИзмененаАвтоматически" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ЗапретРедактирования" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("КартинкаИзмененаВручную" + ИмяКолонки, Новый ОписаниеТипов("Число"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("МинимальнаяПартияПоставки"+ ИмяКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный)), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("УстановкаУсловий" + ИмяКолонки, Новый ОписаниеТипов("Булево"), НСтр("ru='Установка условий'"));
Если Форма.ИспользоватьУпаковкиНоменклатуры Тогда
ДеревоЗначений.Колонки.Добавить("Упаковка" + ИмяКолонки, Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"), "Упаковка");
ДеревоЗначений.Колонки.Добавить("УпаковкаЗаказа" + ИмяКолонки, Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"), НСтр("ru='Упаковка заказа'"));
Если Форма.КодФормы = "ЗагрузкаЦенПоставщикаИзВнешнихФайлов" Тогда
ДеревоЗначений.Колонки.Добавить("УпаковкаЗаполнена" + ИмяКолонки, Новый ОписаниеТипов("Булево"), НСтр("ru='Упаковка заполнена'"));
ДеревоЗначений.Колонки.Добавить("УпаковкаИмя" + ИмяКолонки, Новый ОписаниеТипов("Строка"), НСтр("ru='Упаковка наименование'"));
КонецЕсли;
КонецЕсли;
Иначе
ДеревоЗначений.Колонки.Добавить( ИмяКолонки, ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля(ДопустимыйЗнак.Неотрицательный), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("Валюта" + ИмяКолонки, Новый ОписаниеТипов("СправочникСсылка.Валюты"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("СтараяЦена" + ИмяКолонки, ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля(ДопустимыйЗнак.Неотрицательный), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("Формула" + ИмяКолонки, Новый ОписаниеТипов("Строка"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ПроцентИзменения" + ИмяКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(05, 2, ДопустимыйЗнак.Любой)), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("СуммаИзменения" + ИмяКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой)), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ИзмененаВручную" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ФормулаИзмененаВручную" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ИзмененаАвтоматически" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("КартинкаИзмененаВручную" + ИмяКолонки, Новый ОписаниеТипов("Число"), ВидЦены.Наименование);
ДеревоЗначений.Колонки.Добавить("ЗапретРедактирования" + ИмяКолонки, Новый ОписаниеТипов("Булево"), ВидЦены.Наименование);
Если Форма.ИспользоватьУпаковкиНоменклатуры Тогда
ДеревоЗначений.Колонки.Добавить("Упаковка" + ИмяКолонки, Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"), "Упаковка");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КолонкаОтступ = ДеревоЗначений.Колонки.Добавить("Отступ", Новый ОписаниеТипов("Строка"), НСтр("ru = 'Отступ'"));
Если ТипЗнч(Форма.ДеревоЦен) = Тип("ДанныеФормыДерево") Или ТипЗнч(Форма.ДеревоЦен) = Тип("ДанныеФормыКоллекция") Тогда
РеквизитыТаблицыЦен = Форма.ПолучитьРеквизиты("ДеревоЦен");
Для Каждого Реквизит Из РеквизитыТаблицыЦен Цикл
Если СтрНайти(Реквизит.Имя, "ВидЦены")
Или СтрНайти(Реквизит.Имя, "Отступ") Тогда
УдаляемыеКолонкиТаблицыЦен.Добавить("ДеревоЦен." + Реквизит.Имя);
КонецЕсли;
КонецЦикла;
Для Каждого Колонка Из ДеревоЗначений.Колонки Цикл
Если СтрНайти(Колонка.Имя, "ВидЦены") Тогда
УдаляемаяКолонка = УдаляемыеКолонкиТаблицыЦен.Найти("ДеревоЦен." + Колонка.Имя);
Если УдаляемаяКолонка <> Неопределено Тогда
УдаляемыеКолонкиТаблицыЦен.Удалить(УдаляемаяКолонка);
Иначе
ДобавляемыеКолонкиТаблицыЦен.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ДеревоЦен", Колонка.Заголовок, Истина));
КонецЕсли;
КонецЕсли;
КонецЦикла;
ДобавляемыеКолонкиТаблицыЦен.Добавить(Новый РеквизитФормы(КолонкаОтступ.Имя, КолонкаОтступ.ТипЗначения, "ДеревоЦен", КолонкаОтступ.Заголовок, Истина));
Если УдаляемыеКолонкиТаблицыЦен.Количество() > 0 Или ДобавляемыеКолонкиТаблицыЦен.Количество() > 0 Тогда
Форма.ИзменитьРеквизиты(ДобавляемыеКолонкиТаблицыЦен, УдаляемыеКолонкиТаблицыЦен);
КонецЕсли;
ПодчиненныеЭлементыТаблицы = Форма.Элементы["ДеревоЦен"].ПодчиненныеЭлементы; // ЭлементыФормы
Для Каждого ТекЭлемент Из ПодчиненныеЭлементыТаблицы Цикл
Если СтрНайти(ТекЭлемент.Имя, "ВидЦены")
Или СтрНайти(ТекЭлемент.Имя, "Отступ") Тогда
УдаляемыеЭлементы.Добавить(ТекЭлемент);
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл
Форма.Элементы.Удалить(УдаляемыйЭлемент);
КонецЦикла;
Для Каждого Оформление Из Форма.УсловноеОформление.Элементы Цикл
Если Оформление.Представление = "СозданоПрограммно" Тогда
УсловныеОформления.Добавить(Оформление);
КонецЕсли;
КонецЦикла;
Для Каждого Оформление Из УсловныеОформления Цикл
Форма.УсловноеОформление.Элементы.Удалить(Оформление);
КонецЦикла;
Для Каждого ВидЦены Из Форма.ВыбранныеЦены Цикл
ИмяКолонки = ВидЦены.ИмяКолонки;
ПоказыватьВлияющуюЦену = Форма.ОтображатьВлияющиеЦены
И ВидЦены.Влияет
И НЕ ВидЦены.ЗапрещенныйВидЦены;
Если ВидЦены.Выбрана
Или ПоказыватьВлияющуюЦену Тогда
ЦветЗаголовка = Неопределено;
ЦветФона = Неопределено;
КартинкаШапки = Неопределено;
Если ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.Вручную
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.НаценкаНаЦенуПоступления
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.НаценкаНаЦенуВводаОстатков Тогда
КартинкаШапки = БиблиотекаКартинок.СпособыЗаданияЦенЗадаватьВручную;
ИначеЕсли ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБ
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПриПоступлении
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоКонкурентам
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоПоставщикам
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗаполнятьПоДаннымИБПоСебестоимости Тогда
КартинкаШапки = БиблиотекаКартинок.СпособыЗаданияЦенЗаполнятьПоДаннымИБ;
ИначеЕсли ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.РассчитыватьПоФормуламОтДругихВидовЦен
Или ВидЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.НаценкаНаДругойВидЦен Тогда
КартинкаШапки = БиблиотекаКартинок.СпособыЗаданияЦенРассчитыватьПоФормуламОтДругихВидовЦен;
КонецЕсли;
Если ЭтоРегистрацияЦенПоставщика Тогда
НоваяГруппа = ДобавитьГруппуФормы(Форма, "ГруппаЦены" + ИмяКолонки, Строка(ВидЦены.Ссылка) + ", " + Строка(ВидЦены.Валюта), Истина, КартинкаШапки, ГруппировкаКолонок.Горизонтальная, Неопределено);
Иначе
НоваяГруппа = ДобавитьГруппуФормы(Форма, "ГруппаЦены" + ИмяКолонки, ?(Строка(ВидЦены.Идентификатор)=Строка(ВидЦены.Ссылка), Строка(ВидЦены.Ссылка), Строка(ВидЦены.Ссылка) + " ["+ Строка(ВидЦены.Идентификатор) +"]") + ", " + Строка(ВидЦены.Валюта), Истина, КартинкаШапки, ГруппировкаКолонок.Горизонтальная, Неопределено);
КонецЕсли;
Если ПодборТоваровКлиентСервер.ЭтоФормаПрайсЛиста(Форма) Или
ПодборТоваровКлиентСервер.ЭтоФормаПрайсЛистаПоставщиков(Форма) Тогда
Если ЗначениеЗаполнено(Форма.ДатаДействующихЦен) Тогда
ДатаДействующихЦен = КонецДня(Форма.ДатаДействующихЦен);
Иначе
ДатаДействующихЦен = НачалоДня(Форма.Дата)-1;
КонецЕсли;
ЗаголовокКолонкиСтараяЦена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Цена на %1'"), Формат(ДатаДействующихЦен, "ДЛФ=D"));
Иначе
ЗаголовокКолонкиСтараяЦена = ?(ВидЦены.Выбрана, НСтр("ru='Действующая цена'"), НСтр("ru='Цена'"));
КонецЕсли;
Если ВидЦены.Выбрана Тогда
НоваяГруппаТехническая = ДобавитьГруппуФормы(Форма, "ГруппаТехническая" + ИмяКолонки, НСтр("ru='Группа'"), Ложь, Неопределено, ГруппировкаКолонок.Горизонтальная, НоваяГруппа);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", ЗаголовокКолонкиСтараяЦена);
СтруктураПараметров.Вставить("ШиринаПоля", 12);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаТехническая);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Истина);
НовоеПоле = ДобавитьПолеФормы(Форма, "СтараяЦена" + ИмяКолонки, СтруктураПараметров);
НовоеПоле.Подсказка = НСтр("ru = 'Текущая установленная цена'");
НовоеПоле.ЦветТекста = WebЦвета.Серый;
Если Не ЭтоРегистрацияЦенПоставщика Тогда
НоваяГруппаФормула = ДобавитьГруппуФормы(Форма, "ГруппаТехническаяФормула" + ИмяКолонки, НСтр("ru='Группа формула'"), Ложь, Неопределено, ГруппировкаКолонок.ВЯчейке, НоваяГруппаТехническая);
НовоеПоле = Форма.Элементы.Добавить("ДеревоЦен" + "Формула" + "Картинка" + ИмяКолонки, Тип("ПолеФормы"), НоваяГруппаФормула);
НовоеПоле.ПутьКДанным = "ДеревоЦен.ФормулаИзмененаВручную" + ИмяКолонки;
НовоеПоле.Заголовок = "";
НовоеПоле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
НовоеПоле.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
НовоеПоле.Вид = ВидПоляФормы.ПолеКартинки;
НовоеПоле.ТолькоПросмотр = Истина;
НовоеПоле.Ширина = 2;
НовоеПоле.ОтображатьВШапке = Ложь;
НовоеПоле.КартинкаЗначений = БиблиотекаКартинок.Внимание16;
НовоеПоле.Видимость = ВидЦены.ФормулаРедактируется;
НовоеПоле.РастягиватьПоГоризонтали = Ложь;
НовоеПоле.Подсказка = НСтр("ru = 'Формула изменена'");
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Формула'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенФормулаПриИзменении");
СтруктураПараметров.Вставить("ОбработчикНачалоВыбора", "Подключаемый_ДеревоЦенФормулаНачалоВыбора");
СтруктураПараметров.Вставить("ШиринаПоля", 12);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаФормула);
СтруктураПараметров.Вставить("Видимость", ВидЦены.ФормулаРедактируется);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", НЕ ВидЦены.Редактировать);
СтруктураПараметров.Вставить("ГоризонтальноеПоложение", ГоризонтальноеПоложениеЭлемента.Право);
НовоеПоле = ДобавитьПолеФормы(Форма, "Формула" + ИмяКолонки, СтруктураПараметров);
НовоеПоле.Подсказка = НСтр("ru = 'Формула для расчета цены'");
НовоеПоле.ЦветТекста = WebЦвета.Серый;
КонецЕсли;
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Изменение'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенЦенаПриИзменении");
СтруктураПараметров.Вставить("ШиринаПоля", 12);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаТехническая);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", ?(ЭтоРегистрацияЦенПоставщика, Ложь, НЕ ВидЦены.Редактировать));
НовоеПоле = ДобавитьПолеФормы(Форма, "СуммаИзменения" + ИмяКолонки, СтруктураПараметров);
НовоеПоле.ЦветТекста = WebЦвета.Серый;
НовоеПоле.ВыделятьОтрицательные = Истина;
НовоеПоле.Подсказка = НСтр("ru = 'Изменение цены'");
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", "%");
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенЦенаПриИзменении");
СтруктураПараметров.Вставить("ШиринаПоля", 6);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаТехническая);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", ?(ЭтоРегистрацияЦенПоставщика, Ложь, НЕ ВидЦены.Редактировать));
НовоеПоле = ДобавитьПолеФормы(Форма, "ПроцентИзменения" + ИмяКолонки, СтруктураПараметров);
НовоеПоле.ЦветТекста = WebЦвета.Серый;
НовоеПоле.ВыделятьОтрицательные = Истина;
НовоеПоле.Подсказка = НСтр("ru = 'Процент изменения цены'");
НоваяГруппаЦена = ДобавитьГруппуФормы(Форма, "ГруппаЦена" + ИмяКолонки, НСтр("ru='Группа цена'"), Ложь, Неопределено, ГруппировкаКолонок.ВЯчейке, НоваяГруппа);
НовоеПоле = Форма.Элементы.Добавить("ЗапретРедактирования" + ИмяКолонки, Тип("ПолеФормы"), НоваяГруппаЦена);
НовоеПоле.ПутьКДанным = "ДеревоЦен.ЗапретРедактирования" + ИмяКолонки;
НовоеПоле.Заголовок = "Запрет редактирования";
НовоеПоле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
НовоеПоле.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
НовоеПоле.Вид = ВидПоляФормы.ПолеКартинки;
НовоеПоле.ТолькоПросмотр = Истина;
НовоеПоле.Ширина = 2;
НовоеПоле.ОтображатьВШапке = Ложь;
НовоеПоле.КартинкаЗначений = БиблиотекаКартинок.ВидыЦенТолькоПросмотр;
НовоеПоле.КартинкаШапки = БиблиотекаКартинок.ВидыЦенТолькоПросмотр;
НовоеПоле.Видимость = ?(ЭтоРегистрацияЦенПоставщика, Ложь, НЕ ВидЦены.Редактировать);
НовоеПоле.РастягиватьПоГоризонтали = Ложь;
НовоеПоле.Подсказка = НСтр("ru = 'Запрет редактирования цены'");
НовоеПоле = Форма.Элементы.Добавить("ДеревоЦен" + "Картинка" + ИмяКолонки, Тип("ПолеФормы"), НоваяГруппаЦена);
НовоеПоле.ПутьКДанным = "ДеревоЦен.ИзмененаВручную" + ИмяКолонки;
НовоеПоле.Заголовок = "";
НовоеПоле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
НовоеПоле.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
НовоеПоле.Вид = ВидПоляФормы.ПолеКартинки;
НовоеПоле.ТолькоПросмотр = Истина;
НовоеПоле.Ширина = 2;
НовоеПоле.ОтображатьВШапке = Ложь;
НовоеПоле.КартинкаЗначений = БиблиотекаКартинок.УстановитьЦены;
НовоеПоле.КартинкаШапки = БиблиотекаКартинок.УстановитьЦены;
НовоеПоле.Видимость = ?(ЭтоРегистрацияЦенПоставщика, Истина, ВидЦены.Редактировать);
НовоеПоле.РастягиватьПоГоризонтали = Ложь;
НовоеПоле.Подсказка = НСтр("ru = 'Цена изменена вручную'");
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Цена'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенЦенаПриИзменении");
СтруктураПараметров.Вставить("ШиринаПоля", 12);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаЦена);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", ?(ЭтоРегистрацияЦенПоставщика, Ложь, НЕ ВидЦены.Редактировать));
НовоеПоле = ДобавитьПолеФормы(Форма, ИмяКолонки, СтруктураПараметров);
НовоеПоле.Подсказка = НСтр("ru = 'Устанавливаемая цена'");
Если Не ЭтоРегистрацияЦенПоставщика Тогда
НоваяГруппаВалюта = ДобавитьГруппуФормы(Форма, "ГруппаВалюта" + ИмяКолонки, НСтр("ru='Группа валюта'"), Ложь, Неопределено, ГруппировкаКолонок.Горизонтальная, НоваяГруппаТехническая);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Валюта'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенВалютаПриИзменении");
СтруктураПараметров.Вставить("ОбработчикНачалоВыбора", "Подключаемый_ДеревоЦенВалютаНачалоВыбора");
СтруктураПараметров.Вставить("ШиринаПоля", 6);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаВалюта);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", ?(ЭтоРегистрацияЦенПоставщика, Ложь, НЕ ВидЦены.Редактировать));
НовоеПоле = ДобавитьПолеФормы(Форма, "Валюта" + ИмяКолонки, СтруктураПараметров);
НовоеПоле.Подсказка = НСтр("ru = 'Валюта цены'");
НовоеПоле.БыстрыйВыбор = Ложь;
КонецЕсли;
Иначе
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", ЗаголовокКолонкиСтараяЦена);
СтруктураПараметров.Вставить("ШиринаПоля", 12);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Истина);
НовоеПоле = ДобавитьПолеФормы(Форма, "СтараяЦена" + ИмяКолонки, СтруктураПараметров);
НовоеПоле.ЦветТекста = WebЦвета.Серый;
КонецЕсли;
Если Форма.ИспользоватьУпаковкиНоменклатуры Тогда
НоваяГруппаУпаковка = ДобавитьГруппуФормы(Форма, "ГруппаУпаковки" + ИмяКолонки, НСтр("ru='Ед. изм.'"), Ложь, Неопределено, ГруппировкаКолонок.ВЯчейке, НоваяГруппа);
НоваяСвязь = Новый СвязьПараметраВыбора("Номенклатура", "Элементы.ДеревоЦен.ТекущиеДанные.Номенклатура", РежимИзмененияСвязанногоЗначения.НеИзменять);
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(НоваяСвязь);
НовыеСвязи = Новый ФиксированныйМассив(НовыйМассив);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Упаковка'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенУпаковкаПриИзменении");
СтруктураПараметров.Вставить("ОбработчикНачалоВыбора", "Подключаемый_ДеревоЦенУпаковкаНачалоВыбора");
СтруктураПараметров.Вставить("ШиринаПоля", 3);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаУпаковка);
СтруктураПараметров.Вставить("СвязиПараметровВыбора", НовыеСвязи);
СтруктураПараметров.Вставить("ОтображатьВШапке", Ложь);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", ?(ЭтоРегистрацияЦенПоставщика, Ложь, НЕ ВидЦены.Редактировать));
ДобавитьПолеФормы(Форма, "Упаковка" + ИмяКолонки, СтруктураПараметров);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Ед. изм.'"));
СтруктураПараметров.Вставить("ШиринаПоля", 3);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппаУпаковка);
СтруктураПараметров.Вставить("ПутьКДанным", "ДеревоЦен.Номенклатура.ЕдиницаИзмерения");
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Истина);
ДобавитьПолеФормы(Форма, "ЕдиницаИзмерения" + ИмяКолонки, СтруктураПараметров);
Если ЭтоРегистрацияЦенПоставщика Тогда
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru = 'Упаковка заказа'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенУпаковкаЗаказаПриИзменении");
СтруктураПараметров.Вставить("ШиринаПоля", 9);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("СвязиПараметровВыбора", НовыеСвязи);
СтруктураПараметров.Вставить("ОтображатьВШапке", Истина);
ДобавитьПолеФормы(Форма,"УпаковкаЗаказа" + ИмяКолонки, СтруктураПараметров);
Если Форма.КодФормы = "ЗагрузкаЦенПоставщикаИзВнешнихФайлов" Тогда
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru = 'Упаковка заполнена'"));
СтруктураПараметров.Вставить("ШиринаПоля", 9);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("СвязиПараметровВыбора", НовыеСвязи);
СтруктураПараметров.Вставить("ОтображатьВШапке", Истина);
СтруктураПараметров.Вставить("Видимость", Ложь);
ДобавитьПолеФормы(Форма,"УпаковкаЗаполнена" + ИмяКолонки, СтруктураПараметров);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru = 'Наименование упак.'"));
СтруктураПараметров.Вставить("ШиринаПоля", 9);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("СвязиПараметровВыбора", НовыеСвязи);
СтруктураПараметров.Вставить("ОтображатьВШапке", Истина);
СтруктураПараметров.Вставить("Видимость", Истина);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Истина);
ДобавитьПолеФормы(Форма,"УпаковкаИмя" + ИмяКолонки, СтруктураПараметров);
КонецЕсли;
КонецЕсли;
Иначе
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru='Ед. изм.'"));
СтруктураПараметров.Вставить("ШиринаПоля", 3);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("ПутьКДанным", "ДеревоЦен.Номенклатура.ЕдиницаИзмерения");
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Истина);
ДобавитьПолеФормы(Форма, "ЕдиницаИзмерения" + ИмяКолонки, СтруктураПараметров);
КонецЕсли;
Если ЭтоРегистрацияЦенПоставщика Тогда
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru = 'Мин. партия поставки'"));
СтруктураПараметров.Вставить("ОбработчикПриИзменении", "Подключаемый_ДеревоЦенМинимальнаяПартияПриИзменении");
СтруктураПараметров.Вставить("ШиринаПоля", 8);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("ОтображатьВШапке", Истина);
НовоеПоле = ДобавитьПолеФормы(Форма, "МинимальнаяПартияПоставки" + ИмяКолонки, СтруктураПараметров);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Заголовок", НСтр("ru = 'Условия'"));
СтруктураПараметров.Вставить("ШиринаПоля", 8);
СтруктураПараметров.Вставить("ЦветФона", ЦветФона);
СтруктураПараметров.Вставить("ЦветФонаЗаголовка", ЦветЗаголовка);
СтруктураПараметров.Вставить("Родитель", НоваяГруппа);
СтруктураПараметров.Вставить("ОтображатьВШапке", Истина);
СтруктураПараметров.Вставить("Вид", ВидПоляФормы.ПолеКартинки);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Ложь);
СтруктураПараметров.Вставить("КартинкаЗначений", БиблиотекаКартинок.Изменить);
СтруктураПараметров.Вставить("КартинкаШапки", БиблиотекаКартинок.Изменить);
СтруктураПараметров.Вставить("Видимость", Ложь);
ДобавитьПолеФормы(Форма,"УстановкаУсловий" + ИмяКолонки, СтруктураПараметров);
КонецЕсли;
Если Не ЭтоРегистрацияЦенПоставщика Тогда
Если ВидЦены.ФормулаРедактируется Тогда
// Условное изменения формулы
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = "Формула"+ ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ФормулаИзмененаВручную"+ ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Формула"+ ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСиний);
// Условное изменения формулы
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = "Формула"+ ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ФормулаИзмененаВручную"+ ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Формула"+ ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
Иначе
// Условное изменения формулы
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = "Формула"+ ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Формула"+ ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<формулы не используются>'"));
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецЕсли;
КонецЕсли;
// Условное оформление увеличившихся цен
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен." + ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.СтараяЦена" + ИмяКолонки);
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСиний);
// Условное оформление уменьшившихся цен
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен." + ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.СтараяЦена" + ИмяКолонки);
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноЗеленый);
// Условное оформление единиц измерения
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(Форма, "ДеревоЦен" + "ЕдиницаИзмерения" + ИмяКолонки, "ДеревоЦен.Упаковка" + ИмяКолонки);
Если НЕ ЭтоРегистрацияЦенПоставщика и ИспользуетсяЦенообразование25 Тогда
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.УпаковкиИспользуются");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Упаковка" + ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецЕсли;
// Условное оформление запрета редактирования
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ЗапретРедактирования" + ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + ИмяКолонки);
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Формула" + ИмяКолонки);
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "СуммаИзменения" + ИмяКолонки);
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "ПроцентИзменения" + ИмяКолонки);
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Валюта" + ИмяКолонки);
Если НЕ ЭтоРегистрацияЦенПоставщика Тогда
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "Упаковка" + ИмяКолонки);
КонецЕсли;
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Запрет редактирования>'"));
Если ЭтоРегистрацияЦенПоставщика Тогда
// В регистрации цен поставщика - пустая цена не регистрируется при проведении
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен." + ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ХарактеристикиИспользуются");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Не изменяется>'"));
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
//
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен." + ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.Характеристика");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Не изменяется>'"));
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
// В регистрации цен поставщика - пустая цена не регистрируется при проведении
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяКолонки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен." + ИмяКолонки);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен" + "ПроцентИзменения" + ИмяКолонки);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", "");
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ВариантГруппировки) Тогда
СписокИндексовКартинкиЭлемента = Новый СписокЗначений;
СписокИндексовКартинкиЭлемента.Добавить(0);
СписокИндексовКартинкиЭлемента.Добавить(2);
//
НовыйЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = "СтрокиТолькоПросмотр";
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ИндексКартинки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
ЭлементОтбора.ПравоеЗначение = СписокИндексовКартинкиЭлемента;
НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦен");
НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецЕсли;
КонецЦикла;
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("ШиринаПоля", 30);
СтруктураПараметров.Вставить("ТолькоПросмотрПоля", Истина);
НовоеПоле = ДобавитьПолеФормы(Форма, "Отступ", СтруктураПараметров);
НовоеПоле.ЦветТекста = WebЦвета.Серый;
НовоеПоле.Видимость = Истина;
НовоеПоле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
НовоеПоле.РастягиватьПоГоризонтали = Истина;
ДеревоЦенЗначение = Форма.РеквизитФормыВЗначение("ДеревоЦен"); // ДеревоЗначений
ДеревоЦенЗначение.Колонки.Очистить();
Для Каждого Колонка Из ДеревоЗначений.Колонки Цикл
ДеревоЦенЗначение.Колонки.Добавить(Колонка.Имя);
КонецЦикла;
Форма.ЗначениеВРеквизитФормы(ДеревоЦенЗначение, "ДеревоЦен");
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Форма, "ВыбранныеЦеныИзменены") Тогда
Форма.ВыбранныеЦеныИзменены = Ложь;
КонецЕсли;
Если Не ЭтоРегистрацияЦенПоставщика Тогда
УстановитьПометкуИзмененныхФормул(Форма, ДеревоЦенЗначение);
КонецЕсли;
Иначе
Форма["ДеревоЦен"] = ДеревоЗначений.Скопировать();
КонецЕсли;
КонецПроцедуры