Версия для печати темы (https://pro1c.org.ua/index.php?s=1bd42b99515dca1fd0e493d391e7a860&showtopic=33316)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Обмен между базами Состояние()

Автор: Veizdem 18.11.16, 10:33

Добрый день, есть самописная конфигурация (не мной) тянущаяся с 7.7 до 8.3 версии, приложение обычное, но были попытки переводить его в управляемое, так что теперь это комбайн из обычного приложения, в котором местами есть управляемые формы. Так вот, задача имея форму управляемого приложения в обработке, которая делает обмен между базами, вывести в строку состояния обычного приложения (или окошко состояния, не важно) при помощи метода Состояние() прогресс самого обмена, условно, видеть хотя бы какой процент имеющихся изменений в файле обмена изменений уже обработаны (при загрузке) или же наоборот уже записаны в файл (при выгрузке). Есть ли вообще такая возможность и если да, то каким способом делается?

Автор: Vofka 18.11.16, 11:04

Надо куда-то писать прогресс, а в форме периодически опрашивать то, куда он пишется.

Автор: logist 18.11.16, 11:07

Написать код серверной части таким образом, что бы можно было вызывать его "порциями" с клиента, на клиенте - между порциями отображать изменение состояния.

Цитата(Vofka @ 18.11.16, 12:04) *
а в форме периодически опрашивать то, куда он пишется.

Только в том случае если выполнение будет в фоновом задании, иначе форма будет ждать пока завершится серверная часть, выполнять что-то паралельно не будет.

Автор: Vofka 18.11.16, 11:14

Цитата(logist @ 18.11.16, 11:07) *
Только в том случае если выполнение будет в фоновом задании, иначе форма будет ждать пока завершится серверная часть, выполнять что-то паралельно не будет.

Верное замечание.

Автор: Veizdem 18.11.16, 11:46

Получение данных из файла выполняется таким образом:

&НаКлиенте
Процедура ПрочитатьИзмененияНаСервере(ИмяФайла)
    //Создать и проанализировать объект ЧтениеXML
    ЧтениеXML=Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ИмяФайла);
    //Создать объект ЧтениеСообщенияОбмена и начать чтение сообещиня
    ЧтениеСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    //Прочитать содержимое тела сообещения
    ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);
    //Закончить чтение сообщения и чтение XML
    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьИзменения(Команда)
    ИмяXMLФайла=РазархивироватьФайл(РабочийКаталог+ИмяЗагрузки);
    ПрочитатьИзмененияНаСервере(ИмяXMLФайла);
    Предупреждение("Чтение изменений завершено.",10);
КонецПроцедуры


А записывается в файл так:
&НаКлиенте
Процедура ЗаписатьИзмененияНаСервере(Узел,ИмяФайла)
    //Создать и проанализировать объект ЗаписьXML
    ЗаписьXML=Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла);
    //Создать объект ЗаписьСообщенияОбмена и начать запись сообщения.
    ЗаписьСообщения=ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML,Узел);
    //Записать содержимое тела сообщения обмена данными распределенной ИБ
    ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения);
    //Закончить запись сообщения и запись XML
    ЗаписьСообщения.ЗакончитьЗапись();
    ЗаписьXML.Закрыть();
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьИзменения(Команда)
    ИмяФайлаБезРасширения=Лев(ИмяВыгрузки,Найти(ИмяВыгрузки,".")-1);
    ИмяФайлаXML=РабочийКаталог+ИмяФайлаБезРасширения+".xml";
    ЗаписатьИзмененияНаСервере(ПолеВводаОтделение,ИмяФайлаXML);
    ЗаархивироватьФайл(РабочийКаталог+ИмяФайлаБезРасширения);
    ЗаписатьИзмененияНаСервере(ПолеВводаОтделение,ИмяФайлаXML);
    Предупреждение("Запись изменений завершена.",10);
КонецПроцедуры

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua