Всем привет. Несколько часов уже бьюсь, но движение медленное и малоэффективное...
Есть ДО, прописана в Справочник.ДополнительныеОтчетыИОбработки...
Получаю оттуда и из табличной части все, что можно, но...
Как ее запустить программно???
Копаюсь в коде основной формы ДО с кнопочкой "Выполнить", но чтобы его использовать не могу понять, что откуда берется и в каком виде складывается.
ДО - без формы, она там ни к чему.
---
Спасибо всем. Для исполнения команды доп.обработки без формы (фактически вызова с ожиданием процедуры "ВыполнитьКоманду" модуля доп.обработки) накропал вот такое:

```1c
    &НаКлиенте
    Процедура ВыполнитьСинхронизацию(Команда)
    // готовим структуру команды
    вКоманда = Новый Структура;
    ЗаполнитьСтруктуруВыполняемойКоманды(вКоманда,"Моя доп.обработка");
    Если ЗначениеЗаполнено(вКоманда) Тогда
    ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Команда "%1" подготовлена к исполнению.'"),вКоманда.Представление);
    // оповещаем себя о том, что команда подготовлена и передается на исполнение
    //ПоказатьОповещениеПользователя(ЗаголовокСостояния + "...", , , БиблиотекаКартинок.ДлительнаяОперация48);
    Сообщить(ЗаголовокСостояния);
    // вызываем процедуру исполнения команды в фоне на сервере
    ДлительнаяОперация = НачатьВыполнениеСервернойКомандыВФоне(вКоманда, УникальныйИдентификатор);
    // подготавливаем данные и выводим "ожидающее" оповещение
    ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Команда "%1" выполняется.'"),вКоманда.Представление);
    ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
    ПараметрыОжидания.ТекстСообщения = ЗаголовокСостояния;
    // не будем оповещать себя после завершения штатным образом
    ПараметрыОжидания.ОповещениеПользователя.Показать = Ложь;
    // а вот окно "ожидания" просим показать
    ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
    // непосредственно "ожидаем"
    ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияВыполнения", ЭтотОбъект, вКоманда);
    ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеЗавершенияВыполнения(Задание, ВыполняемаяКоманда) Экспорт
    // процедура, которая указана ранее для вызова после завершения исполнения
    Если Задание.Статус = "Ошибка" Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Не удалось выполнить команду по причине:
    |%1.'"), Задание.КраткоеПредставлениеОшибки);
    Иначе
    // Оповещаем все открытые формы и динамические списки об изменениях (обязательно)
    Результат = ПолучитьИзВременногоХранилища(Задание.АдресРезультата);
    ОповеститьФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ОповеститьФормы");
    Если ОповеститьФормы <> Неопределено Тогда
    СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ОповеститьФормы);
    КонецЕсли;
    // Оповещаем себя, поскольку ранее в ПараметрыОжидания записали Ложь
    ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Команда "%1" выполнена.'"),ВыполняемаяКоманда.Представление);
    Сообщить(ЗаголовокСостояния);
    КонецЕсли;
    КонецПроцедуры

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

    &НаСервереБезКонтекста
    Функция НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор)
    ИмяПроцедуры = "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду";

    ПараметрыПроцедуры = Новый Структура("ДополнительнаяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения");
    ПараметрыПроцедуры.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.Ссылка;
    ПараметрыПроцедуры.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор;
    ПараметрыПроцедуры.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения;

    НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
    НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'");

    Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, НастройкиЗапуска);
    КонецФункции
```
---
вот пример с формой,

```1c
    &НаКлиенте
    Процедура ДопДок_ОбработкаНесопоставленныхПосле(Команда)
    ВыполняемаяКоманда=Новый Структура;
    ЗаполнитьСтруктуруВыполняемойКоманды(ВыполняемаяКоманда,"Обработка данных ЕГАИС");
    ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда,ЭтаФорма,Неопределено);
    КонецПроцедуры

    &НаСервереБезКонтекста
    Процедура ЗаполнитьСтруктуруВыполняемойКоманды(ВыполняемаяКоманда,НаименованиеОбработки)
    ДопОбработкаСсылка=Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(НаименованиеОбработки);
    Если ЗначениеЗаполнено(ДопОбработкаСсылка) Тогда
    ВыполняемаяКоманда=Новый Структура;
    ВыполняемаяКоманда.Вставить("ВариантЗапуска",ДопОбработкаСсылка.Команды[0].ВариантЗапуска);
    ВыполняемаяКоманда.Вставить("Вид",ДопОбработкаСсылка.Вид);
    ВыполняемаяКоманда.Вставить("Идентификатор",ДопОбработкаСсылка.Команды[0].Идентификатор);
    ВыполняемаяКоманда.Вставить("Модификатор",ДопОбработкаСсылка.Команды[0].Модификатор);
    ВыполняемаяКоманда.Вставить("ОбъектыНазначения",Неопределено);
    ВыполняемаяКоманда.Вставить("ПоказыватьОповещение",ДопОбработкаСсылка.Команды[0].ПоказыватьОповещение);
    ВыполняемаяКоманда.Вставить("Представление",НаименованиеОбработки);
    ВыполняемаяКоманда.Вставить("Ссылка",ДопОбработкаСсылка);
    ВыполняемаяКоманда.Вставить("ЭтоОтчет",Ложь);
    Иначе
    ВыполняемаяКоманда=Неопределено;
    КонецЕсли;
    КонецПроцедуры
```
---
Спасибо за пример. Попробую прикрутить, в смысле подпедалить..
---
а зачем ее программно запускать? Сделайте регламентным заданием БСП сама запустит.
---
У меня есть внешняя обработка, а в ней прежде чем что-то делать - нужно запустить эту доп.обработку - это синхронизация данных. Она должна быть регламентным заданием. У меня файловая БД УТ11. Пока не знаю как это сделать. Еще не разбирался, но прочитал, что трудности есть.
Может подскажете как? Или ссылку, где почитать.
---
https://infostart.ru/public/622195/ 5 обработка делает удаление в фоне и через регламентное задание.
Скачай БСП там заготовки тоже есть.
---
Да это все хорошо... особенно небесплатные примеры... Вопрос в другом...
Сформировал я эту доп.обработку, даже назначил ей расписание (сразу увидел, что появился GUID регламентного задания), но...
Как это регламентное задание сможет запускаться, если у меня 1С 8.3 УТ11 не клиент-сервер, а файловая БД???
---
регламентные задания выполняются когда им назначен пользователь и он сидит в базе.
Есть лайфхаки, которые запускают обработки через расписание, но ПК должен быть включен. Так что проще 1С не закрывать и все!
---
Т.е. нужно постоянно иметь включенный комп с коннектом к "облачной 1С-ке" и еще и войти в эту базу под пользователем, обозначенным в настройках доп.обработки?
---
серверная база, тоже не будет работать в фоне если сервер отрубить. Логично, что файловая база это и есть сервер и он должен работать!
---
Ну Вы загнули связку... После пол-литра такую логику не построишь... Файловая база - набор файлов и не более того. А вот когда стартуешь 1С на компе и открываешь базу - вот тогда и запускается на этом компе нечто очень отдаленно напоминающее сервер. Посмотрите диспетчер задач во время работы с 1С.
---
Спасибо всем. Для исполнения команды доп.обработки без формы (фактически вызова с ожиданием процедуры "ВыполнитьКоманду" модуля доп.обработки) накропал вот такое:

```1c
    &НаКлиенте
    Процедура ВыполнитьСинхронизацию(Команда)
    // готовим структуру команды
    вКоманда = Новый Структура;
    ЗаполнитьСтруктуруВыполняемойКоманды(вКоманда,"Моя доп.обработка");
    Если ЗначениеЗаполнено(вКоманда) Тогда
    ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Команда "%1" подготовлена к исполнению.'"),вКоманда.Представление);
    // оповещаем себя о том, что команда подготовлена и передается на исполнение
    //ПоказатьОповещениеПользователя(ЗаголовокСостояния + "...", , , БиблиотекаКартинок.ДлительнаяОперация48);
    Сообщить(ЗаголовокСостояния);
    // вызываем процедуру исполнения команды в фоне на сервере
    ДлительнаяОперация = НачатьВыполнениеСервернойКомандыВФоне(вКоманда, УникальныйИдентификатор);
    // подготавливаем данные и выводим "ожидающее" оповещение
    ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Команда "%1" выполняется.'"),вКоманда.Представление);
    ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
    ПараметрыОжидания.ТекстСообщения = ЗаголовокСостояния;
    // не будем оповещать себя после завершения штатным образом
    ПараметрыОжидания.ОповещениеПользователя.Показать = Ложь;
    // а вот окно "ожидания" просим показать
    ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
    // непосредственно "ожидаем"
    ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияВыполнения", ЭтотОбъект, вКоманда);
    ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеЗавершенияВыполнения(Задание, ВыполняемаяКоманда) Экспорт
    // процедура, которая указана ранее для вызова после завершения исполнения
    Если Задание.Статус = "Ошибка" Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Не удалось выполнить команду по причине:
    |%1.'"), Задание.КраткоеПредставлениеОшибки);
    Иначе
    // Оповещаем все открытые формы и динамические списки об изменениях (обязательно)
    Результат = ПолучитьИзВременногоХранилища(Задание.АдресРезультата);
    ОповеститьФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ОповеститьФормы");
    Если ОповеститьФормы <> Неопределено Тогда
    СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ОповеститьФормы);
    КонецЕсли;
    // Оповещаем себя, поскольку ранее в ПараметрыОжидания записали Ложь
    ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Команда "%1" выполнена.'"),ВыполняемаяКоманда.Представление);
    Сообщить(ЗаголовокСостояния);
    КонецЕсли;
    КонецПроцедуры

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

    &НаСервереБезКонтекста
    Функция НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор)
    ИмяПроцедуры = "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду";

    ПараметрыПроцедуры = Новый Структура("ДополнительнаяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения");
    ПараметрыПроцедуры.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.Ссылка;
    ПараметрыПроцедуры.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор;
    ПараметрыПроцедуры.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения;

    НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
    НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'");

    Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, НастройкиЗапуска);
    КонецФункции
```