Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Пауза в коде 2 страниц V  < 1 2          
Sharzem Подменю пользователя
сообщение 15.07.16, 22:45
Сообщение #21

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Также вот столкнулся с проблемой паузы.
Запретили использование как скриптов так и внешних компонент. Возмутило страшно, тем более что не обосновали такой подход (хз. может на Линуксе парятся и что-то переписывают).

Идея: реализовать паузу с использованием ОбработкиОжидания, передать ей список объектов и пусть она кусками выполняет действия через определенное время.

Изменяемые реквизиты существующих объектов передавать в ТаблицеЗначений. Графа Объект - Объект МД, графа реквизиты (тип - СписокЗначений) -список изменяемых реквизитов (типа ДобавитьЗначение("ИмяРеквизита",Значение)).

Для наглядности привожу такой код перепроведения документов с помощью внешней обработки:
перем гпСписДоков;//глобальный список значений
//======================================================================
Процедура ПровестиОжидая()
    Если ПустоеЗначение(гпСписДоков) = 1 Тогда
        Форма.Заголовок("Проведены все документы");
        Форма.ОбработкаОжидания("ПровестиОжидая",0);//Отключаем ожидание
    Иначе
        НачатьТранзакцию();
        лпБлок = 0; // Признак того что документ кем-то открыт
        лпДокумент = СоздатьОбъект("Документ");
        лпКоличествоДокументов = Мин(100,гпСписДоков.РазмерСписка());
        Для лпНомСпис = 1 По лпКоличествоДокументов Цикл
            лпДокумент.НайтиДокумент(гпСписДоков.ПолучитьЗначение(лпНомСпис));
            Если (лпДокумент.Блокировка(1)=1) Тогда
                лпДокумент.Блокировка(0);
                лпДокумент.Провести();
            Иначе
                ОтменитьТранзакцию();
                лпБлок = 1;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если лпБлок = 0 Тогда
            Попытка
                ЗафиксироватьТранзакцию();
                гпСписДоков.УдалитьЗначение(1,лпКоличествоДокументов);
            Исключение
                ОтменитьТранзакцию();
            КонецПопытки;
        КонецЕсли;
        Форма.Заголовок("Осталось провести "+гпСписДоков.РазмерСписка()+" документов");
    КонецЕсли;
КонецПроцедуры // ОжиданиеПроведения
//======================================================================
Процедура Сформировать()
    гпСписДоков = СоздатьОбъект("СписокЗначений");
    лпДокумент = СоздатьОбъект("Документ");
    лпДокумент.ВыбратьДокументы();
    Пока лпДокумент.ПолучитьДокумент(НачДата, КонДата) = 1 Цикл
        Если лпДокумент.Проведен() = 1 Тогда
            гпСписДоков.ДобавитьЗначение(лпДокумент.ТекущийДокумент());
        КонецЕсли;
    КонецЦикла;
    Форма.ОбработкаОжидания("ПровестиОжидая",10);//Запуск через 10 сек.
КонецПроцедуры


Код на 8-й реализуемый, сори но пишу только для 7.7.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V  < 1 2
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 21:30
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!