- Как программно передать необходимые данные для заполнения при открытии формы?
- Как открыть форму, заполнив ее данные
- Заполняем форму объекта с внешней обработкой
- Заполнение формы объекта обработчиком команды в модуле формы
- Как открыть форма с paddingem
- Программное открытие форм в управляемом приложении 1С
- 1. Как открыть объектную форму в управляемом приложении, если она ссылка.
- 2. Как открыть форму выбора и потом получить выбранное значение.
- 3. Как открыть форму существующего объекта
- 4. Как открыть новый объект формы
- 5. Как открыть форму нового объекта и заполнить ее на основе чего-либо
- 6. Как открыть форму и установить в ней выборку
- 7. Как открыть форму записи журнала информации
- Как создать документ и открыть его форму?
Как программно передать необходимые данные для заполнения при открытии формы?
Рассмотрим такую задачу. Он имеет сложную форму с множеством деталей. Для многих из них в конфигураторе задается свойство Заполнить из данных заполнения. В результате, когда эта форма открывается для нового объекта, его реквизиты могут быть заполнены разными начальными значениями. Это зависит как от точки навигации, где находится команда создания нового объекта, так и от алгоритма работы программы, описанного в модуле самого объекта.
Теперь предположим, что в процессе выполнения некоторого кода , эта форма должна быть открыта. Но не «пустой», а так, чтобы его реквизиты были заполнены значениями, которые должны получиться в результате работы всех алгоритмов, содержащихся в форме.
Можно было бы получить форму программный объект, а затем напрямую задавать значения его атрибутов. Но тогда в этом месте программного кода нужно было бы продублировать весь алгоритм, отвечающий за начальное заполнение формы. Такое решение может быть трудоемким и сложным в сопровождении, потому что, если этот алгоритм изменится, его придется менять не в одном месте, в объектном модуле, а синхронно в нескольких других местах конфигурации. Нет никакой гарантии, что что-то не потеряется и что все эти изменения будут работать корректно.
Поэтому есть другой более удобный и простой способ решить эту проблему.
При программном открытии файла форму, вы можете передать ей набор данных, которые она получит, если откроется интерактивной командой.
Например, вам нужно программно открыть новую форму счета-фактуры точно так же, как если бы она была открыта интерактивной командой из списка счетов-фактур, выбранных поставщиком и складом. Предположим, что у нас есть необходимые ссылки в переменных LinkToSupplier и LinkToWarehouse. Затем вы можете использовать следующий код:
Данные заполнения можно передать в открытую форму с помощью параметра Fill Value. Этот параметр должен использоваться для передачи данных, которые платформа передала бы туда, если бы было выполнено аналогичное интерактивное действие.
В нашем случае платформа передала бы в данных заполнителя ссылку на провайдера и ссылку на магазин, по которому выбирается список накладных. Поэтому в данные о населении мы передаем структуру, содержащую два элемента: для реквизита «Продавец» — ссылку на поставщика и для реквизита «Склад» — ссылку на объект «Склад», не открывая форму этого объекта. В этом случае вы можете создать объект программно, а затем вызвать его метод Fill(). В этом случае платформа будет выполнять все те же действия и вызывать все те же события, что и при интерактивном создании нового объекта. В методе Fill() вы можете передать структуру, содержащую данные заполнения, в качестве параметра методу Fill() таким же образом:
Источник
Как открыть форму, заполнив ее данные
Довольно часто встречаются задачи, когда нужно программно заполнить форму какого-то объекта. Допустим, у нас есть форма документа, в форме есть детали, и нам нужно создать команду для заполнения этих деталей. Предполагается, что данные для заполнения поступают по запросу.
Если конфигурация типична, то, вероятно, самый простой способ решить эту проблему — создать внешний рендер типа «Заполнить объект».
Заполняем форму объекта с внешней обработкой
Строка с соответствующим параметром в модуле обработки:
После подключения обработки и указания для какого документа она назначена, получаем команду в форма документа. Тип команды задается при создании внешней визуализации и определяет, где и как будет выполняться обработка команды. Для наших целей может подойти один из следующих типов команд:
- ServerMethodCall : обработчик команды находится в модуле обработки;
- ClientMethodCall : обработчик команды находится в модуле формы для обработки;
- FillingForm : Обработчик команд находится в модуле обработки и позволяет работать с данными формы. Он также позволяет вызывать серверную процедуру из модуля объектной формы. В этом случае вы можете заполнить форму без написания объекта.
Что вам нужно, так это возможность заполнить форму, не вводя объект. Ведь пользователь наверняка рассчитывает заполнить форму после нажатия на кнопку, а авторизуется позже, когда проверит результат заполнения. Итак, выбираем тип команды — FillingForm .
В итоге код в модуле рендеринга будет выглядеть так:
В общем, задача решена. Однако у этого способа есть небольшой недостаток: команда в форме размещается в определенном месте, а не там, где мы хотим ее разместить. Например, в форме уже есть группа команд, содержащая команды заполнения, и мы хотели бы видеть в этой группе новую команду, но при присоединении обработки команда в форме будет размещена отдельно от группы.
В этом смысле можно реализовать и другой способ: добавить команду непосредственно в форму объекта либо в основной конфигурации, либо в расширении, а обработчик команды разместить в модуле формы.
Заполнение формы объекта обработчиком команды в модуле формы
Затем командой в форме размещаем объект в понравившемся месте. Мы добавим клиентскую процедуру командной строки в модуль формы, из которого будем вызывать серверную процедуру. Мы также создадим серверную процедуру, она нам понадобится, потому что в зависимости от состояния задания данные для завершения получаются по запросу.
Серверная процедура требует осмысления. В нем у нас будет объект формы с типом «ФормаДанныеСтруктура». Изменить или заполнить этот объект не получится, возникнет ошибка «Объект недоступен для редактирования».
Есть возможность получить Объект из документа. Ссылка на сайт . GetObject() и заполнить его данными. Но тогда, чтобы увидеть данные в открытом виде, объект придется писать, а это не очень хорошо.
Лучше бы данные добавлено без записи, и мы можем сделать это с помощью метода FormAttributeToValue. Этот метод преобразует атрибут формы в объект типа приложения, и здесь мы можем заполнить этот объект типа приложения и после того, как это будет сделано, передать его обратно, используя метод ValueVFormAttribute. Это будет выглядеть примерно так:
Теперь форма заполнена и командная кнопка находится там, где вы хотите.
Шрифт
Как открыть форма с paddingem
Продолжая небольшой цикл статей про открытие обычной и управляемой форм разными способами, предыдущая статья была про реализацию выделения в управляемом приложении, а сегодня следующий шаг — открытие заполненной формы .
Открытие заполненной формы (передача параметра открытой формы и реализация метода «ОбработкаЗаполнения()») производится одинаково как в управляемом приложении, так и в обычном (проверено на платформе 8.3.5.1146 — управляемое приложение, а на платформе 8.2.18.102 — обычное приложение).
В то место в коде, где нужно открывать и заполнять форму, нужно добавить что-то вроде этого:
Структура «FillParameters» заполняется всеми данными, необходимыми для ее заполнения, затем эта структура вставляется в другую структуру, называемую «FormParameters».
Кроме того, ключ, под которым «Параметры заполнения» структура вставляется в p структура «Параметры формы», она должна называться «Заполнение значений»; иначе ничего работать не будет.
Далее необходимо реализовать событие модуля формы заполнения объектов — «ОбработкаЗаполнения()». Для этого я использую следующую конструкцию, которая на мой взгляд выглядит элегантно и позволяет избежать всех возможных ошибок (поправьте меня, если я не прав):
Напоминаю, что метод «Property()» структуры проверяет наличие элементов с именем дается в первом параметре в структуру и записывает найденное во втором параметре значение; в данном случае это атрибут заполняемого объекта (если элемент с указанным именем не найден в структуре, то второй параметр пишется «Undefined»).
Вот и все, надеюсь в этой статье
Если вы нашли ошибку или неточность, выделите часть текста и нажмите Ctrl+Enter .
Шрифт
Программное открытие форм в управляемом приложении 1С
Программное открытие форм в управляемом приложении 1С существенно отличается от их открытия в обычном приложении. Начнем со старого метода. Он заключается в принятии формы и последующем ее открытии в обычном или модальном режиме (при открытии в модальном режиме форма блокирует программу).
Это самый медленный способ открытия форм. Однако он позволяет программно обрабатывать форму перед ее открытием. Чтобы код заработал, нужно немного изменить:
Обратите внимание, что при принятии формы будет также выполняться процедура события ПриСозданииНаСервере.
.
Рассмотрим другие способы, позволяющие быстрее и удобнее открывать формы в управляемом приложении 1С. В зависимости от конкретной ситуации могут использоваться разные методы.
1. Как открыть объектную форму в управляемом приложении, если она ссылка.
В данном случае все предельно просто.
2. Как открыть форму выбора и потом получить выбранное значение.
Для этого есть функция Введите Значение() . Функция имеет 3 параметра:
- Переменная, в которую будет записано выбранное значение;
- Подсказка для отображения в поле выбора;
- Описание выбранных типов значений. Может быть несколько типов, и в этом случае вам будет предложено выбрать тип перед выбором конкретного значения.
В результате выполнения функции открывается форма выбора по умолчанию для объекта заданного типа.
Значение переменной;
Массив = новый массив ;
полей. Добавить(Тип(«DirectoryReference.Nomenclature» ));
полей. Добавить (Тип («DirectoryReference.Contractors» ) );
Тип описания = новый ТипОписания(Массив);
Res = EnterValue (Значение, «Подсказка», ТипОписания);
Предыдущие методы позволяли открывать только формы, установленные для объектов по умолчанию (форма объекта или форма выбора). Если вам нужно открыть любую форму, вы можете использовать функцию OpenForm().
У этой функции довольно много параметров. Рассмотрим некоторые из них:
- Имя формы : Здесь вы можете выбрать одну из стандартных форм объекта, например SelectForm или Форма списка . Или конкретная форма, созданная разработчиком.
- Параметры : позволяет передать некоторые параметры в форму перед открытием формы структуры и таким образом определяют выходные данные. Параметрами могут быть любые данные, которые могут быть переданы от клиента к серверу. Параметры, передаваемые при открытии формы, могут быть обработаны в процедуре ПриСозданииНаСервере() для открытой формы.
- Режим открытой формы : у вас есть 3 варианта: автономный режим, блокировка всех интерфейсов, блокировка формы владельца.
Давайте посмотрим, как функция OpenForm() используется в различных ситуациях.
3. Как открыть форму существующего объекта
У каждой формы есть ключевой аксессуар. Он выделен жирным шрифтом в списке атрибутов формы и обычно называется Объект для форм ввода документов и справочников. Другие объекты могут иметь другое имя. Чтобы открыть форму существующего объекта, необходимо передать параметр Ключ со значением в качестве ссылки на открываемый объект формы.
&AtClient
Процедура Команда 1 ( Команда )
Параметр = новая структура;
Параметр. Вставить(«Ключ», FindC());
OpenForm(«Directory.Accounts.ObjectForm», Parameter) ;
Завершить процедуру
&AtServer
Function FindC ( ) ;
Возвращает направляющие. Поставщики. FindByAttribute(«ИНН», «745107734623»)
EndFunction
4. Как открыть новый объект формы
Простая функция OpenForm() без параметров подойдет здесь.
5. Как открыть форму нового объекта и заполнить ее на основе чего-либо
Вы должны пройти параметр Base , значением которого будет ссылка на базовый объект заливки. Это запустит процедуру FillProcessing().
В данном примере документ Реализация товаров и услуг будет создан и заполнен на основании счета на оплату покупателю, ссылка на который была передана.
6. Как открыть форму и установить в ней выборку
Выборка в формах 1С может быть простой и сложной. Простой выбор включает такие термины, как Organization = Horns and Hooves LLC. Сложный выбор предполагает другие типы сравнений, например В списке . В этой статье мы разберемся с организацией простой выборки, а сложной будет посвящена отдельная статья.
Для организации простой выборки необходимо передать параметр с помощью ключа Выберите в форме, которую нужно открыть, значением будет структура, где ключ — это имя поля динамического списка, а значение — данные, которые вы ищете.
Например, откройте форму списка поиска Номера ГТД и выберите там рядом с владельцем: элемент поиска Номенклатура .
Selection = new Struct;
Выбор. Insert(«Владелец», Справочник по именованию);
Параметр. Insert(«Выделение», Selection) ;
OpenForm(«Directory.Numbers GTE.ListForm», Parameter );
Завершение процедуры
7. Как открыть форму записи журнала информации
Для этого вам понадобится ключ ввода журнала информации.
ключ реестра — значения всех измерений и периодов (если регистр периодический). Это означает, что ключ реестра является параметром, по которому можно однозначно идентифицировать реестр.
Алгоритм открытия следующий:
- Введите ключ реестра с помощью требуемое значение в структуре.
- Поместите полученную структуру в массив.
- Создать раздел реестра из массива.
- Мы передаем параметр Ключ с ключом реестра пункта 3 в качестве значения форме для открытия.
Ключевые параметры = новая структура;
Ключевые параметры. Вставить(«Номенклатура», СсылкаКНоменклатуре) ;
Ключевые параметры. Вставить(«ТипЦены», ТипСсылкиЦены);
Код кнопки параметров. Insert(«Период», Дата);
KeyArray = New Array;
Массив ключей. Добавить(ключевые параметры);
RecordKey = New(«RegistrarRecordRecordKey.NomenclaturePrices» , KeyArray ) ;
Параметр. Вставить(«Ключ»,КлючЗаписи);
ОткрытьФорму(«Информационная Запись.Номенклатурные Цены.Бланк Записи», Параметр ) ;
Конец процедуры
Источник
Как создать документ и открыть его форму?
В 1С Предприятии 8.2 есть два возможные сценарии выполнения задачи:
- открывает новую форму документа и позволяет пользователю в интерактивном режиме записывать данные объекта в базу данных.
- Программно создать новый документ, программно заполнить его данными и программно сохранить. Затем покажите его пользователю, если это необходимо.
В первом сценарии проще использовать метод глобального контекста OpenForm(). Это можно сделать на клиенте.
Это создаст новый документ и откроет основную форму этого документа для редактирования.
Если вам нужно какое-то предварительное заполнение документа исходными данными, вы можете сделать поэтому используйте свойства сведений о документе FillingValue , FillFromFillingData или обработчик события FillingProcessing документа. Подробнее об этом событии см. Как узнать при открытии формы, что создается новый элемент?.
V Во втором случае можно программно создать документ на сервере, заполнив его с данными в обработчике события FillProcess, если необходимо, запишите его и передайте ссылку на новый документ в метод глобального контекста OpenValue() , который его открывает. форма для него. Например:
Дополнительные сведения об использовании методов OpenValue() и OpenForm() см. в справке по синтаксису: Глобальный контекст: Процедуры и функции для интерактивной работы.
Источник < ;5