Имя: Пароль:
1C
1С v8
Обновление обработки ПриОткрытии
0 Flc
 
31.07.20
07:24
Добрый день.
Задача такая, неонеобходи в событии ПриОткрытии, добавить проверку обработки на актуальность. Обработка находится в справочнике дополнительные печатные формы и обработки.
Проверка осуществляется через сравнение версий, реквизит «версия».
Делаю так
Файл = Новый ДвоичныеДанные("C:\Users\Desktop\ВнешняяОбработка\Загрузка.epf");
    
ХранилищеФайла = Новый ХранилищеЗначения(Файл);
    
Обработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Загрузка");
Обработка.ПолучитьОбъект();
Обработка.Наименование = "Загрузка V2";

Обработка.ХранилищеОбработки = ХранилищеФайла;
Обработка.Записать();
Но видимо, что то делаю не так (
Есть у кого то идеи? Может, кто то уже подобное делал.
1 Злопчинский
 
31.07.20
09:18
(0) "Но видимо, что то делаю не так"

эээ как бэ логика подсказывает, что "Проверка осуществляется через сравнение версий, реквизит «версия»." - это в твоем коде ГДЕ?
2 flcy
 
31.07.20
11:41
(1)

Файл = Новый ДвоичныеДанные("C:\Users\Desktop\ВнешняяОбработка\Загрузка.epf");
ФайлВерсий = "C:\Users\Desktop\ВнешняяОбработка\ВерсияОбработки.txt";
    
ХранилищеФайла = Новый ХранилищеЗначения(Файл);
    
Обработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Загрузка");
Обработка.ПолучитьОбъект();
Обработка.Наименование = "Загрузка V2";
Версия = Новый ЧтениеТекста(
    ФайлВерсий,    КодировкаТекста.UTF8, , , );        
    Пока Истина Цикл
        ВерсияФайл = Версия.ПрочитатьСтроку();
        Если ВерсияФайл = Неопределено Тогда
            Прервать;
        ИначеЕсли Обработка.Версия<>ВерсияФайл Тогда                
            Обработка.ХранилищеОбработки = ХранилищеФайла;
            Обработка.Записать();                    
        КонецЕсли;    
КонецЦикла;
3 ZDenis
 
31.07.20
11:53
(2) Во-первых не надо менять наименование обработки, иначе эта проверка до первой смены версии. Меняй реквизит "версия".
Во-вторых, получать объект надо в переменную.
В-третьих в ПриОткрытии пересохранять уже поздно, разве что предупредить что версия изменилась.
4 flcy
 
31.07.20
12:17
(3) Это всё понятно, даже если я Обработка.Наименование = "Загрузка V2"; в условие добавлю при Обработка.Записать(); выдаёт ошибку Поле объекта недоступно для записи (ХранилищеОбработки). Строчка Обработка.ХранилищеОбработки = ХранилищеФайла;
5 Kesim
 
31.07.20
12:45
(4) при открытии  - на клиенте - .хранилище
6 flcy
 
31.07.20
12:53
(5) Несовсем понял
7 Галахад
 
гуру
31.07.20
13:24
Клиент толстый?
8 flcy
 
31.07.20
13:29
(7) Да
9 Галахад
 
гуру
31.07.20
13:54
(8) При толстом, в обычном приложении должно работать.
10 ZDenis
 
31.07.20
13:58
(8) Ты (3) точно внимательно прочитал?
11 Галахад
 
гуру
31.07.20
14:06
(10) Не очень. А что там?
12 Ёпрст
 
31.07.20
14:07
(2)

вот так напиши и полетит


//Обработка.ПолучитьОбъект();
Обработка = Обработка.ПолучитьОбъект();
13 Галахад
 
гуру
31.07.20
14:16
(12) О, точно. :-)
14 flcy
 
31.07.20
14:27
(12) ПриОткрытииНаСервере(Обработка);

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Текст: fc9d4aa6-d25f-11ea-8aa3-448a5b83340d
15 ZDenis
 
31.07.20
14:31
(14) Что за новая процедура затесалась в ветку?
Можешь сразу все козыри раскрыть?

В (8) говорилось о толстом клиенте.
16 flcy
 
31.07.20
14:46
(15) Есть реквизит обработка, он передаёт саму заменяемую обработку, если обойтись перем обработка, то он вываливается с ошибкой Значение не является значением объектного типа (ПолучитьОбъект)
На счет НаСервере, НаКлиенте, это просто событие при открытии
17 flcy
 
31.07.20
19:53
(15)
&НаСервере
Процедура ПриОткрытииНаСервере(Обработка)
Файл = Новый ДвоичныеДанные("C:\Users\Users\Documents\Обработки\ОсновнаяОбработка\Обработка.epf");
ФайлВерсий = "C:\Users\Users\Documents\Обработки\ОсновнаяОбработка\ВерсияОбработки.txt";
    
ХранилищеФайла = Новый ХранилищеЗначения(Файл);
    
Обработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Загрузка V2");
Обработка =  Обработка.ПолучитьОбъект();

Версия = Новый ЧтениеТекста(
    ФайлВерсий,    КодировкаТекста.UTF8, , , );        
    Пока Истина Цикл
        ВерсияФайл = Версия.ПрочитатьСтроку();
        Если ВерсияФайл = Неопределено Тогда
            Прервать;
        ИначеЕсли Обработка.Версия<>ВерсияФайл Тогда                
            Обработка.ХранилищеОбработки = ХранилищеФайла;
            Обработка.Наименование = "Загрузка V2";
            Обработка.Версия = "5.0";
            Обработка.Записать();            
        КонецЕсли;    
КонецЦикла;
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии()
    ПриОткрытииНаСервере(Обработка);    
КонецПроцедуры

Как то так, но ошибка есть(
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Текст: fc9d4aa6-d25f-11ea-8aa3-448a5b83340d
18 Ёпрст
 
31.07.20
20:20
(15)
&НаСервере
Процедура ПриОткрытииНаСервере()
.....

&НаКлиенте
Процедура ПриОткрытии()
    ПриОткрытииНаСервере();    
КонецПроцедуры