Внешняя обработка. 1С:Предприятие 8.3 (8.3.13.1513)

Процедура на сервере делает запрос в базу, сверяет таблицы, записывает данные в файл, записывает данные в регистр. По техническим причинам запись данных в файл необходимо организовать на клиенте. Как организовать передачу текста на клиент, произвести запись файла на клиенте и продолжить работу на сервере для записи в регистр. Подскажите какие методы необходимо использовать или как переделать архитектуру. Спасибо!

```1c
    &НаСервере
    Процедура ЗаписьВФайлИРегистр(Домен)
    Запрос = Новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ
    | БазыДанныхПользователей.Пользователь,
    | БазыДанныхПользователей.Домен,
    | БазыДанных.Srvr,
    | БазыДанных.Ref1,
    | БазыДанных.App,
    | БазыДанныхПользователей.База.Ссылка,
    | БазыДанных.Наименование,
    | БазыДанных.Ссылка
    |ИЗ
    | РегистрСведений.БазыДанныхПользователей КАК БазыДанныхПользователей
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БазыДанных КАК БазыДанных
    | ПО БазыДанныхПользователей.База = БазыДанных.Ссылка
    |ГДЕ
    | БазыДанныхПользователей.Домен = &домен
    | И БазыДанныхПользователей.Состояние = "Работает"";

    Запрос.УстановитьПараметр("домен", Домен);
    БазыИзСправочника = Запрос.Выполнить().Выгрузить();

    // проверка на изменение базы
    БазыИзФормы = БазыУПользователяИзСправочника.Выгрузить();
    БазыИзФормы1 = БазыИзФормы.Скопировать();
    Табл = РазницаТаблицЗначений(БазыИзСправочника, БазыИзФормы, "Srvr");
    Если Табл.Количество() = 0 Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Базы остались прежними, новая запись отменена.";
    Сообщение.Сообщить();
    Возврат;
    КонецЕсли;

    // запись в файл
    Текст = Новый ТекстовыйДокумент();
    Кавычка = Символ(34);
    Для каждого Строка ИЗ БазыИзФормы1 Цикл
    Текст.ДобавитьСтроку("[" + Строка.Наименование + "]");
    Текст.ДобавитьСтроку("Connect=Srvr=" + Кавычка + Строка.Srvr + Кавычка + ";Ref=" + Кавычка + Строка.Ref + Кавычка + ";");
    Текст.ДобавитьСтроку("ClientConnectionSpeed=" + Строка.ClientConnectionSpeed);
    Текст.ДобавитьСтроку("App=" + Строка.App);
    Текст.ДобавитьСтроку("WA=" + Строка.WA);
    Текст.ДобавитьСтроку("Version=" + Строка.Version);
    КонецЦикла;

    Попытка
    Текст.Записать("e:\1cprofiles\" + Домен + ".V8I");
    Исключение
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Ошибка при записи файла.";
    Сообщение.Сообщить();
    Возврат;
    КонецПопытки;

    // запись в регистр
    Попытка
    НаборЗаписей = РегистрыСведений.БазыДанныхПользователей.СоздатьНаборЗаписей();

    Для каждого Строка Из Табл Цикл
    Отбор = Новый Структура();
    Отбор.Вставить("Srvr", Строка.Srvr);
    Отбор.Вставить("Ref1", Строка.Ref);
    Отбор.Вставить("App", Строка.App);
    Строки = БазыДанных.НайтиСтроки(Отбор);
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Пользователь = ПользовательФИО;
    НоваяЗапись.Домен = Домен;
    НоваяЗапись.Srvr = Строки[0].Srvr;
    НоваяЗапись.App = Строки[0].App;
    НоваяЗапись.База = Строки[0].Ссылка;
    НоваяЗапись.Ref = Строки[0].Ref1;
    НоваяЗапись.Инициатор = ПользователиКлиентСервер.ТекущийПользователь();
    Если Строка.Знак = 1 Тогда
    НоваяЗапись.Состояние = "Работает";
    Иначе
    НоваяЗапись.Состояние = "Отключен";
    КонецЕсли;
    КонецЦикла;
    НаборЗаписей.Записать(Ложь);
    Элементы.ЗаписатьВФайлИРегистр.Доступность = Ложь;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Файл успешно записан, данные заведены в регистр!";
    Сообщение.Сообщить();
    Исключение
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Произошла ошибка записи в регистр, но файл был успешно записан.";
    Сообщение.Сообщить();
    Конецпопытки;
    КонецПроцедуры
```
---
Вам нужно написать какую-то процедуру или функцию с контекстом &НаКлиенте и оттуда вызывать не процедуру, а функцию "ЗаписьВФайлИРегистр(Домен)" с возвращаемым значением массив, в данном случае Вам нужно добавить в массив текст и возвращать этот массив.
---
Я так понимаю, что нужно просто записать данные в некий файловый ресурс? Клиент при этом вообще ничего не делает. У него и 1С может быть не запущена. Так?
Тогда, соответственно, у клиента открыть какую-то "шару" и записывать туда файл.

Прошу прощения, не развернул код. Оповещалки вижу.
Если задание запускается на сервере, то штатно сейчас для этого сервер взаимодействий, вроде как, предназначен. Но это посоветовать просто:) Я вот чет не видел, чтобы кто-то выложил свою реализацию.
Если не через сервер взаимодействий, то обычно в обработчиках ожидания читают какие-то сигналы от серверных процессов.
---
Это внешняя обработка. Архитектура предполагает автоматизацию учета баз данных у пользователей 1с. В справочнике есть "БазыДанных1с" и "Пользователи1c" их связывает регистр сведений. Необходимо произвести проверку на сервере (так как запросы и записи проходят только через сервер, это наверно все понимают), но запись произвести от клиента (возникли проблемы с правами доступа на запись у сервера). Я пишу только второй месяц, сорри.
---
Как внешка запускает выгрузку? На сервере по расписанию? Или таки пользователь жмет кнопку?
---
На кнопку нажимает.
---
что за "По техническим причинам запись данных в файл необходимо организовать на клиенте" причина такая?
---
В фирме работают множество серверов и баз данных. Возникла необходимость автоматизировать процесс. Запись в файл может происходить на различные диски на разных серверах, соответственно в критических ситуациях возникнет необходимость настройки прав между серверами. Я не сисадмин, подробно объяснить не могу.
---
Вам нужно написать какую-то процедуру или функцию с контекстом &НаКлиенте и оттуда вызывать не процедуру, а функцию "ЗаписьВФайлИРегистр(Домен)" с возвращаемым значением массив, в данном случае Вам нужно добавить в массив текст и возвращать этот массив.
---
спасибо за наводку
---
Текст храните в реквизите Объекта обработки, - реквизиты Объекта доступны на клиенте - вот и сохраняйте Объект.Текст в процедуре &НаКлиенте
---
Я создовал реквизит - "ТекстДляЗаписи", с типом - "Текстовый документ". Вы знаете метод для выгрузки текста из сервера в реквизит "ТекстДляЗаписи"? Стандартная - "ЗначениеВРеквизитФормы" не работает.
---
Не надо ничего никуда выгружать! У вас ТекстДляЗаписи - реквизит Объекта?
Я же вам на пальцах объяснил - Объект.ТекстДляЗаписи - доступен на форме, делайте с ним все что хотите, ничего никуда передавать не нужно...
---
процедуру поменять на функцию и вернуть требуемое в точку вызова.
---
Спасибо! Натолкнули на правильную мысль.
---
Объект.ТекстДляЗаписи доступен и на сервере

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
  Объект.ТекстДляЗаписи .ДобавитьСтроку("jholijlkjlkj");
КонецПроцедуры

И на клиете

&НаКлиенте
Процедура ЗаписатьФайл()
 Объект.ТекстДляЗаписи .Записать("C:\1C\ааа.txt"); // Запись будет в файловую систему клиента
КонецПроцедуры