Як відкрити форму наявного об'єкта? Як програмно заповнити та відкрити форму нового документа? 1с відкрити форму наявного документа.

Програмне відкриття форм у керованому додатку 1С значно відрізняється від їхнього відкриття у звичайному додатку. Розглянемо спершу старий метод. Він полягає в отриманні форми та її подальшому відкритті у звичайному або модальному режимі (при відкритті в модальному режимі форма блокує роботу програми).

ОтриматиФорму() . Відкрити()

Це найповільніший метод відкриття форм. Проте він дозволяє програмно обробити форму перед відкриттям. Для обробки код потрібно трохи змінити:

Форма = Отримати Форму ( "Документ.НадходженняТоварівПослуг.ФормаДокумента") ;
//Тут виконуємо дії з формою
Форма. Відкрити() ;

Треба враховувати, що при отриманні форми виконуватиметься ще процедура події При створенні на сервері.

Розглянемо інші методи, які дозволяють відкривати форми в керованому додатку 1С швидше та зручніше. Залежно від конкретної ситуації можна використовувати різні методи.

1. Як відкрити форму об'єкта в керованому додатку, якщо є посилання на нього.

У цьому випадку все дуже просто.

Посилання = Довідники. Номенклатура. ЗнайтиПоКоду("000000001");
ВідкритиЗначення(Посилання) ;

2. Як відкрити форму вибору та отримати потім обране значення.

Для цього існує функція ВвестиЗначення().У функції 3 параметри:

  • Змінна, до якої буде записано обране значення;
  • Підказка, яка відображатиметься у вікні вибору;
  • Опис типів обраних значень. Можливо кілька типів, тоді перед вибором конкретного значення буде запропоновано вибрати тип.

В результаті виконання функції відкриється форма вибору за умовчанням об'єкта зазначеного типу.

Перем Значення;
Масив = новий масив;
Масив. Додати(Тип( "ДовідникПосилання.Номенклатура") ) ;
Масив. Додати(Тип( "ДовідникПосилання.Контрагенти") ) ;

Опис Типів = новий Опис Типів (Масив) ;

Рез = ВвестиЗначення (Значення, "Підказка", Опис Типів);

Попередні способи дозволяли відкривати лише форми, встановлені для стандартних об'єктів (форму об'єкта або форму вибору). Якщо потрібно відкрити довільну форму, то можна скористатися функцією ВідкритиФорму().

Ця функція має багато параметрів. Розглянемо деякі з них:

  • Ім'я форми- Тут можна вибрати або одну із стандартних форм об'єкта, наприклад, Форма Виборуабо ФормаСписку. Або конкретну, створену розробниками форму.
  • Параметри- дозволяє передати у форму у вигляді структуридеякі параметри перед її відкриттям, тим самим визначивши дані, що виводяться. Параметри можуть являти собою будь-які дані, які можна передавати з клієнта на сервер. Передані при відкритті форми параметри можна обробити у процедурі ПриСтворенніНаСервері()у форми, що відкривається.
  • Режим відкриття форми- має 3 варіанти: незалежний, блокувати весь інтерфейс, блокувати форму власника.

Розглянемо, як застосовується функція ВідкритиФорму()у різних ситуаціях.

3. Як відкрити форму існуючого об'єкту

Кожна форма має один ключовий реквізит. Він виділений жирним у списку реквізитів форми і зазвичай називається Об'єкту форм елементів довідників, документів. В інших об'єктів назва може бути іншою. Для відкриття форми існуючого об'єктапотрібно передати у форму, що відкривається, параметр Ключзі значенням як посилання на об'єкт.

&На Клієнті
Процедура Команда1 (Команда)
Параметр = новий структура;
Параметр. Вставити("Ключ", ЗнайтиС());
ВідкритиФорму(, Параметр) ;
КінецьПроцедури

&На сервері
Функція ЗнайтиС();
Повернення Довідники. Контрагенти. ЗнайтиПо Реквізиту ("ІПН", "745107734623")
КінецьФункції

4. Як відкрити форму нового об'єкту

Тут підійде просто функція ВідкритиФорму()без жодних параметрів.

&На Клієнті
Процедура Команда1 (Команда)
ВідкритиФорму( "Довідник.Контрагенти.ФормаОб'єкта") ;
КінецьПроцедури

5. Як відкрити форму нового об'єкта та заповнити її на підставі чогось

Потрібно передати параметр Заснування, значенням якого буде посилання на об'єкт-основу заповнення. При цьому буде запущено процедуру Обробка Заповнення ().

&На Клієнті
Процедура Команда1 (Команда)
Параметр = новий структура;
Параметр. Вставити("Підстава" , ПосиланняНа РахунокПокупцю) ;
ВідкритиФорму( "Документ.РеалізаціяТоварівПослуг.ФормаОб'єкта", Параметр);
КінецьПроцедури

У цьому прикладі буде створено документ Реалізація товарів та послугта заповнений на підставі рахунку на оплату покупцю, посилання на який було передано.

6. Як відкрити форму та задати на ній відбір

Відбір на формах 1С може бути простим та складним. Простий відбір передбачає вирази типу Організація = ТОВ «Роги та копита».Складний відбір передбачає інші типи порівняння, наприклад, В списку. У цій статті розглянемо організацію простого відбору, а складному буде присвячено окрему статтю.

Щоб організувати простий відбір, потрібно передати у форму, що відкривається, параметр з ключем Відбір, значенням буде структура, в якій ключ - ім'я поля динамічного списку, а значення - дані, що шукаються.

Наприклад, відкриємо форму списку довідника Номери ВМДі зробимо там відбір за власником - елементом довідника Номенклатура.

&На Клієнті
Процедура Команда1 (Команда)
Параметр = новий структура;

Відбір = новий Структура;
Відбір. Вставити("Власник" , ПосиланняНаНоменклатуру) ;

Параметр. Вставити("Відбір", Відбір);

ВідкритиФорму( "Довідник.НомераГТД.ФормаСписку", Параметр);
КінецьПроцедури

7. Як відкрити форму запису регістру відомостей

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

Ключ запису— це значення всіх вимірів та період (якщо регістр періодичний). Тобто ключ запису — це параметри, якими можна однозначно ідентифікувати запис.

Алгоритм відкриття наступний:

  1. Заносимо в структуру дані ключа запису з потрібними значеннями.
  2. Поміщаємо отриману структуру масив.
  3. З масиву створюємо ключ запису.
  4. Передаємо у форму, що відкривається, параметр Ключз ключем запису з п.3 як значення.

&На Клієнті
Процедура Команда1 (Команда)
Параметр = новий структура;

ПараметриКлюча = новий Структура;
ПараметриКлюча. Вставити("Номенклатура" , ПосиланняНаНоменклатуру) ;
ПараметриКлюча. Вставити("ТипЦени" , ПосиланняНаТипЦен) ;
ПараметриКлюча. Вставити("Період", Дата);

МасивКлюча = Новий Масив;
МасивКлюча. Додати(ПараметриКлючу) ;

КлючЗаписи = Новий( "РегістрВідомостейКлючЗаписи.ЦіниНоменклатури", МасивКлюча);

Параметр. Вставити("Ключ" , КлючЗаписи) ;

ВідкритиФорму( "РеєстрВідомостей.ЦіниНоменклатури.ФормаЗаписи", Параметр);
КінецьПроцедури

Всім доброго дня!
Думаю, що інформація в цій темі буде дуже корисною для багатьох відвідувачів цього форуму.
Довгий час не міг вирішити завдання – як відкрити форму нового документа так, щоб воно відкрилося не порожнім, а вже частково заповненим програмно, при цьому сам документ ще не записаний у базу? Дуже багато часу витратив на пошуки вирішення цієї проблеми в інтернеті, відвідав багато форумів, на яких порушувалося це питання, але лише на небагатьох з них траплялися варіанти вирішення. Найпростіший із них – спочатку програмно створити новий документ, програмно заповнити потрібні його реквізити, записати документ у базу, а потім вже відкрити його користувачеві. А якщо користувач не захоче його зберігати? Що, якщо він передумає і закриє відкриту форму? В цьому випадку вже записаний документ так і залишиться у базі даних. А кому потрібні у базі зайві документи?
А якщо ж не зберігати документ, то найпопулярніший варіант – використовувати метод ОтриматиФорму(«Документи.ПотрібнийВидДокумента.ФормаДокумента»). Але в цьому випадку можна отримати порожню форму документа і вивести на екран методом Відкрити(). Це теж не варіант.
Через деякий час завдання вдалося розв'язати за допомогою функції глобального контексту «Заповнити значення властивостей».

Глобальний контекст
ЗаповнитиЗначення Властивостей (FillPropertyValues)
Синтаксис:
ЗаповнитиЗначенняВластивостей(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Опис:
Копіює значення властивостей<Источника>у властивості<Приемника>. Зіставлення здійснюється за іменами властивостей.

На прикладі завдання хотів би пояснити, як можна використовувати цю функцію для заповнення форми нового документа. Завдання було наступним – Є один документ (Замовлення-наряд), реквізитом табличної частини якого є інший документ (Надання послуг). Так от, потрібно було зробити так, щоб при додаванні в табличну частину"Замовлення-наряду" нового документа "Надання послуг", на екран виводилася форма нового документа "Надання послуг" із вже заповненими реквізитами, взятими з того замовлення-наряду, з якого було викликано створення. При цьому щоб сам новий документ, на момент появи його форми на екрані, ще не був записаний в базу. Це потрібно було зробити, якщо користувач вирішить не заповнювати документ і просто закриє форму.
Ось фрагмент коду з розв'язанням задачі:

&НаКлієнті Процедура ВвестиЗапис() ФормаЗаписи = ОтриматиФорму("Документ.НаданняМедПослуг.ФормаОб'єкта"); ЗаповнитиЗначенняВластивостей(ФормаЗаписи.Об'єкт,Об'єкт,"Дата,Спеціаліст,Спеціалізація,МедСестра,СтатусВиконання",); // Заповнюємо значення реквізитів, імена яких збігаються в обох документах ТекСтр = Елементи. Прийом. //Дані поточного рядка документа-джерела СтруктураВластивостей = Новий Структура; // Структура містить значення тих реквізитів, які потрібно заповнити на формі нового документа, але яких немає в документі-джерелі СтруктураВластивостей. Вставити ("Наряд Запис", Об'єкт. СтруктураВластивостей.Вставити("ВремяПриема",ТекСтр.ВремяПриема); ЗаповнитиЗначенняВластивостей(ФормаЗаписи.Об'єкт,СтруктураВластивостей,"НарядЗапис,Час Прийому",); ФормаЗаписи.Відкрити(); КінецьПроцедури

Тобто всі операції робимо безпосередньо на клієнті, без звернення до сервера, в межах однієї самостійно створеної процедури. По суті, у такий спосіб можна заповнити та відкрити форму як будь-якого документа, так і довідника. Спочатку я заповнив реквізити з однієї форми в іншу, використовуючи об'єкти форм, а потім, за допомогою об'єкта «Структура», в який вставив відсутні реквізити, заповнив ще деякі реквізити форми, що відкривається, а потім відкрив форму.
Сподіваюся, що ця тема заощадить час багатьом, хто зіткнувся з таким завданням!

Головна Для розробників-початківців Вчимося програмувати

Як відкрити форму наявного об'єкта?

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

Наприклад, якщо з форми списку організацій потрібно відкрити форму організації, на якій знаходиться курсор, зробити це можна наступним способом:

Параметри форми передаємо як структури, де ім'я елемента структури відповідає імені параметра форми, а значення - те значення, у якому хочемо встановити параметр форми.

Якщо потрібно відкрити не основну, а довільну форму об'єкта, створену конфігураторі, замість стандартного імені основної форми (ФормаОбъекта ) вказується слово Форма і через точку його - ім'я форми, створеної конфігураторі.

Наприклад:

ПосиланняНаЕлементДовідника = Елементи.Список.ПоточнаРядок; ПараметриФорми = Новий Структура("Ключ", ПосиланняНаЕлементДовідника); ВідкритиФорму("Довідник.Організації.Форма.УніверсальнаФормаОб'єкта", ПараметриФорми);

Слід зазначити, що в тому випадку, коли крім посилання на об'єкт ніякі параметри в форму, що відкривається, передавати не потрібно і потрібна саме основна форма існуючого об'єкта, можна використовувати більш простий спосіб - відкривати форму за допомогою процедури ВідкритиЗначення():

ВідкритиЗначення(Елементи.Список.ПоточнаРядок);

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

Однак слід уважно ставитися до використання цієї процедури. У деяких випадках вона може викликати додаткові звернення до сервера, наприклад коли потрібно відкрити форму елемента ієрархічного довідника. При використанні цієї процедури платформа буде виконувати додаткове звернення до сервера для того, щоб визначити, чи є елемент групою чи ні, оскільки для елемента та групи потрібно відкривати різні форми.

У той самий час ця інформація може бути заздалегідь відома розробнику всередині його алгоритму, і, використовуючи функцію Відкрити Форму() , розробник може відкривати потрібну форму без додаткових звернень до сервера, відразу ж вказуючи стандартне ім'я основної форми.

mob_info