1с проверка существования реквизита формы

Как проверить наличие реквизита

1. Когда возникает необходимость проверить наличие реквизита 1С

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

В ряде типовых конфигураций 1С предлагается стандартная функция проверки наличия реквизита в объекте (расположена в модуле “ОбщегоНазначения”)

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

Возврат НЕ (МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено);

2. Как можно получить метаданные объекта 1С

Однако написать свою функцию также не представляет труда. В первую очередь необходимо получить метаданные объекта 1С одним из способов:

через функцию Метаданные() объекта

пример синтаксиса: СправочникСсылка.Метаданные()

через свойство глобального контекста Метаданные

пример синтаксиса: Метаданные.Справочники.[ИмяСправочника]

Далее через свойство “Реквизиты” использовать функцию Найти(). В случае, если реквизит не найден, возвращается значение Неопределено.

Если Метаданные.Реквизиты.Найти(«Ответственный») = Неопределено Тогда

Источник

Где разместить собственный алгоритм, проверяющий заполнены реквизиты формы или нет?

Механизм проверки заполнения позволяет автоматически проверить, заполнены ли указанные реквизиты объекта (см. Как перед записью накладной проверить, что реквизит Поставщик заполнен?). Такая проверка выполняется при интерактивном вводе объекта, перед его записью.

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

image001

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

Для этого у него есть два события. Одно событие – Обработка проверки заполнения на сервере – можно обработать в модуле формы. Другое событие – Обработка проверки заполнения – можно обработать в модуле прикладного объекта.

У формы, как правило, есть основной реквизит (редактируемый объект) и могут быть реквизиты, не относящиеся к редактируемому объекту, а являющиеся лишь частью формы:

image002

Поэтому серверное событие формы Обработка проверки заполнения на сервере предназначено для проверки заполнения тех реквизитов формы, которые не относятся к редактируемому объекту. Это данные только формы, у формы могут быть свои причины и алгоритмы для проверки этих данных.

Напротив, событие объекта Обработка проверки заполнения предназначено для для того, чтобы проверить реквизиты основного реквизита формы.

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

Все эти сценарии реализуются довольно просто.

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

Чтобы проверить лишь часть реквизитов, можно выполнить такой код:

Если ИндексПоляПоставщик > Неопределено Тогда

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

А очистить массив проверяемых реквизитов, чтобы ничего не проверять ни самому, ни платформе, можно так:

Источник

IT Блог Сергея Бобошко

1С Предприятие, конфигурации, обработки, услуги программиста, помощь программиста

1С Предприятие 8.3 Как проверить наличие реквизита документа или табличной части программно

В типовых конфигурациях это делается просто:

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

Если реквизит отсутствует, тогда будет возвращено значение неопределено, как будет в случае с реквизитом «БабаЯга» в регистре цен.

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

В случае удачного нахождения реквизита с указанным именем возвращается искомый объект метаданных, иначе, как уже упоминалось — НЕОПРЕДЕЛЕНО,

Добавить комментарий Отменить ответ

В помощь программисту

Спасибо за интерес к моим статьям!

Если Вам понравилась статья, а особенно если я сэкономил вам кучу времени, сил и нервов(!), и Вы хотите поблагодарить автора за труды, можете пожертвовать рублик на один из кошельков автора:
R378379457675
Z428430781167
U266558095968

Ну, или нажмите кнопочку репоста в соцсетях. Или напишите отзыв.

Рубрики

Свежие записи

Благодарность мне

Если Вам понравилась статья, а особенно если я сэкономил вам кучу времени, сил и нервов(!), и Вы хотите поблагодарить автора за труды, можете пожертвовать рублик на один из кошельков автора:
R378379457675
Z428430781167
U266558095968

Ну, или нажмите кнопочку репоста в соцсетях. Или напишите отзыв.

Источник

Как программно определить наличие у документа опрелённого реквизита?

Метаданные.Документ(«Реализация»).РеквизитТабличнойЧасти(«Вася»).Выбран()
+ поглядеть на реквизит шапки + общий реквизит.

См. во всех типовых глЕстьРеквизитШапки + глЕстьРеквизитТЧ

(4) Чего в ней нет? Этих функций? Это нестрашно :-)

(6) Не факт, что мои из типовой взяты. Они из рабочей.
Сейчас проверю.

Добавлено: в комплексной для Украины также

(10) А зачем наличие общего реквизита в документе нужно проверять?
Разве что для универсальных отчетов/обработок, не привязанных к определенной конфигурации.

(11) Не знаю, но в типовых конфигурациях наличие общего реквизита проверяется в функции глЕстьРеквизитШапки().

З.Ы. Кстати, глобальные переменные Да и Нет в российских конфигурациях давно не используются.

(12) З.Ы. Это я уже прочитал в (6) :-)

Для российских собратьев по разуму привожу кусок кода из глобальника типовой российской ТиС редакции 9.2

(12)
//////////////////////////////////////////////////////////// ­///////////////
//
Перем глТаблицаСчетов Экспорт;
Перем глОбщиеУстановки Экспорт;
Перем глЗначениеОтбора Экспорт;
Перем глПоОплате Экспорт;
Перем глПоОтгрузке Экспорт;
Перем Да Экспорт;
Перем Нет Экспорт;

Типовая бухия. Декабрь 2008.

А вот глЕстьРеквизитШапки() отсутствует.

(17) Оно надо всего в двух-трех случаях:
— Замена значений
— Автоматизация конвертации/обмена
— Восможно, в самописной конфе
— Для ОЧЧень универсального отчета/обработки

я пользовался по 1 и 3 вариантам.

Функция ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяРеквизита)

ЕстьРеквизит = Ложь;
СтандартныеРеквизиты = Метаданные[ТипОбъекта][Имя].СтандартныеРеквизиты;
Для каждого ЭлСтандартныеРеквизиты Из СтандартныеРеквизиты Цикл
Если ЭлСтандартныеРеквизиты.Имя = ИмяРеквизита Тогда
ЕстьРеквизит = Истина;
КонецЕсли;
КонецЦикла;
Возврат ЕстьРеквизит;

Функция ВернутьИмяНаСервере(Имя) Экспорт

ТипОбъекта = «Справочники»;
ИмяСтандартныеРеквизиты = «Наименование»;
Если Не ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяСтандартныеРеквизиты) Тогда
ИмяСтандартныеРеквизиты = «Код»;
КонецЕсли;
Возврат ИмяСтандартныеРеквизиты;

Источник

Профессия — 1С

рубрики: Платформа 8.3 | Дата: 12 июля, 2018

Одной из стандартных задач при работе с формами различных объектов является проверка реквизитов формы на заполненность.

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

Проверка средствами платформы

Как правило у различных объектов метаданных (справочники, документы и т.д.) часть реквизитов обязательны к заполнению. Это могут быть как стандартные реквизиты, например, для справочника наименование и код, так и реквизиты созданные в процессе конфигурирования. Для таких реквизитов свойство «Проверка заполнения» обычно устанавливается в значение «Выдавать ошибку»
ProverkaRekvizitov ProverkaZapolneniya
Кроме этого в свойствах самой формы должен быть установлен флаг Проверять Заполнение Автоматически
ProverkaRekvizitov FormaProveryatAvtomatom
Это позволяет выполнять проверку средствами платформы в момент записи объекта без написания дополнительного кода. Давайте посмотрим как это работает в режиме предприятия.
ProverkaRekvizitov OshibkaPlatforma
При выполнении такой проверки платформа осуществляет вызов предопределенной процедуры ОбработкаПроверкиЗаполненияНаСервере(), расположенной в модуле формы, а затем и вызов процедуры ОбработкаПроверкиЗаполнения(), которая находится уже в модуле объекта, если конечно эти процедуры имеются в наличии. И как мы видим организация такого рода проверки занимает минимальное количество усилий.

Программная проверка реквизитов с флагом «Выдавать ошибку»

Для реквизитов у которых свойство «Проверка заполнения» установлено в значение «Выдавать ошибку» достаточно легко можно организовать программную проверку буквально одной строчкой кода c помощью метода ПроверитьЗаполнение():

В отличие от предыдущего способа (когда проверка происходит в момент записи), мы можем вызвать данную проверку в любом месте своего кода. И точно также как и в предыдущем случае будут выполнены процедуры ОбработкаПроверкиЗаполненияНаСервере() и ОбработкаПроверкиЗаполнения()

Программная проверка реквизитов

И конечно же мы всегда можем программно проверить заполненность реквизитов вне зависимости от значения свойства «Проверка заполнения». В самом простейшем случае с помощью метода ЗначениеЗаполнено():

Давайте теперь попробуем разобраться в каком из предопределенных модулей лучше выполнять проверку, когда речь идет о записи объекта. Если мы обратимся к схеме событий при проведении документа, то увидим, что логично будет выполнить проверку до начала транзакции. То есть это следующие предопределенные процедуры:

Как правило проверка реквизитов выполняется в предопределенной процедуре модуля объекта ОбработкаПроверкиЗаполнения(). По умолчанию она выглядит следующим образом:

Здесь ПроверяемыеРеквизиты — это массив с именами реквизитов, которые подлежат проверке. Тип элементов массива — строка. Естественно, что платформа автоматически добавляет в этот массив имена реквизитов для которых установлено свойство «Выдавать ошибку». Но мы можем программно добавлять или удалять элементы массива и таким образом менять перечень проверяемых реквизитов:

Однако следует учитывать, что процедура ОбработкаПроверкиЗаполнения() не отрабатывает при программной записи объекта. Поэтому если заранее известно, что контроль реквизитов нужно производить как при интерактивной записи так и при программной, контроль заполненности реквизитов следует перенести в другую предопределенную процедуру в модуле объекта. Например ПередЗаписью().

Выводы

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

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с проверка наличия реквизита на форме
  • 1с проверка конфигурации мобильное приложение клиент