Разработка отчетов, объединяющих оперативные данные (счета на оплату) и бухгалтерские итоги (регистр Хозрасчетный), является классической задачей для программиста 1С, работающего с конфигурацией «Бухгалтерия предприятия 3.0». Основная сложность здесь заключается в том, что Счет на оплату в типовой бухгалтерии чаще всего не является объектом, формирующим движения в регистре бухгалтерии напрямую. Он выступает лишь основанием для последующих документов, таких как РеализацияТоваровУслуг или ПоступлениеНаРасчетныйСчет. В этой статье мы детально разберем, как объединить эти сущности в единую структуру, построить иерархию и вывести остатки по взаиморасчетам.
Прежде чем приступать к написанию запросов, проанализируем, как в системе хранятся связи. В типовом решении для построения дерева связей используется объект метаданных КритерийОтбора.СвязанныеДокументы. Если мы заглянем в его состав, то увидим, что он индексирует реквизиты практически всех документов, где есть ссылка на ДокументОснование или СчетНаОплату.
Для вывода остатков и оборотов (Начальный остаток, Приход, Расход, Конечный остаток) нам потребуется виртуальная таблица регистра бухгалтерии Хозрасчетный.ОстаткиИОбороты. Однако, чтобы остатки «привязались» к конкретному счету на оплату, в настройках программы или конкретного договора должен быть включен учет по документам расчетов (третье субконто на счетах 60 и 62). Если этот функционал не задействован, получить корректные остатки именно «в разрезе счета» из стандартного регистра будет невозможно, так как система «не знает», какая часть общей задолженности контрагента относится к конкретному счету.
Рассмотрим подробнее способ реализации дерева подчиненности в Системе компоновки данных. Использование обычного рекурсивного запроса может быть неэффективным. Вместо этого мы создадим несколько наборов данных и свяжем их.
Для начала создадим Набор данных - запрос для получения корневых документов (Счетов на оплату):
ВЫБРАТЬ
СчетНаОплату.Ссылка КАК Ссылка,
СчетНаОплату.Контрагент КАК Контрагент,
СчетНаОплату.ДоговорКонтрагента КАК Договор,
СчетНаОплату.СуммаДокумента КАК СуммаСчета
ИЗ
Документ.СчетНаОплатуПокупателю КАК СчетНаОплату
ГДЕ
СчетНаОплату.Дата МЕЖДУ &НачалоПериода И &КонецПериода
И СчетНаОплату.Контрагент = &Контрагент
Затем создадим второй Набор данных - запрос для получения подчиненных документов. Здесь мы будем использовать левое соединение различных таблиц документов, которые могут быть созданы на основании счета. Выясним причину, почему это лучше делать через объединение: разные документы (Реализация, Поступление ДС) имеют разные реквизиты, но общую логику подчинения.
ВЫБРАТЬ
Реализация.Ссылка КАК Ссылка,
Реализация.СчетНаОплатуПокупателю КАК ДокументОснование,
"Реализация" КАК ТипДокумента
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.СчетНаОплатуПокупателю В (&СписокСчетов)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Поступление.Ссылка КАК Ссылка,
Поступление.ДокументОснование КАК ДокументОснование,
"Оплата" КАК ТипДокумента
ИЗ
Документ.ПоступлениеНаРасчетныйСчет КАК Поступление
ГДЕ
Поступление.ДокументОснование В (&СписокСчетов)
В настройках СКД на закладке «Связи наборов данных» мы должны настроить рекурсивную связь. Укажем, что Ссылка из первого набора является источником для параметра ДокументОснование во втором наборе. Это позволит системе автоматически выстраивать иерархию, проходя по всей цепочке подчиненных документов.
Важный момент: чтобы выводить дерево в отчете, в настройках структуры на вкладке «Настройки» необходимо добавить группировку по полю Ссылка и в поле «Тип группировки» выбрать «Иерархия».
Теперь разберем, как присоединить к этим документам бухгалтерские показатели. Мы будем использовать виртуальную таблицу ХозрасчетныйОстаткиИОбороты. Проанализируем ситуацию: нам нужно получить данные по счетам 62.01 и 62.02 (или 60.01/60.02 для поставщиков).
Создадим третий набор данных для получения стоимостных показателей:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
ХозрасчетныйОстаткиИОбороты.Субконто3 КАК ДокументРасчетов,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК НачОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК ОборотДт,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК ОборотКт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК КонОстаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями)), , ) КАК ХозрасчетныйОстаткиИОбороты
Внимание: Соединение этого набора с предыдущими должно происходить по полям Контрагент, Договор и Ссылка = ДокументРасчетов. Если в качестве ДокументРасчетов в проводках выступает сам Счет на оплату, данные подтянутся напрямую к корню дерева. Если же расчетом является Реализация, то цифры отобразятся напротив соответствующих строк подчиненных документов.
Поскольку бухгалтерские итоги привязаны к конкретным документам (реализациям или оплатам), для того чтобы увидеть общую картину по счету, нам нужно правильно настроить Ресурсы в СКД. Для полей НачОстаток, ОборотДт, ОборотКт и КонОстаток выберем функцию Сумма().
Рассмотрим подробнее механизм расчета: когда мы выводим иерархию, СКД автоматически суммирует значения ресурсов снизу вверх. То есть сумма оплат и отгрузок, привязанных к подчиненным документам, просуммируется на уровне родительского объекта — Счета на оплату. Это именно то, что требовалось бухгалтеру для контроля «закрытия» счета.
Разберем по шагам альтернативный вариант, если использование субконто Документы расчетов невозможно по политике учета компании:
СвязанныеДокументы для получения всех документов цепочки в один массив.Хозрасчетный делайте выборку остатков без разреза по документам расчетов, но с фильтром по Договору и Контрагенту.Также стоит упомянуть, что в БП 3.0 существует регистр сведений «СтатусыДокументов» или механизмы прослеживаемости, но для данной задачи они вспомогательны. Основной упор всегда делайте на Связи наборов данных в СКД — это самый гибкий инструмент для подобных отчетов.
Таким образом, мы выяснили, что связать «несвязуемое» вполне возможно, если использовать мощь СКД и понимать структуру субконто бухгалтерского плана счетов. Главное — убедиться, что аналитика в проводках совпадает с иерархией документов, которую вы строите в отчете.