При адаптации типовых решений 1С под специфические нужды крупных холдингов часто возникает задача расширения аналитики плана счетов. Одной из самых трудоемких задач является изменение структуры кода счета, например, когда требуется добавить дополнительные цифры в субсчета (превратить 76.07.1 в 76.07.11). Несмотря на кажущуюся простоту, изменение длины кода в ПланыСчетов.Хозрасчетный требует комплексного подхода, затрагивающего не только основные свойства объекта, но и его стандартные реквизиты, а также вспомогательные механизмы индексации.
В данной статье мы разберем ситуацию, когда программист уже изменил общую длину кода и маску в свойствах плана счетов, но в пользовательском интерфейсе (в форме счета) маска остается старой и не позволяет вводить новые символы. Мы пройдем по всем шагам, необходимым для корректной реализации этой задачи.
Рассмотрим типовую ситуацию: вы увеличили длину кода в метаданных с 8 до 9 символов и изменили маску с @@@.@@.@ на @@@.@@.@@. Однако при открытии формы счета поле ввода кода по-прежнему ограничивает ввод восьмым символом. Проанализируем, почему это происходит.
В платформе 1С:Предприятие 8 свойства объекта метаданных (Плана счетов) имеют приоритет, но у каждого объекта есть так называемые Стандартные реквизиты. У плана счетов к ним относятся Код, Наименование, Родитель и другие. Проблема заключается в том, что маска ввода может быть продублирована в настройках самого стандартного реквизита Код.
Выясним причину, заглянув в дерево метаданных:
ПланыСчетов.Хозрасчетный.Код.Важно: Пока вы не измените маску в свойствах стандартного реквизита Код, форма счета будет навязывать пользователю старый формат ввода, что в конечном итоге приведет к невозможности записи новых субсчетов или ошибкам уникальности кода.
Просто поменять маску кода недостаточно для стабильной работы системы. Разберем по шагам, что еще необходимо сделать, чтобы учет не «поплыл».
Шаг 1. Изменение длины кода и порядка
В плане счетов 1С существует два ключевых поля, отвечающих за идентификацию и сортировку: ДлинаКода и ДлинаПорядка. Реквизит Порядок используется платформой для иерархического отображения счетов в отчетах. Если длина кода увеличивается, длина порядка должна быть увеличена пропорционально. В типовой ERP 2.4 часто встречается соотношение: ДлинаКода = 8, ДлинаПорядка = 9. При переходе на 9 символов кода рекомендуем установить длину порядка не менее 10 или 11 символов.
Шаг 2. Настройка кода быстрого выбора
В конфигурациях на базе ERP используется вспомогательный реквизит для удобства пользователей — КодБыстрогоВыбора. Если вы увеличили основной код, но оставили старую длину у кода быстрого выбора, пользователи не смогут вводить новые счета в документах «по памяти» (например, при вводе в поле выбора счета). Найдите этот реквизит в списке обычных реквизитов плана счетов и увеличьте его длину до 9 символов.
Шаг 3. Пересчет порядка существующих счетов
После изменения метаданных необходимо обновить поле Порядок для всех записей в базе данных. Если этого не сделать, новые счета с длинными кодами могут сортироваться некорректно относительно старых. Для этого можно воспользоваться несложным кодом в обработке:
Выборка = ПланыСчетов.Хозрасчетный.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектСчета = Выборка.ПолучитьОбъект();
// При записи платформа автоматически пересчитает Порядок
// на основании нового кода и установленной маски.
ОбъектСчета.Записать();
КонецЦикла;
Рассмотрим подробнее, с какими сложностями может столкнуться компания после внесения таких изменений. Изменение плана счетов — это одна из самых «опасных» модификаций типовой конфигурации.
1. Конфликты при обновлении
При каждом обновлении конфигурации через «Поддержку», система будет пытаться вернуть стандартную длину кода и маску. Вам придется вручную контролировать эти настройки в окне сравнения и объединения. Если случайно разрешить системе вернуть типовые значения, вы рискуете «обрезать» коды уже созданных счетов, что приведет к потере ссылочной целостности и краху бухгалтерских итогов.
2. Проблемы обмена с «1С:Бухгалтерия 3.0»
Типовая ERP часто работает в связке с БП 3.0. В БП длина кода остается стандартной (8 символов). Если вы выгрузите документ со счетом 76.07.11 (длина 9), то при загрузке в БП система либо не найдет такой счет, либо обрежет его до 76.07.1. Проанализируем последствия: суммы по разным субсчетам ERP схлопнутся на одном субсчете в БП, что сделает сверку данных невозможной. Вам потребуется модифицировать правила обмена в «Конвертации данных».
3. Влияние на регламентированную отчетность
Алгоритмы заполнения Декларации по НДС, Баланса и других отчетов в ERP часто опираются на маски счетов. Например, код может проверять вхождение счета в группу по первым пяти символам или искать конкретные субсчета по жестко заданным шаблонам. После внедрения 76.07.11 нужно убедиться, что суммы по этому счету попадают в нужные строки отчетности. Рассмотрим пример проверки:
// Пример логики, которая может сломаться
Если Лев(Счет.Код, 8) = "76.07.1" Тогда
// Обработка данных
КонецЕсли;
В данном случае условие сработает, но если в алгоритме зашита проверка на точное соответствие длине или поиск по строгому количеству точек, данные могут быть проигнорированы.
Прежде чем менять структуру плана счетов, проанализируем, можно ли решить задачу иначе. Программисты часто рекомендуют два пути, которые не требуют «взлома» маски:
@@@.@@.@ позволяет использовать буквы. Вместо 76.07.11 можно использовать 76.07.А, 76.07.Б и так далее. Это сохранит длину кода в рамках 8 символов и избавит от проблем с обновлением и обменами.76.07.11 и 76.07.12 требуется для выделения типов аренды или арендодателей, правильнее будет добавить на счет 76.07.1 новое субконто (аналитику). Это штатный механизм 1С, который не требует изменения структуры кода и поддерживается всеми отчетами.Таким образом, мы выяснили, что основной причиной проблемы с маской в форме счета является настройка Стандартных реквизитов. Исправив её, вы получите возможность вводить длинные коды. Однако помните о необходимости пересчета поля Порядок, расширения КодаБыстрогоВыбора и тщательного тестирования обменов с внешними системами. Выполняйте такие изменения только в том случае, если использование аналитики (субконто) или буквенных кодов категорически не подходит для целей учета вашей организации.