Отчеты и Аналитика · 12 мин
Как в 1С сделать отчет по возрасту
Как построить в 1С отчет по возрасту задолженности, товара или сотрудников: готовые отчеты, настройка интервалов и запрос на СКД с функцией РАЗНОСТЬДАТ.
Под «отчетом по возрасту» в 1С обычно понимают одну из трех задач: анализ дебиторской задолженности по срокам возникновения, оценку возраста остатков товара на складе или выборку сотрудников по возрастным группам. Во всех случаях логика одинакова — берется дата (документа, поступления, рождения), вычисляется разница с текущей датой и результат раскладывается по интервалам: до 30 дней, 30–60, 60–90, свыше 90.
В типовых конфигурациях (1С:Бухгалтерия, Управление торговлей, ERP, ЗУП) часть таких отчетов уже встроена, и задача сводится к правильной настройке. Если типового отчета нет или он не подходит, отчет по возрасту строится на системе компоновки данных (СКД) с запросом, где возраст вычисляется функцией языка запросов. Ниже разобраны оба пути с конкретными действиями и проверками результата.
Перед началом работы определите, какой именно «возраст» нужен: от даты документа расчетов — для задолженности, от даты поступления партии — для товара, от даты рождения — для персонала. От этого зависит выбор регистра и полей в запросе.
Какие данные лежат в основе отчета по возрасту
Отчет по возрасту всегда строится на регистре, где хранится дата возникновения объекта учета. Для дебиторской задолженности это регистры расчетов с контрагентами (в Бухгалтерии — проводки по счетам 62, 76 с субконто «Документы расчетов», в УТ и ERP — регистры расчетов с клиентами). Для товара — регистр партий или складских остатков с датой поступления. Для сотрудников — справочник «Физические лица» с полем «Дата рождения».
Ключевое поле — дата, от которой считается возраст. Ошибка на этом этапе самая частая: например, для задолженности берут дату отгрузки вместо даты возникновения обязательства по договору, и отчет перестает совпадать с актами сверки. Перед построением отчета уточните у заказчика отчета, какая дата считается точкой отсчета по методологии компании.
Также заранее определите границы интервалов. Стандартный набор для дебиторки — 0–30, 31–60, 61–90, свыше 90 дней, но в компании могут быть свои границы, привязанные к условиям договоров. Границы лучше вынести в параметры отчета, а не зашивать в текст запроса.
Готовые типовые отчеты: где найти и как настроить
В 1С:Бухгалтерии откройте раздел «Руководителю» или «Продажи» и найдите отчет «Задолженность покупателей по срокам долга» (в разных релизах название может отличаться: «Анализ задолженности покупателей»). В настройках укажите дату отчета, организацию и при необходимости измените интервалы сроков долга — типовая настройка позволяет редактировать границы.
В 1С:Управление торговлей и ERP для возраста товара используйте отчеты группы «Склад» — например, анализ остатков с группировкой по сроку хранения, если он включен в состав поставки вашей версии. В ЗУП возраст сотрудников доступен в кадровых отчетах раздела «Кадры» — там есть штатные отчеты по составу персонала с возрастными группами.
Общий порядок работы с типовым отчетом: открыть отчет, нажать «Настройки», проверить отбор по организации и периоду, при необходимости добавить группировку по контрагенту или договору, сформировать и сверить итог с оборотно-сальдовой ведомостью по соответствующему счету. Совпадение итога — главный признак корректной настройки.
- 1Откройте отчет «Задолженность покупателей по срокам долга» в разделе продаж или отчетов руководителя
- 2Установите дату, на которую считается возраст, и отбор по организации
- 3Откройте настройки и проверьте интервалы сроков долга — при необходимости измените границы
- 4Добавьте группировку по контрагентам и договорам для детализации
- 5Сформируйте отчет и сверьте итоговую сумму с сальдо счета 62 на ту же дату
Отчет по возрасту на СКД: структура запроса
Если типовой отчет отсутствует, создайте внешний отчет (или добавьте отчет в расширение конфигурации) на системе компоновки данных. В схеме компоновки основная работа делается в запросе: выбираются остатки регистра с датой документа, а возраст вычисляется функцией РАЗНОСТЬДАТ.
Типовой фрагмент запроса для возраста задолженности выглядит так: соедините таблицу остатков регистра расчетов с документами расчетов, получите дату документа и вычислите разницу в днях до текущей даты. Затем конструкцией ВЫБОР разложите дни по интервалам и присвойте каждому интервалу текстовое название — по нему удобно строить группировку.
ВЫБРАТЬ
Остатки.Контрагент КАК Контрагент,
Остатки.ДокументРасчетов.Дата КАК ДатаДокумента,
РАЗНОСТЬДАТ(Остатки.ДокументРасчетов.Дата, &ТекущаяДата, ДЕНЬ) КАК ВозрастДней,
ВЫБОР
КОГДА РАЗНОСТЬДАТ(Остатки.ДокументРасчетов.Дата, &ТекущаяДата, ДЕНЬ) <= 30 ТОГДА "До 30 дней"
КОГДА РАЗНОСТЬДАТ(Остатки.ДокументРасчетов.Дата, &ТекущаяДата, ДЕНЬ) <= 60 ТОГДА "31-60 дней"
КОГДА РАЗНОСТЬДАТ(Остатки.ДокументРасчетов.Дата, &ТекущаяДата, ДЕНЬ) <= 90 ТОГДА "61-90 дней"
ИНАЧЕ "Свыше 90 дней"
КОНЕЦ КАК Интервал,
Остатки.СуммаОстаток КАК Сумма
ИЗ
РегистрНакопления.РасчетыСКлиентами.Остатки КАК ОстаткиПараметр ТекущаяДата передайте через закладку «Параметры» схемы компоновки: создайте параметр, установите тип «Дата» и в настройках задайте выражение по умолчанию или пусть пользователь вводит дату вручную. Жесткая привязка к текущей дате сеанса неудобна — отчет за прошлый месяц сформировать не получится.
Возраст сотрудников в ЗУП
Для кадрового отчета источником служит справочник «ФизическиеЛица» с полем «ДатаРождения». Возраст в годах вычисляется той же функцией: РАЗНОСТЬДАТ(ДатаРождения, &ТекущаяДата, ГОД). Учтите нюанс: функция считает полные годы между датами, поэтому для точного возраста на дату отчета проверьте, не наступил ли день рождения в текущем году — при необходимости скорректируйте выражение условием.
Настройка интервалов и группировок
После того как запрос готов, на закладке «Настройки» схемы компоновки постройте структуру отчета: верхняя группировка — «Интервал», внутри — детализация по контрагенту (или товару, сотруднику) и документу. В ресурсы добавьте сумму с расчетом «Сумма». Для читаемости отсортируйте интервалы не по алфавиту, а по порядку — для этого добавьте в запрос числовое поле «ПорядокИнтервала» (1, 2, 3, 4) и сортируйте по нему.
Если границы интервалов должны меняться пользователем, не зашивайте числа 30, 60, 90 в запрос. Вынесите их в параметры (&Интервал1, &Интервал2, &Интервал3) и подставляйте в сравнения. Тогда бухгалтер сможет сам перестроить отчет под условия конкретного договора без обращения к разработчику.
Для наглядности добавьте в настройки диаграмму или сводную таблицу: строки — контрагенты, колонки — интервалы. Такой вид удобен для совещаний, а табличный вариант остается для сверки.
Проверка корректности отчета
Главный контроль — сверка итога отчета с независимым источником. Для дебиторки это сальдо по счету расчетов на ту же дату, для товара — итог отчета по остаткам склада, для персонала — штатная расстановка. Расхождение означает, что в запросе потеряны данные: не учтен вид расчетов, отбор отсекает часть документов или остатки берутся не из того регистра.
Второй контроль — граничные значения. Найдите документ с датой ровно на границе интервала (например, ровно 30 дней) и убедитесь, что он попал в ожидаемую группу. Ошибки вида «<» вместо «<=» сдвигают границы и искажают картину именно на пограничных суммах.
Как проверить результат
Совпадает с сальдо счета расчетов или регистра остатков на ту же дату
Расхождение — проверяйте отборы и состав регистра в запросе
Попадает в интервал согласно заданному условию (<= или <)
Попадает в соседний интервал — ошибка в знаке сравнения
Интервалы идут от меньшего возраста к большему
Интервалы перемешаны — нет числового поля сортировки
Формируется корректно при смене параметра даты
Всегда считается от сегодняшней даты — дата зашита в код
Частые ошибки и ограничения
Самая распространенная ошибка — смешение кредиторской и дебиторской задолженности в одном запросе без разделения по знаку или виду расчетов. Итог по такому отчету может случайно совпасть с сальдо свернутого счета, но детализация будет бессмысленной. Разделяйте долг покупателей и долг перед поставщиками разными отчетами или отборами.
Вторая группа ошибок — производительность. Функция РАЗНОСТЬДАТ в запросе по большому регистру с соединением к документам работает медленно на объемных базах. Если отчет формируется дольше нескольких минут, перенесите расчет возраста на этап компоновки (вычисляемые поля) или используйте временные таблицы с предварительным отбором периода.
Третья ошибка — отчет «по возрасту» строится от даты документа, а методология компании требует считать от плановой даты оплаты по договору. Это принципиально разные отчеты: первый показывает давность долга, второй — просрочку. Уточните требование до начала разработки.
Альтернативы: консоль отчетов и универсальные инструменты
Если разработка внешнего отчета недоступна (нет прав или навыков), используйте универсальный отчет по регистру накопления с группировкой по документу расчетов и ручной доработкой в табличном документе — подойдет для разового анализа. Для регулярной работы такой способ неудобен.
Другой вариант — типовой механизм «Варианты отчетов»: скопируйте настройки существующего отчета по расчетам, добавьте группировку и сохраните как свой вариант. Это не требует программирования, но возможности ограничены составом полей исходного отчета.
Способы получить отчет по возрасту
Быстро и надежно, но интервалы и состав полей ограничены настройками поставки
Не требует программирования; подходит, если нужные поля уже есть в исходном отчете
Полная гибкость интервалов и расчетов; требует навыков разработки и тестирования
Что важно запомнить
Сначала проверьте типовые отчеты конфигурации — чаще всего задача решается настройкой. Если нужен свой отчет, стройте его на СКД: возраст через РАЗНОСТЬДАТ, интервалы через ВЫБОР с параметрами, сортировка по числовому полю. Обязательно сверяйте итог с независимым источником и проверяйте граничные значения интервалов.
Частые вопросы
Можно ли построить отчет по возрасту задолженности без программирования?
Да, если в конфигурации есть типовой отчет по срокам долга — достаточно настроить интервалы и отборы. В Бухгалтерии, УТ и ERP такие отчеты входят в поставку. Без типового отчета и без доработки останется только универсальный отчет по регистру, но в нем придется вручную группировать данные по датам.
Как посчитать возраст в годах, а не в днях?
Используйте ту же функцию РАЗНОСТЬДАТ, но с параметром ГОД вместо ДЕНЬ: РАЗНОСТЬДАТ(ДатаРождения, &ТекущаяДата, ГОД). Учтите, что функция считает целые годы между датами — для точного возраста на дату отчета добавьте проверку, наступил ли день рождения в текущем году.
Почему итог отчета по возрасту не совпадает с оборотно-сальдовой ведомостью?
Частые причины: запрос берет остатки не из того регистра, отбор отсекает часть документов или видов расчетов, дата отчета в параметрах отличается от даты ОСВ. Проверяйте по цепочке: сначала дата, затем состав регистра, затем отборы.
Как сделать интервалы настраиваемыми для пользователя?
Вынесите границы интервалов в параметры схемы компоновки (&Интервал1, &Интервал2 и т.д.) и используйте их в сравнениях внутри конструкции ВЫБОР. Пользователь сможет менять границы в настройках отчета без обращения к разработчику.
Отчет по возрасту формируется очень долго. Что делать?
Основная причина — вычисление РАЗНОСТЬДАТ и соединение с документами по всей таблице регистра. Ограничьте выборку периодом через временную таблицу, уберите лишние соединения или перенесите расчет интервала в вычисляемые поля компоновки. На больших базах также проверьте индексы по измерениям регистра.
Можно ли вывести возраст товара по конкретным партиям?
Да, если в конфигурации ведется партионный учет. Запрос строится по регистру партий товаров: для каждой партии берется дата документа поступления, вычисляется возраст, и остатки раскладываются по интервалам хранения. Без партионного учета определить возраст конкретного остатка невозможно — только усредненно.