Данные таблицы на форме

1. konyashkingn 2 24.05.18 10:54 Сейчас в теме
Добрый день.

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

Спасибо.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
18. dandykry 10 24.05.18 15:09 Сейчас в теме +0.1 $m
(17) Наш код и его код работают одинаково.
Я думаю где-то еще есть код, который все ломает. Понятия ж не имеет откуда это хозяйство вызывается и какие еще данные формы есть, какие еще процедуры вызываются. Может быть все что угодно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 10 24.05.18 11:15 Сейчас в теме
(1) Приведите код. Так просто не скажешь.
К примеру параметр процедуры может содержать Знач

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


Тогда переменная ЭтаФорма существует только в контексте этой процедуры.
3. dandykry 10 24.05.18 11:19 Сейчас в теме
(1) и немного информации о конфигурации. Обычные управляемые формы. Тонкий толстый клиент?
4. harvester_sorrow 24 24.05.18 11:35 Сейчас в теме
Насколько я понял это обычные формы, если так то после возвращения необходимо оповестить о изменении нашу форму, так как Вы записываете в объект
Форма.ДокументОбъект.Прочитать();
Форма.Обновить();
Форма.Модифицированность = Истина;
Форма.Активизировать();
5. konyashkingn 2 24.05.18 11:47 Сейчас в теме
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов, КоличествоДеталей=Неопределено)
Результат = ОбщиеПроцедурыКлиент.ОбработатьШтрихкоды(ЭтаФорма, ДанныеШтрихкодов);
КонецПроцедуры

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


ERP 2.2.4.93, УФ, Тонкий клиент
6. imispb 5 24.05.18 12:28 Сейчас в теме
Добавление строки, это функция. Поэтому нужно так написать. И не забыть значения присвоить.
Функция ОбработатьШтрихкоды(Форма, ДанныеШК) Экспорт
ДокументОбъект=Форма.Объект;
СтрокаТаблицы = ДокументОбъект.Штрихкода.Добавить();
СтрокаТаблицы.Реквизит1 = "1";
СтрокаТаблицы.Реквизит2 = "2";
Возврат Истина;
КонецФункции
10. dandykry 10 24.05.18 12:55 Сейчас в теме
(6) В добавляете строку в ДокументОбъект

Измените на

Функция ОбработатьШтрихкоды(Форма, ДанныеШК) Экспорт
Форма.Объект.Штрихкода.Добавить();
Возврат Истина;
КонецФункции
sergathome; +1 Ответить
12. imispb 5 24.05.18 13:59 Сейчас в теме
(10) те же яйца. ДокументОбъект - это название переменной а не сам объект. Ещё раз, изначально у (1) Германа написан рабочий код и он должен добавлять строку в таблицу на форме. Можете проверить.
dandykry; +1 Ответить
15. dandykry 10 24.05.18 14:12 Сейчас в теме
(12) Не поленился и посмотрел. Да вы правы, поведение одинаковое. Значит автор нам не всю информацию дал. Что-то еще есть, или не там смотрит
7. imispb 5 24.05.18 12:32 Сейчас в теме
Проверь общий модуль ОбщиеПроцедурыКлиент точно на клиенте компилируется?
8. reminator 24.05.18 12:42 Сейчас в теме
Элементы.Штрихкода.Обновить();
9. imispb 5 24.05.18 12:46 Сейчас в теме
(8) Должно работать без всяких обновлений элементов формы. Иначе при обновлении, он считает данные из объекта БД и соответственно сотрёт, то что мы добавили на форме. Код написан правильно и если реквизиты табличной части на форме отображаются и общий модуль компилируется на клиент(управляемое приложение), тогда всё должно отображаться на форме.
11. sergathome 4 24.05.18 13:10 Сейчас в теме
Ничего не выйдет. Суть проблемы - на форме Объект - это не тип ОбъектДокумент, а данные формы больше похожие на структуру, что бы там не писал конструктор формы (ДокументОбъект.РеализацияТоваровУслуг, например). Поэтому при выполнении кода вида
ДокументОбъект=Форма.Объект;

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

Посему писать надо так:
Функция ОбработатьШтрихкоды(Форма, ДанныеШК) Экспорт
СтрокаТаблицы = Форма.Объект.Штрихкода.Добавить();
СтрокаТаблицы.Реквизит1 = "1";
СтрокаТаблицы.Реквизит2 = "2";
Возврат Истина;
КонецФункции
13. imispb 5 24.05.18 14:05 Сейчас в теме
(11) Никто не говорит про объект и никто не хочет его получить. При выполнении кода ДокументОбъект=Форма.Объект;
мы получаем не объект, а просто присваиваем переменной ДокументОбъект объект формы, чтоб удобнее с ней работать дальше и не писать кучу точек. Поскольку ко всем переменным объекта формы, придется добавлять Форма.Объект..... Написание ДокументОбъект=Форма.Объект; ДокументОбъект.Штрихкода.Добавить(); и Форма.Объект.Штрихкода.Добавить(); однозначны.
14. sergathome 4 24.05.18 14:10 Сейчас в теме
(13) перечитайте, что я написал ещё раз. это правда. каждое слово.
Ваш код создаёт копию структуры и именно поэтому в целевом объекте никаких изменений не происходит.
16. dandykry 10 24.05.18 14:22 Сейчас в теме
(14) Не правда. Чтобы скопировать коллекцию данных формы нужно писать КопироватьДанныеФормы()
Меня так же ввело в заблуждение, потому что иногда нельзя менять данные форму напрямую и приходится копировать. В этом случае наоборот.
sergathome; +1 Ответить
17. sergathome 4 24.05.18 14:46 Сейчас в теме
(16) да, проверил - точно. но тем не менее проблема явно в том, что тут ДокументОбъект не указатель на Форма.Объект. И, опятьже, если попробовать наш код - что будет ?
18. dandykry 10 24.05.18 15:09 Сейчас в теме +0.1 $m
(17) Наш код и его код работают одинаково.
Я думаю где-то еще есть код, который все ломает. Понятия ж не имеет откуда это хозяйство вызывается и какие еще данные формы есть, какие еще процедуры вызываются. Может быть все что угодно.
19. konyashkingn 2 24.05.18 15:57 Сейчас в теме
(18) Да вы правы, было дело в другой процедуре куда я передавал документ. Я ее переписал по другому алгоритму и все заработало.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот