Как связать «Счет на оплату», иерархию подчиненных документов и остатки по регистру «Хозрасчетный» в 1С:Бухгалтерия 3.0?

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

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

Понимание архитектуры данных в БП 3.0

Прежде чем приступать к написанию запросов, проанализируем, как в системе хранятся связи. В типовом решении для построения дерева связей используется объект метаданных КритерийОтбора.СвязанныеДокументы. Если мы заглянем в его состав, то увидим, что он индексирует реквизиты практически всех документов, где есть ссылка на ДокументОснование или СчетНаОплату.

Для вывода остатков и оборотов (Начальный остаток, Приход, Расход, Конечный остаток) нам потребуется виртуальная таблица регистра бухгалтерии Хозрасчетный.ОстаткиИОбороты. Однако, чтобы остатки «привязались» к конкретному счету на оплату, в настройках программы или конкретного договора должен быть включен учет по документам расчетов (третье субконто на счетах 60 и 62). Если этот функционал не задействован, получить корректные остатки именно «в разрезе счета» из стандартного регистра будет невозможно, так как система «не знает», какая часть общей задолженности контрагента относится к конкретному счету.

Шаг 1: Построение иерархии документов в СКД

Рассмотрим подробнее способ реализации дерева подчиненности в Системе компоновки данных. Использование обычного рекурсивного запроса может быть неэффективным. Вместо этого мы создадим несколько наборов данных и свяжем их.

Для начала создадим Набор данных - запрос для получения корневых документов (Счетов на оплату):


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

Затем создадим второй Набор данных - запрос для получения подчиненных документов. Здесь мы будем использовать левое соединение различных таблиц документов, которые могут быть созданы на основании счета. Выясним причину, почему это лучше делать через объединение: разные документы (Реализация, Поступление ДС) имеют разные реквизиты, но общую логику подчинения.


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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Поступление.Ссылка КАК Ссылка,
    Поступление.ДокументОснование КАК ДокументОснование,
    "Оплата" КАК ТипДокумента
ИЗ
    Документ.ПоступлениеНаРасчетныйСчет КАК Поступление
ГДЕ
    Поступление.ДокументОснование В (&СписокСчетов)

Шаг 2: Связи наборов данных для построения дерева

В настройках СКД на закладке «Связи наборов данных» мы должны настроить рекурсивную связь. Укажем, что Ссылка из первого набора является источником для параметра ДокументОснование во втором наборе. Это позволит системе автоматически выстраивать иерархию, проходя по всей цепочке подчиненных документов.

Важный момент: чтобы выводить дерево в отчете, в настройках структуры на вкладке «Настройки» необходимо добавить группировку по полю Ссылка и в поле «Тип группировки» выбрать «Иерархия».

Шаг 3: Получение остатков из регистра «Хозрасчетный»

Теперь разберем, как присоединить к этим документам бухгалтерские показатели. Мы будем использовать виртуальную таблицу ХозрасчетныйОстаткиИОбороты. Проанализируем ситуацию: нам нужно получить данные по счетам 62.01 и 62.02 (или 60.01/60.02 для поставщиков).

Создадим третий набор данных для получения стоимостных показателей:


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

Внимание: Соединение этого набора с предыдущими должно происходить по полям Контрагент, Договор и Ссылка = ДокументРасчетов. Если в качестве ДокументРасчетов в проводках выступает сам Счет на оплату, данные подтянутся напрямую к корню дерева. Если же расчетом является Реализация, то цифры отобразятся напротив соответствующих строк подчиненных документов.

Шаг 4: Суммирование итогов по иерархии

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

Рассмотрим подробнее механизм расчета: когда мы выводим иерархию, СКД автоматически суммирует значения ресурсов снизу вверх. То есть сумма оплат и отгрузок, привязанных к подчиненным документам, просуммируется на уровне родительского объекта — Счета на оплату. Это именно то, что требовалось бухгалтеру для контроля «закрытия» счета.

Практические советы и альтернативы

Разберем по шагам альтернативный вариант, если использование субконто Документы расчетов невозможно по политике учета компании:

  1. Используйте критерий отбора СвязанныеДокументы для получения всех документов цепочки в один массив.
  2. В запросе к регистру Хозрасчетный делайте выборку остатков без разреза по документам расчетов, но с фильтром по Договору и Контрагенту.
  3. Программно распределяйте остатки по документам, анализируя хронологию и суммы. Это более сложный путь, требующий использования Объекта Набор Данных в СКД и программного заполнения таблицы значений.

Также стоит упомянуть, что в БП 3.0 существует регистр сведений «СтатусыДокументов» или механизмы прослеживаемости, но для данной задачи они вспомогательны. Основной упор всегда делайте на Связи наборов данных в СКД — это самый гибкий инструмент для подобных отчетов.

Таким образом, мы выяснили, что связать «несвязуемое» вполне возможно, если использовать мощь СКД и понимать структуру субконто бухгалтерского плана счетов. Главное — убедиться, что аналитика в проводках совпадает с иерархией документов, которую вы строите в отчете.

← На главную