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

Ключевые слова: конфигурация, обмен, cf, обновление, УРБД

Как сохранить рабочую конфигурацию из конфигуратора знают все, но это не всегда удобно. Мне понадобилось сохранять рабочую конфигурацию и тут-же этот файл обрабатывать. Предлогаю простую процедуру:

// функция сохраняет рабочую конфигурацию в файл, в случае успеха возвращает Истина
// параметры:
//    Логин - имя пользователя с правами на админисирирование БД
//    Пароль - строка пароля
//    ИмяФайла - полное имя файла для сохранения конфигурации, не обязательно.
//               по умолчанию использует каталог временных файлов и имя 1Cv8.cf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспорт
    результат = Ложь;
    
    Если ИмяФайла = "" Тогда
        ИмяФайла = КаталогВременныхФайлов() + "1Cv8.cf";        
    КонецЕсли;
    
    СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
    Если Лев(СтрокаБазы, 5) = "File=" Тогда
        // файловый вариант
        СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) - 6);
    Иначе
        // серверный вариант пока не готов...
                // может кто допишет?
        возврат Ложь;
    КонецЕсли;
    
    ВыбФайл = Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
    Иначе
        Сигнатура = "";
    КонецЕсли;
    
    СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы
                + ?(Логин = "", "", " /N " + Логин)
                + ?(Пароль = "", "", " /P " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
                
    //            
    // КомандаСистемы (СтрокаЗапуска); не работает!!!!! из-за кавычек в параметрах
    // приходиться  идти кругом...
    // зато можно избежать черного окошка
    //
    WshShell = Новый COMОбъект("WScript.Shell");
    WshShell.Run(СтрокаЗапуска, 0, Истина);
    
    ВыбФайл = Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
        Если Сигнатура <> НоваяСигнатура Тогда
            Результат = Истина;
        КонецЕсли;            
    КонецЕсли;
    
    Возврат Результат;
КонецФункции


ну и пример использования (работает если нет пароля):

Функция  ЗаписатьКонфигурациюВФайл(ИмяФайла="")
    Результат = Ложь;
    ВыбФайл = Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        Если ВыбФайл.ЭтоКаталог() Тогда
            ИмяФайла="";
        КонецЕсли;
    КонецЕсли;
    
    Попытка
        Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
        Логин = "";
        Пароль = "";
        Если Массив.Количество() > 0 тогда
            Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
            Логин = Пользователь.Имя;
            Если Пользователь.ПарольУстановлен Тогда
                // тут нужно получить пароль, лучше интерактивно
                 // но лично мне это совсем не нужно
                Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
                Возврат Ложь;
            КонецЕсли
        КонецЕсли;
        
        Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
        Если не Результат Тогда
            Предупреждение("Конфигурация не сохранена");
        Иначе
            Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
        КонецЕсли;
        
    Исключение
        Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
        Возврат Ложь;
    КонецПопытки;
    
    Возврат Результат;
КонецФункции


необходимо зарегистрироваться для просмотра ссылки