Как программно получить остатки по групповым счетам в 1С:Бухгалтерия для Казахстана

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

При разработке отчетов или механизмов выгрузки данных в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда стандартный запрос к регистру бухгалтерии не возвращает данных по определенным счетам, хотя в стандартной «Оборотно-сальдовой ведомости» (ОСВ) цифры отображаются корректно. Особенно часто это проявляется в локализованных конфигурациях, таких как «Бухгалтерия для Казахстана» (БК). В этой статье мы подробно разберем, как правильно составить запрос для получения сальдо, почему групповые счета требуют особого подхода и какие технические нюансы следует учесть для получения достоверных данных.

Разбор проблемы: Почему запрос возвращает пустой результат

Рассмотрим ситуацию: нам необходимо получить данные по счетам раздела 1000 («Денежные средства»), 1100, 1200 и так далее. Автор темы столкнулся с тем, что при попытке обращения к регистру бухгалтерии через запрос данные по этим счетам отсутствуют. Проанализируем причину. В плане счетов Казахстана счета с кодами, заканчивающимися на нули (например, 1000, 1200), являются групповыми. Они служат для логического объединения субсчетов и не являются счетами, по которым разрешена проводка.

Физические записи в Регистре бухгалтерии всегда привязаны к конкретным счетам, у которых установлен признак «Счет является субсчетом» (например, 1010 — «Наличные денежные средства», 1030 — «Денежные средства на текущих банковских счетах»). Если мы в условии запроса напишем ГДЕ Счет = &Счет, где параметр — это группа 1000, система будет искать записи именно по этому родителю и ничего не найдет. Для решения этой задачи нам необходимо использовать механизм иерархии.

Выбор правильного регистра: «Типовой» против «Хозрасчетного»

В типовых конфигурациях для России основной регистр бухгалтерии называется Хозрасчетный. Однако в «Бухгалтерии для Казахстана» архитектура иная. Разберем состав регистров:

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

Следовательно, в тексте нашего запроса мы будем использовать таблицу РегистрБухгалтерии.Типовой.

Решение через виртуальную таблицу «ОстаткиИОбороты»

Если нам необходимо получить и начальное, и конечное сальдо, а также обороты за период, воспользуемся виртуальной таблицей ОстаткиИОбороты. Рассмотрим пример кода, который решает поставленную задачу:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТиповойОстаткиИОбороты.Счет КАК Счет,
    |	ТиповойОстаткиИОбороты.СуммаНачальныйОстатокДт КАК НачОстатокДт,
    |	ТиповойОстаткиИОбороты.СуммаНачальныйОстатокКт КАК НачОстатокКт,
    |	ТиповойОстаткиИОбороты.СуммаКонечныйОстатокДт КАК КонОстатокДт,
    |	ТиповойОстаткиИОбороты.СуммаКонечныйОстатокКт КАК КонОстатокКт
    |ИЗ
    |	РегистрБухгалтерии.Типовой.ОстаткиИОбороты(&ДатаНачало, &ДатаКонец, , , Счет В ИЕРАРХИИ (&СписокСчетов), , ) КАК ТиповойОстаткиИОбороты";

Запрос.УстановитьПараметр("ДатаНачало", НачалоДня(Объект.ДатаНачало));
Запрос.УстановитьПараметр("ДатаКонец", КонецДня(Объект.ДатаКонец));
Запрос.УстановитьПараметр("СписокСчетов", СписокВыбранныхСчетов); // Сюда передаем массив или список счетов, включая 1000, 1100 и т.д.

РезультатЗапроса = Запрос.Выполнить();

Важный момент: Обратите внимание на условие Счет В ИЕРАРХИИ (&СписокСчетов). Именно использование оператора В ИЕРАРХИИ заставляет платформу 1С просуммировать данные всех дочерних субсчетов и выдать результат по родительскому счету (группе).

Оптимизация: Получение только конечных остатков

Зачастую программисты используют ОстаткиИОбороты там, где нужны только текущие остатки. Это замедляет работу системы. Проанализируем ситуацию: если нам нужно только сальдо на конец периода, эффективнее использовать таблицу Остатки. Посмотрим на пример реализации:


Запрос = Новый Запрос;
// Используем объект Граница, чтобы включить движения последней секунды дня
ГраницаПериода = Новый Граница(КонецДня(ДатаОтчета), ВидГраницы.Включая);

Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТиповойОстатки.Счет,
    |	ТиповойОстатки.СуммаОстатокДт,
    |	ТиповойОстатки.СуммаОстатокКт
    |ИЗ
    |	РегистрБухгалтерии.Типовой.Остатки(&Период, Счет В ИЕРАРХИИ (&Счета), , ) КАК ТиповойОстатки";

Запрос.УстановитьПараметр("Период", ГраницаПериода);
Запрос.УстановитьПараметр("Счета", МассивСчетов);
Результат = Запрос.Выполнить().Выгрузить();

Работа с валютными счетами и подразделениями

В конфигурации «Бухгалтерия для Казахстана» счета денежных средств (группа 1000) почти всегда являются валютными. Если ваш отчет должен выводить суммы не только в тенге, но и в валюте операции, необходимо обращаться к ресурсу ВалютнаяСуммаОстаток. Также важно помнить о подразделениях.

Рассмотрим дополнительные параметры виртуальных таблиц:

Использование объекта «Граница»

Выясним причину, по которой новички часто теряют данные за последний день. В 1С дата 31.12.2023 — это на самом деле 31.12.2023 00:00:00. Если вы передадите такую дату в параметр Период, остатки будут рассчитаны ДО начала этого дня, и все документы, проведенные 31 декабря, не попадут в результат. Чтобы избежать этой ошибки, мы рекомендуем всегда использовать объект Граница с параметром ВидГраницы.Включая.

Получение данных через СКД (если запроса недостаточно)

Хотя автор просил решение без СКД, иногда это самый быстрый способ получить «правильные» итоги. В сообщении №3 приведен пример того, как программно инициализировать отчет на базе СКД и программно выгрузить его результат в ТаблицуЗначений. Рассмотрим этот метод кратко:

  1. Создаем объект отчета: ОтчетОбъект = Отчеты.НазваниеОтчета.Создать();.
  2. Устанавливаем настройки компоновщика (период, счета, отборы).
  3. Используем КомпоновщикМакета и ПроцессорКомпоновки, чтобы выполнить схему.
  4. Выводим результат в коллекцию: ПроцессорВывода.УстановитьОбъект(РезультатТаблица);.

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

Резюме по шагам

Подведем итог. Чтобы программно получить данные, идентичные ОСВ в Казахстане, нужно:

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

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

← На главную