1с проверить заполнение реквизитов формы
(8) по примеру из (3) я должен буду написать примерно такое:
Так?
Я же не хочу писать один и тот же код во всех формах, а хочу вызвать так:
МойОбщийМодуль.ПроверитьЗаполненностьРеквизитов( ПроверяемаяФорма, СписокПроверяемыхПолей);
"Я же не хочу писать один и тот же код во всех формах, а хочу вызвать так" - покажи пальцем - кто тебе мешает?
текЭлемент - это Элемент (не реквизит) формы, поэтому нет, не канает.
(12) "СписокПроверяемыхПолей" - тебя ни на какие мысли не наводит?
И в общих модулях &НаКлиенте, &НаСервере и прочее - не используется.
(14) а ты пробовал? сейчас лень проверять, но вроде как этот метод проверяет любое не мутабельное значение.
(16) ЗначениеЗаполнено(ПолеВвода)? И что ж оно должно сообщить?
(15) а на что может натолкнуть "СписокПроверяемыхПолей"? Честно, не понимаю. Там хранятся строки - имена элементов формы. И все.
А НаСервере и НаКлиенте в общих модулях используется, если стоят галки "Клиент" и "Сервер" (у меня именно такой)
(18) ЗАБУДЬ, пеляйт, про элементы формы. Нет их, не существует, пеляйт. Там хранятся имена РЕКВИЗИТОВ (еще раз обрати, пеляйт, внимание - НЕ ЭЛЕМЕНТОВ, а РЕКВИЗИТОВ) для проверки. Есть элемент в этом массиве - реквизит (не элемент формы, ты помнишь, да?) будет проверяться. нет элемента - не будет. Дальше сам додумаешься?
(20) не так он не поймет надо носом ткнуть)))
sbabay убери в (12) точку и слово "Элементы"
Давайте еще раз.
И на форме два элемента: ИмяКонтрагента (ПутькДанным = Контрагент.Наименование) и Примечание (ПутьКДанным = Примечание).
После того как админ установил обязательность заполнения элементов, сохранился СписокПроверяемыхПолей, который состоит из 2-х элементов-строк: "ИмяКонтрагента" и "Примечание"
Теперь в общем модуле вы советуете сделать проверку вот так:
&НаКлиенте
Но такое пройдет только для "Примечания", для элемента "ИмяКонтрагента" такое не пройдет, т.к. данные хранятся в реквизите "Контрагент.Наименование"
(20) Я кажется понял, что ты имеешь ввиду.
Если я буду использовать:
то про "ПроверяемыеРеквизиты" откуда у меня возьмутся? У меня есть только то, что заполнил СуперПользователь - а он отметил те ЭЛЕМЕНТЫ формы, которые должны быть заполнены.
(24) данные храняться в реквизите Контрагент, а если у тебя элемент формы ИмяКонтрагента связан с Контрагент.Наименование то пользователь все равно его ввести не может.
Короче форму даже передавать не надо, простопередаешь список реквизитов
(25) Почему это не сможет ввести ИмяКонтрагента?
Контрагент - основной реквизит обработки. Я раскрываю это дерево и перетаскиваю в элементы формы "Контрагент.Наименование" и обзываю его "ИмяКонтрагента"
Про твой код. И где тут универсальность? Я ж говорил, что у меня есть только список Имен элементов. Как на основе этого напишу:
МассивРеквизитов.Добавить(Объект.Клиент);
?
(26) ты пробовар редактировать ИмяКонтрагента в режиме предприятия? только убедись что в свойствах, путь к данным у тебя именно Объект.Контрагент.наименование.
Я твоей структуры не знаю, в каком виде у тебя храниться список? Но блин неужли не сообразишь,
да хотя бы если у тебя хранится только наименование реквизита, то используй
Выполнить("МассивРеквизитов.Добавить("+ИмяТвоегоРеквизита+");"
Я так и не понял зачем САМОМУ проверять заполнение реквизитов.
ПроверитьЗаполнение (FillCheck)
Синтаксис:
ПроверитьЗаполнение()
Возвращаемое значение:
Тип: Булево. Истина - ошибок не обнаружено, Ложь - в противном случае.
Описание:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Вызов метода выполняет обращение к серверу.
Выполнение метода приводит к возникновению события ОбработкаПроверкиЗаполненияНаСервере.
(29) для этого надо в конфигураторе проставлять "Показывать ошибку" в реквизитах формы. К тому же к полю, путь к данным которого = "Контрагент.Наименование" так не подступишься, не залазея в справочник "Контрагенты".
В форме внешней обработки вводятся данные( реквизиты). Как можно проверить их на заполнение до создания документов, до вызова основных процедур?
Есть свойство АвтоОтметкаНезаполненного, она дает подчеркивание не заполненного реквизита, этого мало.
Если взять Значение = "Неопределено" то как выстроить код?
Спасибо всем., обработка завершена.
можно на реквизитах поставить свойство Проверка заполнения - Выдавать ошибку и перед созданием документа вызвать метод обработки ПроверитьЗаполнение(). А можно свой аналог такой функции написать и ее вызывать перед созданием документа, где выполнить все необходимые проверки и вернуть флаг разрешающий или запрещающий дальнейшее выполнение
(2)Поставил уже на реквизитах.
Вот соображаю как прикрутить это - ПроверитьЗаполнение().
Есть пример использования?
погуглю еще обязательно.
В Свойствах формы Установить галку "ПроверятьЗаполнениеАвтоматически"
В свойствах реквизитов Проверка заполнения - Выдавать ошибку
И в нужной процедуре вызываем проверку
ПроверитьЗаполнение();
Данный метод является методом формы, поэтому если использовать в контексте данной формы, то можно вызвать например так:
И в нужном месте функцию вызвать. Если же проверяется из другой формы, то сначала надо получить форму нужную, а потом вызывать метод:
(5)Спасибо!
А еще момент.
Как это использовать при создании документов, что бы в случает нахождения ошибок, документ не создавался, что бы процедура обрывалась?
(6) Гугли по ключевым словам ОбработкаЗаполнения, Заполнить, ОбработкаПроверкиЗаполнения, ПроверитьЗаполнение. И вдумчиво читаем. Все уже давно разжевано. Потратишь время, зато раз и навсегда научишься делать правильно. Это гораздо эффективнее, чем получать на форуме обрывочные сведения.
Спасибо всем., обработка завершена.
В этой статье я рассмотрю основные механизмы платформы 1С 8.3, которые обеспечивают проверку заполнения реквизитов.
Проверка заполнения реквизита объекта 1С
У любого реквизита объекта 1С можно настроить проверку заполнения, когда нельзя сохранить новый элемент объекта, не заполнив этот реквизит. Выйдет ошибка.
Для того, чтобы у реквизита объекта осуществлялась проверка заполнения, достаточно в свойстве реквизита «Проверка заполнения» указать значение «Выдавать ошибку».
При таком конфигурировании реквизита, если это реквизит не заполнен, то при попытке записи элемента, выйдет соответствующая ошибка, и запись элемента не будет осуществлена.
Данная проверка будет осуществляться независимо от того, сгенерирована эта форма платформой 1С 8.3 автоматически, или используется форма созданная разработчиком.
Проверка заполнения табличной части в 1С
Помимо реквизитов у объектов можно проверять заполнение табличной части. Для этого у табличных частей объектов имеется свойство «Проверка заполнения», в которое также необходимо установить значение «Выдавать ошибку».
Если в этом случае мы попытаемся записать элемент, в котором будет табличная часть без строк, то выйдет ошибка, и записать элемент не получится.
В тоже время, мы спокойно сможем записать элемент, у которого имеется строка табличной части с пустыми полями.
Если мы хотим проверять реквизиты табличной части, то у них нужно заполнить аналогичное свойство.
Проверка заполнения программно в 1С
Иногда возникает необходимость проверить программно заполнение объекта в 1С. Для этих целей предназначен метод ПроверитьЗаполнение(), который имеется у большинства объектов 1С (справочники, документы и т.д.).
Например, во время программного создания элемента справочника, мы можем проверить заполнение реквизитов этого справочника, перед его записью.
В этом случае, элемент справочника не будет записан, если у него имеются реквизиты, у которых в свойстве ПроверкаЗаполнения установлено значение «Выдавать ошибку».
Иногда, нужно проверить заполнение реквизита, у которого в свойстве «Проверка заполнения» установлено значение «Не проверять». Например, у реквизита Артикул справочника Номенклатура.
Если нам нужно осуществлять проверку этого реквизита (например, по какой-то определенной логике), то необходимо в модуле объекта создать метод ОбработкаПроверкиЗаполнения.
У этого метода, который является процедурой, имеется параметр ПроверяемыеРеквизиты. Этот параметр массив, в котором содержится список имен реквизитов, которые нужно проверять. Если в этот список мы добавим название реквизита, то при сохранении элемента будет осуществляться проверка на то, заполнен этот реквизит или нет.
Также, мы можем удалить реквизит из проверяемых, если по какой-то причине нет необходимости в проверке заполнения этого реквизита.
Например, удалим из проверяемых реквизит ПолноеНаименование.
Тогда мы сможем спокойно записать элемент с незаполненным реквизитом ПолноеНаименование.
Если мы хотим проверить программно, что заполнен реквизит табличной части объекта, то необходимо добавить этот реквизит в массив ПроверяемыеРеквизиты по такому формату: [НазваниеТабличнойЧасти].[НазваниеРеквизита] .
В этом случае, будет осуществляться проверка заполнения реквизита табличной части.
Проверка заполнения формы 1С
При выполнении команды Посчитать, произведем расчет только в том случае, если реквизиты заполнены. Проверку заполнения будем выполнять при помощи метода ПроверитьЗаполнение.
Теперь мы не сможем посчитать сумму, если один из множителей не заполнен.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Что-то не могу сообразить как проверить на управляемой форме имеет ли реквизит значение?
Обхожу подчиненные элементы страницы, если тип = поле формы, тогда нужно проверить заполнено ли он. Как это сделать?
(1) Zixxx, а зачем форму то обходить ? Почему бы сразу реквизиты и не проверять ? )))а так, у элементов формы есть связка с реквизитами, путь к данным кажись. (2) Boneman, Нужно именно обходить определенную страницу формы и проверять на ней реквизиты, так как проверяется много страниц и функция для этого всего одна (2) Boneman, Путь к данным есть, но как по нему обратиться? Допустим есть реквизит формы с типом СправочникСсылка.Номенклатура.
Проверка на клиенте будет выглядеть так.
Но это все равно серверный вызов. Так что это все равно что написать:
(5) Захаров_Николай, Нет. Я же обхожу реквизиты, т.е. у меня либо реквизит это тип "ПолеФормы" либо ПутьКДанным НаКлиенте обращение к реквизитам формы происходит так: .
В твоем случае, ощущение такое, что ты перебираешь элементы: Не знаю для каких целей подобное может понадобиться.
Но если создать процедуру на сервере, можно сделать так:
Глобальный контекст (Global context)
ЗначениеЗаполнено (ValueIsFilled)
Синтаксис:
Тип: Произвольный.
Значение для проверки.
Возвращаемое значение:
Тип: Булево.
Для значений типа Булево всегда возвращается Истина.
Для значений типа Строка возвращается Истина, если в строке есть непробельные символы.
Для массивов и коллекций возвращается Истина, если в них есть хотя бы 1 элемент.
Для Неопределено и Null всегда возвращается Ложь.
Описание:
Функция проверяет, отличается ли переданное значение от значения по умолчанию того же типа.
Не работает с мутабельными значениями. При передаче мутабельного значения функция вызывает исключение.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:
Разберем методы, при помощи которых, в 1С 8.3 можно определить тип значения переменной (или реквизита какого-нибудь объекта). Причем, эти методы могут работать со всеми типами: примитивными, объектными и коллекциями значений.
Для работы с типами, в платформе 1С имеется специальный тип, который так и называется Тип. Этот тип необходим для идентификации типов значений различных данных. Значения типа Тип возвращают только две функции Тип и ТипЗнч.
Функция ТипЗнч в 1С
Разберем функцию ТипЗнч. Эта функция принимает в качестве параметра любое значение и возвращает тип этого значения.
Рассмотрим пример: будем использовать в качестве параметра этой функции число, таблицу значений и объект какого-нибудь справочника.
Посмотрим в отладке, что вернет этот метод.
Как видите, все значения, которые вернул метод ТипЗнч имеют тип Тип. Но, сами по себе знания о том, какой тип у того или иного значения нам ни чего не дают. Разве что можно сравнить одинаковы ли типы у двух разных значений. Эти знания применимы только тогда, когда можно точно определить какого типа наше значение. Делается это при помощи функции Тип.
Функция Тип в 1С
Функция тип имеет один параметр имя получаемого типа в строковом представлении, возвращает тип Тип.
Переделаем предыдущий пример: будем получать типы значений, используя функцию Тип.
В переменных будут те же значения, что и в прошлый раз.
Чтобы быстро получить название какого-то типа, достаточно «задержаться» в написании после первой кавычки, или нажать комбинацию клавиш Ctrl+Пробел.
Появится выпадающий список всех названий типов, где набирая первые символы названия можно быстро найти нужный тип.
Обе функции Тип и ТипЗНЧ возвращают значения одного типа – Тип. Но, если в случае функции ТипЗнч мы не можем точно знать, что вернет эта функция (поскольку, иногда, возникают ситуации, когда точно не известно какого тип та или иная переменная), то при работе с функцией Тип, мы точно знаем, какое значение вернет эта функция, поскольку сами указали строковое представление типа в параметре.
Как проверить тип значения
Для того, чтобы проверить какой тип значения у той или иной переменой, достаточно использовать обе этих функции (Тип и ТипЗнч) вместе: сравнивая, что возвращает функция ТипЗнч, в параметре которой указано какое-либо значение, с функцией Тип, в параметре которой мы указали конкретный тип.
Рассмотрим пример: будем заполнять массив значениями разных типов, потом при помощи генератора случайных чисел выберем нужный элемент массива, и определим какого типа этот элемент массива. В этот массив поместим число, дату, строку и какой-нибудь список значений.
В этом коде я использовал условие, где обрабатывал сравнение значений, которые возвращают функции Тип и ТипЗнч.
Статьи о примитивных типах в 1С:
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Читайте также: