Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обновление обработки ПриОткрытии

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

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

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

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

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

В (8) говорилось о толстом клиенте.
   flcy
 
16 - 31.07.20 - 14:46
(15) Есть реквизит обработка, он передаёт саму заменяемую обработку, если обойтись перем обработка, то он вываливается с ошибкой Значение не является значением объектного типа (ПолучитьОбъект)
На счет НаСервере, НаКлиенте, это просто событие при открытии
   flcy
 
17 - 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)
&НаСервере
Процедура ПриОткрытииНаСервере()
.....

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.