При внедрении системы 1С:Документооборот 2.1 пользователи часто сталкиваются с проблемой: при создании одного внутреннего документа на основании другого (например, «Заявки на расходование денежных средств» на основании «Счета на оплату») реквизиты заполняются не полностью. Обычно переносится только сумма, в то время как Контрагент, Назначение платежа и другие важные данные остаются пустыми. В этой статье мы подробно разберем, почему так происходит, как исправить программную ошибку и какие настройки системы помогут автоматизировать этот процесс без лишнего кодирования.
Рассмотрим ситуацию с точки зрения кода конфигурации. В версии 2.1.11.5 и близких к ней существует особенность в модуле объекта справочника ВнутренниеДокументы. В процедуре ОбработкаЗаполнения система считывает данные из документа-основания, но не всегда корректно присваивает их новому объекту.
Проанализируем фрагмент кода, который отвечает за получение данных:
РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОснованиеЗаполнения,
"Заголовок, НоменклатураДел, Контрагент, КонтактноеЛицо, Папка, Проект, ГрифДоступа, ВопросДеятельности, Организация, Сумма, Валюта");
Выясним причину: программа получает значение реквизита Контрагент, но в дальнейшем использует только табличную часть Контрагенты. Если в новом документе основной реквизит «шапки» не заполнен явным образом, он остается пустым, даже если в исходном документе контрагент был указан. Это происходит из-за логики разделения на «одиночного» контрагента и список сторон документа.
Чтобы не снимать конфигурацию с поддержки и сохранить возможность легкого обновления, мы рекомендуем внести изменения через Расширение. Нам необходимо перехватить процедуру ОбработкаЗаполнения. Разберем по шагам, какой код необходимо добавить, чтобы реквизиты Контрагент и КонтактноеЛицо переносились корректно.
Используем аннотацию &После для дополнения стандартной логики:
&После("ОбработкаЗаполнения")
Процедура ИТ_ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
ОснованиеЗаполнения = ДанныеЗаполнения;
// Получаем значения из основания, которые могли быть пропущены типовым кодом
РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОснованиеЗаполнения, "Контрагент, КонтактноеЛицо");
// Заполняем табличную часть Контрагенты, если она пуста
Если Контрагенты.Количество() = 0 Тогда
Для каждого Строка Из ОснованиеЗаполнения.Контрагенты Цикл
НоваяСтрока = Контрагенты.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЦикла;
КонецЕсли;
// Принудительно заполняем реквизиты шапки
Если Не ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
ЭтотОбъект.Контрагент = РеквизитыОснования.Контрагент;
КонецЕсли;
Если Не ЗначениеЗаполнено(ЭтотОбъект.КонтактноеЛицо) Тогда
ЭтотОбъект.КонтактноеЛицо = РеквизитыОснования.КонтактноеЛицо;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важный момент: в более новых версиях (начиная с 2.1.12.2) 1С исправила этот «косяк», добавив аналогичную проверку в типовой код. Если вы используете старую версию, данная правка в расширении жизненно необходима для корректной работы бизнес-процессов.
Если вам нужно, чтобы переносились не только стандартные поля, но и созданные вами Дополнительные реквизиты (например, «Назначение платежа», «Срок оплаты», «Статья ДДС»), следует учитывать два правила:
1С:Документооборот механизм ПриСозданииНаСервере в модуле формы документа инициирует копирование доп. реквизитов по совпадению имен. Если вы добавили реквизит только в один документ, он не перенесется.Для переноса специфических данных, таких как СуммаНДС, которые часто реализованы как дополнительные реквизиты, убедитесь, что в коде ОбработкаЗаполнения или через расширение прописано явное присвоение, если автоматика по именам не сработала.
Часто пользователи жалуются, что при вводе на основании не переносятся прикрепленные скан-копии счетов или PDF-файлы. По умолчанию в 1С:ДО файлы копируются только в том случае, если основанием является не внутренний документ (например, входящий). Для внутренних документов это поведение нужно настроить вручную.
Проанализируем настройки программы:
После включения этой опции при создании Заявки на основании Счета все файлы из карточки-источника автоматически появятся в новой карточке.
Рассмотрим ситуацию, когда в настройках вида документа включена опция «Многосторонний документ». В этом случае реквизит Контрагент в шапке может отсутствовать вовсе, а все данные хранятся только в табличной части Контрагенты.
Если документ-основание многосторонний, а целевой документ — односторонний, вам нужно решить, какой именно контрагент из списка должен стать основным. В приведенном выше коде мы реализовали перебор всей табличной части, что гарантирует сохранение данных о сторонах сделки.
Чтобы добиться идеального автозаполнения, выполним следующие шаги:
ОбработкаЗаполнения через расширение.С помощью этих шагов мы обеспечим полноценный перенос данных, что значительно ускорит работу пользователей и снизит количество ошибок при вводе информации в систему.