Имя: Пароль:
1C
1С v8
Сохранение настроек в файл и чтение из него
0 Фантазер
 
31.07.22
22:56
Была обработка обычных форм. В ней настройки табличной части сохранялись в текстовый файл, потом из него же можно было и прочитать.
Сейчас адаптирую для управляемых - вообще не въеду - как оно должно работать? База клиента на SQL, моя тестовая - в файловом режиме у меня. У меня такой код работает, у клиента - нет:

/////////////////////////////////////////
&НаКлиенте
Процедура ФайлНастроекНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайла.Заголовок = "Выберите файл настроек";
    ДиалогВыбораФайла.Фильтр    = "Файл TXT(*.TXT)|*.TXT";
    ДиалогВыбораФайла.Выбрать();
    ИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла;
    Объект.ФайлНастроек = ИмяФайла;      
КонецПроцедуры

/////////////////////////////////////////
&НаКлиенте
Процедура ПрочитатьНастройкиИзФайла(Команда)
    ПрочитатьНастройкиИзФайлаНаСервере()
КонецПроцедуры

&НаСервере
Процедура ПрочитатьНастройкиИзФайлаНаСервере()
    Объект.СопоставленияПлатежей.Очистить();
    ТекНастройки = Новый ЧтениеТекста;    
    ТекНастройки.Открыть(Объект.ФайлНастроек);                  
    СтрокаНастроек = ТекНастройки.ПрочитатьСтроку(); // первая строка - шапка
    попытка
        СтрокаНастроек = ТекНастройки.ПрочитатьСтроку(); // наша вторая строка
    Исключение
        Сообщить("Не прочитался файл");
    КонецПопытки;    
        
    //"НомерСтроки, Контрагент, ДоговорКонтрагента,СтатьяДвиженияДенежныхСредств,МаскаНазначениеПлатежа"
    Пока СтрокаНастроек <> Неопределено Цикл //строки читаются до символа перевода строки  
        МассивСтроки = СтрРазделить(СтрокаНастроек, "&");        
        СтрСопоставленияПлатежей = Объект.СопоставленияПлатежей.Добавить();
        СтрСопоставленияПлатежей.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(МассивСтроки[1]);
        СтрСопоставленияПлатежей.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(МассивСтроки[2]);
        СтрСопоставленияПлатежей.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(МассивСтроки[3]);
        СтрСопоставленияПлатежей.МаскаНазначениеПлатежа = МассивСтроки[4];
        СтрокаНастроек = ТекНастройки.ПрочитатьСтроку();                     
    КонецЦикла;
КонецПроцедуры

/////////////////////////////////////////
&НаКлиенте
Процедура СохранитьНастройкиВФайл(Команда)    
    СохранитьНастройкиВФайлНаСервере();
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиВФайлНаСервере()
    Если Объект.СопоставленияПлатежей.Количество()= 0 тогда
        Сообщить("Настройки пустые, сохраняться не будут");
    КонецЕсли;    
    Если ЗначениеЗаполнено(Объект.ФайлНастроек) тогда
        ТекНастройки = Новый ТекстовыйДокумент;
        РазделительПолей = "&";
        ТекНастройки.ДобавитьСтроку("НомерСтроки, Контрагент, ДоговорКонтрагента,СтатьяДвиженияДенежныхСредств,МаскаНазначениеПлатежа");        
        Для Каждого СтрСопоставленияПлатежей Из Объект.СопоставленияПлатежей Цикл        
            НоваяСтрокаФайла =  Строка(СтрСопоставленияПлатежей.НомерСтроки) + РазделительПолей +
            Строка(?(ЗначениеЗаполнено(СтрСопоставленияПлатежей.Контрагент),СтрСопоставленияПлатежей.Контрагент, "---" )) + РазделительПолей +                                 
            Строка(?(ЗначениеЗаполнено(СтрСопоставленияПлатежей.ДоговорКонтрагента),СтрСопоставленияПлатежей.ДоговорКонтрагента, "---")) + РазделительПолей +                                 
            Строка(?(ЗначениеЗаполнено(СтрСопоставленияПлатежей.СтатьяДвиженияДенежныхСредств), СтрСопоставленияПлатежей.СтатьяДвиженияДенежныхСредств, "---")) + РазделительПолей +                                 
            Строка(СтрСопоставленияПлатежей.МаскаНазначениеПлатежа);                                
            ТекНастройки.ДобавитьСтроку(НоваяСтрокаФайла);
        КонецЦикла;    
        
        //ТекНастройки.Записать(СтрЗаменить(Объект.ФайлНастроек, ".txt", "_" + ФОрмат (ТекущаяДата(), "ДФ=yyyy_MM_dd_hh_mm"))+ ".txt");
        ТекНастройки.Записать(Объект.ФайлНастроек);
    иначе
        Сообщить("Не прочитался файл");
        
    КонецЕсли;
КонецПроцедуры
2 H A D G E H O G s
 
31.07.22
23:11
Жестяночка
3 Фантазер
 
31.07.22
23:17
(1) Из описалова я это уже понял. Не понял как использовать сохранение через хранилище.
4 Фантазер
 
31.07.22
23:58
Да, чего-то затупил. Стоило все перенести в процедуры НаКлиенте и все заработало. Видимо я все усложнил.
5 6awkup_true
 
01.08.22
09:04
неудивительно, что работать на сервере не будет. указываешь путь к файлу на клиентской машине, а на сервере пытаешься по этому пути открыть. а файла то нет. нужно читать файл на клиенте, помещать в врем хранилище и уже потом производить чтение содержимого на сервере
6 Фантазер
 
01.08.22
10:29
(5) Тупил. Ночь на дворе была, жарко. Спустя час дошло )))
7 VladZ
 
01.08.22
10:33
Жесть.
Программист всегда исправляет последнюю ошибку.