Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен между базами Состояние()
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Veizdem
Добрый день, есть самописная конфигурация (не мной) тянущаяся с 7.7 до 8.3 версии, приложение обычное, но были попытки переводить его в управляемое, так что теперь это комбайн из обычного приложения, в котором местами есть управляемые формы. Так вот, задача имея форму управляемого приложения в обработке, которая делает обмен между базами, вывести в строку состояния обычного приложения (или окошко состояния, не важно) при помощи метода Состояние() прогресс самого обмена, условно, видеть хотя бы какой процент имеющихся изменений в файле обмена изменений уже обработаны (при загрузке) или же наоборот уже записаны в файл (при выгрузке). Есть ли вообще такая возможность и если да, то каким способом делается?
Vofka
Надо куда-то писать прогресс, а в форме периодически опрашивать то, куда он пишется.
logist
Написать код серверной части таким образом, что бы можно было вызывать его "порциями" с клиента, на клиенте - между порциями отображать изменение состояния.

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

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

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

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


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

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