Программирование в 1С для всех
В этой статье я приведу небольшой пример, который может возникнуть в реальной жизни, и который будет полезен начинающим программистам 1С, особенно тем, кто столкнулся с открытием одной управляемой формы из другой формы и передачей значений с формы на форму.
Рассмотрим следующую задачу: в табличной части некоторого документа есть реквизит «Пояснение» (тип строка), для удобства работы пользователей необходимо сделать так, чтобы при нажатии на кнопку «Лупа» поля ввода этого реквизита текущей строки табличной части, открывалась форма с многострочным полем ввода, где пользователь может ввести нужный ему текст. После нажатия на кнопку «Поместить» открывшейся формы вся информация из поля ввода должна быть передана в соответствующее поле текущей строки табличной части.
Для демонстрации решения, я использую учебную конфигурацию, где в табличной части документа «Поступление товаров и услуга» имеется реквизит «Пояснение» (строка (250)).
На форме документа у поля «Пояснение» таблицы формы в свойство «КнопкаОткрытия» установим значение «Да».
В результате у нас у соответствующего поля на форме появится кнопка Открыть.
Теперь создадим произвольную форму документа, которую назовем ФормаВводаПояснения.
У этой формы создадим реквизит управляемой формы «Ввод пояснения» (строка (250))
И поместим этот реквизит на форму в виде поля ввода. У поля ввода установим многострочный режим и уберем заголовок.
У командной панели формы снимем флаг «Автозаполнение»
Создадим команду формы «Поместить», которую разместим в командной панели формы в виде кнопки. И у этой кнопки установим флаг у свойства «Кнопка по умолчанию»
Теперь займемся параметрами. Вполне возможно, что в нашем поле таблицы формы документа уже будет какая-то информация, поэтому её необходимо будет передать в форму ввода пояснения. Для этого на форме ввода пояснения создадим параметр ПриемникПояснения, в который, впоследствии, и будем передавать значение пояснения из формы документа.
Теперь сделаем так, чтобы при открытии формы значение из этого параметра передавалось в реквизит «Ввод пояснения» из нашей формы. Для этого у нашей формы ввода пояснения создадим событие при создании на сервере.
В этом обработчике напишем следующий код
Нам осталось отработать нажатие на кнопку «Поместить», для этого создадим обработчик соответствующей команды в клиентском контексте.
В этом обработчике мы будем закрывать форму, а в качестве параметра закрытия передадим реквизит формы.
С этой формой мы закончили, перейдем к форме документа. На форме документа у поля Пояснения таблицы формы создадим обработчик события ПриОткрытии в клиентском контексте.
Это событие возникает, когда пользователь нажимает на кнопку «Открыть» соответствующего поля.
В обработчике события, первым делом, в параметр СтандартнаяОбработка установим значение Ложь. Тогда при нажатии на кнопку открытия, не будет срабатывать стандартная обработка платформы, которая срабатывает при нажатии на эту кнопку.
Теперь в этой же процедуре нам нужно получить значение поля Пояснение текущей строки.
Это значение мы будем передавать в качестве параметра в форму ввода пояснения при её открытии. Для этого я создам структуру, где в качестве ключа будет название параметра из формы ввода пояснения (ПриемникПояснения), который мы создали в форме ввода пояснения, а в качестве значения структуры будет значение, которое мы только что получили.
Открывать формы мы будем при помощи метода глобального контекста ОткрытьФорму, передадим в неё параметры ввода, а также установим, чтобы блокировалось окно владельца.
Если мы на этом остановимся, то у нас форма ввода пояснения откроется, информация из формы документа там появится, но информация с формы пояснения не будет передана в форму документа, как мы планировали. Для того, чтобы это произошло необходимо создать описание оповещения, в котором будет указан метод, который сработает после закрытия формы ввода описания. В конечном итоге у нас должен получиться следующий обработчик события нажатия на кнопку открытия.
В описании оповещения мы указали процедуру ПослеВыбораПояснения. Нам необходимо создать такую процедуру в клиентском контексте, и сделать её экспортной.
В этой процедуре, мы текущему значению поля Пояснение присваиваем результат закрытия формы ввода пояснения.
На этом наше программирование закончено. Работа выполнена.
Другие статьи про открытие управляемых форм:
Подробно вопросы передачи параметров, открытия форм рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомиться с разработкой управляемого приложения.
Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
Промо-код на скидку в 15% — 48PVXHeYu
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Эти книги плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей
One thought on “ Открытие формы в 1С 8.3 с передачей параметров на примере ”
Не работает….после внесения текста в дополнительной форме…Он не передается в основную форму
Практика: Передаем произвольный параметр и открываем форму выбранной нами дополнительной обработки
В этой статье я решил собрать 2 практических случая, которые используются не так часто, но которые нужно знать, чтобы вообще знать что так можно. Все это я решил сделать и показать в одной конфигурации на базе БСП. Для данного примера скачал с официального сайта 1с (https://releases.1c.ru/) версию БСП 3.0.1.428.
1. Передача пользовательского параметра в управляемое приложение.
Варианты передачи пользовательского параметра.
УП (управляемое приложение) может принимать пользовательские параметры, которые могут передаваться из других приложений. Этот параметр можно обработать произвольным образом. В данной статье в зависимости от его значения будем открывать разные дополнительные обработки, которые используются в любой конфигурации на БСП (библиотеки стандартных подсистем). Существует множество способов передать пользовательский параметр в управляемое приложение, все их описать не представляется возможным, поэтому расскажу про 3 самых простых для меня:
Просто через командную строку (Выполнить > cmd)
В этом случае можно просто указать полный путь к базе 1С и необходимый минимум параметров: «C:\Program Files (x86)\1cv8\8.3.14.1779\bin\1cv8.exe»
Через “батник” (.bat файл)
Все то же самое, только в файле:
Pause нужно для того, чтобы окно не закрылось, как правило останавливать выполнение скрипта считается плохим тоном. Если не установить кодировку 866, то система не сможет корректно прочитать кириллицу.
Вызов через скрипт visual basic (.vbs скрипт)
Пример vbs:
Чтобы не было проблем с кириллицей, можно сохранить в кодировке Windows-1251.
/C [строка текста] — передача параметра в конфигурацию.
Хорошая статья про запуск 1С с параметрами: //infostart.ru/public/104654/
При отладке параметр можно передавать из конфигуратора:
2. Открытие дополнительной обработки на начальной странице.
Создаем новую обработку.
В конфигурации БиблиотекаСтандартныхПодсистемДемо добавляем новую обработку, предварительно включив возможность редактирования:
Переименуем обработку, например, в ОсновноеРабочееМестоПользователя. В модуле управляемого приложения в событии ПриНачалеРаботыСистемы прописываем следующий код:
Создадим обработку “Моя обработка”.
Далее создадим простую внешнюю обработку, для подключения ее как дополнительную. Назовем ее, к примеру, Моя обработка.
В модуле объекта напишем:
В Функции СведенияОВнешнейОбработке() получим ПараметрыРегистрации:
— укажем версию (удобнее всего указывать дату, сразу понятно что за версия);
— вставим в них новое свойство “Информация”, и нашей информацией;
— укажем БезопасныйРежим = Ложь;
— добавим новую команду, укажем представление, идентификатор, тип команды в свойстве Использование и ПоказыватьОповещение = Ложь;
Создадим форму обработки и назначим ее как основная. На форме создадим декорацию и укажем у нее Заголовок “Это моя обработка”.
После того как подключим, по имени обработки (он же ИдентификаторОбработки по которому в системе определяется уникальность обработки), можно будет к ней обращаться.
Создадим обработку “Моя новая обработка”.
По такому же принципу создадим еще одну дополнительную обработку, но с идентификатором МояНоваяОбработка. Теперь у нас есть выбор из двух обработок, и в зависимости от значения передаваемого параметра мы можем выбирать любую. Чтобы не было совсем скучно на форме нашей новой обработки помимо декорации давайте создадим новую Группу вида Коммандная панель.
А в ней Подгруппу вида Подменю.
Затем создадим две команды и назначим им обработчики. Теперь у нас в группе коммандной панели есть группа подменю, в которой содержатся две команды.
В модуле объекта нашей второй обработки МояНоваяОбработка напишем:
Вернемся к встроенной в конфигурацию обработке.
Теперь вернемся к встроенной в конфигурацию обработке ОсновноеРабочееМестоПользователя и в форме в событии ПриСозданииНаСервере напишем:
Далее создадим новую процедуру ОткрытьФормуОбработки и в событии ПриОткрытии ее вызовем:
Опытным путем удалось установить, что если обращаться в событии ПриОткрытии к ЭтаФорма.Окно и передавать его как параметр для метода ОткрытьФорму(), то обработка не будет открываться в текущем окне. Поэтому тут используется метод глобального контекста ПодключитьОбработчикОжидания() в котором указали имя процедуры, которая должна быть обязательно с ключевым словом Экспорт.
В Функции ПодключитьВнешнююОбработку() подключается обработка из справочника ДополнительныеОбработкиИОтчеты. Метод ОбщегоНазначения.ЗначенияРеквизитовОбъекта() получает сразу одним запросом значение двух реквизитов и возращает их в структуре. Затем из ХранилищеОбработки получаем данные обработки в бинарном формате (ДвоичныеДанные), помещаем во временное хранилище, чтобы методом ВнешниеОбработки.Подключить(), можно было подключить эту обработку в системе и затем уже обращаться к ней в строковом параметре метода ОткрытьФорму().
Как вы поняли, мы будем передавать и анализировать какой параметр приходит. Он строкового типа, поэтому в нем можно передать, к примеру, имя обработки, чтобы она сразу открылась.
Если мы будем передавать пользовательский параметр “МояОбработка”, откроется наша первая обработка, если параметр “МояНоваяОбработка”, откроется наша вторая обработка.
Как видно на скриншоте, в открытой обработке ОсновноеРабочееМестоПользователя мы программно подключили другую обработку, которую определили в нашем пользовательском параметре и открыли основную форму этой обработки внутри окна другой формы.
Как программно открыть обработку с передачей параметра в 1С
Просто открыть форму обработки можно так:
Открыть форму обработки с передачей параметров:
А в форме обработки, которую открыли, эта ссылка будет доступна через коллекцию “Параметры”.
В обработчике ПриСозданииНаСервере() можно проверить наличие переданных параметров с помощью
Внимание! : Параметры формы доступны только в событии формы “ПриСозданииНаСервере”. Т.е. в других процедурах, с этой ссылкой работать не получится!
Здесь два варианта:
1) Создать реквизит формы, допустим, с именем “СсылкаНаДокумент”. И в событии “ПриСозданииНаСервере” заполнить этот реквизит.
И дальше уже работать с ним.
2) Создать не реквизит формы, а параметр (закладка “Параметры” – там же рядом с закладками “Реквизиты” и “Команды”). Назвать его надо будет так же, как ключ структуры, используемый в коде открытия формы (в моем примере – “ДокСсылка”). И в свойствах этого параметра установить флаг “Ключевой параметр”.
Тогда к этому параметру можно будет обращаться так, как указано выше – Параметры.ДокСсылка. Но уже не только в событии “ПриСозданииНаСервере”, а в любой процедуре модуля формы.
Поиск по сайту
Okolokompa в Яндекс Дзен
Все материалы и продукты на этом сайте выложены в целях ознакомления для зарегистрированных пользователей фирм производителей материала или продукта, или его авторов. Помните, что скачанные материалы или продукты, Вы используете на свой страх и риск. Автор и администрация этого сайта не несет никакой ответственности за использование этих материалов или продуктов третьими лицами.
В случае, если вы используете один из перечисленных здесь материалов или продуктов, Вы обязаны официально приобрести его у фирмы производителя или автора.
Программирование в 1С для всех
В этой статье я разберу особенности программного открытия обработок в 1С. Мы узнаем, как открыть форму обработки, как открыть форму внешней обработки из самой внешней обработки, а также как открыть форму внешней обработки из клиентского режима платформы 1С 8.3.
Открыть форму обработки 1С
Начнем с того, что саму по себе открыть программной обработку нельзя. Можно открыть какую-либо из форм обработки. Для программного открытия управляемой формы обработки необходимо использовать метод ОткрытьФорму.
В первой статье, в которой мы начали знакомиться с обработками в 1С, я создал обработку «Обработка для примера» с формой.
В этой статье я покажу, как открыть программно форму этой обработки из другой обработки «Обработка1». Для этого у Обработки1 я создал управляемую форму и команду формы.
В клиентском обработчике команды, напишем код, который будет открывать основную форму обработки.
Какая именно форма обработки будет открыта, можно указать в контекстной подсказке, которая появляется после ввода названия обработки.
После, в результате выполнения команды, в отдельном окне будет открываться форма обработки «Обработка для примера».
Открыть форму внешней обработки 1С
Если нам необходимо, чтобы из одной формы внешней обработки открылась другая форма этой же внешней обработки, то также необходимо использовать метод ОткрытьФорму, как в примере выше, только вместо слова Обработка необходимо написать ВнешняяОбработка.
Разберем пример. Пусть, у внешней обработки будут две формы: Основная и Дополнительная.
На основной форме создадим команду «Открытие дополнительной», при выполнении которой будет открываться дополнительная форма.
У этой команды будет клиентский обработчик события, со следующим кодом:
Теперь, открыв внешнюю обработку, мы сможем из её основной формы открыть дополнительную.
Открыть внешнюю обработку 1С
Выше мы разбирали пример, когда внешняя обработка открыта, и нам нужно открыть форму внешней обработки из самой внешней обработки, но иногда возникают задачи, когда нужно открыть форму внешней обработки из какого-то другого места, зная путь к этой обработке на жестком диске, или выбрав непосредственно файл обработки.
Разберем эту задачу. Откроем внешнюю обработку из обработки, которую создали в предыдущей статье, и с которой работали уже в этой — «Обработка 1».
В этой обработке создадим команду, при выполнении которой откроется форма внешней обработки.
В форме обработки напишем следующий код:
Код работает, начиная с платформы 8.3.15.
В вышеприведенном коде, процедура ОткрытьВнешнююОбработку — обработчик команды «Открыть внешнюю обработку», в этом обработчике используется метод НачатьПолучениеФайлаНаСервер, который выполнен в варианте открытия диалога выбора файла. После выбора файла срабатывает процедура описания оповещения ПослеВыбораФайла. В этой процедуре получается адрес временного хранилища файла (переменная Адрес), по которому находится название внешней обработки (в серверной процедуре ПолучитьИмяВнешнейОбработки), а потом эта внешняя обработка открывается.
После выполнения команды, откроется окно выбора файла внешней обработки.
Если файл будет выбран, внешняя обработка откроется.
Статьи про открытие форм:
Статьи по конфигурированию в 1С:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Программирование в 1С для всех
У многих начинающих программистов, особенно у тех, кто впервые сталкивается с управляемым приложением в 1С, возникает вопрос: как программным способом открыть управляемую форму. Еще больше вопросов возникает с передачей данных, когда одна форма открывается с другой формы. Многих этот момент ставит в тупик.
В этой статье я разберу оба этих момента.
Открытие управляемой формы
Для тренировки создадим в конфигураторе 1С внешнюю обработку, в которой сделаем две формы. Назовем их: Данные и Расчёт. Причем форма Данные это основная форма обработки, т.е. будет открываться при запуске обработки.
В этой тренировке в форме Данные будем вводить некоторые числовые значения, которые потом используем в форме Расчёт. Сделаем простой пример: решим линейное уравнение тип ax + b = c. Для этого на форме Данные зададим величины a,b и с соответственно, а при открытии формы Расчёт вычислим значение x. Пример больше учебный, нужный для того, чтобы показать, как передавать данные с одной формы на другую. a, b и с – это реквизиты управляемой формы Данные с типом число (10,2). Создадим эти реквизиты и перетащим их на форму.
Следующим шагом создадим команду на форме Данные, при выполнении которой откроется форма Расчёт, где мы увидим решение линейного уравнения. Назовем команду«Решить уравнение» и поместим её на форму в виде простой кнопки.
Открывать управляемые формы следует в клиентском контексте. Причем не важно, какой это будет клиент: тонкий, толстый или веб-клиент.
Подробно о клиентском и серверном контексте управляемой формы читайте в статье:
Поэтому создадим обработчик команды «Решить уравнение» на клиенте.
В процедуре-обработчике этой команды откроем форму Расчёт, для этого необходимо использовать метод глобального контекста ОткрытьФорму.
Синтаксис этого метода имеет много параметров, но обязательным является только один – первый, в котором задается путь к управляемой форме.
При работе с этим методом, можно воспользоваться контекстными подсказками: достаточно написать после открывающей скобки параметров кавычки, и выйдут различные варианты, по которым можно получить нужную форму.
Причем в контекстной подсказке можно выбрать, как конкретную форму, так и какую-то основную форму нужного объекта.
В нашем случае мы выбираем форму Расчет обработки.
Подготовим форму Расчёт – создадим у этой формы реквизит x, который поместим на форму.
А так же установим у формы в свойство Режим открытия окна значение Блокировать окно владельца. Тогда форма Расчёт будет открываться в отдельном окне.
Всё! Если мы сейчас сохраним обработку, запустим её и выполним команду «Решить уравнение» формы Данные, то откроется форма Расчёт. На которой, естественно, ни чего пока ещё не рассчитано.
И первое что нам бросается в глаза, это заголовок в названии управляемой формы. Переименуем. Для этого в палитре свойств формы нужно снять флаг у свойства Автозаголовок и написать какой-то заголовок в свойстве Заголовок.
Параметры управляемой формы
С открытием форм все просто и понятно. Но как передать данные с одной формы на другую? Для этого у управляемой формы 1С есть закладка Параметры. В этой закладке перечисляются данные, которые будут использоваться при создании управляемой формы на сервере.
Создадим у управляемой формы Расчёт параметры a,b,c.
Замечу, что к параметрам можно обращаться только в событии управляемой формы ПриСозданииНаСервере. Это событие возникает тогда, когда форма была создана на сервере, но еще не была передана в клиентский контекст.
Если Вы хотите, чтобы параметр был доступен все время существования формы, то у него необходимо установить свойство Ключевой параметр.
У формы Расчёт создадим событие формы ПриСозданиеНаСервере. Для этого в палитре свойств формы нужно найти это событие и кликнуть на кнопку «Лупа».
Решим в этом событие линейное уравнение. Для того, чтобы обратиться к нужному параметру формы, необходимо использовать коллекцию Параметры. И через точку получать значение интересующего нас параметра.
Теперь нам осталось передать параметры при открытии формы. Для этого на форме Данные в обработчике команды «Решить уравнение» создадим структуру, в которой перечислим все передаваемые параметры. Ключ этой структуры должен соответствовать названию параметра в открываемой форме.
И эту структуру будем указывать в качестве второго параметра метода ОткрытьФорму.
Посмотрим, как будет работать этот код.
Как видите, в управляемом приложении 1С нет ничего сложного в передачи данных с одной формы на другую. Для этого просто необходимо использовать параметры управляемой формы.
Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.
Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
Промо-код на скидку в 15% — 48PVXHeYu
Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей