При разработке конфигураций и расширений на платформе 1С часто возникает необходимость обратиться к конкретному счету бухгалтерского учета — например, к счету 50.01 «Касса организации». Рассмотрим подробно основные способы получения ссылки на счет в программном коде и особенности работы со счетами в запросах.
Если счет является предопределенным в конфигурации (создан разработчиком в режиме «1С:Предприятие» в структуре метаданных), наиболее правильным и быстрым способом будет прямое обращение к свойству плана счетов. Разберем по шагам, как написать такое обращение.
В коде модуля это выглядит следующим образом:
СчетКасса = ПланыСчетов.Хозрасчетный.КассаОрганизации;
Преимущество данного подхода: высокая скорость работы, проверка существования имени на этапе компиляции кода и исключение ошибок, связанных с изменением текстового кода счета пользователем в режиме предприятия.
Если требуется написать универсальный код, который должен отрабатывать как на клиенте, так и на сервере, рекомендуем использовать системную функцию ПредопределенноеЗначение:
СчетКасса = ПредопределенноеЗначение("ПланСчетов.Хозрасчетный.КассаОрганизации");
В случаях, когда необходимо получить счет по его строковому представлению (например, "50.01") или когда счет был создан пользователем вручную в режиме «1С:Предприятие», используется метод НайтиПоКоду.
Проанализируем пример кода с поиском счета по маске кода:
Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01");
Если Не Счет.Пустая() Тогда
// Счет найден и готов к использованию в логике программы
Иначе
// Обработка ситуации, когда счет не найден в базе
КонецЕсли;
Важные нюансы метода НайтиПоКоду:
Неопределено при отсутствии счета. Вместо этого возвращается пустая ссылка данного плана счетов, поэтому результат поиска всегда нужно проверять методом .Пустая().Выясним, как правильно обращаться к счетам при формировании запросов к регистрам бухгалтерии или виртуальным таблицам. Существует два основных подхода.
Вариант А: Использование функции ЗНАЧЕНИЕ в языке запросов
Если требуется жестко зафиксировать предопределенный счет непосредственно в тексте запроса, используется конструкция ЗНАЧЕНИЕ(). Важно помнить, что имя предопределенного счета внутри функции указывается без кавычек:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстаток Дт КАК ОстатокНаКассе
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.КассаОрганизации))) КАК ХозрасчетныйОстатки";
Вариант Б: Передача счета через параметры запроса
Более гибким решением является передача ссылки на счет в качестве параметра. Это позволяет передавать как предопределенные, так и выбранные пользователем счета:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстатокДт КАК ОстатокНаСчете
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет В ИЕРАРХИИ (&СчетУчета)) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("СчетУчета", ПланыСчетов.Хозрасчетный.КассаОрганизации);
Использование оператора В ИЕРАРХИИ позволяет автоматическки учесть не только сам счет, но и все подчиненные ему субсчета, что особенно критично для групповых счетов верхнего уровня. Для интерактивной проверки и отладки таких запросов с выбором групп в параметрах подойдёт консоль запросов с возможностью выбора групп в параметрах.