Для организации ввода
документов с помощью механизма «ввод на
основании» необходимо:
- В
документе-приемнике указать типы документов, на
основании которых он будет вводиться. Это
делается в конфигураторе. В форме редактирования
параметров документа есть кнопка «Ввод на
основании». В открывшемся окне Вы можете выбрать
типы документов, на основании которых может быть
введен Ваш документ. Каждый документ может быть
введен на основании одного или нескольких
документов. Например, счет-фактуру можно ввести
на основании счета или расходной накладной.
- В модуле
формы документа-приемника описать
предопределенную процедуру «ВводНаОсновании».
Эта процедура вызывается каждый раз, когда Вы вводите документ на
основании.
Самый сложный шаг –
написать процедуру ВводНаОсновании. Эта
процедура имеет один параметр –
документ-основание, из которого Вам надо
копировать данные. При разработке процедуры
следует учитывать следующие факторы:
- Процедура
ВводНаОсновании вызывается для ввода на
основании документов ВСЕХ типов. Это означает,
что в процедуре желательно учитывать тип
документа, из которого копируются данные.
- Копируется
только те реквизиты, которые Вы сами пропишете в
процедуру. Даже если в обоих документах есть
реквизит «Клиент» типа «Справочник.Конрагенты»-
система не скопирует значение без Вашего
участия!
Предлагаю Вам
использовать следующий шаблон для процедуры
ВводНаОсновании
Процедура
ВводНаОсновании(ДокОснование)
Если докОснование.Вид()=«ВидА» тогда
РеквизитПриемникаШ1=ДокОснование.РеквизитОснованияШ1;
РеквизитПриемникаШ2=ДокОснование.РеквизитОснованияШ2;
РеквизитПриемникаШ3=ДокОснование.РеквизитОснованияШ3;
……..
……..
ДокОснование.ВыбратьСтроки();
Пока докОснование.ПолучитьСтроку()=1 цикл
НоваяСтрока();
РеквизитПриемникаТ1=ДокОснование.РеквизитОснованияТ1;
РеквизитПриемникаТ2=ДокОснование.РеквизитОснованияТ2;
……………..
КонецЦикла;
ИначеЕсли ДокОснование.Вид()=
«ВидБ» тогда
………………
………………
………………
иначе
Предупреждение(«Нет процедуры копирования»);
Возврат;
КонецЕсли;
КонецПроцедуры
Важные моменты:
- обращение
к реквизитам документа-основания происходят
через «ДокОснование.РеквизитОснования».
- В
шаблоне анализируется вид документа-основания. В
случае если для данного типа документа-основания
нет алгоритма копирования, программа выдаст
сообщение «Не процедуры копирования».
Анализируйте вид документа основания, если
документов оснований несколько! В документах
могут быть одиноковые по типу и содержанию
реквизиты, названные разными именами. Например,
"Клиент", "Контрагент",
"Плательщик", "Покупатель",
"Поставщик".
- Шаблон
описывает копирование реквизитов шапки
документа (РеквизитПриемникаШ) и реквизитов
табличной части документа (РеквизитПриемникаТ).
Табличная часть документа-основания копируется
внутри цикла.
- В
документе-приемнике и документе основании могут
не совпадать имена реквизитов. Главное, чтобы
совпадали типы реквизитов, между которыми
происходит копирование! В процедуре можно
написать «Контрагент=ДокОснование.Клиент;», но
только если реквизиты «Контрагент» и «Клиент»
имеют одинаковые типы.
- Если Вы
хотите, чтобы документ-приемник был подчинен
документу основанию после ввода на основании, то
нужно добавить всего одну строку:
ДокументХозяин=ДокОснование;
где ДокументХозяин – реквизит типа «Документ»
документа-приемника.
|