Добрый день! Подскажите пожалуйста, как заполнить (через внешний обработчик заполнения табличной части) элементы формы (поле ввода). Делаю внешнее заполнение Акта сверок (Бухгалтери 2.0.66.26)
Мне надо перенести процедуру во внешний обработчик

```1c
    Процедура ПересчитатьОстатки(Объект)

    ФормаДок = Объект.ПолучитьФорму();
    ЭлементыФормы = ФормаДок.ЭлементыФормы;

    ОстатокНаКонец = ОстатокНаНачало + ПоДаннымОрганизации.Итог("Дебет") - ПоДаннымОрганизации.Итог("Кредит");
    ЭлементыФормы.ОстатокНаНачалоКонтрагент.Значение = - ОстатокНаНачало;
    ЭлементыФормы.ОстатокНаКонец.Значение = ОстатокНаКонец;

    ОстатокНаКонецКонтрагент = - ОстатокНаНачало + ПоДаннымКонтрагента.Итог("Дебет") - ПоДаннымКонтрагента.Итог("Кредит");
    ЭлементыФормы.ОстатокНаКонецКонтрагент.Значение = ОстатокНаКонецКонтрагент;

    РасчетноеРасхождение = ОстатокНаКонец + ОстатокНаКонецКонтрагент;

    Если Расхождение <> РасчетноеРасхождение Тогда
    Расхождение = РасчетноеРасхождение;
    КонецЕсли;
    ЭлементыФормы.Расхождение.Значение = Расхождение;

    ЭлементыФормы.РасхождениеКонтрагент.Значение = Расхождение*(-1);

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

Что не так? Подскажите)
---
Спасибо всем за участия! Получилось так:

```1c
    Процедура ПересчитатьОстатки(Объект)

    ФормаДок = Объект.ПолучитьФорму();
    ЭлементыФормы = ФормаДок.ЭлементыФормы;

    ОстатокНаКонец = Объект.ОстатокНаНачало + ПоДаннымОрганизации.Итог("Дебет") - ПоДаннымОрганизации.Итог("Кредит");
    ЭлементыФормы.ОстатокНаНачалоКонтрагент.Значение = - Объект.ОстатокНаНачало;
    ЭлементыФормы.ОстатокНаКонец.Значение = ОстатокНаКонец;

    ОстатокНаКонецКонтрагент = - Объект.ОстатокНаНачало + ПоДаннымКонтрагента.Итог("Дебет") - ПоДаннымКонтрагента.Итог("Кредит");
    ЭлементыФормы.ОстатокНаКонецКонтрагент.Значение = ОстатокНаКонецКонтрагент;

    РасчетноеРасхождение = ОстатокНаКонец + ОстатокНаКонецКонтрагент;

    Если Расхождение <> РасчетноеРасхождение Тогда
    Расхождение = РасчетноеРасхождение;
    КонецЕсли;
    ЭлементыФормы.Расхождение.Значение = Расхождение;

    ЭлементыФормы.РасхождениеКонтрагент.Значение = Расхождение*(-1);

    КонецПроцедуры
```
---
Вы пытаетесь сделать Внешнюю обработку заполнения ТЧ ? Если есть шаблон, то там в модуле объекта должна быть процедура Инициализировать() , в ней и вызывайте вашу процедуру
---
Да есть такая процедура

```1c
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт;

    Организация = Объект.Организация;
    Дата = Объект.Дата;
    Контрагент = Объект.Контрагент;
    ДатаНачала = Объект.ДатаНачала;
    ДатаОкончания = Объект.ДатаОкончания;
    ДоговорКонтрагента = Объект.ДоговорКонтрагента;
    ПредставительОрганизации = Объект.ПредставительОрганизации;
    ПредставительКонтрагента = Объект.ПредставительКонтрагента;
    ВалютаДокумента = Объект.ВалютаДокумента;
    РазбитьПоДоговорам = Объект.РазбитьПоДоговорам;
    СверкаСогласована = Объект.СверкаСогласована;
    Расхождение = Объект.Расхождение;
    СписокСчетов = Объект.Списоксчетов;
    ПоДаннымОрганизации = Объект.ПоДаннымОрганизации;
    ВыводитьПолныеНазванияДокументов = Объект.ВыводитьПолныеНазванияДокументов;
    ОстатокНаНачало = Объект.ОстатокНаНачало;
    ПоДаннымКонтрагента = Объект.ПоДаннымКонтрагента;

    Если НЕ ЗначениеЗаполнено(Организация) Тогда
    Предупреждение("Не выбрана организация!");
    Возврат;
    КонецЕсли;

    Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
    Предупреждение("Не выбран контрагент!");
    Возврат;
    КонецЕсли;

    Если НЕ ЗначениеЗаполнено(ВалютаДокумента) Тогда
    Предупреждение("Не выбрана валюта документа!");
    Возврат;
    КонецЕсли;

    Если НЕ ЗначениеЗаполнено(ДатаНачала) Тогда
    Предупреждение("Не выбрана дата начала периода сверки расчетов!");
    Возврат;
    КонецЕсли;

    Если НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
    Предупреждение("Не выбрана дата конца периода сверки расчетов!");
    Возврат;
    КонецЕсли;

    Если ДатаОкончания < ДатаНачала Тогда
    Предупреждение("Неверно задан период сверки расчетов!");
    Возврат;
    КонецЕсли;

    КоличествоСчетов = СписокСчетов.Количество();

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

    Если ФильтрСписокСчетов.Количество() = 0 Тогда
    Предупреждение("Неверно задан список счетов, по которым производится сверка!");
    Возврат;
    КонецЕсли;

    Если Объект[ИмяТабличнойЧасти].Количество() > 0 Тогда

    ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?";
    Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, Метаданные().Имя);
    Если Ответ <> КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;

    Объект[ИмяТабличнойЧасти].Очистить();
    КонецЕсли;

    ЗаполнитьПоДаннымБухгалтерскогоУчета(ФильтрСписокСчетов);

    ПересчитатьОстатки(Объект);

    КонецПроцедуры
```
---
Судя по "ЭлементыФормы" - говорим о неуправляемых формах в толстом клиенте.

Если ЭлементФормы привязан к какому-либо реквизиту, то надо заполнять этот самый реквизит.

Например, если в обработке есть реквизит ОстатокНаКонец и ему соответствует элемент формы типа ПолеВвода с именем ОстатокНаКонец, то писать нужно:

```1c
    ОстатокНаКонец = ...
```
---
Табличная часть отлично заполняется, а вот ЭлементыФормы.ОстатокНаНачало.Значение = ОстатокНаНачало не как не хочет
---
До элементов формы вы не достучитесь, только до реквизитов документа

```1c
    ФормаДок = Объект.ПолучитьФорму();
```

Здесь создается новая форма, и поэтому ничего не выходит,
так устроен механизм заполнения табличных частей в ОФ, в УФ - да можно получить ВладелецФормы и уже делать, что нужно
---
может надо
```1c
    Объект.ОстатокНаКонец = ОстатокНаКонец;
```
---
Если вы работаете из формы и хотите посчитать итог по коллекции данных из формы, где-то в менеджере объекта например, то просто передайте туда объект формы или коллекцию формы.

```1c
    &НаКлиенте
    Процедура ПроцедураФормы()
    Документы.Заказ.РасчитатьИтог(Объект, ЭтаФорма);
    КонецПроцедуры

    Процедура РасчитатьИтог(Объект, Форма ) Экспорт
    Если Форма.Реквизит1 = 1 Тогда
    Объект.Товары // перебрать , посчитать, переписать ..
    КонецЕсли;
    КонецПроцедуры
```
---
Если вы вводите докумеЕсли вы вводите документ программно по команде из другой формы и открываете форму незаписанного документа .

```1c
    &НаКлиенте
    Процедура СоздатьДокумент (Команда)

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

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

    Процедура СоздатьЗаказСервер(ДанныеФормы)

    Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.Заказ"));
    //……… работаете с ДокументОбъект, заполняете как считаете нужным
    ЗначениеВДанныеФормы(Док, ДанныеФормы);

    КонецПроцедуры
```
---
Спасибо всем за участия! Получилось так:

```1c
    Процедура ПересчитатьОстатки(Объект)

    ФормаДок = Объект.ПолучитьФорму();
    ЭлементыФормы = ФормаДок.ЭлементыФормы;

    ОстатокНаКонец = Объект.ОстатокНаНачало + ПоДаннымОрганизации.Итог("Дебет") - ПоДаннымОрганизации.Итог("Кредит");
    ЭлементыФормы.ОстатокНаНачалоКонтрагент.Значение = - Объект.ОстатокНаНачало;
    ЭлементыФормы.ОстатокНаКонец.Значение = ОстатокНаКонец;

    ОстатокНаКонецКонтрагент = - Объект.ОстатокНаНачало + ПоДаннымКонтрагента.Итог("Дебет") - ПоДаннымКонтрагента.Итог("Кредит");
    ЭлементыФормы.ОстатокНаКонецКонтрагент.Значение = ОстатокНаКонецКонтрагент;

    РасчетноеРасхождение = ОстатокНаКонец + ОстатокНаКонецКонтрагент;

    Если Расхождение <> РасчетноеРасхождение Тогда
    Расхождение = РасчетноеРасхождение;
    КонецЕсли;
    ЭлементыФормы.Расхождение.Значение = Расхождение;

    ЭлементыФормы.РасхождениеКонтрагент.Значение = Расхождение*(-1);

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