Разработка и Конфигурация · 10 мин
1С: как обратиться к плану счетов
Как обратиться к плану счетов в 1С из встроенного языка: ПланыСчетов, НайтиПоКоду, предопределённые счета, работа с субконто и проводками.
План счетов в 1С — это объект метаданных, который хранит иерархию бухгалтерских счетов, их признаки учёта (количественный, валютный, забалансовый) и наборы видов субконто. Обратиться к нему можно как интерактивно — через формы списка и отчёты, так и программно — через встроенный язык. Именно программное обращение чаще всего вызывает вопросы: у плана счетов собственный менеджер, особые методы поиска и ряд ограничений, отличающих его от обычных справочников.
В конфигурациях на основе БСП и типовых решениях (Бухгалтерия предприятия, ERP) основной план обычно называется «Хозрасчетный», в самописных конфигурациях имя может быть любым. Все примеры ниже используют типовое имя; если конфигурация другая, подставьте реальное имя объекта из дерева метаданных.
Где находится план счетов и как открыть его интерактивно
В пользовательском режиме план счетов доступен из раздела учёта: в «1С:Бухгалтерии» это пункт «Главное — План счетов», в других конфигурациях путь может отличаться, но список всегда открывается как обычная форма списка. Здесь можно просматривать счета, добавлять собственные субсчета и менять признаки учёта — если это не запрещено настройками и правами.
В конфигураторе план счетов находится в дереве метаданных: ветка «Планы счетов». Открыв объект, вы увидите предопределённые счета, виды субконто, признаки учёта и маску кода. Именно имя объекта в этой ветке используется при обращении из кода: если план называется «Управленческий», то и менеджер будет ПланыСчетов.Управленческий.
Важно понимать разницу: предопределённые счета создаются в конфигураторе и удалить их из пользовательского режима нельзя, а пользовательские субсчета добавляются в режиме предприятия. При обновлении типовой конфигурации предопределённые счета могут измениться, поэтому жёсткая привязка к пользовательским субсчетам в коде — источник ошибок.
Обращение к плану счетов через менеджер ПланыСчетов
Основная точка входа — глобальный контекстный объект ПланыСчетов. Через него доступны все планы счетов конфигурации. Менеджер конкретного плана предоставляет методы поиска, создания и получения ссылок.
// Получение ссылки на счёт по коду
СчетСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01");
Если СчетСсылка.Пустая() Тогда
Сообщить("Счёт 10.01 не найден");
Иначе
Сообщить("Найден счёт: " + СчетСсылка);
КонецЕсли;
Метод НайтиПоКоду() ищет счёт по точному совпадению кода. Помните, что код счёта — строка, и в типовых планах применяется маска с разделителем: «10.01», а не «1001». Неверный формат кода — самая частая причина «пустого» результата поиска. Если нужен поиск по наименованию, используйте НайтиПоНаименованию(), но учитывайте, что наименования могут дублироваться.
Для перебора всех счетов используйте Выбрать():
Выборка = ПланыСчетов.Хозрасчетный.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Забалансовый Тогда
Продолжить;
КонецЕсли;
Сообщить(Выборка.Код + " — " + Выборка.Наименование);
КонецЦикла;
Обращение к предопределённым счетам
Предопределённые счета доступны напрямую по имени, заданному в конфигураторе. Это самый надёжный способ обращения: имя не меняется при переименовании счёта пользователем и не зависит от кода.
СчетМатериалы = ПланыСчетов.Хозрасчетный.Материалы; // 10
СчетКасса = ПланыСчетов.Хозрасчетный.КассаОрганизации; // 50.01
СчетПродажи = ПланыСчетов.Хозрасчетный.Продажи; // 90
Если указанного имени нет в конфигурации, при обращении возникнет ошибка времени выполнения. Поэтому перед использованием предопределённого имени откройте план счетов в конфигураторе и убедитесь, что колонка «Имя» заполнена. В типовой «Бухгалтерии» предопределённые имена есть практически у всех основных счетов.
Чтение свойств счёта и работа с субконто
У ссылки на счёт доступны стандартные реквизиты (Код, Наименование, Родитель, Порядок) и специфичные свойства: Вид (активный, пассивный, активно-пассивный), Забалансовый, Валютный, Количественный, НалоговыйУчет. Доступ к ним выполняется через точку, но помните: каждое такое обращение к реквизитам ссылки — это обращение к базе данных. В циклах выгоднее получать объект один раз или выбирать поля запросом.
Виды субконто счёта хранятся в табличной части ВидыСубконто. Чтобы их прочитать, нужно получить объект счёта:
СчетОбъект = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01").ПолучитьОбъект();
Для Каждого СтрокаСубконто Из СчетОбъект.ВидыСубконто Цикл
Сообщить(СтрокаСубконто.ВидСубконто);
КонецЦикла;
Через объект же можно добавить вид субконто или изменить признаки учёта, но делайте это осознанно: изменение состава субконто влияет на существующие проводки и отчёты. Добавление субконто к счёту, по которому уже есть остатки, не заполнит его в старых проводках — там значение останется пустым.
Обращение к данным по счёту через регистр бухгалтерии
Сам план счетов хранит только описание счетов. Остатки и обороты находятся в регистре бухгалтерии, связанном с планом (в типовых — РегистрыБухгалтерии.Хозрасчетный). Для получения данных используются виртуальные таблицы Остатки, Обороты, ОстаткиИОбороты с параметром отбора по счёту.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет,
| ХозрасчетныйОстатки.СуммаОстатокДт КАК СальдоДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &Период,
| Счет = &Счет,
| ,
| Организация = &Организация) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01"));
Запрос.УстановитьПараметр("Организация", Организация);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщить("Сальдо: " + Результат.СальдоДт);
КонецЦикла;
В параметре отбора по счёту можно передавать не одну ссылку, а массив счетов или использовать условие «Счет В ИЕРАРХИИ (&Счет)» — тогда в выборку попадут все субсчета указанного счёта. Это стандартный приём для расчёта сводных сальдо по группе, например по всему счёту 10 с субсчетами.
- 1Получите ссылку на счёт через НайтиПоКоду() или предопределённое имя
- 2Сформируйте запрос к виртуальной таблице Остатки регистра бухгалтерии
- 3Передайте период, счёт и организацию в параметры запроса
- 4Выполните запрос и обойдите выборку
- 5Проверьте результат сверкой с отчётом «Оборотно-сальдовая ведомость»
Типичные ошибки и их последствия
Первая распространённая ошибка — поиск счёта по коду без учёта иерархии: НайтиПоКоду("10") вернёт группирующий счёт, а не субсчёт, и дальнейшие отборы по нему в запросах без «В ИЕРАРХИИ» дадут пустой результат. Вторая — обращение к реквизитам ссылки внутри цикла по большой выборке, что резко замедляет код из-за множества обращений к базе.
Третья ошибка — использование ПолучитьОбъект() там, где достаточно чтения: получение объекта блокирует запись и требует больше ресурсов. Для чтения свойств счетов в цикле используйте запрос с выбором нужных полей. Четвёртая — жёсткое кодирование пользовательских субсчетов: после обновления или переименования код перестаёт работать, поэтому предпочтительны предопределённые имена или настройки в константах.
Проверка результата и безопасная практика
Любой программный расчёт по счетам проверяйте сверкой со штатными отчётами: оборотно-сальдовая ведомость, анализ счёта, карточка счёта. Совпадение цифр — признак корректных параметров виртуальной таблицы. Расхождения обычно означают неверный период, отсутствие отбора по организации или неучтённую иерархию счетов.
Отладку кода выполняйте на копии базы или в тестовом контуре. Операции, изменяющие план счетов или движения регистра бухгалтерии, в рабочей базе запускайте только после резервного копирования и вне часов активной работы пользователей.
Как проверить результат
Совпадает с оборотно-сальдовой ведомостью за тот же период
Расходится — проверьте период, организацию и условие по иерархии
Возвращает непустую ссылку с ожидаемым наименованием
Пустая ссылка — проверьте формат кода и маску
Совпадает с настройкой в форме плана счетов
Отличается — возможно, счёт изменён пользователем
Что важно запомнить
Обращение к плану счетов выполняется через ПланыСчетов.ИмяПлана: поиск — НайтиПоКоду с учётом маски кода, предопределённые счета — по имени из конфигуратора. Остатки и обороты читаются из регистра бухгалтерии запросом к виртуальным таблицам, а результат всегда сверяется со штатной оборотно-сальдовой ведомостью.
Частые вопросы
Чем план счетов отличается от регистра бухгалтерии?
План счетов — это справочная структура: коды, наименования, признаки учёта и виды субконто. Регистр бухгалтерии хранит сами проводки и рассчитывает остатки и обороты по счетам плана. Один регистр бухгалтерии всегда связан с одним планом счетов.
Почему НайтиПоКоду возвращает пустую ссылку?
Чаще всего из-за несовпадения формата кода: в типовом плане используется маска с точкой («10.01», «60.01»), а поиск выполняется по «1001». Также проверьте, что счёт не помечен на удаление и что вы обращаетесь к правильному плану счетов.
Как получить все субсчета конкретного счёта?
В запросе к плану счетов используйте условие «Ссылка В ИЕРАРХИИ (&Счет)» либо отбор по реквизиту Родитель для субсчетов первого уровня. В запросах к регистру бухгалтерии аналогичное условие по иерархии применяется к параметру отбора по счёту.
Можно ли программно создать новый субсчёт?
Да: создайте объект через ПланыСчетов.Хозрасчетный.СоздатьСчет(), заполните код, наименование, родителя и виды субконто, затем запишите. Учтите, что в типовых конфигурациях добавление счетов может контролироваться настройками, а при обновлении пользовательские счета сохраняются, но их использование в типовых механизмах не гарантируется.
Как обратиться к плану счетов из внешней обработки?
Точно так же, как из кода конфигурации: менеджер ПланыСчетов доступен в контексте внешней обработки. Главное — чтобы обработка запускалась в базе, где существует план счетов с используемым именем, иначе обращение вызовет ошибку.
Почему запрос к виртуальной таблице Остатки возвращает пустой результат?
Проверьте четыре причины: период задан раньше первых проводок или позже закрытого периода, отбор по организации не соответствует данным, счёт передан без учёта иерархии, либо в базе вообще нет движений по этому счёту. Сверка с оборотно-сальдовой ведомостью быстро локализует причину.