Методика обновления формы объекта данных при изменении объекта

0. 6342 08.03.20 12:18 Сейчас в теме
В формах объектов данных часто встречаются элементы, косвенно связанные с объектом. Логику обновления этих элементов при изменении объекта обычно вызывают из обработчиков ПриСозданнииНаСервере и ПриОткрытии, забывая про наличие других способов изменения объекта. В статье предложена методика для обычных и управляемых форм, учитывающая все способы.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. MVK80 09.03.20 12:18 Сейчас в теме
(0), а зачем использовать ЭтаФорма. в управляемых формах?
2. tormozit 6342 09.03.20 12:48 Сейчас в теме
(1) Затем, что методика приведена для версий платформы 8.2-8.3.17. Свойство ЭтаФорма совместимо со всеми указанными версиями платформы.
8. Алексей Воробьев 129 10.03.20 07:33 Сейчас в теме
(1) Стараюсь всегда использовать ЭтаФорма в программном коде при обращении к реквизитам формы и даже к элементам формы (ЭтаФорма.Элементы...). Не уверен, насколько это правильно с точки зрения стандартов разработки, но как по мне - это повышает читабельность кода в плане визуального разделения реквизитов формы и обычных переменных...
10. tormozit 6342 10.03.20 10:37 Сейчас в теме
(8) Да. Имя "ЭтотОбъект" имеет бОльшую двусмысленность, чем "ЭтаФорма". Тем более что в обычных формах обычно присутствовало свойство ЭтотОбъект и имело другой смысл.
12. sa1m0nn 22 14.03.20 10:49 Сейчас в теме
(1)
Если реквизиты формы добавлены программно (а в типовых формах на внедрении это отличный прием на длительную поддержку), то прямое обращение к программносозданному реквизиту без ЭтаФорма не даст модулю формы скомпилироваться.
13. MVK80 14.03.20 13:41 Сейчас в теме
(12), это понятно. Только надо использовать ЭтотОбъект вместо ЭтаФорма, если вы не делаете продукт как Сергей с поддержкой платформы от 8.2 Но где вы увидели в данной статье программно добавленные реквизиты?

PS. И скорей всего модуль скомпилируется, просто ваш реквизит не будет изменен, потому что то, что вы напишите без ЭтаФорма. или ЭтотОбъект. будет простой переменной, которой и присвоится значение. Сам давно использую программное изменение форм, но мой вопрос был не об этом, а о том, что в управляемых формах(если не оглядываться на режим совместимости) можно напрямую к реквизитам формы обращаться, если они интерактивно добавлены на форму, как, например, в этой статье.
3. par_62 09.03.20 16:34 Сейчас в теме
А что тут особенного? В литературе по 1с описаны события формы,описаны действия платформы для объектов при этих событиях.
По моему,вы зря потратили время на статью. Можно было просто дать ссылку на книгу или ресурс
4. tormozit 6342 09.03.20 16:55 Сейчас в теме
(3) Особенное здесь в том, что я описал простую и универсальную методику корректного обновления формы при изменении объекта. Если что то похожее уже публиковалось, то приведите ссылки. Поделитесь своим пример построения аналогичной логики.
RomanKod; mvxyz; +2 Ответить
5. kolya_tlt 27 09.03.20 21:36 Сейчас в теме
Когда же кнопку Перечитать упразднят... ее смысл конечному пользователю крайне сложно обьяснить.
6. tormozit 6342 09.03.20 21:57 Сейчас в теме
(5) Ее не упразднят. Она полезна в случаях

Случай 1.
Объект данных отображаемый в форме мог быть изменен в БД с момента его загрузки в форму. Типичные способы таких изменений
1. в другой форме в этом же клиентском приложении
2. этим же пользователем в другом клиентском приложении в этой же базе
3. другим пользователем
4. фоновым процессом
Тогда при попытке начать изменение любого поля формы, напрямую связанному с данными (флаг "Изменяет данные"), пользователь увидит предупреждение "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!" И тогда, чтобы получить возможность редактировать объект, нужно будет его перечитать либо переоткрыть форму.

Случай 2.
Пользователь изменил данные в форме и решил отменить сделанные изменения, но продолжить редактировать объект от его текущего состояния в БД.

Добавил эту информацию в статью.
Прикрепленные файлы:
IgorS; kolya_tlt; Алексей Воробьев; +3 Ответить
7. Алексей Воробьев 129 10.03.20 07:28 Сейчас в теме
(6) Да, все так. Но обычно для среднестатистического пользователя существование кнопки "Перечитать" и ее назначение - секрет.

Варианты "доведения до сведения": отразить в инструкции (а кто ее читает?), подсказать сообщением или предупреждением, что именно нужно нажать (а на каком событии?).
Ну и самый правильный вариант: повышать уровень среднестатистического пользователя :-)
11. the1 892 12.03.20 12:18 Сейчас в теме
(7) У меня юзеры удивляются, почему при нажатии кнопки "Перечитать" форма не заполняется "правильными" значениями) Например, почему химсостав блюда не рассчитывается по его спецификации
9. Cyberhawk 128 10.03.20 10:29 Сейчас в теме
ее вызов из уже открытой формы (из ПриЧтенииНаСервере и ПослеЗаписиНаСервере) должен выполнять все действия
В таком случае - если действия с формой включают программное добавление реквизитов и элементов управления на форму - придется в коде проверять, что реквизит / элемент уже не добавлен ранее.
14. AneJIbcuH 32 23.12.20 11:04 Сейчас в теме
Подскажите, пожалуйста, такой момент. Имеем обычную форму, на форме кнопка, которая выгружает данные на устройство (ТСД)
Далее приходят измененные данные (срабатывает фоновое задание, которое модифицирует объект).
Всё время форма не закрывалась. Как в этом случае перечитать данные (чтобы на форме обновились, не переоткрывая форму) ?
Как быть, если несколько форм открыли (несколько разных документов одного вида) и потом их скопом модифицировали, как все обновить, не переоткрывая каждый?
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Екатеринбург
зарплата до 130 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 150 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 200 000 руб.
Полный день

Архитектор 1С
Пермь
зарплата до 200 000 руб.
Полный день

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день