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