Механизм ввода на основании может быть использован для ввода новых объектов различного типа (документы, справочники, планы видов характеристик и т. д.)
Действия по заполнению реквизитов при вводе на основании должны быть описаны в модуле объекта Документ, в обработчике события ОбработкаЗаполнения.
Есть конструктор, который помогает создавать процедуру ОбработкаЗаполнения.
У процедуры ОбработкаЗаполнения() есть всегда 2 параметра:
- СтандартнаяОбработка - Если Истина, то работают встроенные механизмы заполнения (свойство "Заполнять из данных заполнения" у реквизитов)
- ДанныеЗаполнения - может принимать разные значения:
- Ссылка - если элемент создан на основании объекта, имеет значение, которое используется как основание для заполнения.
- Структура - если элемент создан из динамического из списка. Структура содержит данные отбора списка. Значения реквизитов создаваемого объекта заполняется автоматически, если у этих реквизитов установлено свойство "Заполнять из данных заполнения". Это правило работает только если СтандартнаяОбработка = Истина, в противном случае заполнение реквизитов надо прописывать вручную.
- Произвольное значение, если обработчик вызван при выполнении метода Заполнить(<ДанныеЗаполнения>). Значение равно параметру <ДанныеЗаполнения> метода Заполнить().
Пример процедуры:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Клиенты") Тогда
// Заполнение шапки
Клиент = ДанныеЗаполнения.Ссылка;
КонецЕсли;
КонецПроцедуры
Событие ОбработкаЗаполнения есть не только у объектных данных (документов, справочников и т. п.), но и у регистра сведений, и оно располагается в модуле объекта РегистрСведенийНаборЗаписей.<имя>.
Так же при создании документа на основании у формы документа будет заполнен параметр "Основание", который равен ссылке на объект источник.
Пример использования (модуль формы):
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ТипЗнч(Параметры.Основание) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
Если Параметры.Основание.Контрагент.Пустая() Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не заполнено поле 'Контрагент'!";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Отслеживание цепочки документов
Стандартного механизма отслеживания цепочки документов в 1С нет.
Для построения цепочек связанных объектов необходимо у каждого объекта, который будет вводиться на основании, создать служебный реквизит для хранения ссылки на объект-основание. Затем можно создать объект конфигурации КритерийОтбора, который будет использоваться для установки отбора по требуемому значению служебного реквизита.
КритерийОтбора предназначен для задания правил, по которым может выполняться отбор объектов.
Тип критерия отбора указывается в соответствии с типом данных, по которым будут отбираться объекты, но в общем случае может быть и составным.
В составе критерия отбора указываются реквизиты объектов, по которым нужно будет производить отбор.
Например необходимо в форме справочника Клиенты отображать все документы оказания услуг, которые созданы на основании этого клиента. У документа ОказаниеУслуг добавим реквизит ОбъектОснование и настроим его заполнение в процедуре ОбработкаЗаполнения значением Клиент.
Создадим объект КриторийОтбора (в ветви "Общие") и выполним настройки:
1. На закладке Данные выберем тип используемого критерия – СправочникСсылка.Клиенты.
2. На закладке Состав в качестве объектов, входящих в критерий, выберем реквизит ОбъектОснование документа ОказаниеУслуги
3. В форме элемента справочника Клиент в панели навигации формы элемента справочника Клиенты в группе Перейти появится команда для открытия нашего критерия отбора. Сделаем её видимой (по умолчанию критерии отбора в командном интерфейсе формы не выдны).
Можно вставить команду для открытия списка критерия отбора в форму списка объекта соответствующего типа. Для этого нужно найти соответствующую глобальную параметризируемую команду на закладке редактора формы списка – Команды / Глобальные команды / Параметризуемые / Элементы / Список / Имя критерия отбора(Элементы.Список.ТекущиеДанные.Ссылка)
Программный вызов списка объектов по критерию отбора
1. Вызов формы критерия отбора
&НаКлиенте
Процедура ОткрытьСписокКритерияОтбора(Команда)
// Открыть форму списка критерия отбора с отбором по договору
ЗначениеОтбора = Новый Структура("Значение", СсылкаНаЗначениеОтбора); // задаем значение для отбора
ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора); // формируем структуру параметров формы, в которой передаем критерий отбора
ОткрытьФорму("КритерийОтбора.ДокументыПоДоговору.ФормаСписка", ПараметрыФормы);
КонецПроцедуры
2. Получить список объектов соответствующий критериям отбора
2.1. Использование объектной техники
МассивСсылокНаОбъекты = КритерииОтбора.ДокументыПоДоговору.Найти(СсылкаНаЗначениеОтбора);
2.2. Использование запроса
ВЫБРАТЬ
ДокументыПоДоговору.Ссылка
ИЗ
КритерийОтбора.ДокументыПоДоговору(&Значение) КАК ДокументыПоДоговору
|