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

19.11.14

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

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

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

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

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

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

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

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

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

Код события:

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

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

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

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

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

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

См. также

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

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

23.06.2024    7476    bayselonarrend    20    

154

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

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

13.03.2024    5952    dsdred    16    

80

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

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

24.01.2024    17724    YA_418728146    26    

71

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11239    dsdred    44    

130

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

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

06.10.2023    23771    SeiOkami    48    

135

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18843    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14757    YA_418728146    7    

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