Как проверить наличие реквизита у управляемой формы

Как проверить наличие реквизита у управляемой формы.

Я
   falselight

18.09.19 — 12:00

Разбираюсь с поведением управляемой формы.

Выявляется что нужно проверять наличие реквизита у Форма — тип которой УправляемаяФорма.

Так как реквизит появляется при использовании Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты). Как то по передаваемому массиву эти реквизиты видимо создаются.

Подскажите пожалуйста, как проверять есть ли у Форма, тот или иной реквизит ?

  

Партнерская программа EFSOL Oblako

   ДенисЧ

1 — 18.09.19 — 12:04

Купи у меня наконец синтакс-помощник и уроки по его чтению. Столько вопросов сразу снимется — ты даже не представляешь…

   palsergeich

2 — 18.09.19 — 12:04

ПолучитьРеквизиты

   falselight

3 — 18.09.19 — 12:09

Форма.ИспользоватьДопСведения = Ложь — то есть реквизит есть

почему он не находится?

Форма.ПолучитьРеквизиты().Найти(«ИспользоватьДопСведения») — неопределено

   falselight

4 — 18.09.19 — 12:11

Или как правильно искать в этом случае? (3)

Массив реквизитов получил, как определять наличие реквизита? Перебором массива?

   Вафель

5 — 18.09.19 — 12:15

проще через по попытку

   falselight

6 — 18.09.19 — 12:28

(5) Так метода никакого нет, проверить есть реквизит или нет.

Можно перебором массива как вариант.

Или попытка, и все?

   falselight

7 — 18.09.19 — 12:31

(5) Как через попытку?

Вот реквизит Форма.ИспользоватьДопСведения, то есть то нет.

То значение, то поле не обнаружено.

И как на него проверять?

   Вафель

8 — 18.09.19 — 12:33

Попытка
  а = Форма.ИспользоватьДопСведения
  ЕстьРеквизит = Истина;
Исключение
  ЕстьРеквизит = Ложь;
КонецПопытки;
   falselight

9 — 18.09.19 — 12:50

(8) И это будет считаться нормально?

   MuxaH

10 — 18.09.19 — 12:55

(9) Да фик знает, но перебором массива с проверкой имени реквизита тоже как-то не то…

   falselight

11 — 18.09.19 — 12:56

(10) Ну не знаю, а что не так? Перебирается массив, и выявляется реквизит.

То есть это лучше (8) ? И правильнее?

   palsergeich

12 — 18.09.19 — 12:57

(10) перебор коллекции, тем более априори небольшой, да ещё в памяти — совершенно нормальный и очень быстрый вариант.

(8) А вот с этим отлаживать потом тяжко.

   falselight

13 — 18.09.19 — 12:58

(12)  То есть функция проверки массива на наличие значения будет лучше?

   dezss

14 — 18.09.19 — 12:59

Ну массив можно в ТЗ запихать. А в ней уже поиском)))

   palsergeich

15 — 18.09.19 — 13:00

(13) конечно.

Я имел удовольствие отлаживать код который был весь в попытках — то ещё испытание для нервов

   palsergeich

16 — 18.09.19 — 13:01

(15) пару десятков элементов коллекции переберется за ничтожное время.

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

   falselight

17 — 18.09.19 — 13:04

Подскажите пожалуйста, как удалить элемент «ИспользоватьДопСведения» если он есть у формы ?

    МассРеквизитов = Форма.ПолучитьРеквизиты();

    Для каждого ЭлМасс Из МассРеквизитов Цикл

        Если ЭлМасс.Имя = «ИспользоватьДопСведения» Тогда

            
        КонецЕсли;

    КонецЦикла;

   palsergeich

18 — 18.09.19 — 13:06

(17) удалить можно только программно добавленные реквизиты.

Методом ИзменитьРеквизиты

   falselight

19 — 18.09.19 — 13:08

(18) Мне нужно удалить этот реквизит, если он есть, перед методом Форма.ИзменитьРеквизиты(Реквизиты);

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

как его удалить подскажите, он вроде как и создается программно

   falselight

20 — 18.09.19 — 13:09

(18) Как удалить именно этот реквизит?

   palsergeich

21 — 18.09.19 — 13:09

(19) ну дык удали перед проблемной строчкой.

Удаляемые реквизиты это 2 параметр

   falselight

22 — 18.09.19 — 13:12

(21) Эта строчка и есть проблемная

Форма.ИзменитьРеквизиты(Реквизиты);

То есть будет так?

    МассРеквизитов = Форма.ПолучитьРеквизиты();

    Для каждого ЭлМасс Из МассРеквизитов Цикл

        Если ЭлМасс.Имя = «ИспользоватьДопСведения» Тогда

           Форма.ИзменитьРеквизиты(Реквизиты, «ИспользоватьДопСведения»);     

        КонецЕсли;

    КонецЦикла;

        Форма.ИзменитьРеквизиты(Реквизиты);

Или я не пойму ((((

Там одна ситуация, точнее не одна.

На строке

Форма.ИзменитьРеквизиты(Реквизиты);

Выходит ошибка что реквизит «ИзменитьДопСведения» не уникальный

и я смотрю по коду, он в Форма, то есть то нет, вот ошибка когда есть.

Как тут правильнеесделать тогда?

   falselight

23 — 18.09.19 — 13:20

Или вот так? Проверяю сейчас это.

    Попытка

        ЕстьРеквизитИспользоватьДопСведения = Форма.ИспользоватьДопСведения;

        Форма.ИзменитьРеквизиты(Реквизиты, «ИспользоватьДопСведения»);

    Исключение

        Форма.ИзменитьРеквизиты(Реквизиты);

    КонецПопытки;

   dezss

24 — 18.09.19 — 13:37

Так ты удали его из массива Реквизиты перед тем, как делается

         Форма.ИзменитьРеквизиты(Реквизиты);

   falselight

25 — 18.09.19 — 13:37

ПОПРОБОВАЛ ТАК, НИЧЕГО НЕ РАБОТАЕТ. ПОДСКАЖИТЕ КАК избавиться от реквизита «ИспользоватьДопСведения»

перед строчкой

Форма.ИзменитьРеквизиты(Реквизиты);

/////////////////////////////////////////////////

    Попытка

        ЕстьРеквизитИспользоватьДопСведения = Форма.ИспользоватьДопСведения;

        ЕстьРеквизитИспДопСведения = Истина;

    Исключение

        ЕстьРеквизитИспДопСведения = Ложь;

    КонецПопытки;

    Если ЕстьРеквизитИспДопСведения Тогда

        УдаляемыйРеквДопСведения = Новый Массив;

        УдаляемыйРеквДопСведения.Добавить(Реквизиты[0]);

        Форма.ИзменитьРеквизиты(Реквизиты, УдаляемыйРеквДопСведения);

    Иначе

        Форма.ИзменитьРеквизиты(Реквизиты);

    КонецЕсли;

   falselight

26 — 18.09.19 — 13:38

(24) Понял, то есть я не с того конца, пробую решить вопрос.

Сейчас попробую.

   Кодер

27 — 18.09.19 — 14:06

(23) Коллега, вы изобрели третий вид ЯП. Ещё вчера они были трансляторы и компиляторы. Теперь, благодаря Вам, мир узнал, что код можно выполнять на форуме.

Там Столману замену ищут. У вас с английским тоже хорошо?

  

falselight

28 — 18.09.19 — 16:42

(27) Не все не так. Я просто решал не известную мне проблему.

И тема этой главы не есть её решение, там сложилось все по другому.

А тема эта была как путь к решению. Мне нужно было топливо.

Я завел её так как думал, что это одна из идей.

Но это ничего не пригодилось. Там все по другому.

И как я узнаю дальше.

Перейти в раздел примеры кода 1С 8.3:

При наличии в конфигурации БСП, желательно использовать метод ЕстьРеквизитИлиСвойствоОбъекта (ссылка выше). Но что делать если конфигурация нетиповая? Вариантов (в зависимости от поставленной задачи) несколько: скопировать метод из БСП, проверить на свойство объекта, проверить через поиск, использовать попытку (не рекомендуется, только как временная заплатка).

Проверка реквизита через свойство объекта в 1С 8.3:

Функция ПроверкаНаСвойствоОбъекта(Объект, ИмяСвойстваОбъекта) Экспорт

   ЕстьСвойство = Ложь;
   СтруктураОбъекта = Новый Структура(ИмяСвойстваОбъекта, Неопределено);
   ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект);

   Если СтруктураОбъекта[ИмяСвойстваОбъекта] = Неопределено Тогда
       СтруктураОбъекта[ИмяСвойстваОбъекта] = Ложь;
       ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект);
       Если СтруктураОбъекта[ИмяСвойстваОбъекта] <> Ложь Тогда
           ЕстьСвойство = Истина;
       КонецЕсли;
   Иначе
       ЕстьСвойство = Истина;
   КонецЕсли;

   Возврат ЕстьСвойство;// Булево

КонецФункции

Проверка реквизита через Найти в 1С 8.3:

Функция ПроверитьНаРеквизит(ИмяРеквизита, МетаданныеДок) // универсальная функция

   // Например ИмяРеквизита=»ДрагМеталлы»;
   Если МетаданныеДок.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
       Возврат Ложь;
   Иначе
       Возврат Истина;
   КонецЕсли;

КонецФункции

Функция НайтиДрагМеталлы(Номенклатура, Материал, ОсновноеСредство) // пример использования в универсальной обработке

   // если реквизит шапки
   ИмяРеквизита=«ДрагМеталлы»;
   Если Метаданные.Справочники.Товары.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
       Возврат Номенклатура.ДрагМеталлы;
   ИначеЕсли Метаданные.Справочники.Материалы.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
       Возврат Материал.ДрагМеталлы;
   ИначеЕсли Метаданные.Справочники.ОсновныеСредства.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
       Возврат ОсновноеСредство.ДрагМеталлы;
   Иначе
       Возврат Ложь;
   КонецЕсли;

   // если реквизит таб.части
   //Если НЕ ТекущаяСтрока.Свойство(ИмяРеквизита) ИЛИ НЕ ТекущаяСтрока.ДрагМеталлы Тогда
   //    ЗаполнитьЗначенияСвойств(ТаблицаДок.Добавить(), ТекущаяСтрока); // приёмник, источник
   //КонецЕсли;

КонецФункции

Проверка реквизита через Попытка (&НаКлиенте) в 1С 8.3:

&НаКлиенте
Функция ПроверитьНаНаличиеРеквизитаЧерезПопытку(ИмяРеквизита)

   Попытка
       РеквизитФормыПоИмени = ЭтаФорма[ИмяРеквизита];
       ЕстьРеквизитНаФорме = Истина;
   Исключение
       ЕстьРеквизитНаФорме = Ложь;
   КонецПопытки;

   Возврат ЕстьРеквизитНаФорме;

КонецФункции

В определенных задачах можно использовать метод в 1С 8.3:

ПолучитьРеквизиты(GetAttributes)

Синтаксис:

ПолучитьРеквизиты(<Путь>)

Параметры:

<Путь> (необязательный)

Тип: Строка.

Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.

Возвращаемое значение:

Тип: Массив.

Массив объектов РеквизитФормы.

Описание:

Получает описание реквизитов формы.

Copyright©, «Программист 1С в г.Минске», 06.11.2021

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

Добрый день! Нужно программно создавать ТЗ на УФ, а затем обновлять. Встал вопрос, как проверить перед добавлением нового реквизита формы, что он уже есть у формы?

Синтаксис: ПолучитьРеквизиты(<Путь>) Параметры: Тип: Строка. Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня. Возвращаемое значение: Тип: Массив. Массив объектов РеквизитФормы. Описание: Получает описание реквизитов формы. Доступность: Сервер, мобильное приложение(сервер).

Ну а потом перебор массива и сравнение имени Альтернативный вариант: в попытке код Пустышка = ЭтотОбъект[ИмяРеквизита]; Но скорее всего это будет дольше работать

а Элементы.Найти не сработает?

Синтаксис: Найти(<Имя>) Параметры: Тип: Строка. Имя элемента формы. Возвращаемое значение: Тип: Элемент управления; Неопределено. Элемент управления в форме. Если элемент не найден, то возвращается значение Неопределено.

Спасибо всем! Подошло: ЭтаФорма.ПолучитьРеквизиты

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Содержание:

1.       Функция проверки существования реквизита на управляемой форме

2.       Процедура добавление реквизита управляемой формы

3.       Процедура добавление реквизита управляемой формы «ПолеВвода»

4.       Процедура добавление реквизита управляемой формы «ПолеФлажка»

5.       Процедура добавление реквизита управляемой формы «Кнопка»

6.       Процедура программного добавление реквизита формы «ГруппаФормы»

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

Программная модификация форм используется в нескольких случаях:

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

· При реализации некоторых общих алгоритмов. Например, в подсистеме БСП.

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

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

Все программные модификации формы производятся только на сервере.

Создадим и опишем некоторые функции которые в дальнейшем облегчать разработчикам модификации управляемых форм в 1С 8. Все процедуры и функции необходимо будет поместить в общий модуль с вариантом исполнения на сервере:  

1.      Функция проверки существования реквизита на управляемой форме

Функция РеквизитСуществует(Форма, ИмяРеквизита, ИмяРодителя = «») Экспорт


      Реквизиты = Форма.ПолучитьРеквизиты(ИмяРодителя);


      РеквизитСуществует = Ложь;


      Для Каждого Реквизит Из Реквизиты Цикл


            Если Реквизит.Имя = ИмяРеквизита Тогда


                  РеквизитСуществует = Истина;


                  Прервать;


            КонецЕсли;


      КонецЦикла;


      Возврат РеквизитСуществует;


КонецФункции

Описание функции – В качестве входных параметров передаются: обрабатываемая форма «Форма», «ИмяРеквизита» — имя реквизита поиска, «ИмяРодитя» — область поиска реквизита на форме. Функция получает коллекцию реквизитов управляемой формы и проверяет переданное имя реквизита с текущим реквизитом формы, если есть совпадение функция возвращает Истина иначе Ложь.  

2.     ПРОЦЕДУРА ДОБАВЛЕНИЯ РЕКВИЗИТА управляемой ФОРМЫ

Процедура ДобавитьРеквизитФормы(МассивДобавляемыхРеквизитов, ИмяРеквизита, ТипРеквизита, Путь = «», Заголовок = «») Экспорт


      НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, Путь, Заголовок);


      МассивДобавляемыхРеквизитов.Добавить(НовыйРеквизит);


КонецПроцедуры

Описание процедуры:

Входные параметры

·         МассивДобавляемыхРеквизитов – массив;

·         ИмяРеквизита – имя добавляемого реквизита;

·         ТипРеквизита – тип реквизита (Содержит тип реквизита);

·         Путь — содержит путь к реквизиту. Не включает имя реквизита;

·         Заголовок — содержит отображаемый текст реквизита.

Процедура добавляет на управляемую форму новый реквизит формы с именем.  

3.     ПРОЦЕДУРА ДОБАВЛЕНИЯ РЕКВИЗИТА управляемой ФОРМЫ «ПолеВвода»

Процедура ДобавитьПолеВвода(Форма, ИмяЭлемента, ПутьКДанным, Заголовок = «» , Знач Родитель = Неопределено,   Знач ЭлементПредУстановки = Неопределено, ДоступностьПВ = Истина, ТЗОбработчиковСобытий = Неопределено) Экспорт


      Если Не ТипЗнч(Родитель) = Тип(«ГруппаФормы»)


            И Не ТипЗнч(Родитель) = Тип(«ТаблицаФормы»)


            И Не ТипЗнч(Родитель) = Тип(«УправляемаяФорма») Тогда


            // Никогда не знаешь, с чем имеешь дело!


            Родитель = Неопределено


      КонецЕсли;


      Если ИмяЭлемента = «» Или СтрНайти(ИмяЭлемента, » «) Или НачинаетсяСЧисла(ИмяЭлемента) Тогда


            Сообщить(«Не удалось добавить поле формы «»» + ИмяЭлемента + «»». Необходимо исправление!», СтатусСообщения.Внимание);


            Возврат


      КонецЕсли;


      Если ЭлементПредУстановки = Неопределено Тогда


            Элемент = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), Родитель);


      Иначе


            Элемент = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), Родитель);


            Форма.Элементы.Переместить(Элемент, Родитель, ЭлементПредУстановки);


      КонецЕсли;


      Элемент.Заголовок = Заголовок;


      Элемент.ПутьКДанным = ПутьКДанным;


      Элемент.Вид = ВидПоляФормы.ПолеВвода;


      Элемент.Доступность = ДоступностьПВ;


    // Привязка обработчиков событий


      Если ТЗОбработчиковСобытий = Неопределено Тогда


        Возврат;


    КонецЕсли;   


      Для Каждого Строка Из ТЗОбработчиковСобытий Цикл


        Форма.Элементы[ИмяЭлемента].УстановитьДействие(Строка.ИмяСобытия, Строка.Действие);


      КонецЦикла;


КонецПроцедуры

Описание процедуры:

Входные параметры

·         Форма – модифицируемая форма;

·         ИмяЭлемента – имя добавляемого реквизита;

·         ТипРеквизита – тип реквизита (Содержит тип реквизита);

·         ПутьКДанным — содержит путь к реквизиту. Не включает имя реквизита;

·         Заголовок — содержит отображаемый текст реквизита;

·         Родитель — родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень формы;

·         ЭлементПредУстановки – элемент, перед которым нужно разместить добавляемый элемент. Если не задан, то перемещается в конец коллекции.

·         ДоступностьПВ – свойство «Доступность» добавляемого элемента;

·         ТЗОбработчиковСобытий – таблица значений с описанием действий добавляемого элемента.

Процедура добавляет на управляемую форму новый реквизит формы с типом ПолеВвода.  


4.     ПРОЦЕДУРА ДОБАВЛЕНИЯ РЕКВИЗИТА управляемой ФОРМЫ «ПолеФлажка»

Процедура ДобавитьПолеФлажка(Форма, ИмяЭлемента, ПутьКДанным, Заголовок = «» , Знач Родитель = Неопределено,   Знач ЭлементПредУстановки = Неопределено, ДоступностьПВ = Истина) Экспорт


      Если Не ТипЗнч(Родитель) = Тип(«ГруппаФормы»)


            И Не ТипЗнч(Родитель) = Тип(«ТаблицаФормы»)


            И Не ТипЗнч(Родитель) = Тип(«УправляемаяФорма») Тогда


            // Никогда не знаешь, с чем имеешь дело!


            Родитель = Неопределено


      КонецЕсли;


      Если ИмяЭлемента = «» Или СтрНайти(ИмяЭлемента, » «) Или НачинаетсяСЧисла(ИмяЭлемента) Тогда


            Сообщить(«Не удалось добавить поле формы «»» + ИмяЭлемента + «»». Необходимо исправление!», СтатусСообщения.Внимание);


            Возврат


      КонецЕсли;


      Если ЭлементПредУстановки = Неопределено Тогда


            Элемент = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), Родитель);


      Иначе


            Элемент = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), Родитель);


            Форма.Элементы.Переместить(Элемент, Родитель, ЭлементПредУстановки);


      КонецЕсли;


      Элемент.Заголовок = Заголовок;


      Элемент.ПутьКДанным = ПутьКДанным;


      Элемент.Вид = ВидПоляФормы.ПолеФлажка;


      Элемент.Доступность = ДоступностьПВ;


КонецПроцедуры

Описание процедуры:

Входные параметры

·         Форма – модифицируемая форма;

·         ИмяЭлемента – имя добавляемого реквизита;

·         ТипРеквизита – тип добавляемого реквизита (Содержит тип реквизита);

·         ПутьКДанным — содержит путь к реквизиту. Не включает имя реквизита;

·         Заголовок — содержит отображаемый текст реквизита;

·         Родитель — родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень формы;

·         ЭлементПредУстановки – элемент, перед которым нужно разместить добавляемый элемент. Если не задан, то перемещается в конец коллекции.

·         ДоступностьПВ – свойство «Доступность» добавляемого элемента.

Процедура добавляет на форму новый реквизит формы с типом ПолеФлажка.   

5.     ПРОЦЕДУРА ДОБАВЛЕНИЯ РЕКВИЗИТА управляемой ФОРМЫ «Кнопка»

Процедура ДобавитьКнопку(Форма, ИмяЭлемента, Заголовок = «», ВидКнопки = Неопределено,


Знач ГруппаКоманд = Неопределено, Знач ЭлементПредУстановки = Неопределено,


КартинкаКнопки = Неопределено, ПодксазкаКнопки = Неопределено) Экспорт


      Если Не ТипЗнч(ГруппаКоманд) = Тип(«ГруппаФормы»)


            И Не ТипЗнч(ГруппаКоманд) = Тип(«УправляемаяФорма») Тогда


            // Никогда не знаешь, с чем имеешь дело!


            ГруппаКоманд = Неопределено;


      КонецЕсли;


      Если ВидКнопки = Неопределено Тогда


            ВидКнопки = ВидКнопкиФормы.ОбычнаяКнопка;


      КонецЕсли;


      НоваяКоманда = Форма.Команды.Добавить(ИмяЭлемента);


      НоваяКоманда.Действие = «плрНажатиеКнопки» + ИмяЭлемента;


      НоваяКоманда.Заголовок = Заголовок;


      Если ЭлементПредУстановки = Неопределено Тогда


            НовыйЭлемент = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«КнопкаФормы»), ГруппаКоманд);


      Иначе


            НовыйЭлемент = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«КнопкаФормы»), ГруппаКоманд, ЭлементПредУстановки);


      КонецЕсли;


      НовыйЭлемент.Заголовок = Заголовок;


      НовыйЭлемент.Вид = ВидКнопки;


      НовыйЭлемент.ИмяКоманды = ИмяЭлемента;


      Если КартинкаКнопки <> Неопределено Тогда


            НовыйЭлемент.Картинка    = КартинкаКнопки;


            НовыйЭлемент.Отображение = ОтображениеКнопки.Картинка;


      КонецЕсли;


      Если ПодксазкаКнопки <> Неопределено Тогда


            НовыйЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.Авто;


            НоваяКоманда.Подсказка = ПодксазкаКнопки;


      КонецЕсли;


КонецПроцедуры

Описание процедуры программного добавления реквизита формы:

Входные параметры

·         Форма – модифицируемая форма;

·         ИмяЭлемента – имя добавляемого реквизита;

·         Вид кнопки – тип добавляемого реквизита (содержит тип реквизита);

·         ГруппаКомманд — родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень формы;

·         ЭлементПредУстановки – элемент, перед которым нужно разместить добавляемый элемент. Если не задан, то перемещается в конец коллекции.

·         КартинкаКнопки – признак графического отображения кнопки;

·         ПодсказкаКнопки – текстовое представление подсказки кнопки.

Процедура добавляет на форму новый реквизит формы с типом КнопкаФормы.  

6.     ПРОЦЕДУРА программного ДОБАВЛЕНИЯ РЕКВИЗИТА ФОРМЫ «ГруппаФормы»

Процедура ДобавитьГруппуФормы(Форма, ИмяЭлемента, Заголовок, Знач ВидГруппы, БезОтображения = Ложь, Знач Группировка = Неопределено, Знач Родитель = Неопределено) Экспорт


      НовыйЭлемент = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ГруппаФормы»), Родитель);


      НовыйЭлемент.Заголовок = Заголовок;


      НовыйЭлемент.Вид = ВидГруппы;


      Если ВидГруппы = ВидГруппыФормы.ОбычнаяГруппа Тогда


            Если Группировка = Неопределено Тогда


                  НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;


            ИначеЕсли Группировка Тогда


                  НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;


            КонецЕсли;


            Если БезОтображения Тогда


                  НовыйЭлемент.ОтображатьЗаголовок = Ложь;


            КонецЕсли;


      КонецЕсли;


КонецПроцедуры

Описание процедуры программного добавления реквизита формы:

Входные параметры

·         Форма – модифицируемая форма;

·         ИмяЭлемента – имя добавляемого реквизита;

·         ВидГруппы – тип добавляемого реквизита (содержит тип реквизита);

·         БезОтображения – свойство типа элемента формы «ГруппаФормы» отображать заголовок;

·         Группировка – свойство указывающее расположение элементов в группе;

·         Родитель — родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень формы.

Процедура добавляет на форму новый реквизит формы с типом «ГруппаФормы».   

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

Функция НачинаетсяСЧисла(ИмяЭлемента)


      КодВозврата = Ложь;


      Для Счетчик = 0 По 9 Цикл


            Если СтрНачинаетсяС(ИмяЭлемента, Строка(Счетчик)) Тогда


                  КодВозврата = Истина;


                  Прервать;


            КонецЕсли;       


      КонецЦикла;


      Возврат КодВозврата;


КонецФункции

Описание функции:

Входные параметры

·         ИмяЭлемента – имя добавляемого реквизита.

Функция проверяет корректность передаваемого имени реквизита в 1С. Функция возвращает Истина если имя соответствуют правилу формирования имен объектов иначе Ложь.

Заключение – в статье представлены наиболее часто используемы функции при программной модификации управляемой формы в 1С 8.

Спасибо за внимание уважаемые коллеги.

Специалист компании «Кодерлайн»

Дмитрий Гречушкин

 0 

   

Распечатать

1С 8.x : Функции ЕстьРеквизитДокумента и ЕстьРеквизитОбъекта

При разработке частенько нужно проверить наличие реквизита в документе или справочнике.

Ниже приведены функции позволяющие проверить наличие заданных реквизитов в объектах конфигурации:

Код 1C v 8.х

 // Позволяет определить есть ли среди реквизитов шапки Объекта реквизит с переданным именем.
Функция ЕстьРеквизитОбъекта(ИмяРеквизита, Объект) Экспорт

МетаданныеОбъекта = Объект.Метаданные();
Если МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли; 

КонецФункции 

Для документа:

Код 1C v 8.х

 // Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры: 
//  ИмяРеквизита - строковое имя искомого реквизита, 
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт

Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли; 

КонецФункции

P.S. Посмотрите еще Полезные функции по работе с метаданными

Проверка реквизита, элемента формы на существование



FastCode


1413

11
21
66




Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство

Автор: HostHost

// 1.
СтруктураПараметров.Свойство("ЗначенияРазовыхПоказателей", ЗначенияРазовыхПоказателей)

// 2.
Элементы.Найти("ИсполнителиРабот")

0

0


0

ред. 2 года назад

Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.



  • Шаблоны кода 1С

    База полезных фрагментов кода



  • Секреты TurboConf

    С автором программы



  • Нейросети и AI

    Будущее наступает



  • Лайфхаки 1С

    Полезные советы, база знаний



  • Бубен админа

    Приемы администрирования



  • 1С не всерьез

    Одинесники шутят


Комментарии

См. также

Проверка поля на существование

УдалитьСтарыеРеквизитыИЭлементы (БСП)

УстановитьДоступностьЭлементовФормы (БСП)

ПроверитьКодСправочникаПоОрганизации (БСП)

ПроверкаЗаполненностиРеквизитовОтложеннойОтправки (БСП)

ЗаполнитьДополнительныеРеквизитыВФорме (БСП)

ОбновитьЭлементыДополнительныхРеквизитов (БСП)

РазрешитьРедактированиеРеквизитовОбъекта (БСП)

ОбработатьФайлПослеПроверкиСуществования (БСП)

sale

fastcode_tg

courses_fastcode

courses_fastcode

Previous

Next

Модератору

Вопрос Как определить программно, существует ли у документа требуемый реквизит

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

Так, на сегодня, в 2019 г., эта функция называется ЕстьРеквизитИлиСвойствоОбъекта и располагается в общем модуле ОбщегоНазначенияКлиентСервер. Обращение к функции:

ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "ПериодРегистрацииИсправленногоДокумента")

Сама функция проверки выглядит сейчас (2019 год) так:

// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным.
//
// Параметры:
//  Объект       - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства;
//  ИмяРеквизита - Строка       - имя реквизита или свойства.
//
// Возвращаемое значение:
//  Булево - Истина, если есть.
//
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
	
	КлючУникальности   = Новый УникальныйИдентификатор;
	СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
	ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
	
	Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
	
КонецФункции

В типовых конфигурациях 1С по состоянию на 2010 г. для этой цели использовалась функция, например, «ЕстьРеквизитДокумента» общего модуля «ОбщегоНазначения» и была построена на получении метаданных. Обращение к функции:

Если ОбщегоНазначения.ЕстьРеквизитДокумента("БанковскийСчет", МетаданныеДокумента) Тогда ...

где «БанковскийСчет» — пример наименования искомого реквизита,
«МетаданныеДокумента«:

МетаданныеДокумента = ДокументОбъект.Метаданные();

Сама функция проверки (расположенная в общем модуле «ОбщегоНазначения«):

// Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры: 
//  ИмяРеквизита - строковое имя искомого реквизита, 
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт
	Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
		Возврат Ложь;
	Иначе
		Возврат Истина;
	КонецЕсли; 

КонецФункции // ЕстьРеквизитДокумента()

Next Post

  • v8

  • Программисту 1C

Ср Ноя 10 , 2010

Примеры работы с регистами сведений см. также в Шпаргалке по программированию для системы 1С:Предприятие 8.2 Оглавление 1. Как из регистра сведений «РасчетчикиЗарплатыОрганизации» получить в виде массива всех расчетчиков зарплаты определенного подразделения организации 2. Как добавить запись в непериодический независимый регистр сведений 3. Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты» […]

Breaking News

Понравилась статья? Поделить с друзьями:
  • Как проверить правильность реквизитов на госуслугах
  • Как проверить работу бензонасоса газель бизнес 4216
  • Как проверить регистрацию компании в великобритании
  • Как проверить реквизиты карты через сбербанк онлайн
  • Как провести конкурс по отбору управляющей компании