К статье
Практический материал

Разработка и Конфигурация · 10 мин

1С: как обратиться к плану счетов

Как обратиться к плану счетов в 1С из встроенного языка: ПланыСчетов, НайтиПоКоду, предопределённые счета, работа с субконто и проводками.

План счетов в 1С — это объект метаданных, который хранит иерархию бухгалтерских счетов, их признаки учёта (количественный, валютный, забалансовый) и наборы видов субконто. Обратиться к нему можно как интерактивно — через формы списка и отчёты, так и программно — через встроенный язык. Именно программное обращение чаще всего вызывает вопросы: у плана счетов собственный менеджер, особые методы поиска и ряд ограничений, отличающих его от обычных справочников.

В конфигурациях на основе БСП и типовых решениях (Бухгалтерия предприятия, ERP) основной план обычно называется «Хозрасчетный», в самописных конфигурациях имя может быть любым. Все примеры ниже используют типовое имя; если конфигурация другая, подставьте реальное имя объекта из дерева метаданных.

Где находится план счетов и как открыть его интерактивно

В пользовательском режиме план счетов доступен из раздела учёта: в «1С:Бухгалтерии» это пункт «Главное — План счетов», в других конфигурациях путь может отличаться, но список всегда открывается как обычная форма списка. Здесь можно просматривать счета, добавлять собственные субсчета и менять признаки учёта — если это не запрещено настройками и правами.

В конфигураторе план счетов находится в дереве метаданных: ветка «Планы счетов». Открыв объект, вы увидите предопределённые счета, виды субконто, признаки учёта и маску кода. Именно имя объекта в этой ветке используется при обращении из кода: если план называется «Управленческий», то и менеджер будет ПланыСчетов.Управленческий.

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

Обращение к плану счетов через менеджер ПланыСчетов

Основная точка входа — глобальный контекстный объект ПланыСчетов. Через него доступны все планы счетов конфигурации. Менеджер конкретного плана предоставляет методы поиска, создания и получения ссылок.

// Получение ссылки на счёт по коду

СчетСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01");

Если СчетСсылка.Пустая() Тогда

Сообщить("Счёт 10.01 не найден");

Иначе

Сообщить("Найден счёт: " + СчетСсылка);

КонецЕсли;

Метод НайтиПоКоду() ищет счёт по точному совпадению кода. Помните, что код счёта — строка, и в типовых планах применяется маска с разделителем: «10.01», а не «1001». Неверный формат кода — самая частая причина «пустого» результата поиска. Если нужен поиск по наименованию, используйте НайтиПоНаименованию(), но учитывайте, что наименования могут дублироваться.

Для перебора всех счетов используйте Выбрать():

Выборка = ПланыСчетов.Хозрасчетный.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Забалансовый Тогда

Продолжить;

КонецЕсли;

Сообщить(Выборка.Код + " — " + Выборка.Наименование);

КонецЦикла;

Обращение к предопределённым счетам

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

СчетМатериалы = ПланыСчетов.Хозрасчетный.Материалы;        // 10

СчетКасса = ПланыСчетов.Хозрасчетный.КассаОрганизации; // 50.01

СчетПродажи = ПланыСчетов.Хозрасчетный.Продажи; // 90

Если указанного имени нет в конфигурации, при обращении возникнет ошибка времени выполнения. Поэтому перед использованием предопределённого имени откройте план счетов в конфигураторе и убедитесь, что колонка «Имя» заполнена. В типовой «Бухгалтерии» предопределённые имена есть практически у всех основных счетов.

Чтение свойств счёта и работа с субконто

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

Виды субконто счёта хранятся в табличной части ВидыСубконто. Чтобы их прочитать, нужно получить объект счёта:

СчетОбъект = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01").ПолучитьОбъект();

Для Каждого СтрокаСубконто Из СчетОбъект.ВидыСубконто Цикл

Сообщить(СтрокаСубконто.ВидСубконто);

КонецЦикла;

Через объект же можно добавить вид субконто или изменить признаки учёта, но делайте это осознанно: изменение состава субконто влияет на существующие проводки и отчёты. Добавление субконто к счёту, по которому уже есть остатки, не заполнит его в старых проводках — там значение останется пустым.

Обращение к данным по счёту через регистр бухгалтерии

Сам план счетов хранит только описание счетов. Остатки и обороты находятся в регистре бухгалтерии, связанном с планом (в типовых — РегистрыБухгалтерии.Хозрасчетный). Для получения данных используются виртуальные таблицы Остатки, Обороты, ОстаткиИОбороты с параметром отбора по счёту.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ХозрасчетныйОстатки.Счет,

| ХозрасчетныйОстатки.СуммаОстатокДт КАК СальдоДт

|ИЗ

| РегистрБухгалтерии.Хозрасчетный.Остатки(

| &Период,

| Счет = &Счет,

| ,

| Организация = &Организация) КАК ХозрасчетныйОстатки";

Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДатаСеанса()));

Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01"));

Запрос.УстановитьПараметр("Организация", Организация);

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

Пока Результат.Следующий() Цикл

Сообщить("Сальдо: " + Результат.СальдоДт);

КонецЦикла;

В параметре отбора по счёту можно передавать не одну ссылку, а массив счетов или использовать условие «Счет В ИЕРАРХИИ (&Счет)» — тогда в выборку попадут все субсчета указанного счёта. Это стандартный приём для расчёта сводных сальдо по группе, например по всему счёту 10 с субсчетами.

Порядок действий для получения остатка по счёту
  1. 1
    Получите ссылку на счёт через НайтиПоКоду() или предопределённое имя
  2. 2
    Сформируйте запрос к виртуальной таблице Остатки регистра бухгалтерии
  3. 3
    Передайте период, счёт и организацию в параметры запроса
  4. 4
    Выполните запрос и обойдите выборку
  5. 5
    Проверьте результат сверкой с отчётом «Оборотно-сальдовая ведомость»

Типичные ошибки и их последствия

Первая распространённая ошибка — поиск счёта по коду без учёта иерархии: НайтиПоКоду("10") вернёт группирующий счёт, а не субсчёт, и дальнейшие отборы по нему в запросах без «В ИЕРАРХИИ» дадут пустой результат. Вторая — обращение к реквизитам ссылки внутри цикла по большой выборке, что резко замедляет код из-за множества обращений к базе.

Третья ошибка — использование ПолучитьОбъект() там, где достаточно чтения: получение объекта блокирует запись и требует больше ресурсов. Для чтения свойств счетов в цикле используйте запрос с выбором нужных полей. Четвёртая — жёсткое кодирование пользовательских субсчетов: после обновления или переименования код перестаёт работать, поэтому предпочтительны предопределённые имена или настройки в константах.

Типичные ошибки
01
Поиск по коду «1001» вместо «10.01» — поиск ничего не находит из-за маски кода
02
Отбор в запросе по группе счетов без «В ИЕРАРХИИ» — субсчета не попадают в результат
03
Обращение к реквизитам ссылки в цикле — лишние обращения к базе и падение производительности
04
Привязка кода к пользовательским субсчетам — сбой после переименования или обновления конфигурации

Проверка результата и безопасная практика

Любой программный расчёт по счетам проверяйте сверкой со штатными отчётами: оборотно-сальдовая ведомость, анализ счёта, карточка счёта. Совпадение цифр — признак корректных параметров виртуальной таблицы. Расхождения обычно означают неверный период, отсутствие отбора по организации или неучтённую иерархию счетов.

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

Контрольные точки

Как проверить результат

Сальдо по счёту из запроса
Норма

Совпадает с оборотно-сальдовой ведомостью за тот же период

Тревожный признак

Расходится — проверьте период, организацию и условие по иерархии

Результат НайтиПоКоду
Норма

Возвращает непустую ссылку с ожидаемым наименованием

Тревожный признак

Пустая ссылка — проверьте формат кода и маску

Состав субконто счёта
Норма

Совпадает с настройкой в форме плана счетов

Тревожный признак

Отличается — возможно, счёт изменён пользователем

Итог

Что важно запомнить

Обращение к плану счетов выполняется через ПланыСчетов.ИмяПлана: поиск — НайтиПоКоду с учётом маски кода, предопределённые счета — по имени из конфигуратора. Остатки и обороты читаются из регистра бухгалтерии запросом к виртуальным таблицам, а результат всегда сверяется со штатной оборотно-сальдовой ведомостью.

Частые вопросы

Чем план счетов отличается от регистра бухгалтерии?

План счетов — это справочная структура: коды, наименования, признаки учёта и виды субконто. Регистр бухгалтерии хранит сами проводки и рассчитывает остатки и обороты по счетам плана. Один регистр бухгалтерии всегда связан с одним планом счетов.

Почему НайтиПоКоду возвращает пустую ссылку?

Чаще всего из-за несовпадения формата кода: в типовом плане используется маска с точкой («10.01», «60.01»), а поиск выполняется по «1001». Также проверьте, что счёт не помечен на удаление и что вы обращаетесь к правильному плану счетов.

Как получить все субсчета конкретного счёта?

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

Можно ли программно создать новый субсчёт?

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

Как обратиться к плану счетов из внешней обработки?

Точно так же, как из кода конфигурации: менеджер ПланыСчетов доступен в контексте внешней обработки. Главное — чтобы обработка запускалась в базе, где существует план счетов с используемым именем, иначе обращение вызовет ошибку.

Почему запрос к виртуальной таблице Остатки возвращает пустой результат?

Проверьте четыре причины: период задан раньше первых проводок или позже закрытого периода, отбор по организации не соответствует данным, счёт передан без учёта иерархии, либо в базе вообще нет движений по этому счёту. Сверка с оборотно-сальдовой ведомостью быстро локализует причину.