Как объединить два документа одного типа в 1С:ERP 8.3

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

В процессе работы с системой 1С:ERP Управление предприятием часто возникает ситуация, когда необходимо объединить два однотипных документа (например, Заказ клиента или Коммерческое предложение) в один общий. Типовая конфигурация не предусматривает специальной кнопки для выполнения этой операции, так как логика объединения может сильно отличаться в зависимости от учетной политики предприятия. В этой статье мы разберем, как решить данную задачу вручную и как подойти к разработке автоматизированной обработки.

Метод 1: Ручное объединение через стандартный буфер обмена

Если задача объединения документов возникает эпизодически, мы можем воспользоваться встроенными возможностями платформы 1С по работе с табличными частями. Этот способ не требует программирования и доступен любому пользователю. Рассмотрим алгоритм действий по шагам:

  1. Откроем первый документ-источник, данные из которого нужно перенести.
  2. Перейдем в табличную часть (например, Товары), выделим любую строку и нажмем комбинацию клавиш Ctrl + A (выделить все).
  3. Нажмем правую кнопку мыши и выберем команду Копировать строки (или воспользуемся кнопкой с пиктограммой двух листков в командной панели таблицы).
  4. Создадим новый пустой документ или откроем второй документ-источник, который станет "целевым".
  5. В табличной части целевого документа нажмем кнопку Вставить строки.

Проанализируем этот подход: система автоматически пересчитает итоги, налоги и скидки в новом документе. Однако важно помнить, что при таком способе реквизиты "шапки" (договор, склад, соглашение) во втором документе останутся прежними, и вам придется вручную проверить их соответствие данным из первого документа.

Метод 2: Программная разработка универсальной обработки

Для регулярного объединения большого количества документов целесообразно разработать внешнюю обработку. Выясним, какие ключевые операции должен выполнять программный код для корректного слияния данных. Рассмотрим пример реализации на языке 1С.

Основная идея заключается в создании нового объекта документа, заполнении его заголовка по образцу первого источника и последовательном добавлении строк из всех объединяемых документов. Разберем пример кода для документа ЗаказКлиента:


// Предположим, у нас есть ссылки на два документа: Заказ1 и Заказ2
НовыйДокумент = Документы.ЗаказКлиента.СоздатьДокумент();

// 1. Заполняем основные реквизиты из первого документа
ЗаполнитьЗначенияСвойств(НовыйДокумент, Заказ1, "Организация, Партнер, Контрагент, Склад, Валюта, Договор");
НовыйДокумент.Дата = ТекущаяДата();

// 2. Переносим строки из первого документа
Для Каждого СтрИзИсточника1 Из Заказ1.Товары Цикл
    НоваяСтрока = НовыйДокумент.Товары.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрИзИсточника1);
КонецЦикла;

// 3. Добавляем строки из второго документа
Для Каждого СтрИзИсточника2 Из Заказ2.Товары Цикл
    НоваяСтрока = НовыйДокумент.Товары.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрИзИсточника2);
КонецЦикла;

// 4. Выполняем свертку строк (необязательно, если нужно объединить одинаковые позиции)
НовыйДокумент.Товары.Свернуть("Номенклатура, Характеристика, СтавкаНДС", "Количество, Сумма");

НовыйДокумент.Записать();

Использование метода ЗаполнитьЗначенияСвойств() позволяет значительно ускорить написание кода, автоматически копируя данные одноименных реквизитов. Рассмотрим подробнее этап свертки: метод Свернуть() полезен в тех случаях, когда в разных заказах встречается одна и та же номенклатура, и мы хотим объединить её в одну строку с суммированием количества.

Технические сложности и нюансы в 1С:ERP

При автоматизации процесса объединения в ERP-системах мы неизбежно столкнемся с рядом ограничений, которые необходимо учесть в алгоритме работы обработки:

Проанализируем ситуацию с дублями: если вы планируете после объединения пометить исходные документы на удаление, убедитесь, что на них не завязаны бизнес-процессы согласования. В противном случае история согласования будет утеряна вместе с исходными объектами.

Рекомендации по реализации интерфейса

Для удобства работы пользователя в обработке стоит предусмотреть таблицу для выбора нескольких документов. После выбора документов-оснований программа должна проверить их на совместимость: совпадение организации, валюты и контрагента. Если данные реквизиты отличаются, объединение в один документ может быть методологически неверным.

Подведем итог: создание "велосипеда" для объединения документов в 1С:ERP — задача выполнимая, но требующая внимания к деталям бизнес-логики. Мы рекомендуем использовать метод Скопировать() для создания основы нового документа, так как он сохраняет большинство настроек формы, и уже затем программно дополнять табличную часть данными из других источников.

← На главную