Урок 6.
"Ввод на основании".

Для организации ввода документов с помощью механизма «ввод на основании» необходимо:

  1. В документе-приемнике указать типы документов, на основании которых он будет вводиться. Это делается в конфигураторе. В форме редактирования параметров документа есть кнопка «Ввод на основании». В открывшемся окне Вы можете выбрать типы документов, на основании которых может быть введен Ваш документ. Каждый документ может быть введен на основании одного или нескольких документов. Например, счет-фактуру можно ввести на основании счета или расходной накладной.
  2. В модуле формы документа-приемника описать предопределенную процедуру «ВводНаОсновании». Эта процедура вызывается каждый раз, когда  Вы вводите документ на основании.

    Самый сложный шаг – написать процедуру ВводНаОсновании. Эта процедура имеет один параметр – документ-основание, из которого Вам надо копировать данные. При разработке процедуры следует учитывать следующие факторы:

  1. Процедура ВводНаОсновании вызывается для ввода на основании документов ВСЕХ типов. Это означает, что в процедуре желательно учитывать тип документа, из которого копируются данные.
  2. Копируется только те реквизиты, которые Вы сами пропишете в процедуру. Даже если в обоих документах есть реквизит «Клиент» типа «Справочник.Конрагенты»- система не скопирует значение без Вашего участия!

 Предлагаю Вам использовать следующий шаблон для процедуры ВводНаОсновании

 Процедура ВводНаОсновании(ДокОснование)
    Если докОснование.Вид()=«ВидА» тогда
           РеквизитПриемникаШ1=ДокОснование.РеквизитОснованияШ1;
           РеквизитПриемникаШ2=ДокОснование.РеквизитОснованияШ2;
           РеквизитПриемникаШ3=ДокОснование.РеквизитОснованияШ3;
            ……..
            ……..
            ДокОснование.ВыбратьСтроки();
            Пока докОснование.ПолучитьСтроку()=1 цикл
                    НоваяСтрока();
                    РеквизитПриемникаТ1=ДокОснование.РеквизитОснованияТ1;
                    РеквизитПриемникаТ2=ДокОснование.РеквизитОснованияТ2;
                    ……………..
            КонецЦикла;
    ИначеЕсли  ДокОснование.Вид()= «ВидБ» тогда
            ………………
            ………………
            ………………
    иначе
            Предупреждение(«Нет процедуры копирования»);
            Возврат;
    КонецЕсли;
КонецПроцедуры

Важные моменты:

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