RE: Как перенести файлы из справочника расширения в справочник основной конфигурации

#34023
bot_avaOdin — Одинэсник
Участник

    Александр, привет!

    Ситуация типовая при развитии конфигурации и появлении в основной конфигурации собственных объектов, которые ранее были реализованы в расширении. В вашем случае — справочник присоединённых файлов для документа «Списание запасов» появился в основной конфигурации, а в расширении остался свой аналог. Нужно перенести данные из расширения в основной справочник.

    Рассмотрим алгоритм переноса с использованием возможностей БСП и стандартных механизмов 1С.

    ### Общий подход

    1. **Подготовка:**
    — Убедитесь, что в базе есть доступ к обоим справочникам:
    — Расширение: `Справочник.СписаниеЗапасовПрмсоединенныеФайлы`
    — Основная конфигурация: `Справочник.ПрисоединенныеФайлы` (или аналогичный справочник из основной конфигурации)
    — Проверьте структуру реквизитов и соответствие полей, чтобы корректно перенести данные.

    2. **Создание обработки переноса:**
    — Создайте временную обработку (например, в виде внешней обработки или встроенной обработки в конфигурации).
    — В обработке переберите все записи из справочника расширения.
    — Для каждой записи создайте новую запись в справочнике основной конфигурации.
    — Скопируйте все необходимые реквизиты, включая бинарные данные файлов.

    3. **Особенности работы с файлами в БСП:**
    — В БСП присоединённые файлы обычно хранятся в объекте `ПрисоединенныеФайлы` (например, через подсистему «Присоединенные файлы»).
    — Для работы с файлами используйте стандартный механизм БСП — объекты `ПрисоединенныеФайлы.ФайлыОбъекта`.
    — При переносе файлов нужно создать объекты присоединённых файлов для нового владельца (документа «Списание запасов» из основной конфигурации).

    ### Примерный код переноса (1С:Предприятие 8.x, управляемое приложение)

    Процедура ПеренестиПрисоединенныеФайлыИзРасширенияВОсновнуюКонфигурацию() Экспорт
        // Получаем выборку из справочника расширения
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
            Ссылка,
            Владелец,
            ИмяФайла,
            ДанныеФайла,
            Комментарий
        ИЗ
            Справочник.СписаниеЗапасовПрмсоединенныеФайлы";
    
        Выборка = Запрос.Выполнить().Выбрать();
    
        Пока Выборка.Следующий() Цикл
            // Создаем новый объект присоединенного файла в основной конфигурации
            НовыйФайл = Справочники.ПрисоединенныеФайлы.СоздатьЭлемент();
            
            // Заполняем реквизиты
            НовыйФайл.Владелец = Выборка.Владелец; // Документ "Списание запасов" из основной конфигурации
            НовыйФайл.ИмяФайла = Выборка.ИмяФайла;
            НовыйФайл.Комментарий = Выборка.Комментарий;
            
            // Для хранения файла используем стандартный механизм БСП
            НовыйФайл.Файл = Новый ФайлНаСервере;
            НовыйФайл.Файл.Установить(Выборка.ДанныеФайла);
            
            // Записываем элемент
            НовыйФайл.Записать();
        КонецЦикла;
    
        Сообщить("Перенос присоединенных файлов завершен.");
    КонецПроцедуры
    

    ### Важные моменты

    — **Владелец файла:** В расширении владелец — это документ из расширения, в основной конфигурации — документ из основной конфигурации. Нужно убедиться, что ссылки на владельца корректны и соответствуют объектам основной конфигурации.
    — **Данные файла:** В расширении данные файла могут храниться в реквизите типа `ХранилищеЗначения` или `БинарныеДанные`. В основном справочнике БСП обычно используется реквизит `Файл` типа `ФайлНаСервере` или `ХранилищеЗначения`. В примере выше показано, как перенести данные в `ФайлНаСервере`.
    — **Права доступа:** Убедитесь, что у пользователя, запускающего перенос, есть права на чтение из расширения и запись в основной справочник.
    — **Резервное копирование:** Перед переносом обязательно сделайте резервную копию базы.

    ### Альтернативный вариант — через выгрузку/загрузку данных

    Если прямой программный перенос затруднён, можно:

    1. Выгрузить данные из справочника расширения в XML.
    2. Подготовить правила загрузки, чтобы загрузить данные в основной справочник.
    3. Загрузить данные в основную конфигурацию.

    Но этот способ сложнее и менее удобен, чем программный перенос.

    ### Рекомендации

    — Используйте стандартные методы БСП для работы с присоединёнными файлами — это обеспечит корректность и совместимость.
    — Если структура справочников сильно отличается, возможно, потребуется дополнительная обработка данных.
    — После переноса протестируйте работу с файлами в документах.

    Рекомендую посмотреть здесь:
    https://infostart.ru/public/1498871/ — пример подключения и работы с присоединёнными файлами через БСП.

    Если нужно, могу помочь с конкретным кодом под вашу конфигурацию.

    Если нужна помощь с конкретным кодом или деталями — обращайтесь!

    База знаний 1С