Каталог решений - Сохранение настроек обработки/отчета во внешних файлах. Пакетная обработка с разными вариантами настроек.

Сохранение настроек обработки/отчета во внешних файлах. Пакетная обработка с разными вариантами настроек.

Сохранение настроек обработки/отчета во внешних файлах. Пакетная обработка с разными вариантами настроек.

В наличии

Сохранение настроек обработки/отчета во внешних файлах. Пакетная обработка с разными вариантами настроек.

Категория:

Описание

Столкнулся с необходимостью сохранить настройки внешней обработки. В интеренете, в основном, есть варианты с использованием СохранитьЗначение. Так как мне нужно было в обработке сохранить несколько значений настроек, а потом их в определенной последовательности загрузить и выполнить обработку (пакетное задание), то данный вариант мне не совсем подходил. Сделал следующий вариант:

Процедура ОсновныеДействияФормыСохранитьВФайл(Кнопка)
    ДиалогОткрытияФайла  = Новый ДиалогВыбораФайла (РежимДиалогаВыбораФайла.ВыборКаталога);
    ДиалогОткрытияФайла.ПолноеИмяФайла     = "";
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок          = "Выберите каталог";
    Если ДиалогОткрытияФайла.Выбрать()Тогда
        Для каждого Реквизит из Метаданные().Реквизиты Цикл
            ЗначениеВФайл(ДиалогОткрытияФайла.Каталог+"\"+Реквизит.Имя+".dat",ЭтотОбъект[Реквизит.Имя]);
        КонецЦикла;
        ТабЗнач=Новый ТаблицаЗначений;
        ТабЧасть=ЭтотОбъект.Родители.Выгрузить();
        ЗначениеВФайл(ДиалогОткрытияФайла.Каталог+"\Родители.dat",ТабЧасть);
        ТабЧасть=ЭтотОбъект.Родители1.Выгрузить();
        ЗначениеВФайл(ДиалогОткрытияФайла.Каталог+"\Родители1.dat",ТабЧасть);
        ТабЧасть=ЭтотОбъект.Товары.Выгрузить();
        ЗначениеВФайл(ДиалогОткрытияФайла.Каталог+"\Товары.dat",ТабЧасть);
    КонецЕсли;    
КонецПроцедуры

Процедура ОсновныеДействияФормыЗагрузитьИзФайла(Кнопка)
    ДиалогОткрытияФайла  = Новый ДиалогВыбораФайла (РежимДиалогаВыбораФайла.ВыборКаталога);
    ДиалогОткрытияФайла.ПолноеИмяФайла     = "";
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок          = "Выберите каталог";
    Если ДиалогОткрытияФайла.Выбрать()Тогда
        Для каждого Реквизит из Метаданные().Реквизиты Цикл
            ЭтотОбъект[Реквизит.Имя]=ЗначениеИЗФайла(ДиалогОткрытияФайла.Каталог+"\"+Реквизит.Имя+".dat");
        КонецЦикла;
        ТабЗнач=Новый ТаблицаЗначений;
        ТабЧасть=ЗначениеИзФайла(ДиалогОткрытияФайла.Каталог+"\Родители.dat");
        ЭтотОбъект.Родители.Загрузить(ТабЧасть);
        ТабЧасть=ЗначениеИзФайла(ДиалогОткрытияФайла.Каталог+"\Родители1.dat");
        ЭтотОбъект.Родители1.Загрузить(ТабЧасть);
        ТабЧасть=ЗначениеИзФайла(ДиалогОткрытияФайла.Каталог+"\Товары.dat");
        ЭтотОбъект.Товары.Загрузить(ТабЧасть);
    КонецЕсли;    
КонецПроцедуры
 

Родители, Родители1 и Товары это табличные части обработки. Может их тоже можно не отдельно сохранять, а перебором как реквизиты (быстро не нашел как и сделал с именами табличных частей. Уверен, что должен быть вариан с получением списка табличных частей. Если кто знает такой вариант, — напишите в комментариях. Позже тоже хочу поискать, чтобы получить универсальных механизм для сохранения.).

Пользователь у меня сохраняет настройки обработки в определенную папку (C:\set\Х), где Х цифра от 1 до 30. Настройки перебираются последовательно с папки 1 до папки 30, если встречается папка где нет настроек, то обработка останавливается.

Процедура ОсновныеДействияФормыПакетнаяОбрабока(Кнопка)
    Для х=1 По 30 Цикл
        ИмяПапки="C:\set\"+Строка(х)+"\";
        Файл = Новый Файл (ИмяПапки+"Родители.dat");
        Если  Файл.Существует() Тогда
            ЗаполнитьНастройки(ИмяПапки);
            Обработать();
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Процедура ЗаполнитьНастройки(ИмяКаталога)
        Для каждого Реквизит из Метаданные().Реквизиты Цикл
            ЭтотОбъект[Реквизит.Имя]=ЗначениеИЗФайла(ИмяКаталога+Реквизит.Имя+".dat");
        КонецЦикла;
        ТабЗнач=Новый ТаблицаЗначений;
        ТабЧасть=ЗначениеИзФайла(ИмяКаталога+"Родители.dat");
        ЭтотОбъект.Родители.Загрузить(ТабЧасть);
        ТабЧасть=ЗначениеИзФайла(ИмяКаталога+"Родители1.dat");
        ЭтотОбъект.Родители1.Загрузить(ТабЧасть);
        ТабЧасть=ЗначениеИзФайла(ИмяКаталога+"Товары.dat");
        ЭтотОбъект.Товары.Загрузить(ТабЧасть);
КонецПроцедуры


has been added to your cart:
Оформление заказа