Почему Приходный кассовый ордер не формирует проводки после загрузки в 1С:Бухгалтерию 3.0?

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

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

В этой статье мы подробно разберем, почему повторное проведение документа не дает результата, почему при интерактивном перевыборе склада «слетают» другие важные реквизиты (например, ставка НДС) и как правильно настроить систему, чтобы движения формировались автоматически.

Причина 1: Скрытая аналитика и счета учета

Проанализируем механику работы документа в «1С:Бухгалтерия 3.0». Для вида операции «Розничная выручка» склад является ключевым реквизитом, определяющим счета доходов и НДС. В типовой конфигурации счета учета (например, 90.01.1, 90.03) не всегда хранятся непосредственно в табличной части в явном виде или не заполняются автоматически при простой программной записи объекта.

Когда мы выбираем склад в форме документа вручную, срабатывает обработчик СкладПриИзменении. Именно в этот момент программа обращается к регистрам сведений «Счета учета номенклатуры» или настройкам склада и подтягивает необходимые данные. При программной загрузке через обмен (например, через Универсальный обмен данными) события формы не инициируются. Объект записывается «как есть» — с заполненным складом, но с пустыми скрытыми реквизитами, отвечающими за формирование проводок.

Причина 2: Сброс ставки НДС и механизм «СвойстваПлатежа»

Рассмотрим ситуацию, описанную пользователями, когда при попытке исправить документ вручную (перевыбором склада) пропадает ставка НДС. Выясним причину в программном коде общего модуля. Проанализируем следующий фрагмент:


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

Разберем, что здесь происходит. Программа сначала устанавливает ставку НДС по умолчанию, а затем выполняет команду ЗаполнитьЗначенияСвойств, используя структуру Форма.СвойстваПлатежа. Если документ был загружен извне, эта структура на форме может быть пустой или не инициализированной должным образом. В результате корректная ставка НДС затирается пустым значением из свойств формы. Это архитектурная особенность управляемых форм 1С:БП 3.0, где логика «завязана» на интерактивные действия пользователя.

Решение 1: Использование обработчика «ПослеЗагрузки»

Чтобы не заставлять пользователей перевыбирать склад вручную в каждом документе, нам необходимо обеспечить заполнение счетов учета непосредственно в процессе обмена. Рассмотрим наиболее правильный путь — использование обработчика «После загрузки» в правилах обмена (в конфигурации «Конвертация данных») или в коде модуля обмена.

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


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

Решение 2: Проверка настроек Склада и Учетной политики

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

  1. Тип склада: Убедимся, что для склада установлен тип «Неавтоматизированная торговая точка».
  2. Счета учета: Проверим регистр сведений «Счета учета номенклатуры». Даже если в ПКО нет номенклатуры в явном виде (она сворачивается в выручку), система часто ищет настройки по умолчанию для «пустой» номенклатуры в этом регистре.
  3. Тип цен: Для НТТ в карточке склада должен быть указан тип цен. Если он отсутствует, документ может не «понимать» стоимостную оценку остатков в рознице (если ведется учет по продажным ценам на 41.12).

Решение 3: Исправление сброса НДС при программном создании

Если вы создаете ПКО программно и сталкиваетесь с тем, что СтавкаНДС не сохраняется, необходимо имитировать заполнение структуры свойств. Посмотрим, как это сделать:


// Перед заполнением табличной части РасшифровкаПлатежа
СвойстваПлатежа = ПриходныйКассовыйОрдерФормыКлиентСервер.ПустаяСтруктураСвойстваПлатежа();
СвойстваПлатежа.СтавкаНДС = Справочники.СтавкиНДС.НДС20; // Указываем нужную ставку
// Теперь при вызове типовых механизмов заполнения данные не будут затерты пустыми значениями

Итоги и рекомендации

Подведем итог нашему исследованию. Проблема отсутствия движений в ПКО после обмена — это типичный конфликт между программной записью объекта и сложной логикой управляемой формы 1С. Для исправления ситуации выполним следующие шаги:

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

← На главную