Как заполнить вторую статью ДДС в РКО при инкассации через Конвертацию данных?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Приветствуем вас, уважаемые коллеги! Сегодня мы детально разберем одну из весьма распространенных и неочевидных проблем, с которой сталкиваются разработчики при переносе данных из различных конфигураций-источников в «1С:Бухгалтерию предприятия 2.0» (БП 2.0) с использованием правил обмена в «Конвертации данных» (КД 2.1). Речь пойдет о заполнении аналитики по статьям движения денежных средств (ДДС) в документе «Расходный кассовый ордер» (РКО) при проведении операции «Инкассация» (или «Взнос наличными в банк»).

В чем суть проблемы?

Проанализируем ситуацию: разработчик настраивает правила обмена, переносит РКО и обнаруживает, что на форме документа в базе-приемнике присутствует два поля для указания статьи ДДС. Одно поле благополучно заполняется кодом вида:

Объект.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("100000011");

А вот второе поле упорно остается пустым. Выясним причину этого поведения. Для этого нам необходимо обратиться к бухгалтерскому учету и структуре метаданных документа РКО.

Бухгалтерская и техническая логика двух полей ДДС

Когда в РКО выбрана операция «Инкассация», документ делает проводку:

Дебет 57.01 («Переводы в пути») — Кредит 50.01 («Касса организации»)

Особенность заключается в том, что аналитический учет по статьям движения денежных средств ведется на обоих этих счетах. Это значит, что нам нужно указать ДДС как для кредита (счет 50), так и для дебета (счет 57).

На форме документа БП 2.0 для этого выведены два поля ввода. Однако в физической структуре документа (в метаданных) реквизит СтатьяДвиженияДенежныхСредств только один — он отвечает за кредит (счет 50). Вторая же статья ДДС на самом деле хранится в субконто счета дебета! То есть она записывается в массив субконто (например, СубконтоДт1 или СубконтоДт2 в зависимости от настроек счета в плане счетов Хозрасчетный).

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

Решение 1. Динамический обход субконто в обработчике «После загрузки»

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

Разберем этот алгоритм по шагам на примере кода:


Если (Объект.ВидОперации = Перечисления.ВидыОперацийРКО.Инкассация)
    ИЛИ (Объект.ВидОперации = Перечисления.ВидыОперацийРКО.ПрочийРасход)
    ИЛИ (Объект.ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаПодотчетномуЛицу)
    ИЛИ (Объект.ВидОперации = Перечисления.ВидыОперацийРКО.ВзносНаличнымиВБанк) Тогда

    СчетДебетаОперации = Объект.СчетУчетаРасчетовСКонтрагентом;

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

Проанализируем, как работает этот код:

  1. Сначала мы проверяем вид операции документа РКО. Если это операции, задействующие субконто ДДС на счетах дебета (Инкассация, Прочий расход и т.д.), мы продолжаем работу.
  2. Получаем счет дебета из реквизита СчетУчетаРасчетовСКонтрагентом (в зависимости от вашей конфигурации имя реквизита может немного отличаться, например, СчетДебета).
  3. Обходим коллекцию видов субконто этого счета.
  4. Если встречаем субконто с типом СтатьиДвиженияДенежныхСредств, мы динамически формируем имя реквизита документа (например, СубконтоДт1, СубконтоДт2) и записывать туда статью ДДС, которая ранее была перенесена в основной реквизит Объект.СтатьяДвиженияДенежныхСредств.

Решение 2. Использование штатных механизмов заполнения конфигурации

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

Например, во многих документах БП есть метод:

Объект.ЗаполнитьСубконто();

Преимущество этого метода в том, что система сама настроит все субконто в строгом соответствии с заложенной в БП 2.0 логикой. Минус — в некоторых кастомизированных базах или при специфических переносах эти методы могут перезаписать уже корректно загруженные из источника другие аналитики.

Решение 3. Прямое сопоставление через ПКС в Конвертации Данных

Выясним, почему этот способ имеет серьезный недостаток. Мы можем вручную добавить в правила конвертации свойств (ПКС) сопоставление для свойства СубконтоДт1 и передавать туда статью ДДС.

Однако, если для одного вида операции (например, Инкассация по счету 57.01) статья ДДС является первым субконто, а для другого вида операции (например, расчеты по претензиям на счете 76) она окажется вторым субконто, то жестко прописанное правило запишет значение не в то поле. Начнется путаница в аналитическом учете. Именно поэтому динамический вариант из Решения 1 является наиболее профессиональным и безопасным.

Важные правила для Отчета о движении денежных средств (ОДДС)

Поговорим о важных правилах ведения бухгалтерского учета, которые напрямую зависят от правильности заполнения этих полей. Согласно ПБУ 23/2011 «Отчет о движении денежных средств», внутренние перемещения денежных средств между кассами и расчетными счетами организации (включая инкассацию) не признаются денежными потоками.

Чтобы эти обороты не задваивали и не искажали показатели регламентированного Отчета о движении денежных средств (Форма №4), при настройке переноса и создании статей ДДС в справочнике соблюдайте следующие правила:

Используйте предложенные варианты программного заполнения субконто, и ваши документы РКО будут загружаться без единой ошибки, гарантируя идеальный порядок в бухгалтерской отчетности!

← На главную