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

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

В процессе разработки или масштабной настройки учетных систем на базе «1С:Предприятие 8.3» часто возникает задача массового изменения плана счетов. Когда счет один или два, добавить виды субконто вручную не составляет труда. Однако если количество счетов исчисляется сотнями, ручной ввод становится неэффективным и чреват ошибками. В этой статье мы подробно разберем, можно ли программно сделать субконто предопределенными, какие ограничения накладывает платформа и какие существуют обходные пути для автоматизации этой задачи.

Анализ проблемы: Элемент vs Строка табличной части

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

  1. Предопределенный элемент (объект): Это запись в базе данных (например, конкретный вид субконто «Контрагенты» в Плане видов характеристик), которая жестко связана с объектом метаданных в конфигураторе. У такого объекта есть свойство ИмяПредопределенныхДанных.
  2. Предопределенное субконто (строка ТЧ): В плане счетов виды субконто хранятся в табличной части (обычно она называется ВидыСубконто). Признак предопределенности для такой строки означает, что эта строка была добавлена в Конфигураторе в окне редактирования счета.

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

Почему стандартный код не решает задачу полностью

Рассмотрим типичный пример кода, который часто используют для добавления субконто. Выясним причину, по которой он не позволяет установить признак предопределенности:


// Получаем объект счета для редактирования
СчетОбъект = СсылкаНаСчет.ПолучитьОбъект();

// Добавляем новую строку в табличную часть видов субконто
НовоеСубконто = СчетОбъект.ВидыСубконто.Добавить();
НовоеСубконто.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты;

// Установка признаков (учет по суммам, количеству и т.д.)
НовоеСубконто.Суммовой = Истина;
НовоеСубконто.ТолькоОбороты = Ложь;

// Попытка записи
СчетОбъект.Записать();

Этот код успешно добавит субконто на счет. Однако в пользовательском интерфейсе (и в метаданных) это субконто будет отображаться как обычное (не предопределенное). У него не будет «желтого шарика» в иконке, и его можно будет удалить вручную в режиме «Предприятие». Свойство Предопределенное у строки табличной части доступно только для чтения, и даже использование ОбменДанными.Загрузка = Истина не позволяет платформе игнорировать это ограничение.

Метод 1. Автоматизация через выгрузку конфигурации в XML

Поскольку нам нужно изменить именно метаданные (предопределенный состав субконто на счетах), а ручной ввод 500+ позиций неприемлем, рассмотрим самый эффективный способ автоматизации для версии 8.3 — работу с файлами конфигурации. Разберем этот процесс по шагам:

Шаг 1. Выгрузка файлов. В Конфигураторе выберите меню «Конфигурация» — «Выгрузить конфигурацию в файлы». Платформа создаст структуру папок, где каждый объект метаданных представлен в виде XML-файла.

Шаг 2. Анализ XML-структуры. Найдите файлы, соответствующие вашему плану счетов. Обычно они находятся в папке ChartsOfAccounts. Каждый счет, добавленный в конфигураторе, будет описан внутри XML. Нам интересен узел <ExtDimensionTypes>.

Шаг 3. Скриптовая обработка. Теперь мы можем написать внешнюю утилиту (например, на языке 1С, Python или PowerShell), которая просканирует эти XML-файлы и добавит нужные узлы. Пример того, как должен выглядеть блок субконто в XML-файле счета:


<ExtDimensionType>
    <Id>065a7f92-5e4d-4c3a-965d-327c1f238291</Id>
    <ItemType>ChartOfCharacteristicTypes.ВидыСубконтоХозрасчетные.Контрагенты</ItemType>
    <Sum>true</Sum>
    <Amount>false</Amount>
    <AccountingFlags/>
</ExtDimensionType>

Шаг 4. Загрузка изменений. После модификации файлов выполните обратную операцию: «Конфигурация» — «Загрузить конфигурацию из файлов». После обновления конфигурации базы данных все добавленные субконто станут предопределенными, так как они теперь прописаны в самой структуре метаданных.

Метод 2. Использование расширений конфигурации

Если ваша задача — добавить субконто в типовую конфигурацию (например, БП 3.0), которую нежелательно снимать с поддержки, рассмотрим вариант с расширениями. Это позволяет сохранить возможность автоматического обновления основной конфигурации.

  1. Создайте новое расширение.
  2. Перенесите в расширение нужные счета из плана счетов (команда «Добавить в расширение»).
  3. В расширении вы сможете визуально добавить субконто.

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

Метод 3. Программная связь через ИмяПредопределенныхДанных (для элементов ПВХ)

Иногда под «добавлением субконто» понимают создание самих видов субконто в Плане видов характеристик (ПВХ). Если вам нужно создать новый вид характеристики и сделать его предопределенным программно (что стало возможно в 8.3), используйте следующий алгоритм:


// Создаем новый элемент Плана видов характеристик
НовыйВид = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СоздатьЭлемент();
НовыйВид.Наименование = "РегиональныйКод";
НовыйВид.ТипЗначения = Новый ОписаниеТипов("Число");

// Устанавливаем связь с метаданными. 
// "РегиональныйКод" должен быть предварительно создан в Конфигураторе как предопределенный узел.
НовыйВид.ИмяПредопределенныхДанных = "РегиональныйКод";

НовыйВид.Записать();

Посмотрим на результат: если в Конфигураторе в ПВХ уже заведено имя «РегиональныйКод», но в режиме Предприятие запись еще не создана (или была удалена), этот код свяжет объект в базе данных с идентификатором в метаданных.

Выводы и рекомендации

Проанализировав возможности платформы, мы приходим к следующим выводам:

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

2. Для массового изменения (от 100 счетов и выше) оптимальным решением является использование механизма выгрузки/загрузки конфигурации в XML-файлы. Это позволяет использовать мощь регулярных выражений или скриптов для быстрой модификации структуры.

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

Рассмотренные подходы помогут вам сэкономить десятки часов рутинной работы и обеспечить корректное внедрение изменений в сложные учетные системы на платформе 1С.

← На главную