Вставить форму в форму 1с

Обновлено: 06.07.2024

Сегодня продолжим предыдущий урок, но немного его усовершенствуем.

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

Чтобы это сделать, необходимо понять то, как оно будет функционировать это действие.

Сделать это можно следующим образом:

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

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

Если ДатаЗаписиПервогоЗапуска = День(ТекущаяДата()) Тогда

Приступим к решению данной ситуации.

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

Откроем в ветви "Общие" ветвь "Общие модули" и откроем общий модуль "Серверные процедуры" (Рисунок 1).

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

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

Функция именно потому, что она может возвращать какое-то значение, а процедура не умеет этого делать - и именно в этом отличие процедуры от функции. Возвращать в данном случае можно Булева значения: Ложь или Истина.

Теперь нужно создать константу, в которую будет записываться дата первого входа с типом - "Дата" с составом "Дата" (Рисунок 3).

Теперь необходимо написать внутри этой функции необходимый код и после точка должен быть выбор созданной только что константы(Рисунок 4).

Весь код будет выглядеть следующим образом (Рисунок 5).

Разберем теперь с первой строки что происходит в этой функцие:

1. Переменной "ДатаЗаписиПервогоЗапуска" присваиваем значение этого дня.

2. Переменной "ДатаВыводаФормы" присваиваем значение, которое равно константе "ДатаВывода".

3. Условие, сравниваем значения и от значения получаем или истину или ложь.

Теперь нажмите на кнопку проверки модуля на синтаксические ошибки и вы получите уведомление (а может кто-то и не получит) (Рисунок 6).

Данное уведомление уже само подсказывает вам, что не может найти "Константы" в проверке тонкого клиента. Для исправления этого нужно открыть свойства этого модуля и убрать галочку "Клиент" (Рисунок 7).

После этого нажмите на проверку и уже не будет никаких ошибок.

Но это еще не все, теперь необходимо прописать программный код в модуле приложения (Рисунок 8).

Откроем модуль приложения (через свойства дерева конфигурации) и изменим существующий код на следующий (Рисунок 9).

Давайте немного разберемся в том, что происходит в этом программном коде построчно:

1. Начало процедуры, которая срабатывает перед началом работы системы.

2. Вторая и третья строка - это закомментированные строки.

4. Конец выполняемой процедуры.

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

Теперь давайте проверим нашу константу, в ней должно быть записано значение! Открыть константу можно следующим образом (Рисунок 11).

И содержимое константы выглядит следующим образом (Рисунок 12).

На рисунке 12 изображена константа, которая содержит значение 25. Это число - это день месяца, то есть сегодня у меня 25 число месяца. Таким образом, функция записала число дня равное сегодняшнему и оно равно 25.

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

На следующем занятии мы немного изменим функцию и она будет не в виде дня месяца, а в виде дня года.

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

Ссылка для вступления телеграм-канал - t.me.Apiscourses

Подписаться в группу ВКонтакте

Прошлые уроки:

На этом все. Жду Вас на следующем занятии.

P.S. Подписывайтесь на мой канал :-)

программирование программирование 1с 1с предприятие обучение онлайн обучение 1с

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

Формы я взял для примера. Заказчик очень хочет соединить несколько работающих систем в одну обработку. Переность вручную элементы форм и обработчики событий - займет не одну неделю. А вот если б было можно только указать ссылки, было бы просто замечательно.
Гугл говорит, что я пьян, и чтоб я шел домой =( Поэтому обращаюсь к вам.

(0) // Заказчик очень хочет соединить несколько работающих систем в одну обработку. // пусть НАПИШЕТ НА БУМАГЕ что именно, и для каких ЦЕЛЕЙ, он считает, надо делать по его задумке. Не техзадание, а описание конечных целей, и подетальнее.
"Заказчик очень хочет" и "Переность вручную элементы форм и обработчики событий - займет не одну неделю" - выставляй сумму за такую работу заказчику и посмотри, хочет он до сих пор или нет:)
(0) пусть купит монитор 30 дюймов и разместит там разные формы по желанию.

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>)
Параметры:

ОткрытьФорму(<Форма>, <Окно>)
Параметры:

Тип: Форма; УправляемаяФорма.
Окно приложения, в котором будет открыта форма.
Применимо только для управляемой формы. Окном может быть только основное окно приложения или вспомогательное окно формы.
В случае использования ВариантОткрытияОкна, окно формы будет создано согласно выбранному варианту.
Возвращаемое значение:

Тип: Форма; УправляемаяФорма.

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

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

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

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

В этой статье я разберу оба этих момента.

Открытие управляемой формы

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

Управляемые формы обработки

В этой тренировке в форме Данные будем вводить некоторые числовые значения, которые потом используем в форме Расчёт. Сделаем простой пример: решим линейное уравнение тип ax + b = c. Для этого на форме Данные зададим величины a,b и с соответственно, а при открытии формы Расчёт вычислим значение x. Пример больше учебный, нужный для того, чтобы показать, как передавать данные с одной формы на другую. a, b и с – это реквизиты управляемой формы Данные с типом число (10,2). Создадим эти реквизиты и перетащим их на форму.

Реквизиты управляемые формы обработки

Следующим шагом создадим команду на форме Данные, при выполнении которой откроется форма Расчёт, где мы увидим решение линейного уравнения. Назовем команду«Решить уравнение» и поместим её на форму в виде простой кнопки.

Команда на управляемой форме обработки

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

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

Поэтому создадим обработчик команды «Решить уравнение» на клиенте.

Создание обработчика команды управляемой формы

В процедуре-обработчике этой команды откроем форму Расчёт, для этого необходимо использовать метод глобального контекста ОткрытьФорму.

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

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

Контекстная подсказка метода ОткрытьФорму

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

Контекстная подсказка метода ОткрытьФорму

В нашем случае мы выбираем форму Расчет обработки.

Контекстная подсказка метода ОткрытьФорму

Подготовим форму Расчёт – создадим у этой формы реквизит x, который поместим на форму.

А так же установим у формы в свойство Режим открытия окна значение Блокировать окно владельца. Тогда форма Расчёт будет открываться в отдельном окне.

Свойство управляемой формы Режим открытия окна

Всё! Если мы сейчас сохраним обработку, запустим её и выполним команду «Решить уравнение» формы Данные, то откроется форма Расчёт. На которой, естественно, ни чего пока ещё не рассчитано.

Открытие управляемой формы

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

Свойство Заголовок управляемой формы

 Свойство Заголовок управляемой формы

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

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

Создадим у управляемой формы Расчёт параметры a,b,c.

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

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

Если Вы хотите, чтобы параметр был доступен все время существования формы, то у него необходимо установить свойство Ключевой параметр.

Свойство ключевой параметр параметра управляемой формы

У формы Расчёт создадим событие формы ПриСозданиеНаСервере. Для этого в палитре свойств формы нужно найти это событие и кликнуть на кнопку «Лупа».

Открытие формы с передачей параметров

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

Посмотрим, как будет работать этот код.

Открытие формы с передачей параметров

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

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.


  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!


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

можно оплатить вручную:

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

2 thoughts on “ Открытие управляемой формы в 1С 8.3 с передачей параметров ”

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

Откроем документ "ПриходДенежныхСредств" и добавим реквизит "Договор" (Рисунок 1).

Укажем у реквизита "Договор" ссылку на справочник "Договоры" (Рисунок 1).

Теперь зайдем в пользователя и проверим изменения (Рисунок 2)!

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

До этого мы указывали, что справочник "Договоры" является подчиненным для справочника "Контрагенты" - является владельцем.

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

Для этого нужно открыть свойства реквизита "Договор" и найти свойство "Связи параметров выбора" (Рисунок 3).

У этого свойства необходимо нажать на значок многоточия и откроется окно (Рисунок 4).

В этом окне нам необходимо перетащить реквизит, по которому будет делаться отбор - это Контрагент. Нужно выделить реквизит и нажать на значок стрелки вправо и он переместится в правое окно (Рисунок 5).

В правом окне необходимо установить значения, которые показаны на рисунке 5 и нажать "Ок".

Если поле (столбец) "Имя" не отображается как на рисунке, то необходимо по нему дважды щелкнуть и в выпадающем списке выбрать необходимое значение.

После этого нужно перейти в режим пользователя и проверить изменения (Рисунок 6).

На рисунке 6 видно, что реквизит сам добавился и на форму документа и на форму списка, а так же, отбор по владельцу работает.

Работает это так: как только вы выбрали в поле "Контрагент" какой-то элемент, так сразу для поля "Договор" срабатывает отбор и будет показываться только то, что относится к этому владельцу (контрагенту).

Давайте продолжим. Добавим реквизит "Договор" (Рисунок 8) в документ "РасходДенег" - он будет абсолютно таким же, как и в прошлом документе, то есть нужно в свойствах указать отбор по владельцу (если не помните как, то посмотрите выше, там это описано), но перед этим добавим форму документа на вкладке "Формы" (Рисунок 7), выберите необходимые реквизиты, которые будут отображаться на форме и нажмите "Готово".

Закройте форму, она пока нам не нужна и теперь перейдите на вкладку "Данные" и создадим реквизит "Договор" (Рисунок 8).

После этого запустить пользователя и проверить изменения (Рисунок 9).

Посмотрите на рисунок 9, на форме документа нет реквизита "Договор"! Как так и почему? Ведь мы же его создали, а он тут не отображается!

Но, если закрыть форму документа и посмотреть на форму списка (Рисунок 10), то мы увидим, что этот реквизит на этой форме есть!

Как так получается? Почему в одном месте его нет, а в другом есть?

Все очень просто, все точно так же как и в справочнике! Мы создали реквизит после того, как создали форму! А в этом случае платформа понимает: "как только создана форма, она уходит в сторону и все работу по добавлению чего-то нового на форму, отдает полностью пользователю"!

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

Давайте добавим реквизит на форму! Для этого откроем объект на вкладке "Формы" и откроем форму документа (Рисунок 11).

Теперь необходимо в правой части окна раскрыть список "Объект" и там найти реквизит "Договор" (Договор 12).

Проверим изменения в пользовательском режиме (Рисунок 13).

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

Мало того, что реквизит появился на форме, так и отбор работает - показываются только те договоры, которые относятся к определенному контрагенту!

Теперь проверим изменения в пользователе и убедимся в том, что она не появилась на форме документа - значит, нужно переместить ее сначала на форму в режиме разработчика (Рисунок 15).

Теперь проверим пользователя и будет выглядеть вот так (Рисунок 16).

Как видим по рисунку 16, табличка появилась выше первых двух таблиц, а не стала после таблички "Услуги" как на рисунке 17.

Так, как на рисунке 16, программа тоже будет работать, но не удобно будет, слишком много места занимает одна таблица, а нужно так, как на рисунке 17 - для экономии места и удобности.

Для этого перейдем на форму в режиме разработчика и сделаем следующее:

3. Рисунок 20 - Переименовать новую группу (Имя и Синоним)

4. Рисунок 21 - Переместить в папку "Дополнительно" таблицу "Дополнительно"

5. Рисунок 22 - Запустить пользователя и проверить изменения .

Рисунок 22 - Отображение таблицы в пользовательском режиме Рисунок 22 - Отображение таблицы в пользовательском режиме

Теперь место сэкономлено, стало более удобнее работать!

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

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

Читайте также: