Как в 1С:Управление торговлей 11 настроить автоматическое время проведения документов для корректной синхронизации с Бухгалтерией?

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

При работе в связке программ 1С:Управление торговлей 11 (УТ 11) и 1С:Бухгалтерия предприятия 3.0 (БП 3.0) многие пользователи и бухгалтеры сталкиваются с методологической проблемой. В бухгалтерском учете крайне важна строгая хронологическая последовательность: поступление товаров должно быть зафиксировано раньше, чем их реализация, чтобы корректно зачесть авансы и избежать «красноты» на счетах 41 или 10 в течение дня. В УТ 11 архитектура системы построена иначе, и стандартной настройки «устанавливать время поступления на 00:00:01» просто не существует. Рассмотрим подробнее, почему так происходит и какими способами мы можем решить эту задачу.

Почему в УТ 11 нет стандартной настройки времени?

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

В УТ 11 реализован принципиально иной подход — так называемый «офлайновый» расчет. Основные регистры, такие как РегистрНакопления.ТоварыНаСкладах или РегистрНакопления.ДетализацияПартийТоваровДляНДСПартионныйУчет22, ориентируются на момент времени, но итоговый финансовый результат и себестоимость рассчитываются регламентным заданием Закрытие месяца. Программа допускает ввод документов в произвольном порядке внутри дня, так как расчет партий происходит по алгоритмам, которые могут игнорировать секунды, ориентируясь на логику операций. Именно поэтому разработчики не добавили привычный бухгалтерам функционал «автоматического времени» в интерфейс оперативной торговой базы.

Метод 1: Использование расширения конфигурации (автоматизация при записи)

Если нам необходимо, чтобы время устанавливалось автоматически непосредственно в момент создания документа в УТ 11, наиболее правильным и современным методом будет использование расширения конфигурации. Мы не будем менять типовой код, а лишь добавим логику в обработчик события ПередЗаписью.

Разберем пример кода, который можно внедрить в расширение для документа ПриобретениеТоваровУслуг. Наша задача — проверить, является ли документ новым или у него изменилась дата, и если это так, принудительно установить время начала дня.


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    // Проверяем, что это новый документ или дата была изменена вручную
    Если ТекущийОбъект.ЭтоНовый() Или ТекущийОбъект.Дата <> ТекущийОбъект.Ссылка.Дата Тогда
        
        // Устанавливаем время на начало дня (00:00:01)
        // НачалоДня вернет 00:00:00, добавляем 1 секунду для надежности
        ТекущийОбъект.Дата = НачалоДня(ТекущийОбъект.Дата) + 1;
        
    КонецЕсли;
    
КонецПроцедуры

Аналогично можно поступить с документом РеализацияТоваровУслуг, установив ему время на конец дня. Рассмотрим, как это выглядит программно:


&НаСервере
Процедура УстановитьВремяКонцаДня(ТекущийОбъект)
    
    // Устанавливаем время на 23:59:59
    ТекущийОбъект.Дата = КонецДня(ТекущийОбъект.Дата);
    
КонецПроцедуры

Важный момент: использование такого метода в УТ 11 может привести к тому, что оперативные остатки в течение дня будут выглядеть странно для кладовщиков, если они привыкли видеть реальное время отгрузки. Однако для синхронизации с БП это идеальный вариант.

Метод 2: Корректировка правил синхронизации (EnterpriseData)

Выясним, можно ли решить проблему, не меняя данные в самой торговой базе. Если в УТ 11 время должно оставаться оперативным (реальным), а в Бухгалтерии оно должно «схлопываться» к началу или концу дня, то нам нужно модифицировать правила конвертации данных.

При использовании синхронизации через универсальный формат EnterpriseData, мы можем создать расширение для обмена. В нем необходимо перехватить данные в момент выгрузки. Посмотрим на алгоритм:

  1. В базе УТ 11 находим узел обмена с Бухгалтерией.
  2. В обработчике OnSend (ПриОтправке) для соответствующих типов объектов (Поступление, Реализация) прописываем трансформацию реквизита Дата.
  3. Для объектов IncomingGoods (входящие товары) устанавливаем дату как BegOfDay(Source.Date) + 1.
  4. Для объектов OutgoingGoods (исходящие товары) устанавливаем EndOfDay(Source.Date).

Этот способ сложнее в реализации, так как требует знаний структуры XML-сообщений обмена, но он позволяет сохранить «чистоту» оперативного учета в УТ 11, удовлетворяя требования бухгалтерии только в ее целевой базе. Для выполнения регулярной передачи данных по расписанию может использоваться автоматический обмен данными между базами 1С по расписанию.

Метод 3: Групповое изменение реквизитов (стандартный функционал)

Если документов немного или потребность в корректировке возникает периодически (например, перед закрытием месяца), мы можем воспользоваться штатной обработкой Групповое изменение реквизитов. Рассмотрим пошагово, как это сделать:

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

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

Результат = НачалоДня(Объект.Дата) + 1;

После выполнения этой операции все выбранные поступления станут на 00:00:01. Проанализируем последствия: после такого массового изменения дат в УТ 11 система потребует пересчета себестоимости, так как Граница фактической последовательности сдвинется назад.

Метод 4: Настройка на стороне 1С:Бухгалтерии

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

Для автоматизации после загрузки можно написать простую обработку, которая будет запускаться по расписанию в БП 3.0 и выполнять следующий код для загруженных за день документов:


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

Внимание: при использовании этого метода важно следить, чтобы синхронизация не затерла измененное время при следующем сеансе связи (для этого в правилах обмена должна быть настроена приоритетность или запрет на обновление даты при повторной выгрузке). Чтобы вовремя обнаружить расхождения после обмена, применяется автоматическое сравнение бухгалтерских и налоговых проводок.

Рекомендации по выбору решения

Выясним, какой из методов лучше подходит для вашего бизнеса. Если вы стремитесь к максимальной автоматизации и у вас есть штатный программист 1С, создание расширения в УТ 11 (Метод 1) — самый надежный способ. Он исключает человеческий фактор в момент ввода данных.

Если же вы не хотите вносить изменения в конфигурацию торговой базы, используйте Метод 2 (настройка правил обмена). Это сохранит оперативную информацию о времени отгрузок в УТ для менеджеров, но «наведет порядок» в учете бухгалтера.

Для небольших компаний, где обмен происходит раз в месяц, вполне достаточно Метода 3 — разового использования групповой обработки перед закрытием периода и выгрузкой данных. Это не требует программирования и позволяет визуально проконтролировать результат перед отправкой данных в бухгалтерию.

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

← На главную