1с как обновить форму программно

от admin

Как в УФ обновить форму?

Данные, отображаемые на форме меняются, но сама форма почему то не обновляется, оно обновляется только по кнопочке"Записать". Подскажите пожалуйста, как правильно принудительно обновить форму программно?

(1) Попробовал сделать так:
&НаКлиенте
Процедура ПозицииПослеУдаления(Элемент)
РассчитатьСкидку();
ЭтаФорма.Прочитать();
КонецПроцедуры

И форма просто восстанавливает первоначальное состояние. То есть, при удалении строки у меня пересчитываться данные, а потом хлобысь, и удаленная строка восстанавливается.

А вот такой функции как Обновить() у ЭтаФорма почему то нету.

расчет выполняется в модуле объекта?

Может надо ЗначениеВДанныеФормы сделать?

(3) Сначала запускается вот это:
&НаСервере
Процедура РассчитатьСкидку()
ВнешнийОбъект = ЭтаФорма.РеквизитФормыВЗначение("Объект");
ВнешнийОбъект.РассчитатьСкидку();
КонецПроцедуры

где ВнешнийОбъект.РассчитатьСкидку()
реализовано так:

Процедура РассчитатьСкидку() экспорт
СуммаСкидки=Позиции.Итог("Всего")*ПроцентСкидки/100;
СуммаСкидкиЗамена=Позиции.Итог("ВсегоЗамена")*ПроцентСкидки/100;
СуммаПослеСкидки=Позиции.Итог("Всего")-СуммаСкидки;
СуммаПослеСкидкиЗамена=Позиции.Итог("ВсегоЗамена")-СуммаСкидкиЗамена;
КонецПроцедуры

1С 8.3 : Как обновить форму списка из формы элемента?

Есть форма со списком элементов справочника. При нажатии на список открывается форма с элементом из списка, но при сохранении элемента первая форма не обновляется.

Как программно обновить форму списка?

В форме элемента необходимо написать код:

а, в форме списка добавить событие:

Распечатать

Похожие FAQ

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

Как настроить отбор строк?  5
Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство: в обычном приложении параметр для ОтборСтрок — Отбор. в управляемом Список НЕ модальных методов в 1С  4
Найдено в интернете но говорят что с диска ИТС. Как показать сообщение пользователю? методы: СообщениеПользователю и ПоказатьОповещениеПользователя  3
В 1С предполагается, что СообщениеПользователю выводятся для того, чтобы сообщить пользователю об ошибках. А для информирования о выполняемом действии рекомендуется использовать метод встроенного языка ПоказатьОповещениеПользователя() . Сооб Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Обновить управляемую форму программно 1с. Программное добавление и изменение элементов управляемых форм

Программная модификация формы может потребоваться в нескольких случаях:

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

В управляемой форме можно программно добавить, изменить и удалить:

  • реквизиты;
  • локальные команды;
  • элементы.

Все указанные операции возможны только на сервере.

Программное изменение формы имеет ограничения:

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

Изменение команд формы

Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды

Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.

В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.

Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .

Изменение реквизитов формы

Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( ) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.

Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .

Внимание!

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

Создадим новый реквизит формы с именем Покупатель:

ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты. Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов («СправочникСсылка.Контрагенты»), «Клиент»));

// Изменения состава реквизитов
);

Изменение элементов формы

Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:

Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить () , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:

  • ГруппаФормы;
  • ТаблицаФормы;
  • ПолеФормы;
  • КнопкаФормы.

Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие( , >) .

Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.

Добавление команды и связанной с ней кнопки:

// Создание команды
Команда = Команды. Добавить( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда . Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы. Добавить( «ИсторияИзменений» , Тип(«КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;

Добавление реквизита и связанного с ним поля ввода:

// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты. Добавить (Новый РеквизитФормы («Покупатель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы. Добавить(«Покупатель» , Тип(«ПолеФормы» ));
Элемент . Вид = ВидПоляФормы. ПолеВвода;
Элемент . ПутьКДанным = «Покупатель» ;

Назначение элементу формы обработчика события:

ЭлементПокупатель. УстановитьДействие («ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );

&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении (Элемент )
// Действия события
КонецПроцедуры

Внимание!

Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие() , рекомендуется задавать префикс Подключаемый_.

Внимание!

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

Если к вашей базе данных открыт общий доступ по сети, Microsoft Access обновляет информацию через установленные промежутки времени. Чтобы просмотреть самые актуальные данные, обновите записи в режиме таблицы или в режиме формы: на вкладке Главная нажмите кнопку Обновить все и выберите команду > Обновить . Происходит обновление существующих данных в таблице или форме. Этот процесс не переупорядочивает записи, не отображает новые и не удаляет несуществующие записи или записи, которые больше не соответствуют указанным условиям. Чтобы сделать обновление более тщательным, выполните повторный запрос данных с помощью макроса.

Примечание: Повторный запрос может занять много времени в зависимости от размера записей.

В этой статье

Обновление данных

Выполните одно из следующих действий:

Чтобы обновить данные в режиме таблицы или формы, на вкладке Главная в группе Записи нажмите Обновить все , а затем нажмите Обновить .

Чтобы обновить данные окне сводной таблицы или сводной диаграммы, на вкладке Конструктор в группе Данные нажмите Обновить сводные области .

Нажмите сочетание клавиш SHIFT+F9.

Указание интервала обновления

Вы можете указать интервал, по которому Access будет обновлять данные.По умолчанию Access обновляет данные каждые 60 секунд.

Нажмите кнопку Office.Появляется Outspace.

На левой панели Outspace нажмите Параметры .

На левой панели диалогового окна Параметры Access щелкните элемент Расширенные параметры .

На правой панели под Расширенными параметрами уточните значение Интервала обновлений (в секундах) .

Повторный запрос данных с помощью макроса

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

На вкладке Создание в группе Другие выберите Макрос . Если эта команда недоступна, нажмите стрелку под кнопкой Модуль или Модуль класса , а затем нажмите кнопку Макрос .

Щелкните стрелку в поле рядом с зеленым знаком плюса (+) и выберите пункт Запросить повторно .

Откройте нужную форму в TE000126615 . Если страница свойств не отображается, нажмите клавишу F4.

Событие на странице свойств.

На вкладке Событие щелкните стрелку в свойстве Получение фокуса и выберите макрос «Requery».

Используйте код, чтобы повторно запросить данные

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

Откройте нужную форму в Конструкторе. Если страница свойств не отображается, нажмите клавишу F4.

Убедитесь, что сама форма выбрана.Затем нажмите на вкладку Событие на странице свойств.

На вкладке Событие в свойстве Получение фокуса нажмите на кнопку Сборка .

В диалоговом окне Выберите конструктор нажмите на Конструктор кода .

В редакторе Visual Basic откроется новый модуль.

Повторный запрос данных в веб-приложении Access

Запросы в веб-приложении Access выполняются на сервере. Чтобы повторно запросить данные в веб-приложении Access, используйте макрос «ОбновитьЗапись». Этот макрос требует текущий набор записей.

Откройте необходимую форму, нажмите кнопку Макрокоманды , а затем выберите Текущая запись.

В Каталоге макрокоманд выберите ПовторноЗапроситьЗаписи . Если поле Выражение= оставить пустым, к результатам не будут применяться дополнительные фильтры, а если оставить пустым поле Порядок сортировки= , не будет применяться сортировка.

Фирма 1С постоянно выпускает новые релизы своих конфигураций: добавляет новые возможности, обновляет формы отчетности.

Поэтому конфигурации своих информационных баз тоже постоянно нужно обновлять. Программа 1С даже сама об этом напоминает и предлагает сделать обновление. Обновить 1С 8.3 самостоятельно можно двумя способами: через конфигуратор или через интернет. Рассмотрим пошаговую инструкцию по обновлению 1с и что же нужно сделать после этой процедуры на примере .

Обновление программы 1С 8 через интернет

Чтобы обновить 1С 8.3 по интернету, зайдем в меню «Администрирование» и найдем раздел «Обновление версии программы»:

Сначала зайдем в раздел «Настройка обновления программы через Интернет»:

В этом окне самое главное — ввести код пользователя и пароль, без них нельзя будет подключиться к сайту с обновлениями. Их Вы должны были получить вместе с . Если по каким-либо причинам у Вас их нет, рядом есть ссылка, по которой Вы перейдете в свой личный кабинет на сайте поддержки, и там будут все данные.

Здесь же можно отключить автоматическую проверку обновлений, настроить проверку по расписанию или при каждом входе в программу.

Оставляем переключатель на «Автоматическом обновлении» и жмем «Далее». Если найден более новый релиз программы, чем текущий, появится соответствующая информация.

Для моей конфигурации нашлась более новая версия, и сейчас 1С я попробую обновить. Обратите внимание на размер обновления, так как оно скачивается и распаковывается в каталог пользователя, который находится на диске «C:». Соответственно, на нем должно быть достаточно свободного места. Кстати, здесь можно почитать, какие изменения и новшества в обновлении. Нажимаем «Далее».

Как ни странно, программа не смогла с первого раза подключиться к своему серверу из-за того, что использовала мой старый код и пароль, хотя в настройках я указал все верно:

Нажимаю «ОК», ввожу верные данные и нажимаю «Далее». Надеюсь, у Вас такого окна не появится.

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

Получите 267 видеоуроков по 1С бесплатно:

Здесь же будет предложено сделать резервную копию перед обновлением. Я советую ОБЯЗАТЕЛЬНО делать резервную копию базы 1С, убедился на собственном опыте. Причем рекомендую выбрать последний пункт «Создавать резервную копию с сохранением в каталог». В этом случае, если при обновлении что-то пойдет не так, программа сама вернет все на место.

У меня обновление прошло без проблем и заняло примерно 45 минут.

Важное замечание! После установки обновления конфигурации программа может потребовать обновить платформу 1С. Как это сделать, можно прочесть в или увидеть в нашем видео:

Самостоятельное обновление 1С 8.3 через конфигуратор

Чтобы сделать обновление через конфигуратор, сначала нужно скачать файл обновления 1С с официального сайта или с диска ИТС. Как это сделать, я описывал в статье « «. Только строку в таблице, естественно, нужно выбрать другую (1С Бухгалтерия):

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

В моем случае подходит последний релиз 1С, и я его скачал. В отличие от файла с обновлением платформы, обновления конфигураций находятся в архивах. Также желательно поместить его в чистый каталог и запустить. После того как он распакуется, запускаем файл setup.exe:

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

Теперь заходим в конфигуратор:

Заходить, естественно, надо под пользователем с административными правами.

Сразу делаем резервную копию!

Теперь нужно зайти в меню «Конфигурация – Поддержка – Обновление конфигурации». Появится окно:

Если найдено одно или несколько обновлений конфигураций 1С 8.3, появится окно с выбором нужного:

Если найдено несколько доступных обновлений, программа последнее выделит жирным шрифтом.

Нажимаем «Готово». Появятся еще два информационных окна, там просто нужно нажать «Продолжить».

Начнется процесс обновления 1С. Через некоторое время может появиться окно сравнения конфигураций. Если Вы не специалист, то лучше там ничего не трогать. Жмем «Выполнить»:

Еще через некоторое время появится сообщение «Объединение конфигураций завершено». Нажимаем «ОК».

Теперь нужно обновить еще и конфигурацию информационной базы. Для этого заходим в меню «Конфигурация – Обновить конфигурацию базы данных».

Если система еще что-то спросит, нужно нажимать «Да» или «Принять».

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

обновить открытую форму 1с программно

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

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

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

Читать:
Как сделать майнкрафт на юнити

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

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

обновить открытую форму 1с программнообновить открытую форму 1с программно

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

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

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

Случай 1

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

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

обновить открытую форму 1с программно

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

Случай 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программное изменение управляемых форм

Чтобы упростить разработку изменений формы, можно воспользоваться небольшой хитростью. Все изменения можно сначала внести на форму через конфигурирование и отладить доработку формы. После преобразовать программные изменения в код. Изменения, которые нужны в форме изначально, стоит вносить в процедуре «ПриСозданииНаСервере». Для внесения изменений лучше сделать отдельную процедуру (например, «ДополнитьФормуПрограммно») и вызывать ее в штатной процедуре «ПриСозданииНаСервере», тогда изменение типовой формы 1С будет выглядеть одной строчкой.

Согласитесь, обновить доработанную таким образом форму значительно проще, чем вручную сравнивать и вносить все изменения формы при каждом обновлении. Конечно при сильном изменении типовой формы, могут потребоваться правки в процедуре программного дополнения формы, но такие случаи довольно редкие. Если в ходе разработки изменилась типовая структура объекта, то добавлять новые реквизиты на форму нет необходимости. Эти реквизиты будут доступны по пути «Объект.НовыйРеквизит».

Но иногда нужно добавить реквизит формы. Например, «Статус документа», который будет заполняться из специального регистра при открытии формы. Добавить новые реквизиты можно, открыв в 1С табличный документ, управляемая форма изменяется через команду ИзменитьРеквизиты(«ДобавляемыеРеквизиты», «УдаляемыеРеквизиты»).

«ДобавляемыеРеквизиты» и «УдаляемыеРеквизиты» – это массивы с элементами типа «РеквизитФормы». Тут все просто – «Добавляемые» добавляются, «Удаляемые» – удаляются.

Функция РеквизитФормы («ИмяРеквизита», «ТипРеквизита», «Путь», «Заголовок») создает объект типа «РеквизитФормы».

Тут важно понимать, что «ИмяРеквизита» содержит имя без точек. То есть имя без пути реквизита. Если нужно добавить реквизит, например, табличной части объекта, то уже в реквизите «Путь» указать путь к ТЧ реквизита – «Объект.Товары». «ТипРеквизита» задается через объект «ОписаниеТипов». После программного добавления реквизитов на форму нужно добавить элементы на форму или изменить свойства текущих. Для добавления новых элементов на форму есть два метода:

-Элементы.Добавить(«ИмяЭлемента», «ТипЭлемента», «Родитель»).

-Элементы.Вставить(«ИмяЭлемента», «ТипЭлемента», «Родитель», «Элемент»).

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

«ТипЭлемента» имеет не так уж много вариантов. Это «ПолеФормы», «ГруппаФормы», «ДекорацияФормы», «КнопкаФормы» и «ТаблицаФормы». Все остальные свойства назначаются через «Вид» создаваемого элемента. Например, поле с типом булево лучше сделать «флажком», установив вид элементу «ВидПоляФормы.ПолеФлажка».

В свойстве «Родитель» нужно указать группу или таблицу формы, в которую будет входить новый элемент. Также можно добавить элемент непосредственно на управляемую форму без подчинения другим элементам. Для функции вставить дополнительно указывается «Элемент», перед которым будет вставлен новый создаваемый элемент формы. Ну и конечно же, мало просто добавить элементы на форму. Система должна реагировать на действия пользователя с формой.

Для установки событий элементам нужно использовать процедуру УстановитьДействие («ИмяСобытия», «Действие»).

Получилась вот такая процедура программного заполнения управляемой формы:

Код для копирования:

Специальные предложения

обновить открытую форму 1с программно

обновить открытую форму 1с программно

обновить открытую форму 1с программно

обновить открытую форму 1с программно

обновить открытую форму 1с программно

обновить открытую форму 1с программно

обновить открытую форму 1с программно

обновить открытую форму 1с программно

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

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

Только из-за того, что расширение нельзя сравнивать с конфигурацией, у нас программное изменение формы.

После обновления запускается отладочная обработка, которая открывает все измененные формы. В коде создания есть ветки условия на отладку. Если не найден родитель или элемент перед которым нужно было разместить програмно-создаваемый (или если больше нет элемента, чьи свойства изменялись и т д.), оно информативно ругается через СообщениеПользователю. Плюсом условным оформлением подкрашиваются созданные поля. Было принято такое решение, потому что нельзя, чтобы добавленные элементы переезжали «в нарнию» и мы не знали об этом.

Я об этом читал, но когда сравнивал работу «до» и «после», разница была в 0.3 сек на самой дикоизмененной форме. (остальные с трудом набирают 0.01) Счел затраты оправданными. (Это форма сделки, она итак долго открывается, потому что при открытии проверяет бизнес-процесс на основании себя)

Когда все это хозяйство задумывал, хотел обработку, которая могла бы Сравнить типовую конфигурацию и основную. Планировалось выводить на форму дерево объектов формы (элементы, реквизиты и команды). В этом дереве подсвечивать добавленные объекты на форму в конфигураторе. Добавить команды, которые генерировали бы программный код создания этих изменений. Плюсом нужен был механизм сохранения настроек формы. Я выбрал xml. По плану в «ПриСозданииНаСервере» во временное хранилище помещается таблица со всем нужным, и дальше размещается на форме в виде дерева. А после генерации, настройки сохранялись бы в xml. (как оказалось, можно и без xml обойтись)
Собственно реализация оказалась дико сложной. Не все свойства элементов серилизуются, не все значения существуют на клиенте. иногда платформа без видимых причин просто падает в дамп (предполагаю, что остается связь значений свойств формы в этой ТЗ с формой которая после ПриСозданииНаСервере закрывается)
Поэтому я решил парсить выгрузку формы в файлы (вроде сразу xml и чего париться то, собирать что-то). Естественно это еще затратнее, а поддерживать еще затратнее).

Сейчас это просто 2 общих модуля, которые вызываются из СобытияФорм и СобытияФормКлиент.
Как настанет свободный промежуток, хочу сделать справочник, в котором будут храниться изменения форм (так же с отображением дерева объектов формы, но без сравнений с типовой). Общиймодуль с кэшированием, чтобы вся информация каждый раз не собиралась (Сначала собирается массив всего что нужно сделать с формой, а потом разом все это меняется). Это даст возможность из предприятия добавлять/изменять формы без нужды выгнать всех пользователей (Возможность применить изменения только по субботам 1 час, динамическое обновление не используем потому-что ужасы творит иногда)
И в планах сделать аналог патча. Добавить код, чтобы можно было вызывать определенные процедуры из внешней обработки, в случае косяка в процедуре команды или где-то еще.

1с 8 управляемое приложение. Обновить форму

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

Обновить() не работает в управляемых формах

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

Обновляет объект управляемой формы.

Тонкий клиент, веб-клиент, сервер, толстый клиент.

(18) В таблицу формы, отображающую ТЧ добавлена служебная колонка, которая заполняется по строкам при чтении на сервере. При записи документа извне были добавлены строки. (15) строки эти прочитает, да. А как же значение служебной колонки кто его заполнит и когда? Добавлять вызов заполнения после ЗначениеВРеквизитФормы? Это уже точно г-код.

P/s А Вообще-то это основы.

(19) ты предложил совсем другую задачу нежели объявлена автором.

Делать два серверных выхова при такой задачи это г-код

P/s А Вообще-то это основы.

Объясняю суть проблемы. Так как уже совсем запарилась. понимаю суть проблемы но не понимаю почему так.

Я понимаю что это из-за того что я записываю элемент справочника в котором ссылаюсь на текущий документ, но мне ведь это и надо.

Если нажать Обновить на форме документа то все становится хорошо. но ведь в период между записью документа и Действиями со справочником могли что-то изменить в самом документе и эти изменения не сохранятся а это совершенно не гуд

Программное добавление и изменение элементов управляемых форм

Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.

Программная модификация формы может потребоваться в нескольких случаях:

В управляемой форме можно программно добавить, изменить и удалить:

Все указанные операции возможны только на сервере.

Программное изменение формы имеет ограничения:

Изменение команд формы

Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.

Изменение реквизитов формы

Внимание!

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

Создадим новый реквизит формы с именем Покупатель:

// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );

Изменение элементов формы

Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.

Добавление команды и связанной с ней кнопки:

Добавление реквизита и связанного с ним поля ввода:

Назначение элементу формы обработчика события:

&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры

Внимание!

Внимание!

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

Остались вопросы?
Спросите в комментариях к статье.

2 комментария

Ваш текст:
В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы.
Верный текст:
(необязательный)
Тип: Массив.
Массив, содержащий СТРОКИ, описывающие ПУТИ к удаляемым реквизитам.

Related Posts