Автоматическая подстановка значений характеристик на неуправляемых формах

19.11.14

Разработка - Механизмы платформы 1С

В статье описан простой иерархический метод подстановки значений характеристик по приоритету из нетипового регистра сведений.

Была поставлена задача - реализовать простую подстановку значений свойств при создании новой характеристики (ибо характеристик много, на их заполнение уходит большой объем времени, да и у многих групп номенклатуры они одинаковые).

Решили, что это будет иерархическая система по приоритету. Т.е. если группе «Столы» назначить значение «Постформинг с двух сторон», то для всех входящих в нее позиций номенклатуры будет устанавливаться это значение. Но, если, в добавок к этому, добавить другое значение (например "Постформинг с одной стороны") для одной из входящих в нее папок, то для позиций в этой папке будет использоваться новое значение. Такое решение было принято для того, что бы не назначать многим папкам одинаковые значения характеристик.

Для решения этой задачи понадобилось создать регистр сведений "СоответствиеХарактеристикНоменклатуры" со следующией структурой:

- Измерение "Харакеристика" (ПланВидовХарактеристикСсылка.СвойстваОбъектов);

- измерение "Номенклатура" (СправочникСсылка.Номенклатура - группа номенклатуры);

- ресурс "ЗначениеПоУмолчанию" (СправочникСсылка.ЗначенияСвойствОбъектов).

Была автоматически сформирована форма записи и добавлено событие для поля "ЗначениеПоУмолчанию" (установка отбора, дабы не выбирать из огромного списка значений).

Код события:

Процедура ЗначениеПоУмолчаниюНачалоВыбора(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	ФормаВыбора = Справочники.ЗначенияСвойствОбъектов.ПолучитьФормуВыбора(, Элемент);
	
	ФормаВыбора.РежимВыбора = Истина;
	ФормаВыбора.Отбор.Владелец.ВидСравнения  = ВидСравнения.Равно;
	ФормаВыбора.Отбор.Владелец.Значение      = Характеристика;
	ФормаВыбора.Отбор.Владелец.Использование = Истина;
	ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Владелец.Доступность = Ложь;
	ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
	ФормаВыбора.Открыть();
КонецПроцедуры

Далее нужно лишь поправить форму элемента справочника "ХарактеристикаНоменклатуры", а именно добавить следующий код в событие "ПередОткрытием":

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

После внесения изменений в конфигурацию остается только заполнить наш регистр сведений или отдать на заполнение ответственным пользователям.

Вообще, такой механизм сработает и для свойств, если добавить автоматическую подстановку значений свойств в форме номенклатуры.

характеристики свойства

См. также

Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    5815    dsdred    42    

91

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    10038    bayselonarrend    21    

161

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    7200    dsdred    18    

81

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    23297    YA_418728146    30    

73

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    25357    SeiOkami    48    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DAnry 9 26.11.14 14:18 Сейчас в теме
Интересный опыт. Спасибо, что поделились
2. jaroslav.h 180 26.11.14 20:45 Сейчас в теме
Спасибо, взял на заметку.
Оставьте свое сообщение