Как зарегистрировать счет-фактуру для обмена вместе с документом поступления в 1С:Розница 2.2?

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

При настройке синхронизации данных между конфигурациями «1С:Розница» и, например, «1С:Бухгалтерия предприятия» пользователи часто сталкиваются с проблемой: при регистрации и отправке документа ПоступлениеТоваровУслуг связанный с ним документ СчетФактураПолученный не регистрируется к обмену автоматически. В результате бухгалтеру приходится вручную искать и регистрировать счета-фактуры, что превращается в рутину при больших объемах документооборота.

В этой статье мы подробно разберем, как автоматизировать этот процесс. Мы рассмотрим четыре практических способа решения задачи: от изменения правил регистрации объектов до программирования расширения и использования встроенных интерактивных инструментов БСП (Библиотеки стандартных подсистем).

---

Вариант 1. Автоматическая регистрация через Правила Регистрации Объектов (ПРО) в «Конвертации данных 2.1»

Этот способ является наиболее правильным с точки зрения архитектуры обмена 1С. Мы настроим правила так, чтобы при регистрации документа поступления система автоматически регистрировала связанный с ним счет-фактуру на том же узле обмена.

Давайте разберем этот процесс по шагам:

  1. Выгрузите правила регистрации (ПРО) из вашей настройки синхронизации в «1С:Рознице» в XML-файл.
  2. Запустите информационную базу «Конвертация данных 2.1» (КД 2) и загрузите в нее этот XML-файл.
  3. В структуре правил найдите правило регистрации для документа ПоступлениеТоваровУслуг (или аналогичного документа поступления, используемого в вашей редакции).
  4. Перейдите на вкладку «Обработчики событий» и выберите обработчик «После регистрации объекта» (или «При регистрации»).
  5. Напишем программный код, который будет находить связанный документ СчетФактураПолученный по реквизиту ДокументОснование и регистрировать его для текущего узла обмена.

Пример кода для обработчика:


// Выполняем запрос для поиска подчиненных счетов-фактур
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	СчетФактура.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.СчетФактураПолученный КАК СчетФактура
    |ГДЕ
    |	СчетФактура.ДокументОснование = &Поступление
    |	И НЕ СчетФактура.ПометкаУдаления";

Запрос.УстановитьПараметр("Поступление", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();

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

После написания кода сохраните правила регистрации, выгрузите их обратно в XML-файл и загрузите в настройки синхронизации вашей «1С:Розницы». Теперь при любом изменении или создании поступления связанный счет-фактура автоматически встанет в очередь на отправку.

---

Вариант 2. Выгрузка счета-фактуры «на лету» без предварительной регистрации (через ПКО)

Если вы не хотите усложнять таблицы регистрации изменений в базе данных и забивать их лишними записями, можно настроить правила конвертации объектов (ПКО) так, чтобы счет-фактура выгружался вместе с поступлением «прицепом».

Давайте проанализируем, как это сделать в «Конвертации данных 2.1»:

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

Пример программного кода для обработчика «После выгрузки»:


// Ищем связанный счет-фактуру по документу-основанию
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Ссылка КАК Ссылка
    |ИЗ
    |	Документ.СчетФактураПолученный
    |ГДЕ
    |	ДокументОснование = &Основание
    |	И НЕ ПометкаУдаления";

Запрос.УстановитьПараметр("Основание", Источник.Ссылка);
Результат = Запрос.Выполнить();

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

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

---

Вариант 3. Автоматизация через Расширение конфигурации (без изменения типовых правил)

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

Рассмотрим алгоритм реализации этого подхода:

  1. Создайте новое расширение в конфигураторе вашей базы «1С:Розница».
  2. Добавьте в расширение подписку на событие для документа ПоступлениеТоваровУслуг (событие ПриЗаписи).
  3. В модуле подписки пропишем процедуру-обработчик. Мы должны обязательно проверять, что запись происходит не в режиме загрузки данных, чтобы избежать зацикливания при двустороннем обмене.

Пример кода обработчика в расширении:


Процедура Расш1_РегистрацияСчетовФактурПриЗаписиПоступления(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    // Защита от зацикливания при загрузке данных
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Находим подчиненный счет-фактуру
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Ссылка КАК Ссылка
        |ИЗ
        |	Документ.СчетФактураПолученный
        |ГДЕ
        |	ДокументОснование = &Основание
        |	И НЕ ПометкаУдаления";
        
    Запрос.УстановитьПараметр("Основание", Источник.Ссылка);
    Результат = Запрос.Выполнить();

    Если Не Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        
        // Получаем нужный план обмена (например, СинхронизацияДанныхЧерезУниверсальныйФормат)
        ИмяПланаОбмена = "СинхронизацияДанныхЧерезУниверсальныйФормат";
        
        Пока Выборка.Следующий() Цикл
            // Выбираем все активные узлы этого плана обмена (кроме этого узла)
            ВыборкаУзлов = ПланыОбмена[ИмяПланаОбмена].Выбрать();
            Пока ВыборкаУзлов.Следующий() Цикл
                Если ВыборкаУзлов.Ссылка = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда
                    Продолжить;
                КонецЕсли;
                
                // Программная регистрация изменений для конкретного узла
                ПланыОбмена.ЗарегистрироватьИзменения(ВыборкаУзлов.Ссылка, Выборка.Ссылка);
            КонецЦикла;
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры

---

Вариант 4. Пакетная интерактивная регистрация через стандартный инструмент БСП

Что делать, если программировать не хочется, а зарегистрировать счета-фактуры нужно прямо сейчас «разово» или периодически вручную для большого пула документов? В БСП встроен мощный инструмент, который решает эту задачу в несколько кликов.

Давайте разберем, как воспользоваться этим функционалом:

  1. Перейдите в меню Администрирование — Синхронизация данных — Настройки синхронизации.
  2. Выберите нужную настройку обмена и нажмите кнопку «Состав отправляемых данных» (иконка с изображением монитора и карандаша).
  3. Перед вами откроется форма со списком всех объектов. Найдите в дереве метаданных строку Счет-фактура полученный.
  4. Нажмите на нее правой кнопкой мыши и выберите пункт «Зарегистрировать изменения объектов по отбору».
  5. В открывшемся окне настройки компоновки данных добавьте новое поле отбора. Раскройте реквизиты счета-фактуры через кнопку выбора и найдите поле Документ-основание.
  6. Теперь вы можете настроить гибкий отбор по параметрам поступления. Например, указать конкретный список поступлений (Документ-основание В списке ...) или отобрать все счета-фактуры, привязанные к проведенным поступлениям за определенный период (Документ-основание.Дата Больше или равно...).
  7. Нажмите кнопку «Зарегистрировать». Система автоматически выполнит сложный запрос, найдет все подходящие счета-фактуры и зарегистрирует их к обмену пакетно.

Выбор конкретного варианта зависит от ваших задач. Если требуется полная автоматизация «на лету» без участия пользователей — используйте Вариант 1 или Вариант 3. Если нужно передавать документы строго парами — подойдет Вариант 2. Для ручного исправления ошибок синхронизации отлично подойдет интерактивный Вариант 4.

← На главную