Как настроить автозаполнение всех реквизитов при создании документа на основании в 1С:Документооборот 2.1?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот Управленческий учет IT и автоматизация бизнеса
← На главную

При внедрении системы 1С:Документооборот 2.1 пользователи часто сталкиваются с проблемой: при создании одного внутреннего документа на основании другого (например, «Заявки на расходование денежных средств» на основании «Счета на оплату») реквизиты заполняются не полностью. Обычно переносится только сумма, в то время как Контрагент, Назначение платежа и другие важные данные остаются пустыми. В этой статье мы подробно разберем, почему так происходит, как исправить программную ошибку и какие настройки системы помогут автоматизировать этот процесс без лишнего кодирования.

Анализируем причину проблемы: почему не заполняется Контрагент

Рассмотрим ситуацию с точки зрения кода конфигурации. В версии 2.1.11.5 и близких к ней существует особенность в модуле объекта справочника ВнутренниеДокументы. В процедуре ОбработкаЗаполнения система считывает данные из документа-основания, но не всегда корректно присваивает их новому объекту.

Проанализируем фрагмент кода, который отвечает за получение данных:


РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОснованиеЗаполнения, 
    "Заголовок, НоменклатураДел, Контрагент, КонтактноеЛицо, Папка, Проект, ГрифДоступа, ВопросДеятельности, Организация, Сумма, Валюта");

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

Исправляем программный код через расширение

Чтобы не снимать конфигурацию с поддержки и сохранить возможность легкого обновления, мы рекомендуем внести изменения через Расширение. Нам необходимо перехватить процедуру ОбработкаЗаполнения. Разберем по шагам, какой код необходимо добавить, чтобы реквизиты Контрагент и КонтактноеЛицо переносились корректно.

Используем аннотацию &После для дополнения стандартной логики:


&После("ОбработкаЗаполнения")
Процедура ИТ_ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
        ОснованиеЗаполнения = ДанныеЗаполнения;
        
        // Получаем значения из основания, которые могли быть пропущены типовым кодом
        РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОснованиеЗаполнения, "Контрагент, КонтактноеЛицо");
        
        // Заполняем табличную часть Контрагенты, если она пуста
        Если Контрагенты.Количество() = 0 Тогда
            Для каждого Строка Из ОснованиеЗаполнения.Контрагенты Цикл
                НоваяСтрока = Контрагенты.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
            КонецЦикла;
        КонецЕсли;

        // Принудительно заполняем реквизиты шапки
        Если Не ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
            ЭтотОбъект.Контрагент = РеквизитыОснования.Контрагент;
        КонецЕсли;
        
        Если Не ЗначениеЗаполнено(ЭтотОбъект.КонтактноеЛицо) Тогда
            ЭтотОбъект.КонтактноеЛицо = РеквизитыОснования.КонтактноеЛицо;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Важный момент: в более новых версиях (начиная с 2.1.12.2) 1С исправила этот «косяк», добавив аналогичную проверку в типовой код. Если вы используете старую версию, данная правка в расширении жизненно необходима для корректной работы бизнес-процессов.

Автозаполнение дополнительных реквизитов

Если вам нужно, чтобы переносились не только стандартные поля, но и созданные вами Дополнительные реквизиты (например, «Назначение платежа», «Срок оплаты», «Статья ДДС»), следует учитывать два правила:

  1. Идентичность имен и типов: Дополнительный реквизит должен называться абсолютно одинаково в обоих видах документов. Лучше всего сделать его «Общим», выбрав соответствующую настройку в списке дополнительных реквизитов.
  2. Механизм копирования: В 1С:Документооборот механизм ПриСозданииНаСервере в модуле формы документа инициирует копирование доп. реквизитов по совпадению имен. Если вы добавили реквизит только в один документ, он не перенесется.

Для переноса специфических данных, таких как СуммаНДС, которые часто реализованы как дополнительные реквизиты, убедитесь, что в коде ОбработкаЗаполнения или через расширение прописано явное присвоение, если автоматика по именам не сработала.

Настройка переноса файлов между документами

Часто пользователи жалуются, что при вводе на основании не переносятся прикрепленные скан-копии счетов или PDF-файлы. По умолчанию в 1С:ДО файлы копируются только в том случае, если основанием является не внутренний документ (например, входящий). Для внутренних документов это поведение нужно настроить вручную.

Проанализируем настройки программы:

После включения этой опции при создании Заявки на основании Счета все файлы из карточки-источника автоматически появятся в новой карточке.

Особенности многосторонних документов

Рассмотрим ситуацию, когда в настройках вида документа включена опция «Многосторонний документ». В этом случае реквизит Контрагент в шапке может отсутствовать вовсе, а все данные хранятся только в табличной части Контрагенты.

Если документ-основание многосторонний, а целевой документ — односторонний, вам нужно решить, какой именно контрагент из списка должен стать основным. В приведенном выше коде мы реализовали перебор всей табличной части, что гарантирует сохранение данных о сторонах сделки.

Резюме по настройке

Чтобы добиться идеального автозаполнения, выполним следующие шаги:

  1. Проверим версию: если она ниже 2.1.12, внесем исправление в процедуру ОбработкаЗаполнения через расширение.
  2. Синхронизируем реквизиты: убедимся, что «Назначение платежа» и другие доп. поля имеют одинаковый тип и наименование.
  3. Настроим связи: включим копирование файлов в справочнике «Настройки связей».
  4. Учет организаций: проанализируем, включен ли учет по организациям. Если в новом документе организация подставляется неверно, это может мешать фильтрации контрагентов.

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

← На главную