Имя: Пароль:
1C
1С v8
Почему разные формы одной обработки имеют разные значения реквизитов?
, ,
0 freelog
 
01.03.17
01:26
Внешняя обработка на УФ
В ней есть две формы. На обе формы выведены одни и те же поля (реквизиты объекта). Настроено автоматическое сохранение этих реквизитов.
Так вот, отрывается 1-я форма - там одни значения, из нее вызывается вторая форма - там совершенно другие значения.
Возможно, баян, но причины такой "странности" я ненагуглил.
1 kolts23381
 
01.03.17
01:35
Автоматическое сохранение реквизитов как реализовано?
2 Неверный Параметр И
 
01.03.17
01:55
Потому что на клиенте нет объекта. Есть сущность типа данныеформыструктура, по экземпляру для каждой формы. С чего бы ей иметь одинаковые значения реквизитов?
3 freelog
 
01.03.17
02:01
(2) ясно, а как заставить эту сущность сначала в одной форме записать данные в объект, а в другой потом их прочесть?
4 Fram
 
01.03.17
02:34
(3) передать во время вызова
5 Неверный Параметр И
 
01.03.17
02:37
(3) Ни хрена тебе не ясно.
На. Клиенте. Нет. Объекта. Забудь свои толстые хотелки где один экземпляр объекта на все формы.

При создании формы, например, справочника, платформа создает справочникобьект (по типу основного реквизита формы), читает в него данные из базы (если указан ключ-ссылка), компилирует и выполняет модуль, выполняет обработчики заполнения, если они есть (ну и автозаполняет что может из источника по галкам в метаданных), создает данные формы коллекции, копирует туда значения реквизитов из объекта и уничтожает объект нахрен.

При создании формы обработки данные читать неоткуда, поэтому в данныеформыколлекция попадает то, что возможно было изменено кодом части инициализации модуля объекта. Нового, свежесозданного экземпляра объекта. Для каждого экземпляра каждой формы.

Кури СП в сторону заполнения объекта из данных заполнения и параметров формы при открытии с клиента.
6 Неверный Параметр И
 
01.03.17
02:39
А еще лучше кури Радченко какого-нибудь.
7 Неверный Параметр И
 
01.03.17
02:49
И твои автосохраняемые значения автосохраняются из данные формы структуры в разрезе полного имени формы при закрытии формы. И то, если взведен флаг автоматически созраняемыезначенияизменены или изменен реквизит с флагом ищменяетданные.
После создания формы но все еще на сервере в данныеформыструктура записываются восстановленные значения, перебивая то, что там получилось из уже уничтоженного объекта. Для контроля дергается нужное серверное событие.
Так как сохранение происходит в разрезе полного имени формы, то фиг ты получишь значения , сохраненные из другой формы. Хотя они и связаны с одинаковыми именами реквизитов формы - реквизитов даннвеформыструктура
8 freelog
 
01.03.17
03:58
Много букв и эмоций, а реальной помощи - ноль.
Вдруг кому-то пригодится - как передать данные из одной формы обработки в другую:

ФормаУпр = ПолучитьФорму("ВнешняяОбработка.Обработочка.Форма.ФормаУпр");
ФормаУпр.Объект.Реквизит1 = Объект.Реквизит1;
ФормаУпр.Объект.Реквизит2 = Объект.Реквизит2;
ФормаУпр.Открыть();
9 Неверный Параметр И
 
01.03.17
04:02
А, так ты из этих, за которых писать надо... Ну дерзай. Безумству храбрых венки со скидкой.
10 freelog
 
01.03.17
04:06
(9) Я из тех, кто "меньше слов - больше дела"
11 Antony8x
 
01.03.17
06:42
+(10) молодец, поддерживаю
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан