Почему не заполняется Статья ДДС в Расходном кассовом ордере при программном создании?

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

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

Проблема 1: Использование групп счетов вместо конкретных субсчетов

Проанализируем фрагмент кода, с которым возникли сложности. Одной из первых критических ошибок является попытка указать в качестве счета учета группу счетов. В планах счетов 1С (например, Хозрасчетный) существуют счета-родители и счета-субсчета. Система 1С:Предприятие запрещает выполнение проводок по счетам, у которых установлена галочка «Группа».


// Ошибка: счет 26 является группой в большинстве типовых конфигураций
док.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("26"); 

Разберем ситуацию: если вы указываете код «26», а в плане счетов есть субсчета (например, 26.01, 26.02), то система не сможет определить, куда именно отнести затраты. Программа выдаст ошибку при попытке проведения документа. Всегда используйте конечный субсчет, на котором ведется учет. Проверить это можно в режиме «1С:Предприятие», открыв План счетов: иконка счета-группы выглядит как папка, а счета, по которым можно делать проводки — как желтый листок.

Проблема 2: Особенности вида операции «Прочий расход»

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

Выясним причину, по которой СтатьяДвиженияДенежныхСредств может «пропадать». В современных конфигурациях 1С (особенно на базе БП 2.0 и 3.0) реквизиты в табличной части РасшифровкаПлатежа имеют приоритет над реквизитами шапки. Если вы заполнили статью в шапке, но не заполнили её в строке таблицы, при записи или проведении данные могут очиститься.

Проблема 3: Заполнение аналитики через Субконто

Самый важный момент, к которому пришел автор темы: Статья ДДС или Статья затрат — это субконто. Для счета 50 «Касса» статья ДДС является аналитикой (чаще всего Субконто №1). Для счета 26 «Общехозяйственные расходы» аналитикой являются Статьи затрат.

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


Док = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.ВидОперации = Перечисления.ВидыОперацийРКО.ПрочийРасход;
// ... заполнение организации, кассы и суммы ...

СтрокаТЧ = Док.РасшифровкаПлатежа.Добавить();
СтрокаТЧ.СуммаПлатежа = Док.СуммаДокумента;

// Указываем корректный субсчет (не группу!)
СтрокаТЧ.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("26"); 

// Заполняем Статью Затрат для счета 26 через СубконтоДт1
// Важно: на счете 26 первым субконто обычно идет "Статьи затрат"
СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Прочие расходы");
СтрокаТЧ.СубконтоДт1 = СтатьяЗатрат;

// Заполняем Статью ДДС для счета 50 (она подтянется в движения по кассе)
СтатьяДДС = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000126");
СтрокаТЧ.СтатьяДвиженияДенежныхСредств = СтатьяДДС;

// Не забываем про обязательные реквизиты взаиморасчетов
СтрокаТЧ.СуммаВзаиморасчетов = Док.СуммаДокумента;
СтрокаТЧ.КурсВзаиморасчетов = 1;
СтрокаТЧ.КратностьВзаиморасчетов = 1;

Пошаговый алгоритм отладки программного создания РКО

Если код написан, но результат в интерфейсе 1С вас не устраивает, выполните следующие шаги:

  1. Создайте документ вручную. Откройте 1С, создайте РКО с нужным видом операции и заполните его руками.
  2. Воспользуйтесь обработкой «Консоль запросов» или «Редактирование реквизитов». Посмотрите, как называются поля, которые вы только что заполнили вручную. Часто оказывается, что визуальное поле «Статья затрат» на самом деле записывается в поле СубконтоДт1 в табличной части РасшифровкаПлатежа.
  3. Проверьте План счетов. Убедитесь, что у выбранного вами счета дебета (например, 26 или 44) в списке видов субконто действительно первой позицией стоит нужный вам справочник (например, «Статьи затрат»).
  4. Не забывайте про вспомогательные реквизиты. В 1С:Бухгалтерии для корректной работы механизмов проведения важны не только суммы, но и коэффициенты валют: КурсВзаиморасчетов и КратностьВзаиморасчетов. Даже если учет ведется в рублях, они должны быть равны 1.

Важность регистра «Движения денежных средств»

Помните, что РКО делает записи не только в бухгалтерский регистр (проводки), но и в специализированные регистры накопления. Аналитика СтатьяДвиженияДенежныхСредств критически важна для формирования «Отчета о движении денежных средств» (Форма №4). Если вы просто «силой» запишете субконто в проводку, но не заполните соответствующий реквизит в табличной части документа, ваш кассовый отчет будет верным, а финансовая отчетность предприятия — нет.

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

Использование метода Док.Записать(РежимЗаписиДокумента.Проведение) вместо простого Записать() сразу покажет вам все логические ошибки (например, незаполненное подразделение или попытку записи на счет-группу), так как система запустит стандартные проверки модуля объекта.

← На главную