Доброго времени суток. Внешняя обработка, делаю программное создание документов Реализация товаров, загружаю из xml фала. Заполняю таб.часть Товары, нужно обработать заполнение счетов учета, есть общий модуль

```1c
    ПараметрыЗаполненияСчетовУчета = РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета(
    "Товары.Номенклатура",
    Объект,
    Элементы.Товары.ТекущиеДанные,
    ДанныеОбъекта,
    ДанныеСтрокиТаблицы);
```
Только вот Объект это тип "ДанныеФормыСтруктура", как то можно преобразовать Объект Документ Реализация?
---
Хотя, если нужны ДанныеФормыСтруктура именно Форма.Объект, тогда можно просто так в обработке:

```1c
    &НаКлиенте
    Процедура ПолучитьДанныеФормыСтруктура(Команда)
    Ключ = Новый Структура("Ключ", СсылкаНаДокумент);
    Форма = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Ключ);
    ФормаОбъект = Форма.Объект;
    ТестОбъект(ФормаОбъект);
    КонецПроцедуры

    &НаСервере
    Процедура ТестОбъект(ДанныеФормыОбъект)
    Сообщить(ТипЗнч(ДанныеФормыОбъект));
    КонецПроцедуры
```
---
получайте его форму, Объект будет в Форма.Объект.

сам документ будет доступен через Форма.РеквизитФормыВЗначение("Объект")
---
как получить форму &НаСервере?
---
никак. ее можно передать на сервер, но получить нужно обязательно на клиенте.
Вы можете на клиенте один раз получить форму документа, передать ее на сервер и на сервере уже делать

```1c
    ДокОбъект = Документы.<МойДокумент>.СоздатьДокумент();

    ДокОбъект.Заполнить();

    Форма.ЗначениеВРеквизитФормы(ДокОбъект, "Объект");

    ДанныеФормыСтруктура = Форма.Объект;
    ...............

    ДокОбъект = Документы.<МойДокумент>.СоздатьДокумент();

    ДокОбъект.Заполнить();

    Форма.ЗначениеВРеквизитФормы(ДокОбъект, "Объект");

    ДанныеФормыСтруктура = Форма.Объект;
    ......
```
---
Вы можете на клиенте один раз получить форму документа, передать ее на сервер и на сервере уже делать
Передать клиентскую форму на сервер вне контекста?
---
ээээ.....ну так контекст в данном случае будет либо форма внешней обработки, либо фоновое задание, так понимаю.

Если форма внешней обработки, то получаем форму на клиенте, дальше передаем ее хоть контекстно, хоть без......или это так не работает?

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

но вот пример для вашей задачи
как раз с работой с ДанныеФормыСтруктура
---
Вот что получилось:
Добавляем в расширение форму документа. В ней создаем пару функций:

```1c
    &НаКлиенте
    Функция ПоместитьВоВременноеХранилищеФорму(УИН) Экспорт
    Возврат ПоместитьВоВременноеХранилищеФормуСервер(УИН);
    КонецФункции

    &НаСервере
    Функция ПоместитьВоВременноеХранилищеФормуСервер(УИН) Экспорт
    СервернаяФорма = Объект;
    Возврат ПоместитьВоВременноеХранилище(Новый Структура("Форма",СервернаяФорма), УИН);
    КонецФункции
```

В форме обработке так же пару методов:

```1c
    &НаКлиенте
    Процедура ПолучитьСервернуюФормуДокумента(Команда)
    Ключ = Новый Структура("Ключ", СсылкаНаДокумент);
    Форма = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Ключ);
    Адрес = Форма.ПоместитьВоВременноеХранилищеФорму(УникальныйИдентификатор);
    ТестПолученияСервернойФормы(Адрес);
    КонецПроцедуры

    &НаСервере
    Процедура ТестПолученияСервернойФормы(Адрес)
    Перем СервернаяФорма;
    Данные = ПолучитьИзВременногоХранилища(Адрес);
    Данные.Свойство("Форма", СервернаяФорма); // тут получаем ДанныеФормыСтруктура
    Сообщить(ТипЗнч(СервернаяФорма));
    КонецПроцедуры
```

СсылкаНаДокумент и ИмяДокумента подставить свои значения.
---
Хотя, если нужны ДанныеФормыСтруктура именно Форма.Объект, тогда можно просто так в обработке:

```1c
    &НаКлиенте
    Процедура ПолучитьДанныеФормыСтруктура(Команда)
    Ключ = Новый Структура("Ключ", СсылкаНаДокумент);
    Форма = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Ключ);
    ФормаОбъект = Форма.Объект;
    ТестОбъект(ФормаОбъект);
    КонецПроцедуры

    &НаСервере
    Процедура ТестОбъект(ДанныеФормыОбъект)
    Сообщить(ТипЗнч(ДанныеФормыОбъект));
    КонецПроцедуры
```
---
Зачем такие извращения? В чем проблема в своей форме создать реквизит с типом ДокументОбъект?
---
можно и так. Большой разницы с кодом в (19) не будет. Реквизит тоже придется заполнять.
---
Вот так сделал, как теперь Записать?

```1c
    &НаКлиенте
    Процедура ЗаполнитьДанныеВТабЧасти()

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

    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьСтрокуТаб(ФормаОбъект)

    Для Каждого СтрокаТовара Из ФормаОбъект.Товары Цикл
    ТоварыНоменклатураПриИзменении(ФормаОбъект, СтрокаТовара);
    КонецЦикла;

    КонецПроцедуры

    &НаСервере
    Процедура ТоварыНоменклатураПриИзменении(ФормаОбъект, СтрокаТовара)

    ДанныеСтрокиТаблицы = Новый Структура(
    "Номенклатура, ЕдиницаИзмерения, Коэффициент, Количество, Цена, Сумма,
    |СтавкаНДС, СуммаНДС, СчетУчетаНДСПоРеализации, НДСВидОперацииРеализации, СчетУчетаБУ, СчетУчетаНУ,
    |СтавкаАкциза, СуммаАкциза, АкцизВидОперацииРеализации, СчетУчетаАкцизаПоРеализации, КоэффициентАкциза,
    |СчетДоходовБУ, СубконтоДоходовБУ1, СубконтоДоходовБУ2, СубконтоДоходовБУ3,
    |СчетДоходовНУ, СубконтоДоходовНУ1, СубконтоДоходовНУ2, СубконтоДоходовНУ3,
    |ВидСубконтоДоходовБУ1, ВидСубконтоДоходовБУ2, ВидСубконтоДоходовБУ3,
    |ВидСубконтоДоходовНУ1, ВидСубконтоДоходовНУ2, ВидСубконтоДоходовНУ3,
    |СубконтоДоходовБУ1Доступность, СубконтоДоходовБУ2Доступность, СубконтоДоходовБУ3Доступность,
    |СубконтоДоходовНУ1Доступность, СубконтоДоходовНУ2Доступность, СубконтоДоходовНУ3Доступность,
    |СчетСписанияСебестоимостиБУ, СубконтоСписанияСебестоимостиБУ1, СубконтоСписанияСебестоимостиБУ2, СубконтоСписанияСебестоимостиБУ3,
    |СчетСписанияСебестоимостиНУ, СубконтоСписанияСебестоимостиНУ1, СубконтоСписанияСебестоимостиНУ2, СубконтоСписанияСебестоимостиНУ3,
    |ВидСубконтоСписанияСебестоимостиБУ1, ВидСубконтоСписанияСебестоимостиБУ2, ВидСубконтоСписанияСебестоимостиБУ3,
    |ВидСубконтоСписанияСебестоимостиНУ1, ВидСубконтоСписанияСебестоимостиНУ2, ВидСубконтоСписанияСебестоимостиНУ3,
    |СубконтоСписанияСебестоимостиБУ1Доступность, СубконтоСписанияСебестоимостиБУ2Доступность, СубконтоСписанияСебестоимостиБУ3Доступность,
    |СубконтоСписанияСебестоимостиНУ1Доступность, СубконтоСписанияСебестоимостиНУ2Доступность, СубконтоСписанияСебестоимостиНУ3Доступность"
    );

    ЗаполнитьЗначенияСвойств(ДанныеСтрокиТаблицы, СтрокаТовара);

    ДанныеОбъекта = Новый Структура(
    "Организация, СтруктурноеПодразделение, ВидОперации, Дата, Ссылка, ВидУчетаНУ, ТипЦен,
    |УчитыватьКПН, УчитыватьНДС, УчитыватьАкциз, СуммаВключаетНДС, СуммаВключаетАкциз,
    |ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов, Склад, ДоговорКонтрагента");

    ЗаполнитьЗначенияСвойств(ДанныеОбъекта, ФормаОбъект);

    ПараметрыЗаполненияСчетовУчета = РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета(
    "Товары.Номенклатура",
    ФормаОбъект,
    СтрокаТовара,
    ДанныеОбъекта,
    ДанныеСтрокиТаблицы);

    ТоварыНоменклатураПриИзмененииНаСервере(ДанныеСтрокиТаблицы, ДанныеОбъекта, ПараметрыЗаполненияСчетовУчета.КЗаполнению);

    ЗаполнитьЗначенияСвойств(СтрокаТовара, ДанныеСтрокиТаблицы);

    КонецПроцедуры
```
---
ДанныеФормыВЗначение()
---
СчетаУчетаВДокументах.Заполнить(ДокОбъект, Новый Структура);