Добрый день.

Такая проблема. Есть обработка кнопки. В ней есть обращение к процедуре в общем модуле (на клиенте). В неё я передаю ЭтаФорму.
В процедуре обрабатывается ЭтаФорма.Объект.ТабличнаяЧасть. Добавляется строка. Но после обработки она не появляется на форме. Я отладчиком смотрю пока идет выполнение в модуле эта строка новая есть. А как только он возвращается в документ, строчка пропадает. В чем проблема может быть?

Спасибо.
---
Наш код и его код работают одинаково.
Я думаю где-то еще есть код, который все ломает. Понятия ж не имеет откуда это хозяйство вызывается и какие еще данные формы есть, какие еще процедуры вызываются. Может быть все что угодно.
---
Приведите код. Так просто не скажешь.
К примеру параметр процедуры может содержать Знач

```1c
    Процедура ДобавитьСтроку(Знач ЭтаФорма)
```

Тогда переменная ЭтаФорма существует только в контексте этой процедуры.
---
и немного информации о конфигурации. Обычные управляемые формы. Тонкий толстый клиент?
---
Насколько я понял это обычные формы, если так то после возвращения необходимо оповестить о изменении нашу форму, так как Вы записываете в объект
Форма.ДокументОбъект.Прочитать();
Форма.Обновить();
Форма.Модифицированность = Истина;
Форма.Активизировать();
---
```1c
    &НаКлиенте
    Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов, КоличествоДеталей=Неопределено)
    Результат = ОбщиеПроцедурыКлиент.ОбработатьШтрихкоды(ЭтаФорма, ДанныеШтрихкодов);
    КонецПроцедуры

    Функция ОбработатьШтрихкоды(Форма, ДанныеШК) Экспорт
    ДокументОбъект=Форма.Объект;
    ДокументОбъект.Штрихкода.Добавить();
    Возврат Истина;
    КонецФункции
```

ERP 2.2.4.93, УФ, Тонкий клиент
---
Добавление строки, это функция. Поэтому нужно так написать. И не забыть значения присвоить.

```1c
    Функция ОбработатьШтрихкоды(Форма, ДанныеШК) Экспорт
    ДокументОбъект=Форма.Объект;
    СтрокаТаблицы = ДокументОбъект.Штрихкода.Добавить();
    СтрокаТаблицы.Реквизит1 = "1";
    СтрокаТаблицы.Реквизит2 = "2";
    Возврат Истина;
    КонецФункции
```
---
В добавляете строку в ДокументОбъект

Измените на

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

```1c
    ДокументОбъект=Форма.Объект;
```

происходит не создание указателя, а копирование структуры со всеми вытекающими...

Посему писать надо так:

```1c
    Функция ОбработатьШтрихкоды(Форма, ДанныеШК) Экспорт
    СтрокаТаблицы = Форма.Объект.Штрихкода.Добавить();
    СтрокаТаблицы.Реквизит1 = "1";
    СтрокаТаблицы.Реквизит2 = "2";
    Возврат Истина;
    КонецФункции
```
---
Никто не говорит про объект и никто не хочет его получить. При выполнении кода ДокументОбъект=Форма.Объект;
мы получаем не объект, а просто присваиваем переменной ДокументОбъект объект формы, чтоб удобнее с ней работать дальше и не писать кучу точек. Поскольку ко всем переменным объекта формы, придется добавлять Форма.Объект..... Написание ДокументОбъект=Форма.Объект; ДокументОбъект.Штрихкода.Добавить(); и Форма.Объект.Штрихкода.Добавить(); однозначны.
---
перечитайте, что я написал ещё раз. это правда. каждое слово.
Ваш код создаёт копию структуры и именно поэтому в целевом объекте никаких изменений не происходит.
---
Не правда. Чтобы скопировать коллекцию данных формы нужно писать КопироватьДанныеФормы()
Меня так же ввело в заблуждение, потому что иногда нельзя менять данные форму напрямую и приходится копировать. В этом случае наоборот.
---
да, проверил - точно. но тем не менее проблема явно в том, что тут ДокументОбъект не указатель на Форма.Объект. И, опятьже, если попробовать наш код - что будет ?
---
Наш код и его код работают одинаково.
Я думаю где-то еще есть код, который все ломает. Понятия ж не имеет откуда это хозяйство вызывается и какие еще данные формы есть, какие еще процедуры вызываются. Может быть все что угодно.
---
Да вы правы, было дело в другой процедуре куда я передавал документ. Я ее переписал по другому алгоритму и все заработало.