Как правильно соединить регистры РАУЗ и обороты по регистрам бухгалтерии?

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

При работе в конфигурациях «Управление производственным предприятием» (УПП) или «Комплексная автоматизация» (КА) на классическом движке РАУЗ (Режим аналитического учета затрат) разработчики часто сталкиваются с задачей вывода бухгалтерских проводок прямо в отчет «Ведомость по учету затрат». Напрямую соединить регистр накопления РегистрНакопления.УчетЗатратРегл и регистр бухгалтерии РегистрБухгалтерии.Хозрасчетный — задача не самая простая из-за разницы в архитектуре хранения аналитики. Рассмотрим подробно, как решить эту задачу правильно, эффективно и без потери производительности системы.

В чем сложность сопоставления РАУЗ и Бухгалтерии?

В РАУЗ вся аналитика «спрятана» в специальных справочниках-ключах, которые раскрываются через связанные регистры сведений:

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

---

Шаг 1. Проектируем связь через ключи аналитики

Разберем базовый принцип. Ключевым измерением в регистре УчетЗатратРегл является АналитикаВидаУчета (ссылка на справочник КлючиАналитикиВидаУчета). Чтобы сопоставить движения РАУЗ с проводками, мы должны вытащить реальный счет учета и подразделение из регистра сведений АналитикаВидаУчета.

Проанализируем пример запроса, который выбирает обороты РАУЗ и соединяет их с ключами аналитики вида учета и распределения затрат:


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

---

Шаг 2. Присоединяем обороты регистра бухгалтерии

Теперь добавим к нашей выборке данные из регистра бухгалтерии. Для сопоставления мы будем использовать виртуальную таблицу ОборотыДтКт или Обороты регистра бухгалтерии Хозрасчетный. Связывать таблицы будем по трем полям:

  1. Регистратор — гарантирует, что мы сопоставляем движения в рамках одного и того же хозяйственного документа.
  2. СчетУчета (из РАУЗ) = СчетДт (или СчетКт в зависимости от направления операции).
  3. НоменклатурнаяГруппа (или иная аналитика) = Соответствующее Субконто на счете.

Важный нюанс: Будьте предельно осторожны при сопоставлении по субконто. Если в проводках по какому-то документу субконто осталось незаполненным (содержит значение NULL или пустую ссылку), то строгое равенство в условии соединения ПО приведет к тому, что эти строки полностью выпадут из результата отчета. Чтобы этого избежать, используем проверку на NULL или усеченную связь (например, только по Регистратору и Счету, если детальная аналитика не заполнена).

Посмотрим на пример запроса, соединяющего РАУЗ и Бухгалтерию по дебету счета 90.02.1:


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

---

Шаг 3. Интеграция в типовую СКД «Ведомости по учету затрат»

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

Проанализируем архитектурно верный подход к построению тяжелых отчетов в СКД:

  1. Создаем Набор данных - запрос №1 (РАУЗ): Получает все необходимые данные по остаткам и оборотам из РегистрНакопления.УчетЗатратRegl.ОстаткиИОбороты с раскрытием всех ключей аналитики.
  2. Создаем Набор данных - запрос №2 (Бухгалтерия): Извлекает обороты по нужным счетам учета (например, 20, 23, 25, 26, 44, 91.02) из регистра бухгалтерии в разрезе регистраторов и ключевых субконто.
  3. Связываем наборы данных на вкладке «Связи наборов данных» в СКД. В качестве условий связи указываем:
    • Регистратор = Регистратор
    • Организация = Организация
    • Подразделение = Подразделение

Этот подход гарантирует, что платформа 1С самостоятельно оптимизирует SQL-запросы к СУБД, выполняя их последовательно и соединяя результаты уже на уровне оперативной памяти сервера приложений. Это убережет базу от «зависаний» при формировании отчета за длительные периоды.

Используя предложенные методики сопоставления аналитик РАУЗ и субконто Хозрасчетного регистра, вы сможете успешно вывести любые бухгалтерские показатели (обороты, проводки, корреспондирующие счета) непосредственно в ведомость по учету затрат.

← На главную