Каталог решений - Главная и подчиненная таблицы в 1С — связывание

Главная и подчиненная таблицы в 1С — связывание

Главная и подчиненная таблицы в 1С — связывание

В наличии

Наверняка многие сталкивались с вопросом о связывании двух- и более таблиц на формах 1С по принципу главная-подчиненная. Один из возможных вариантов решения я приведу в этой статье. Некоторые решения я уже встречал, но они либо ограничивают возможности таблиц (невозможность сортировки, изменения номера строки и перестановки строк местами) либо требовали дополнительного кода по обработке различных изменений в связанной информации. Предлагаю более разумное и довольно простое решение.

Категория:

Описание

Наверняка многие сталкивались с вопросом о связывании двух- и более таблиц на формах 1С по принципу главная-подчиненная. Один из возможных вариантов решения я приведу в этой статье. Некоторые решения я уже встречал, но они либо ограничивают возможности таблиц (невозможность сортировки, изменения номера строки и перестановки строк местами) либо требовали дополнительного кода по обработке различных изменений в связанной информации. Предлагаю более разумное и довольно простое решение.

Идея:

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

Реализация:

В поисках такой универсальной связки наткнулся на конструкцию вида:

Новый УникальныйИдентификатор;

Как раз его и будем использовать для связывания. В обе табличные части документа добавляем поле с типом УникальныйИдентификатор. После этого необходимо в модуле формы обработать несколько событий, а именно:

ПриНачалеРедактирования — Табличного поля главной таблицы и Табличного поля подчиненной таблицы.

ПередУдалением — Табличного поля главной таблицы для очистки связанных строк подчиненной.

ПриАктивизацииСтроки — для отбора строк подчиненной таблицы.

Вот и все…

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

 

Процедура ГлавнаяТаблицаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Данные = ЭлементыФормы.ГлавнаяТаблица.ТекущаяСтрока;
	Если НоваяСтрока Тогда 
		Данные.ИД = Новый УникальныйИдентификатор;
	КонецЕсли;
	
КонецПроцедуры

Процедура ПодчиненнаяТаблицаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Данные = ЭлементыФормы.ГлавнаяТаблица.ТекущаяСтрока;
	ТекДанные = ЭлементыФормы.ПодчиненнаяТаблица.ТекущаяСтрока;
	Если НоваяСтрока Тогда
		ТекДанные.ИД = Данные.ИД;
	КонецЕсли;
	
КонецПроцедуры

Процедура ГлавнаяТаблицаПередУдалением(Элемент, Отказ)
	
	Данные = ЭлементыФормы.ГлавнаяТаблица.ТекущаяСтрока;
	Отбор = Новый Структура("ИД",Данные.ИД);
	Масс = ПодчиненнаяТаблица.НайтиСтроки(Отбор);
	Для каждого Строка из Масс Цикл
		ПодчиненнаяТаблица.Удалить(Строка);
	КонецЦикла;
	
КонецПроцедуры

Процедура ГлавнаяТаблицаПриАктивизацииСтроки(Элемент)	
	
	Данные = ЭлементыФормы.ГлавнаяТаблица.ТекущаяСтрока;
	Если Данные = Неопределено Тогда
		Возврат;
	КонецЕсли;	
	ЭлементыФормы.ПодчиненнаяТаблица.ОтборСтрок.ИД.Значение = Данные.ИД;
	ЭлементыФормы.ПодчиненнаяТаблица.ОтборСтрок.ИД.Использование = истина;
	
КонецПроцедуры

И совсем небольшое дополнение — полю ИД устанавливаем Свойство:Индексировать = индексировать.

Поле Табличного Поля можно (и нужно во избежание) сделать недоступным для пользователя.

Жду ваших отзывов и критики :).

has been added to your cart:
Оформление заказа