1с управляемые формы перечитать данные формы объекта

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

Актуально для платформы 1С 8.2-8.3.17 (выше не проверял)

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

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

Также пусть в объекте есть реквизит типа ХранилищеЗначения, тип которого мы также хотим отображать в форме. Добавляем в форму реквизит ТипЗначенияВХранилище типа Строка и отображаем его в одноименное нередактируемое поле.

5b33b092bbe504acf682bab3a4cf9dffe8a0232964be9a2c7c6452491d37ff4d

В каких же ситуациях нам потребуется обновлять эти косвенно связанные с объектом реквизиты?

Разумеется это нужно вызывать в событии ПриИзменении поля Наименование. А вот дальше многие ограничиваются только вызовом в ПриСозданииНаСервере[упр] и ПриОткрытии[обыч]. Тем самым они не учитывют

Примеры использования команды «Перечитать»

Случай 1

Объект данных, отображаемый в форме, мог быть изменен в БД с момента его загрузки в форму. Типичные способы таких изменений

Тогда при попытке начать изменение любого поля формы, напрямую связанного с данными (флаг «Изменяет данные»), пользователь увидит предупреждение «Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!»

85f153ee0a5824f358c8723297ac1d4a

Это результат срабатывания так называемой оптимистической объектной блокировки. Она гарантирует, что если пользователь изменяет объект, то его изменения не «затрут» изменения, сделанные другими сеансами или другими программными объектами этого же сеанса. И тогда, чтобы получить возможность редактировать объект, нужно будет его перечитать либо переоткрыть форму.

Случай 2

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

В каких событиях обновлять форму?

Чтобы учесть все эти тонкости, нужно всю логику обновления косвенно связанных с объектом элементов формы поместить в процедуру ПриСозданииПриЧтенииНаСервере и вызывать ее из следующих обработчиков событий формы:

Управляемая форма
Обычная форма

Управляемая форма

В управляемой форме при открытии существующего объекта выполняются два обработчика: сначала ПриЧтенииНаСервере и затем ПриСозданииНаСервере. Поэтому процедура ПриСозданииПриЧтенииНаСервере будет вызываться 2 раза подряд и нужно не задублировать выполнение логики обновления формы. Элементы формы могут зависеть как от данных объекта, доступных через реквизит формы, так и от недоступных через него (реквизиты типа ХранилищеЗначений), которые доступны только одном из них (ПриЧтенииНаСервере). Поэтому в процедуре ПриСозданииПриЧтенииНаСервере надо предусмотреть оба вызова таким образом, чтобы при создании формы существующего объекта при ее вызове из ПриЧтенииНаСервере выполнилась только логика работы с хранилищами значений, а при последующем вызове из ПриСозданииНаСервере выполнилась только логика, зависящая от остальных данных объекта. При этом ее вызов из уже открытой формы (из ПриЧтенииНаСервере и ПослеЗаписиНаСервере) должен выполнять все действия. Для этого создадим в общем модуле функцию ЭтоВызовПослеОткрытияФормы, где будем проверять наличие параметра ТолькоПросмотр у формы. Тогда процедура ПриСозданииПриЧтенииНаСервере будет выглядеть так

Из процедуры ПриСозданииПриЧтенииНаСервере можно выделить всю легкую клиентскую логику в процедуру НастроитьЭлементыФормы с директивой НаКлиентеНаСервереБезКонтекста. Такую легкую и доступную во всех контекстах формы процедуру можно звать при большинстве изменений реквизитов, которые должны менять косвенно связанные элементы формы.

Пример модуля управляемой формы

Обычная форма

В обычной форме благодаря наличию события ПриИзмененииДанных логику обновления формы можно помещать прямо в его обработчик. Здесь также стоит вынести всю легкую логику в процедуру НастроитьЭлементыФормы по аналогии с управляемой формой.

Пример модуля обычной формы

Применяю данную методику уже много лет.

Прикладываю выгрузку демонстрационной базы, где на примере справочника и регистра сведений показаны все описанные в статье проблемы и сама методика.

Источник

Перечитывание измененного объекта

В ситуациях, когда несколько пользователей открыли один объект для редактирования, начать его редактировать сможет только один пользователь, а остальные получат сообщение о том, что запись в базе данных была изменена или удалена. Это означает, что запись изменена или удалена в результате действий другого пользователя.

В этой ситуации есть возможность перечитать данные, отображаемые в форме, из информационной базы еще раз. Сделать это можно с помощью кнопки «Перечитать», размещенной обычно в верхней командной панели формы.

Рассмотрим ее действие на примере. Пусть с информационной базой работают два пользователя, Пользователь1 (слева) и Пользователь2 (справа). Оба они открыли форму редактирования валюты EUR:

reload 1 reload 2

Пользователь2 изменил количество разрядов при выводе дробной части в виде числа и записал изменения (кнопка «Записать»):

reload 1 reload 3

Пользователь1 попытался также отредактировать полное наименование валюты, однако сделать этого не смог:

reload 4

Пользователь2 закрыл форму редактирования валюты EUR. Пользователь1 опять пытается пытается изменить полное наименование валюты EUR, однако снова не может этого сделать.

Для того, чтобы Пользователь1 смог сделать свои изменения, он должен сначала перечитать данные. Сделать это можно с помощью кнопки reload 6(«Перечитать данные объекта»):

reload 7

После того, как Пользователь1 перечитает данные объекта, он увидит изменения, сделанные Пользователем2 и ему станет доступно редактирование полного наименования валюты:

Источник

1с перечитать данные формы программно

В ситуациях, когда несколько пользователей открыли один объект для редактирования, начать его редактировать сможет только один пользователь, а остальные получат сообщение о том, что запись в базе данных была изменена или удалена. Это означает, что запись изменена или удалена в результате действий другого пользователя.

В этой ситуации есть возможность перечитать данные, отображаемые в форме, из информационной базы еще раз. Сделать это можно с помощью кнопки «Перечитать», размещенной обычно в верхней командной панели формы.

Рассмотрим ее действие на примере. Пусть с информационной базой работают два пользователя, Пользователь1 (слева) и Пользователь2 (справа). Оба они открыли форму редактирования валюты EUR:

Пользователь2 изменил количество разрядов при выводе дробной части в виде числа и записал изменения (кнопка «Записать»):

Пользователь1 попытался также отредактировать полное наименование валюты, однако сделать этого не смог:

Пользователь2 закрыл форму редактирования валюты EUR. Пользователь1 опять пытается пытается изменить полное наименование валюты EUR, однако снова не может этого сделать.

Для того, чтобы Пользователь1 смог сделать свои изменения, он должен сначала перечитать данные. Сделать это можно с помощью кнопки («Перечитать данные объекта»):

После того, как Пользователь1 перечитает данные объекта, он увидит изменения, сделанные Пользователем2 и ему станет доступно редактирование полного наименования валюты:

Расширение управляемой формы для справочника (Managed form extension for catalogs) — Прочитать (Read)
Синтаксис: Прочитать()
Описание: Обновляет объект управляемой формы.
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.

print

Похожие FAQ

Еще в этой же категории

Заполнение списка значений в элементе поле выбора на форме 9
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 8
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Как обновить динамический список или реквизит на форме клиента? 6
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Посмотреть все в категории Работа с Формой (Диалог) и её элементами

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

Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида «Заполнение объекта».

Заполнение формы объекта с помощью внешней обработки

Строка с соответствующим параметром в модуле обработки:

Подключив обработку и указав, для какого документа она назначена, мы получим в форме документа команду. Тип команды задаётся при создании внешней обработки, и от него зависит, где и как будет выполняться обработчик команды. Для наших целей может подойти один из следующих типов команд:

Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.

В конечном итоге код в модуле обработки будет выглядеть примерно так:

В общем счёте задача решена. Однако, у такого способа есть небольшой недостаток – команда на форме размещается в определённом месте, а не там, где мы хотим её разместить. К примеру, на форме уже есть группа команд, включающая в себя команды заполнения, и мы хотели бы видеть новую команду в этой группе, но при подключении обработки команда на форме будет расположена отдельно от группы.

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

Заполнение формы объекта посредством обработчика команды в модуле формы

Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.

Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом «ДанныеФормыСтуктура». Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка «Объект недоступен для изменения».

Вот теперь и форма заполнена, и кнопка команды там, где хочется.

Источник

Как обновить форму документа после изменения данных

хотела обновить реквизит измененный

УправляемаяФорма (ManagedForm)
ОбновитьОтображениеДанных (RefreshDataRepresentation)
Синтаксис:

Тип: ГруппаФормы; ТаблицаФормы; ПолеФормы; Массив.
Если параметр задан, то установка значений (и обновление) будет выполняться только для тех элементов, которые заданы в параметре. Если в качестве значения передан пустой массив, то ни для каких элементов формы установка значений выполнена не будет.
После вызова метода признак необходимости установки значений и обновления для элементов формы сбрасывается: если после вызова метода никакие данные формы не меняются, то ни для никаких элементов, кроме указанных, текст обновлен не будет.
Если параметр имеет значение типа Массив, то элементами массива могут быть только значения типа ГруппаФормы, ТаблицаФормы, ПолеФормы.
Если массив содержит значение другого типа, то будет выдано исключение о неверном типе параметра.
Вызов метода ОбновитьОтображениеДанных с параметром имеет смысл только внутри обработчика ВнешнееСобытие, обработчиков ожидания формы и обработчика ОбработкаОповещения.
В обработчиках других событий вызов этого метода с параметром аналогичен вызову без параметра (при необходимости данные будут установлены всем элементам управления).
Описание:

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

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Примечание:

В веб-клиенте обновление элементов управления происходит не сразу, а после окончания выполнения кода на встроенном языке.

Источник

1с перечитать данные формы программно

В ситуациях, когда несколько пользователей открыли один объект для редактирования, начать его редактировать сможет только один пользователь, а остальные получат сообщение о том, что запись в базе данных была изменена или удалена. Это означает, что запись изменена или удалена в результате действий другого пользователя.

В этой ситуации есть возможность перечитать данные, отображаемые в форме, из информационной базы еще раз. Сделать это можно с помощью кнопки «Перечитать», размещенной обычно в верхней командной панели формы.

Рассмотрим ее действие на примере. Пусть с информационной базой работают два пользователя, Пользователь1 (слева) и Пользователь2 (справа). Оба они открыли форму редактирования валюты EUR:

Пользователь2 изменил количество разрядов при выводе дробной части в виде числа и записал изменения (кнопка «Записать»):

Пользователь1 попытался также отредактировать полное наименование валюты, однако сделать этого не смог:

Пользователь2 закрыл форму редактирования валюты EUR. Пользователь1 опять пытается пытается изменить полное наименование валюты EUR, однако снова не может этого сделать.

Для того, чтобы Пользователь1 смог сделать свои изменения, он должен сначала перечитать данные. Сделать это можно с помощью кнопки («Перечитать данные объекта»):

После того, как Пользователь1 перечитает данные объекта, он увидит изменения, сделанные Пользователем2 и ему станет доступно редактирование полного наименования валюты:

Расширение управляемой формы для справочника (Managed form extension for catalogs) — Прочитать (Read)
Синтаксис: Прочитать()
Описание: Обновляет объект управляемой формы.
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.

print

Похожие FAQ

Еще в этой же категории

Заполнение списка значений в элементе поле выбора на форме 9
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 8
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Как обновить динамический список или реквизит на форме клиента? 6
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Посмотреть все в категории Работа с Формой (Диалог) и её элементами

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

Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида «Заполнение объекта».

Заполнение формы объекта с помощью внешней обработки

Строка с соответствующим параметром в модуле обработки:

Подключив обработку и указав, для какого документа она назначена, мы получим в форме документа команду. Тип команды задаётся при создании внешней обработки, и от него зависит, где и как будет выполняться обработчик команды. Для наших целей может подойти один из следующих типов команд:

Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.

В конечном итоге код в модуле обработки будет выглядеть примерно так:

В общем счёте задача решена. Однако, у такого способа есть небольшой недостаток – команда на форме размещается в определённом месте, а не там, где мы хотим её разместить. К примеру, на форме уже есть группа команд, включающая в себя команды заполнения, и мы хотели бы видеть новую команду в этой группе, но при подключении обработки команда на форме будет расположена отдельно от группы.

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

Заполнение формы объекта посредством обработчика команды в модуле формы

Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.

Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом «ДанныеФормыСтуктура». Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка «Объект недоступен для изменения».

Вот теперь и форма заполнена, и кнопка команды там, где хочется.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с управляемые формы переменные модуля формы
  • 1с управляемые формы передать форму на сервер