Как в 1С выбрать из плана счетов счета с определенными видами субконто?

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

При разработке отчетов, обработок или алгоритмов проведения документов в 1С часто возникает задача получить список счетов, у которых настроена строго определенная аналитика. Например, требуется выбрать все субсчета счета 10 «Материалы», у которых первым субконто выступает «Номенклатура», а вторым — «Склады».

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

Способ 1. Запрос к табличной части «ВидыСубконто» с внутренним соединением

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

Рассмотрим пример запроса для плана счетов Хозрасчетный:


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

Проанализируем ключевые условия данного запроса:

  1. НомерСтроки = 1 и НомерСтроки = 2 — фиксируют точное положение каждого вида субконто в карточке счета.
  2. В ИЕРАРХИИ — ограничивает выборку только субсчетами группы «Материалы» (счет 10).
  3. ЗапретитьИспользоватьВПроводках — отсекает счета-группы (папки), по которым нельзя делать проводки. В зависимости от конфигурации также может использоваться признак ЭтоГруппа = Ложь.

Способ 2. Запрос с группировкой и секцией ИМЕЮЩИЕ

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

Посмотрим на пример реализации:


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

В этом случае запрос выбирает строки субконто по списку и группирует их по счетам. Условие КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ...) = 2 гарантирует, что в итоговую выборку попадут только те счета, у которых назначены оба указанных вида субконто.

Особенности работы с параметром «ВидыСубконто» в виртуальных таблицах

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

Выясним, как работает виртуальная таблица ОстаткиИОбороты или Остатки при передаче массива аналитики в параметр ВидыСубконто:

  1. Независимость от порядка: Если в параметрах виртуальной таблицы передать массив видов субконто, платформа отберет записи по всем счетам, где присутствуют указанные субконто, независимо от их фактического порядка (НомерСтроки) на счете.
  2. Формирование полей: Поля выборки Субконто1, Субконто2 в виртуальной таблице будут соответствовать порядку элементов в переданном массиве параметров, а не порядку в плане счетов.
  3. Дополнительные субконто: Если на счете заведено три вида аналитики, а в параметр передано два, счет все равно попадет в результат выборки, если он содержит оба переданных вида.

Программный обход через объектную модель

Если задача выполняется во встроенном языке без написания SQL-запроса, состав аналитики конкретного счета можно проверить напрямую через коллекцию ВидыСубконто объекта или ссылки на счет:


ЕстьНоменклатура = Ложь;
ЕстьСклады       = Ложь;

Для Каждого СтрокаСубконто Из СчетСсылка.ВидыСубконто Цикл
    Если СтрокаСубконто.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура И СтрокаСубконто.НомерСтроки = 1 Тогда
        ЕстьНоменклатура = Истина;
    ИначеЕсли СтрокаСубконто.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады И СтрокаСубконто.НомерСтроки = 2 Тогда
        ЕстьСклады = Истина;
    КонецЕсли;
КонецЦикла;

Если ЕстьНоменклатура И ЕстьСклады Тогда
    // Счет удовлетворяет условиям
КонецЕсли;

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

← На главную