Запускаю обработку через планировщик задач виндовс, она запускает процедуры в общих модулях по завершении создаются и открываются документы(10 секунд думает). Если добавить в конец При открытии() ЗавершитьРаботуСистемы(ложь) система закрывается, не создав документы, потому что продолжается выполнение процедур в общем модуле по созданию документов. 1с Розница 2.2
Как дождаться завершения создания документов и закрыть систему?

```1c
    &НаКлиенте
    Процедура ВыгрузитьВККМНоменклатуруИНастройки()
    ОчиститьСообщения();
    //ЗаполнитьТЗКассыККМ();

    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    ОписаниеОповещения = Новый ОписаниеОповещения("КассыТоварыОперацияЗавершение", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline(ОписаниеОповещения, МассивККМ, Ложь);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ЗаполнитьТЗКассыККМ();
    ЗагрузитьОтчетИзККМ();
    ВыгрузитьВККМНоменклатуруИНастройки();
    КонецПроцедуры
```
---
Если исходить из того, что нужно оба обработчика из (14), то решается это примерно так:

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ЗаполнитьТЗКассыККМ();
    ПодключитьОбработчикОжидания("ЗагрузитьОтчетИзККМ", 0.1, Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура ЗагрузитьОтчетИзККМ()
    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    Оповещение = Новый ОписаниеОповещения("ВыгрузитьВККМНоменклатуруИНастройки", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьЗагрузкуОтчетовОРозничныхПродажах(Оповещение,МассивККМ);
    КонецПроцедуры

    &НаКлиенте
    Процедура ВыгрузитьВККМНоменклатуруИНастройки(Результат, Параметры) Экспорт
    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    ОписаниеОповещения = Новый ОписаниеОповещения("КассыТоварыОперацияЗавершение", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline(ОписаниеОповещения, МассивККМ, Ложь);
    КонецПроцедуры

    &НаКлиенте
    Процедура КассыТоварыОперацияЗавершение(Результат, Параметры) Экспорт
    ЗавершитьРаботуСистемы(Ложь);
    КонецПроцедуры
```
---
в приведенных процедурах не видно в какой момент создаются документы.
В общем после создания документа и его записи в базу можно проверить документ на ЭтоНовый() если ложь, значит записан. Можно закрывать базу. Есть еще момент это вызов обработки с созданием формы или без создания.
ЗЫ конечно в процедуру при открытии завершение работы ставить неправильно , форма создана, но процедуры создания еще не отработали, так что меняйте логику работы обработки.
---
в регистр сведений ДокументыНаОбработку помести список документов.
При обработке документа удаляй его оттуда.

ОбработкойОжидания дожидаемся, когда регистр станет пуст, и завершаем работу системы.
---
К сожалению конфигурация типовая, нет такой возможности.
Не ужели остается только одно taskkill 1c?
---
создание документов где происходит? в ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline?

если да, то добавьте процедуру КассыТоварыОперацияЗавершение и в ней пишите ЗавершитьРаботуСистемы
---
Нет в других процедурах общего модуля, там их огромное количество.
---
подключитьобработчикожидания и через полминуты закрыть систему, ну или дополнительно проверять создались документы или нет...
---
Наверное нужно как то получить ответ системы о завершении работы
Вроде чтото подобное видела при создании отчетов в УФ
Результат = ДлительныеОперации.ОперацииВыполнены()
Вот после этого и выводятся отчеты в Документ.Результат
---
А кто мешает сделать завершение работы системы в процедуре КассыТоварыОперацияЗавершение ?

```1c
    ОписаниеОповещения = Новый ОписаниеОповещения("КассыТоварыОперацияЗавершение", ЭтотОбъект);
```

Это один вариант.
Другой - внешнюю обработку сделать дополнительной, вызывать серверные методы и как фоновое задание.
---
Нельзя тут сделать КассыТоварыОперацияЗавершение , потому что еще выполняется большое количество процедур по созданию самих документов %)

Добавил 2см для решения
---
а если так:

```1c
    НаименованиеЗадания = "Выполнить в фоне и закрыть";

    ПараметрыЗадания = Новый Массив;

    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    ПараметрыЗадания .Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;

    ПараметрыЗадания.Добавить("КассыТоварыОперацияЗавершение");
    ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры);
    ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2);
    Задание = ФоновыеЗадания.Выполнить("ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline", ПараметрыЗадания,, НаименованиеЗадания);
    Попытка
    Задание.ОжидатьЗавершения(ВремяОжидания);
    Исключение
    // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания.
    КонецПопытки;

    Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор);
    Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор;
```
---
ФоновыеЗадания.Выполнить("ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline"
что-то я сомневаюсь, что это выполнится. Клиентский модуль ведь.
---
мда... согласен. Проблема даже не столько в клиентском модуле, а сколько в том, что
ФоновыеЗадания.Выполнить не доступно на тонком клиенте.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
---
непонятно, почему нельзя добавить КассыТоварыОперацияЗавершение?

в вашей обработке, добавьте процедуру КассыТоварыОперацияЗавершение и в ней напишите Сообщить(). запустите вашу обработку и посмотрите, в какой момент появится ваше сообщить - сразу после открытия или через 10 секунд?

P.S. ЗавершитьРаботуСистемы закомментируйте
---
Появляется после 10 секунд, но это из-за того что 1ска замирает при создании документов, но если ставить завершитьработусистему отрубает без документов, но оно и понятно, дальше выполняются процедуры которые именно создают эти документы.

ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline (готовит данные к выгрузке в кассы)
ПодключаемоеОборудованиеOfflineКлиент.НачатьЗагрузкуОтчетовОРозничныхПродажах (определяет кассы и ищет файлы которые нужно загрузить и по которым нужно создать документы)
---
Если исходить из того, что нужно оба обработчика из (14), то решается это примерно так:

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ЗаполнитьТЗКассыККМ();
    ПодключитьОбработчикОжидания("ЗагрузитьОтчетИзККМ", 0.1, Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура ЗагрузитьОтчетИзККМ()
    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    Оповещение = Новый ОписаниеОповещения("ВыгрузитьВККМНоменклатуруИНастройки", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьЗагрузкуОтчетовОРозничныхПродажах(Оповещение,МассивККМ);
    КонецПроцедуры

    &НаКлиенте
    Процедура ВыгрузитьВККМНоменклатуруИНастройки(Результат, Параметры) Экспорт
    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    ОписаниеОповещения = Новый ОписаниеОповещения("КассыТоварыОперацияЗавершение", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline(ОписаниеОповещения, МассивККМ, Ложь);
    КонецПроцедуры

    &НаКлиенте
    Процедура КассыТоварыОперацияЗавершение(Результат, Параметры) Экспорт
    ЗавершитьРаботуСистемы(Ложь);
    КонецПроцедуры
```
---
А для чего открывать форму?

```1c
    Set v8 = CreateObject("V83.Application")
    res = v8.Connect("Srvr = Server;Ref = MyBase;Usr=auto;Pwd=password")
    set obr = V8.ExternalDataProcessors.Create("c:\obrabotki\obrabotki.epf")
    obr.MoySuperProcedura()
```
---
Для того чтобы заполнить ТЗ нужными данными которые передаются в параметре МассивККМ
ПодключаемоеОборудованиеOfflineКлиент.НачатьЗагрузкуОтчетовОРозничныхПродажах(ОписаниеОповещения,МассивККМ);

Я не могу вызвать эту процедуру из сервера потому что не стоит галочка на общем модуле Сервер.

Set v8 = CreateObject("V83.Application")
res = v8.Connect("Srvr = Server;Ref = MyBase;Usr=auto;Pwd=password")
set obr = V8.ExternalDataProcessors.Create("c:\obrabotki\obrabotki.epf")
obr.MoySuperProcedura()

Это как запускается?
---
Текстовый файлик с расширением vbs.

В модуле обработки сделайте экспортную процедуру MoySuperProcedura()
В которой заполните массив и запустите серверную процедуру.
---
Спасибо.
Работает с 1 элементом в ТЗ, но если их 4, то не успевает создать и закрывается.
Вот такой костыль отрабатывает на ура, грузиться 90 секунд :D все успевает сделать.

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ЗаполнитьТЗКассыККМ();
    ПодключитьОбработчикОжидания("ЗагрузитьОтчетИзККМ", 1, Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура ЗагрузитьОтчетИзККМ()
    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    Оповещение = Новый ОписаниеОповещения("ВыгрузитьВККМНоменклатуруИНастройки", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьЗагрузкуОтчетовОРозничныхПродажах(Оповещение,МассивККМ);
    КонецПроцедуры

    &НаКлиенте
    Процедура ВыгрузитьВККМНоменклатуруИНастройки(Результат, Параметры) Экспорт
    МассивККМ = Новый Массив;
    Для каждого ЭлементТЗ Из Объект.ТЗКассыККМ Цикл
    МассивККМ.Добавить(ЭлементТЗ.НазваниеККМ);
    КонецЦикла;
    ОписаниеОповещения = Новый ОписаниеОповещения("КассыТоварыОперацияЗавершение", ЭтотОбъект);
    ПодключаемоеОборудованиеOfflineКлиент.НачатьВыгрузкуТоваровВККМOffline(ОписаниеОповещения, МассивККМ, Ложь);
    КонецПроцедуры

    &НаКлиенте
    Процедура КассыТоварыОперацияЗавершение(Результат, Параметры) Экспорт
    ПодключитьОбработчикОжидания("Ждем", 0.1, Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура Ждем() Экспорт
    А = 1;
    Пока А < 300 Цикл

    А=А+1;
    Сообщить(А);

    КонецЦикла;
    ЗавершитьРаботуСистемы(Ложь);
    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьТЗКассыККМ()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПодключаемоеОборудование.Ссылка,
    | ПодключаемоеОборудование.ТипОборудования
    |ИЗ
    | Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
    |ГДЕ
    | ПодключаемоеОборудование.ТипОборудования = &ТипОборудования";

    Запрос.УстановитьПараметр("ТипОборудования", Перечисления.ТипыПодключаемогоОборудования.ККМOffline);
    ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(), "Объект.ТЗКассыККМ");

    КонецПроцедуры
```
---
цикл ожидания можно убрать. Достаточно:

```1c
    ПодключитьОбработчикОжидания("Ждем", 10, Истина); // или любое число секунд указать.
```

ЗаполнитьТЗКассыККМ() лучше вынести в обработчик ПриСозданииНаСервере. Не потребуется серверный вызов и Объект доступен напрямую, без РеквизитФормыВЗначение.