Как правильно изменить типовой документ в 1С:Бухгалтерии и сохранить возможность обновления?

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

Часто в процессе доработки конфигурации БухгалтерияПредприятия разработчики сталкиваются с дилеммой: функционала типового документа КорректировкаДолга недостаточно, а любые изменения влекут за собой сложности при последующих обновлениях от вендора. Разберем, как подойти к этой задаче, оценим риски и рассмотрим возможные пути реализации.

Анализ последствий изменения объектов конфигурации

Прежде чем приступать к изменению имени типового документа или снятию его с поддержки, важно осознать масштаб проблемы. В платформе 1С объект метаданных обладает внутренним уникальным идентификатором ID. Даже если вы переименуете документ, система сравнения при обновлении будет опираться на ID, что приведет к сопоставлению вашего измененного документа с типовым. Это чревато конфликтами объединения, ошибками в коде и некорректной работой отчетов.

Кроме того, при изменении типа объекта вы столкнетесь со следующими проблемами:

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

Вариант 1: Снятие с поддержки и переименование

Если вы твердо решили идти по пути изменения существующего объекта, то алгоритм действий на копии базы выглядит следующим образом:

  1. Снимите конфигурацию с поддержки (или конкретный объект с поддержки).
  2. Измените имя объекта метаданных в Конфигураторе.
  3. Выполните обновление конфигурации поставщиком.

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

Вариант 2: Использование документа «Операция (бухгалтерский учет)»

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

  1. Разработайте внешнюю обработку или документ-заменитель, который будет выполнять необходимые расчеты и формировать проводки.
  2. Перенесите все накопленные данные из старого КорректировкаДолга в документ ОперацияБух.
  3. Произведите замену ссылок в базе данных, чтобы другие объекты ссылались на документ ОперацияБух.
  4. Прибейте (удалите из конфигурации) старый документ.

Этот подход делает решение максимально независимым от будущих изменений типовой конфигурации, так как ОперацияБух — это стабильный объект, предназначенный для ручных и автоматизированных бухгалтерских записей.

Вариант 3: Расширения конфигурации как современный стандарт

Рассмотрим более современный способ — использование расширений. Вместо того чтобы менять основной КорректировкаДолга, вы можете:

  1. Создать новый документ в расширении конфигурации с необходимой логикой.
  2. В расширении переопределить формы типового документа КорректировкаДолга, сделав их скрытыми для пользователя или перенаправив открытие на ваш новый документ.
  3. Использовать расширение для внедрения нового функционала, сохраняя основной код конфигурации в «чистом» виде.

Такой подход позволяет обновлять типовую конфигурацию в автоматическом режиме, не переживая о сохранности ваших доработок.

Практические рекомендации

При необходимости работы с движениями документа, используйте программный доступ к регистрам. Рассмотрим пример записи движений:


// Пример переноса движений в регистры
НаборЗаписей = РегистрыНакопления.ВашиРегистры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
НаборЗаписей.Прочитать();
// ... заполнение движений ...
НаборЗаписей.Записать(Истина);

Анализируя ситуацию, мы видим, что наиболее безопасным является отказ от изменения типовых метаданных. Если функционала не хватает, всегда старайтесь реализовать его через расширения или отдельные документы-спутники. Манипуляции с переименованием объектов, находящихся на поддержке, — это крайняя мера, которая требует высокого уровня экспертизы и тщательного планирования процесса обновления в будущем.

← На главную