Приветствуем вас, уважаемые коллеги! Сегодня мы детально разберем одну из весьма распространенных и неочевидных проблем, с которой сталкиваются разработчики при переносе данных из различных конфигураций-источников в «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, СубконтоДт2) и записывать туда статью ДДС, которая ранее была перенесена в основной реквизит Объект.СтатьяДвиженияДенежныхСредств.Посмотрим на альтернативный вариант. В типовых конфигурациях 1С, включая БП 2.0, разработчики заложили механизмы программного автозаполнения документов. Вместо ручного перебора субконто мы можем вызвать экспортный метод объекта документа в обработчике «После загрузки».
Например, во многих документах БП есть метод:
Объект.ЗаполнитьСубконто();
Преимущество этого метода в том, что система сама настроит все субконто в строгом соответствии с заложенной в БП 2.0 логикой. Минус — в некоторых кастомизированных базах или при специфических переносах эти методы могут перезаписать уже корректно загруженные из источника другие аналитики.
Выясним, почему этот способ имеет серьезный недостаток. Мы можем вручную добавить в правила конвертации свойств (ПКС) сопоставление для свойства СубконтоДт1 и передавать туда статью ДДС.
Однако, если для одного вида операции (например, Инкассация по счету 57.01) статья ДДС является первым субконто, а для другого вида операции (например, расчеты по претензиям на счете 76) она окажется вторым субконто, то жестко прописанное правило запишет значение не в то поле. Начнется путаница в аналитическом учете. Именно поэтому динамический вариант из Решения 1 является наиболее профессиональным и безопасным.
Поговорим о важных правилах ведения бухгалтерского учета, которые напрямую зависят от правильности заполнения этих полей. Согласно ПБУ 23/2011 «Отчет о движении денежных средств», внутренние перемещения денежных средств между кассами и расчетными счетами организации (включая инкассацию) не признаются денежными потоками.
Чтобы эти обороты не задваивали и не искажали показатели регламентированного Отчета о движении денежных средств (Форма №4), при настройке переноса и создании статей ДДС в справочнике соблюдайте следующие правила:
Используйте предложенные варианты программного заполнения субконто, и ваши документы РКО будут загружаться без единой ошибки, гарантируя идеальный порядок в бухгалтерской отчетности!