Как исключить конкретную номенклатурную группу при закрытии 20, 25 и 26 счетов в 1С:Бухгалтерия 3.0

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

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

Анализ исходной ситуации

Представим, что в конфигурации используется нетиповое решение для закрытия затратных счетов. Основная логика сбора данных для формирования проводок сосредоточена в модуле менеджера документа, например, в функции ЗапросОборотовНаСчетах. Эта функция выполняет запрос к регистрам бухгалтерии, собирая обороты по дебету и кредиту счетов 20.01, 25 и 26 в разрезе номенклатурных групп.

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

Вариант 1. Программная корректировка запроса (быстрое решение)

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


// В тексте запроса добавляем условие исключения конкретной группы
Запрос.Текст = "ВЫБРАТЬ
               |    ХозрасчетныйОбороты.Субконто1 КАК НоменклатурнаяГруппа,
               |    ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаЗатрат
               |ИЗ
               |    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет В (&МассивСчетов), , , , ) КАК ХозрасчетныйОбороты
               |ГДЕ
               |    НЕ ХозрасчетныйОбороты.Субконто1 В (&ИсключаемыеГруппы)";

// Установка параметра (лучше использовать ссылку, а не строковое имя)
Запрос.УстановитьПараметр("ИсключаемыеГруппы", ГруппаИсключениеСсылка);

Важный нюанс: Если мы правим запрос для счета 25 или 26, следует учитывать, что на этих счетах может не быть аналитики «Номенклатурная группа» в явном виде (особенно на 26 счете при использовании метода «Директ-костинг»). В этом случае исключение НГ на этапе сбора затрат с этих счетов может быть избыточным или технически невозможным без анализа базы распределения.

Вариант 2. Использование настроек (гибкий подход)

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

  1. Создание регистра сведений: Создадим непериодический регистр сведений ИсключаемыеНоменклатурныеГруппыДляЗакрытия с одним измерением типа СправочникСсылка.НоменклатурныеГруппы.
  2. Добавление реквизита в документ: В самом документе закрытия можно добавить табличную часть, куда пользователь будет подбирать группы, которые не должны обрабатываться текущим документом.

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


Запрос.Текст = "ВЫБРАТЬ
               |    ДанныеСчетов.НоменклатурнаяГруппа,
               |    ДанныеСчетов.Сумма
               |ИЗ
               |    ВТ_ДанныеСчетов КАК ДанныеСчетов
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсключаемыеНГ КАК Исключения
               |        ПО ДанныеСчетов.НоменклатурнаяГруппа = Исключения.НоменклатурнаяГруппа
               |ГДЕ
               |    Исключения.НоменклатурнаяГруппа ЕСТЬ NULL";

Вариант 3. Использование механизма «Инвентаризация НЗП»

Выясним, существует ли штатный способ оставить затраты на 20 счете без изменения программного кода. В типовой «1С:Бухгалтерия» для этих целей предназначен документ Инвентаризация незавершенного производства.

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

Плюсы этого метода:

Методологические риски и налоговый учет

Проанализируем критически важные моменты, которые часто упускаются при «быстром» решении задачи:

1. Закрытие счетов 25 и 26: Эти счета являются косвенными и, согласно учетной политике, обязаны закрываться в конце месяца «в ноль». Если мы просто исключим номенклатурную группу из запроса по 25 счету, эти затраты «зависнут» на остатках счета. Это приведет к ошибкам в технологическом анализе учета и некорректному формированию баланса. Если цель — не распределять 25 счет именно на эту группу, то нужно не удалять затраты из запроса, а исключать эту группу из базы распределения (например, из оборотов выручки или фонда оплаты труда).

2. Налоговый учет (НУ): В БП 3.0 учет ведется параллельно. Если вы внесли изменения в запрос, убедитесь, что они затрагивают не только бухгалтерские суммы, но и налоговые (ресурс СуммаНУ), а также показатели ПБУ 18/02 (ВР и ПР). Иначе вы получите разрыв между БУ и НУ, который будет крайне сложно найти при последующем аудите.

3. Формирование проводок сторно: Если время поджимает и нужно «здесь и сейчас» исправить закрытый период, рассмотрим вариант использования документа Операция, введенная вручную с видом Сторно документа. Это позволит точечно убрать ненужные проводки по конкретной номенклатурной группе, сформированные автоматическим закрытием, не вмешиваясь в программный код системы.

Рекомендации по реализации

Подведем итог. Если перед нами стоит задача исключить номенклатурную группу из закрытия, наиболее правильным путем будет:

  1. Использовать документ Инвентаризация незавершенного производства для 20 счета.
  2. Если используется расширение конфигурации, применить метод Вместо для функции сбора данных, чтобы добавить фильтрацию через Дополнительные сведения номенклатурной группы. Создадим свойство «Исключать из закрытия» и будем проверять его в запросе.
  3. Для 25 и 26 счетов — корректировать именно алгоритм распределения, а не алгоритм выборки затрат, чтобы счета закрывались полностью, но на другие (целевые) группы.

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


НЗП = Документы.ИнвентаризацияНЗП.СоздатьДокумент();
НЗП.Дата = КонецМесяца(Объект.ПериодРегистрации);
НЗП.Организация = Объект.Организация;
НЗП.СчетЗатрат = СчетаУчета.ОсновноеПроизводство;

НоваяСтрока = НЗП.Состав.Добавить();
НоваяСтрока.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("СпецПроект");
НоваяСтрока.Сумма = ОстатокПоСчету20; // Получаем остаток запросом
НЗП.Записать(РежимЗаписиДокумента.Запись);

Такой комплексный подход обеспечит чистоту кода, корректность бухгалтерской отчетности и отсутствие конфликтов с налоговыми органами.

← На главную