Как перенести описания по выбранным товарам из копии базы в рабочую?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей
← На главную

В процессе работы с программами 1С, такими как УТ 11.4, нередко возникают ситуации, когда данные в рабочей базе оказываются повреждены или некорректно изменены. Если ошибка обнаружена спустя значительное время, простым восстановлением из бэкапа не обойтись — за месяц в базе накопилось слишком много новых документов и движений. В таких случаях мы прибегаем к частичному восстановлению данных из копии. Сегодня мы детально разберем, как перенести многострочные описания товаров, сохранив при этом все остальные изменения в карточках номенклатуры.

Метод 1: Использование штатной загрузки из табличного документа

Этот способ является наиболее доступным для обычного пользователя или аналитика. Рассмотрим ситуацию, когда GUID (уникальные идентификаторы) товаров в обеих базах совпадают. Процесс состоит из двух этапов: подготовки данных и их загрузки.

Этап выгрузки:

В базе-копии воспользуемся Универсальным отчетом по справочнику Номенклатура. Настроим отчет таким образом, чтобы в колонках были только Ссылка (или Код/Артикул для сопоставления) и само Описание. Сформированный отчет сохраним в формате Excel.

Этап загрузки в рабочую базу:

  1. Откроем обработку Загрузка данных из табличного документа (в УТ 11 она обычно доступна в разделе НСИ и администрирование).
  2. Выберем режим загрузки в справочник Номенклатура.
  3. На вкладке настройки выберем поля для сопоставления. Если GUID идентичны, лучше всего сопоставлять по полю Ссылка.
  4. Для поля Описание укажем режим Замещать.

Важный нюанс с многострочностью:

Проанализируем техническую деталь: в 1С перевод строки обозначается символом ПС (код 10). Excel при работе с многострочным текстом может добавлять лишние символы возврата каретки (код 13). Перед загрузкой рекомендуется проверить, чтобы описание в ячейке Excel выглядело корректно. Если после загрузки вы видите "квадратики", необходимо программно заменить Символ(13)+Символ(10) на Символ(10).

Метод 2: Прямое обновление через COM-соединение

Если мы хотим избежать промежуточных файлов и гарантировать стопроцентную точность переноса многострочного текста (включая HTML-разметку, если описание хранится в этом формате), воспользуемся COM-соединением. Это программный метод, который мы реализуем через небольшую обработку в рабочей базе.

Разберем логику кода:


// Создаем подключение к базе-копии
ПараметрыСоединения = "Srvr=""ServerName"";Ref=""CopyBaseName"";Usr=""Admin"";Pwd=""123"";";
V83 = Новый COMОбъект("V83.ComConnector");
Попытка
    Соединение = V83.Connect(ПараметрыСоединения);
Исключение
    Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Выбираем товары, описания которых нужно восстановить
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.Ссылка.УникальныйИдентификатор КАК GUID
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = ЛОЖЬ";

Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл
    // Находим товар в копии по GUID
    GUIDСтрокой = Строка(Результат.GUID);
    ТоварВКопии = Соединение.Справочники.Номенклатура.ПолучитьСсылку(Соединение.NewObject("UUID", GUIDСтрокой));
    
    // Получаем актуальное описание из копии
    ОписаниеИзКопии = Соединение.ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТоварВКопии, "Описание");
    
    // Записываем в рабочую базу
    НоменклатураОбъект = Результат.Ссылка.ПолучитьОбъект();
    Если НоменклатураОбъект.Описание <> ОписаниеИзКопии Тогда
        НоменклатураОбъект.Описание = ОписаниеИзКопии;
        НоменклатураОбъект.Записать();
    КонецЕсли;
КонецЦикла;

Преимущество этого метода заключается в том, что Описание передается как объект типа Строка напрямую между базами, исключая искажения, которые могут возникнуть при чтении текстовых файлов или таблиц Excel.

Метод 3: Перенос через формат JSON

Рассмотрим современный и технологичный вариант переноса данных. Использование JSON предпочтительнее XML, так как этот формат легче читается и быстрее обрабатывается платформой 8.3.

Шаг 1: Выгрузка из копии. Напишем простой скрипт, который соберет структуру "GUID - Описание" и сохранит в файл.


ДанныеДляПереноса = Новый Соответствие;
// Заполняем соответствие: Ключ = GUID, Значение = ТекстОписания
// ... (код выборки номенклатуры)
ДанныеДляПереноса.Вставить(Строка(Выборка.Ссылка.УникальныйИдентификатор()), Выборка.Описание);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл("C:\temp\descriptions.json");
ЗаписатьJSON(ЗаписьJSON, ДанныеДляПереноса);
ЗаписьJSON.Закрыть();

Шаг 2: Загрузка в рабочую базу. Проанализируем полученный файл и обновим объекты.


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл("C:\temp\descriptions.json");
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Для Каждого Элемент Из Данные Цикл
    СсылкаНоменклатуры = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(Элемент.Ключ));
    Если Не СсылкаНоменклатуры.Пустая() Тогда
        Объект = СсылкаНоменклатуры.ПолучитьОбъект();
        Объект.Описание = Элемент.Значение;
        Объект.Записать();
    КонецЕсли;
КонецЦикла;

Этот метод исключает проблемы с переносом строк, так как сериализация в JSON автоматически экранирует спецсимволы.

Метод 4: Тонкая настройка универсального обмена (XML)

Существует мнение, что Универсальный обмен данными XML не подходит, если в базе изменились другие реквизиты. Выясним, почему это не так. Мы можем использовать обработку Выгрузка и загрузка данных XML (или настроить правила в Конвертации данных 2.0), соблюдая следующие правила:

Таким образом, программа найдет нужный товар, увидит, что, например, Наименование или СтавкаНДС уже заполнены, и пропустит их, обновив только Описание. Это "ювелирный" способ восстановления данных без вреда для текущей работы пользователей.

Риски при работе с форматированным текстом

Посмотрим на ситуацию в УТ 11 внимательнее. В этой конфигурации описание часто хранится как Форматированный документ (HTML-текст). Если вы используете обычную загрузку из Excel, вы рискуете потерять оформление (жирный шрифт, списки, цвета). В этом случае крайне рекомендуется использовать Метод 2 (COM) или Метод 4 (XML), так как они сохраняют внутреннюю HTML-структуру текста без преобразования её в "плоскую" строку.

Выяснив все нюансы, мы можем выбрать наиболее подходящий инструмент в зависимости от объема данных и квалификации специалиста. Для разового исправления нескольких позиций подойдет Excel, для массового восстановления данных со сложным форматированием — программные методы или XML-обмен.

← На главную