В практике работы с «1С:Бухгалтерия 3.0» часто возникает ситуация, когда типовых отчетов недостаточно, а самописные отчеты требуют доработки из-за нестандартных учетных решений. Рассмотрим распространенный кейс: в компании затраты на производство и управление аккумулируются на счетах 20, 25 и 26, но при этом себестоимость перепродаваемых товаров (например, продуктов питания) списывается напрямую в дебет счета 90.02.1, минуя счета издержек обращения (44). Сложность заключается в том, что у затратных счетов есть аналитика СтатьиЗатрат, а у 90-го счета — только НоменклатурныеГруппы. Разберем подробно, как свести эти данные в один отчет с помощью Системы компоновки данных (СКД).
Прежде чем приступать к правке запроса, проанализируем структуру данных. Счета 20, 25 и 26 в 1С имеют три субконто, одним из которых почти всегда является СтатьиЗатрат. Это позволяет группировать расходы по их экономическому смыслу (аренда, оплата труда, налоги). Счет 90.02.1 (Себестоимость продаж) предназначен для отражения стоимости реализованных товаров и услуг. Его аналитика — НоменклатурныеГруппы. Чтобы включить данные 90-го счета в общий отчет, нам нужно «притянуть» их к единому виду, создав виртуальную статью затрат для себестоимости.
Это самый надежный способ. Мы добавим к основному запросу по счетам 20, 25, 26 еще один запрос, который будет выбирать обороты по счету 90.02.1. Разберем по шагам, как это сделать в конструкторе запроса.
ОБЪЕДИНИТЬ ВСЕ в тексте запроса).Хозрасчетный.Обороты.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СебестоимостьПродажНеОблагаемыхНДС) (или СебестоимостьПродажНалогообложениеОбщее в зависимости от субсчета).СтатьяЗатрат, во втором запросе мы должны подставить фиксированное значение или параметр.Пример структуры кода запроса:
ВЫБРАТЬ
ХозрасчетныйОбороты.Подразделение КАК Подразделение,
ХозрасчетныйОбороты.Субконто1 КАК СтатьяЗатрат,
ХозрасчетныйОбороты.СуммаОборотДт КАК Сумма
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновноеПроизводство), ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОбщехозяйственныеРасходы)), , , , ) КАК ХозрасчетныйОбороты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ХозрасчетныйОбороты90.Подразделение,
&СтатьяСебестоимостьТоваров, -- Параметр для подстановки нужной статьи
ХозрасчетныйОбороты90.СуммаОборотДт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СебестоимостьПродажНалогообложениеОбщее), , НоменклатурнаяГруппа = &НужнаяГруппа, , ) КАК ХозрасчетныйОбороты90
Чтобы отчет был гибким, проанализируем ситуацию из сообщения 13. Нам нужно выделить из всего 90-го счета только те обороты, которые относятся к «продуктам питания». Для этого в запросе по 90-му счету добавим условие:
ГДЕ Субконто1 = &НоменклатурнаяГруппаРасходов
В настройках СКД на вкладке Параметры укажем, что этот параметр доступен пользователю. Таким образом, бухгалтер сможет сам выбрать, какие группы товаров считать «затратами» для этого отчета. Важный нюанс: если на 90-м счете не ведется учет по подразделениям, в поле Подразделение следует подставлять пустое значение или «фиктивное» подразделение, иначе данные могут некорректно группироваться в иерархическом отчете.
Если мы не хотим «жестко» прописывать статьи затрат в коде, проанализируем возможность использования механизма дополнительных сведений. Рассмотрим этот алгоритм:
Номенклатурные группы новое сведения «Соответствующая статья затрат» (тип: СправочникСсылка.СтатьиЗатрат).Субконто1.ДополнительноеСведениеСтатья.Этот метод позволяет динамически сопоставлять номенклатурные группы со статьями затрат без изменения конфигурации и написания сложных условий ВЫБОР КОГДА....
Разберем ситуацию, когда структуру отчета менять нельзя, а данные нужно просто «подклеить». Мы можем создать Вычисляемое поле с заголовком СтатьяЗатратДляОтчета. Выясним, как прописать выражение для такого поля:
ВЫБОР КОГДА СтатьяЗатрат ЕСТЬ NULL ТОГДА "Себестоимость товаров" ИНАЧЕ СтатьяЗатрат КОНЕЦ
В этом случае, если запрос по 90-му счету возвращает NULL в поле статьи (так как её там физически нет), система сама подставит текстовое название или ссылку на элемент справочника. Это позволит сохранить иерархию (Подразделение -> Статья), о которой шла речь в сообщении 12.
Проанализируем риски, связанные с таким подходом:
44 счет для части расходов, а затем закроет его на 90, добавление в отчет и 44, и 90 счетов приведет к двойному учету одних и тех же сумм. Убедимся, что мы берем только те обороты по 90-му счету, которые корреспондируют со счетом 41 (Товары) или 43 (Готовая продукция). Для этого в виртуальной таблице оборотов лучше использовать ОборотыДтКт.Реализация товаров и услуг или Отчет о розничных продажах, в то время как на 20-м — Требование-накладная или Начисление зарплаты.90 счета как «затратного» — не совсем типовой путь для 1С. Рассмотрим возможность убедить руководство перейти на использование 44 счета. Это позволит видеть издержки обращения в стандартных отчетах (например, в «Анализе субконто») без доработки конфигурации.Таким образом, мы выяснили, что наиболее эффективным решением является модификация запроса через ОБЪЕДИНИТЬ ВСЕ с созданием искусственной связи между номенклатурной группой и статьей затрат. Это обеспечит корректное отображение дерева подразделений и позволит бухгалтерии видеть полную картину расходов предприятия в одном окне.