При открытии формы заполнять реквизиты 1с

Рассмотрим такую задачу. Есть сложная форма, с большим количеством реквизитов. Для многих из них в конфигураторе установлено свойство Заполнять из данных заполнения . В результате при открытии этой формы для нового объекта ее реквизиты могут быть заполнены различными начальными значениями. Это зависит и от точки навигации, в которой расположена команда создания нового объекта, и от программного алгоритма, описанного в модуле самого объекта.

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

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

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

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

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

Читайте также  Почта не требующая номер телефона

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

В нашем случае платформа передала бы в данные заполнения ссылку на поставщика и ссылку на склад, по которым отобран список накладных. Поэтому мы в данные заполнения передаем структуру, содержащую два элемента: для реквизита Поставщик — ссылку на поставщика, а для реквизита Склад — ссылку на склад.

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

Как при программном открытии заполнять нужные мне реквизиты формы. Форма управляемая.
На клиенте.
ФормаДокумента = ПолучитьФорму(«Документ.Задача.Форма.ФормаДокументаУправляемая»);
ФормаДокумента.Открыть();

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

( голосов, в среднем: из 5)

Поддержите нас, расскажите друзьям!

СПРОСИТЕ в комментариях!

У каждой формы есть событие «При открытии», в в этой процедуре и пиши код для заполнения реквизитов формы.

А можно еще передать параметры в открываемую форму:

П = Новый Структура(«ИмяПараметра», ЗначениеПараметра);
ФормаДокумента = ПолучитьФорму(“Документ.Задача.Форма.ФормаДокументаУправляемая”, П);
ФормаДокумента.Открыть();

А на сервере как это сделать не подскажите? Определяю процедуру на сервере, программно создаю документ, записываю его и делаю рекурсию обратно на клиент и там открывают форму… как заполнять не понятно….

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

Читайте также  Почта россии подписаться на газету

Отправляя любую форму на сайте, вы соглашаетесь с политикой конфиденциальности данного сайта.

Частая задача — сделать так, чтобы форма нового объекта открывалась не «пустая», а уже заполненная некоторыми начальными данными. Для самых простых случаев можно использовать свойство ЗначениеЗаполнения , которое есть у реквизитов объектов конфигурации. В более сложных случаях можно использовать свойство ЗаполнятьИзДанныхЗаполнения . Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта.

Свойство ЗначениеЗаполнения

Например, есть документ Накладная с реквизитом Склад . В подавляющем большинстве случаев товары приходуются на главный склад, и лишь в отдельных редких случаях они могут приходоваться на другие склады. Чтобы облегчить работу оператора и не заставлять его каждый раз выбирать один и тот же склад в новых накладных, можно поступить следующим образом.

У реквизитов объектов конфигурации существует свойство ЗначениеЗаполнения . Реквизит Склад имеет тип ссылки на справочник Склады , а в справочнике Склады существует предопределенный элемент ГлавныйСклад . Тогда прямо в конфигураторе можно указать, что в новых документах реквизит Склад будет сразу же заполнен ссылкой на ГлавныйСклад :

Cвойство ЗаполнятьИзДанныхЗаполнения

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

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

Читайте также  Принтер hp deskjet f380 инструкция по применению

Собственный алгоритм заполнения реквизитов

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

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

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

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

  • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере .
  • Реквизит не заполнен — платформа попытается заполнить его из ДанныеЗаполнения . После этого снова проверит, заполнен реквизит или нет:
  • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере .
  • Реквизит не заполнен — платформа попытается заполнить его из ЗначениеЗаполнения . После этого будет вызван обработчик события ПриСозданииНаСервере .
Ссылка на основную публикацию
Adblock
detector