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

19.11.14

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

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

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

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

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

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

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

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

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

Код события:

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

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

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

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

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

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4534    dsdred    53    

72

Как готовить и есть массивы

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

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

24.01.2024    5295    YA_418728146    25    

63

Планы обмена VS История данных

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

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

11.12.2023    6410    dsdred    36    

112

1С-ная магия

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

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

06.10.2023    18475    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

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

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8824    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

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