Как правильно скопировать документ в 1С 7.7 и избежать изменения существующих данных?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Выясним причину: почему затрагиваются старые документы

Проанализируем механику работы дерева метаданных в Конфигураторе 1С 7.7. Когда мы нажимаем комбинацию клавиш Ctrl+C на объекте, буфер обмена операционной системы получает слепок метаданных. Если после этого сразу изменить идентификатор (имя) или свойства журнала у выделенного объекта, не выполнив вставку (Ctrl+V), платформа воспринимает это как редактирование и переименование исходного документа.

В момент сохранения измененной конфигурации запускается реструктуризация таблиц информационной базы. Платформа обращается к общей таблице журнала документов _1SJOURN и перезаписывает ссылки на журнал для всех записей этого вида документа. В результате все ранее введенные пользователями документы визуально «переезжают» в новый журнал, а их поведение меняется.

Способ 1. Корректное копирование через дерево метаданных

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

  1. Откроем Конфигуратор и развернем дерево метаданных (меню «Конфигурация» — «Открыть конфигурацию»).
  2. Найдем исходный документ в ветке Документы, выделим его курсором и нажмем Ctrl+C (или пункт меню «Правка» — «Копировать»).
  3. Обязательно снимем выделение с исходного объекта: кликнем левой кнопкой мыши по самому корню ветки Документы.
  4. Нажмем сочетание клавиш Ctrl+V (или «Правка» — «Вставить»).
  5. Убедимся, что в самом низу списка документов появился новый объект с префиксом по умолчанию (например, Копия_ПеремещениеТоваров).
  6. Откроем свойства созданной копии и зададим требуемый уникальный идентификатор, синоним, комментарий и журнал документов.
  7. Сохраним конфигурацию. Так как оригинальный объект не был затронут, реструктуризация коснется только добавления новой таблицы, а существующие данные останутся неизменными.

Способ 2. Доработка через пустую базу и объединение конфигураций

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

  1. Сохраним файл конфигурации рабочей базы (меню «Конфигурация» — «Сохранить конфигурацию» в файл с расширением .md).
  2. Создадим новый пустой каталог на диске и подключим его как отдельную базу в списке запуска 1С 7.7.
  3. Запустим пустую базу в режиме Конфигуратора и загрузим сохраненный файл (меню «Конфигурация» — «Загрузить конфигурацию»).
  4. В пустой базе без данных выполним копирование документа, настроим нужные экранные формы, реквизиты и модули.
  5. Сохраним изменения в пустой базе, после чего вернемся в рабочую конфигурацию.
  6. В рабочей базе выберем меню «Конфигурация» — «Объединение конфигураций», укажем файл .md из тестовой базы, отметим флагом только новый документ и выполним объединение.

Настройка сопутствующих механизмов после создания копии

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

  1. Глобальный модуль: логика типовых механизмов (проверка запрета редактирования, формирование стандартных отчетов, сервис печати, автозаполнение) часто использует явную проверку вида через условие вида:
    
    Если Документ.Вид() = "ПеремещениеТоваров" Тогда
        // Вызов специализированной процедуры
    КонецЕсли;
    
    Найдем все вхождения старого идентификатора в глобальном модуле и при необходимости добавим обработку нового документа.
  2. Последовательности документов: если документ должен двигать партионный или суммовой учет, перейдем в ветку Последовательности в дереве метаданных и включим новый объект в состав соответствующих последовательностей.
  3. Графы журналов: откроем свойства журнала, в котором должен отображаться новый документ, перейдем во вкладку «Графы» и свяжем реквизиты созданного объекта (сумма, склад, контрагент) с соответствующими колонками журнала.
  4. Наборы прав и интерфейсы: назначим права доступа на чтение, запись и проведение документа для пользовательских ролей в ветке Наборы прав, а также выведем команду создания или вызова журнала в ветке Интерфейсы.
  5. Модуль самого документа: выполним поиск внутри текста модуля документа по старому идентификатору, чтобы обновить имена внутренних таблиц, заголовки печатных форм и вызовы процедур вида глПроверка....
← На главную