Запрет незаполненных значений 1с
В 1С проверка на пустое значение осуществляется специальной функцией. Что бы проверить заполнен ли имеющийся у вас реквизит или переменная следует использовать функцию из глобального контекста ЗначениеЗаполнено().
В 1С 8 значение считается заполненным (не пустым) если оно отличается от значения по умолчанию для данного типа. Например для ссылочного типа значение по умолчанию — это Пустая ссылка (данного справочника, документа и т.п.). Также пустыми являются переменные и реквизиты содержащие значения Null и Неопределено.
1с проверка на пустое значение. Примеры
В данном случае переменная Проверка будет содержать значение Ложь. Также функцию ЗначениеЗаполнено(). можно использовать напрямую в условиях.
В данном примере, если документ Авансовый отчет с номером 000000001 существует, то в переменной Проверка будет содержаться значение Истина, иначе Ложь.
Использовать функцию ЗначениеЗаполнено нельзя для переменных мутабельных типов, таких как Таблица значений, Дерево значений и т.п. Функция работает для всех конфигураций.
Как же проверить, что в 1с таблица значений пустая? Для этого используется метод Количество(), с его помощью можно проверить сколько строк содержится в таблице значений.
Пример 3. Пусть МояТаблица — таблица значений определенная выше в коде.
Этим же методом можно определить заполненность дерева значений и выборки результата запроса.
Пример 4. Пусть МоеДерево — дерево значений определенное выше в коде.
Как видите, в дереве значений мы проверяем наличие строк первого уровня, если их нет, то дерево пустое.
Пример 5. Пусть Запрос — запрос к базе данных 1С 8, определенный выше.
На этом описание основных приемов, при помощи которых осуществляется в 1с проверка на пустое значение, закончено. Если вы хотите узнать, как сделать проверку на пустое значение в запросе, прочитайте следующие статьи: Проверка на null в запросе и Проверка на Неопределено в запросе
Свойства объектов конфигураций 1С не дублируют друг друга, даже если схожи их названия. Как правило такие свойства несут разную смысловую нагрузку и предназначены для использования в разных ситуациях. Следующий вопрос слушателя как раз пример на эту тему.
Вопрос
Здравствуйте! При описании примера для регистра сведений “СоставКомплектов” в измерении “Комплект” Вы использовали свойство “Запрет незаполненных значений” = Истина. Ранее в аналогичных ситуациях Вы использовали “Проверка заполнения” = Выдавать ошибку. У измерения есть оба этих свойства. Подскажите, в контексте экзаменационных задач в чем разница и когда каким свойством пользоваться? И можно ли для однообразия всегда использовать для проверки заполнения одно свойство?
Ответ
Здравствуйте. Эти свойства используются по-разному, и они не исключают, а, скорее дополняют друг друга.
Свойство “Запрет незаполненных значений” для измерения регистра проверяется при каждой записи данных в регистра, независимо от того, программно она выполняется или интерактивно. Если значение этого свойства равно “Истина” и измерение не заполнено, при записи данных в регистр возникнет исключение и запись произведена не будет.
Если по логике задачи какое-то поле не должно быть пустым, можно включить оба этих способа проверки. Для экзамена можно ограничиться и одним из них – ошибочной ситуации в любом случае не возникнет. Но более удобно и логично включить интерактивную проверку заполнения (“Проверка заполнения” = “Выдавать ошибку”), так как это отсечет ошибку раньше и потребует меньше системных ресурсов.
Однако бывают ситуации, эти методы не взаимозаменяемы, но работают совместно. Например, измерение регистра допускает наличие пустых значений, а соответствующее поле документа (регистратора движений) – нет. В качестве примера посмотрите эту задачу: тема № 9: “Нюансы и подводные камни задач по взаиморасчетам в разрезе проектов”, пункт “Запрет пустых значений”. Измерение “Проект” регистра “Взаиморасчеты” допускает пустые значения, так как пустым значением тут обозначается аванс. В то же время для документа “Расходная накладная” указание пустого проекта недопустимо – продажа всегда выполняется по какому-то определенному проекту.
Хочу спросить, кто чем пользуется, что бы проверить заполнено ли значение. Я не заморачиваюсь и использую всегда ЗначениеЗаполнено(), вместо пустой ссылки и тому подобное.
ЗначениеЗаполнено() Работает как куча длинного Если, если тип такой и значение такое то истина, если такой и такое то истина иначе ложь.
Следовательно, если заранее известен тип значения проверяемого объекта, то использовать функцию не эффективно.
(11) зато если в результате пост-обработки заранее известный тип сваливается в НЕопределено - получим критическую ошибку :))))
(16) Ну это проблема разработчика :)
(17) Не обращай внимания, просто попроси разработчиков платформы ответить тебе как же оно работает.
(23) А если это проверка заполения реквизита на форме, опять же в описании функции сказано что она и на клиенте работает. Опять же в скулевом запросе нет кейсов.
(25) Тонкий клиент ни с чем кроме примитивных типов работать не умеет, все остальное происходит на стороне сервера.
(0) Принимай меня в свой клуб, большой брат. Но уже сталкивался несколько раз, что у нас какие-то быдлокодеры или кто-то еще создают в общих модулях процедуру ЗначениеНЕЗаполнено. Вот ее я отовсюду выпиливал где встречал)
Раздражает она меня)
(37) она тянется еще с 8.0 - там не было типового метода определения пустого значения вот и писали функцию, которую ты и встречаешь
(23) Нафига там скулевый запрос? Пустую ссылку можно по GUID определить, не говоря уже про строки, числа и т.д.
(35) Я не могу понять, как запосы работают на уровне интерфесных объектов и где в запросах есть кейсы.
ПустаяСтрока(), Ссылка.Пустая(), ЗначениеЗаполнено() -- доступны в тонком клиенте, про вызов сервера справка не упоминает.
В общем, эта функция не требует обращения к серверу, и запросов к БД не выполняется, что в общем-то неудивительно.
(49) Частыми слешами.
А что, самим слабО написать простенькую обработку и выяснить, что быстрее выполняется - ЗначениеЗаполнено() или какая другая? Обязательно мнение других спрашивать?
(52) Ну во первых результат ее выполнения нельзя будет явно оценить, к тому же если для чистоты эксперименты то писать ее надо для каждого типа, а то вдргу груви прав был и там на самом деле длиннющий кейс, хотя мне сдается там просто выполняется некое приведение к примитивному типу и уже по нему определяется (лично я бы так сделал)
Вызов базы может быть только в случаях:
ЗначениеЗполненно( СсылкаНаОбъектИлиСправочник.ПолеОбъекта ) или ЗначениеЗполненно( СсылкаНаОбъект.ТабличнаяЧасть )
В общем лишь там, где для проверки предварительно идёт выборка и к функции это не относится.
(53) Не может быть в этой функции длиннющий кейс не смешите людей. Каждый объект в 1С ( будь то строки или число и т.д. ) имеет функцию которая определяет заполненность. При вызове данной функции просто вызывается метод данного типа объекта и всё.
В информационной системе данные могут вноситься множеством различных способов, и часто они могут быть некорректны. Поэтому при разработке решения бывает необходимо прилагать много усилий на реализацию проверки правильности вводимых данных и уведомления пользователя о некорректности введенной информации.
Механизм проверки заполнения позволяет существенно упростить процесс разработки конфигураций.
Проверка заполнения
Платформа поддерживает автоматическую проверку указанных реквизитов прикладных объектов и форм, а также позволяет выполнить процесс проверки в модуле. Для управления проверкой заполнения реквизита служит свойство Проверка заполнения . Если свойство установлено в значение Не проверять – платформа не проверяет заполнение реквизита. Значение Выдавать ошибку указывает на необходимость выполнять проверку.
Платформа выполняет автоматическую проверку заполнения:
● констант;
● справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач:
● реквизитов и стандартных реквизитов,
● табличных частей,
● реквизитов и стандартных реквизитов табличных частей;
● наборов записей регистров бухгалтерии, регистра сведений, регистра накопления, регистра расчета, перерасчетов, последовательностей:
● измерений,
● ресурсов,
● реквизитов и стандартных реквизитов;
● реквизитов форм;
● реквизитов форм отчетов;
● реквизитов форм обработок.
ПРИМЕЧАНИЕ. Проверка заполнения реквизитов выполняется аналогично функции ЗначениеЗаполнено( ). Проверка заполнения табличных частей подразумевает, что табличная часть считается заполненной, когда в ней присутствует хотя бы одна строка.
Проверка заполнения может быть вызвана двумя способами:
● вызовом метода ПроверитьЗаполнения() (у объекта или формы);
● автоматически.
ВНИМАНИЕ! Если свойство конфигурации Режим совместимости установлено в значение Версия 8.1, то автоматическая проверка заполнения не работает.
Установки по умолчанию
Свойство реквизита Проверка заполнения по умолчанию устанавливается в значение Выдавать ошибку для следующих стандартных реквизитов:
● ПланОбмена – Наименование ;
● Справочник – Владелец, Наименование ;
● Документ – Дата;
● ПланВидовХарактеристик – Наименование;
● ПланСчетов – Код, Наименование ;
● ПланСчетов.ВидыСубконто – ВидСубконто;
● ПланВидовРасчета – Наименование;
● ПланВидовРасчета.ВедущиеВидыРасчета – ВидРасчета;
● ПланВидовРасчета.БазовыеВидыРасчета – ВидРасчета;
● ПланВидовРасчета.ВытесняющиеВидыРасчета – ВидРасчета ;
● РегистрСведений – Период;
● РегистрНакопления – Период;
● РегистрБухгалтерии – Период;
● РегистрРасчета – ПериодРегистрации, ВидРасчета, ПериодДействияНачало, ПериодДействияКонец ;
● БизнесПроцесс – Дата;
● Задача – Наименование.
Порядок работы
Автоматическая проверка заполнения вызывается расширением формы перед интерактивной записью всех объектов, кроме документов, бизнес-
процессов, отчетов и обработок. Для этих объектов определено следующее поведение:
● для документов:
● проверка заполнения вызывается расширением формы перед проведением, если свойство Проведение установлено в значение Разрешить;
● проверка заполнения вызывается расширением формы перед записью, если свойство Проведение установлено в значение Запретить ;
● для бизнес-процессов проверка заполнения вызывается расширением формы перед стартом;
● для отчетов проверка заполнения вызывается расширением формы при нажатии кнопки Сформировать ;
● для обработок проверка заполнения вызывается расширением формы в случаях, если нажаты кнопки, связанные со стандартными командами формы OK, Да, Повторить, Пропустить.
Если реквизит является основным реквизитом формы следующих типов: СправочникОбъект, ДокументОбъект, ОтчетОбъект ,
ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетовОбъект, БизнесПроцессОбъект, ЗадачаОбъект , то для значения такого реквизита
также будет вызвана проверка заполнения.
Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство Проверять заполнение автоматически. В этом случае вначале будет вызван обработчик ОбработкаПроверкиЗаполненияНаСервере () формы, а затем обработчик ОбработкаПроверкиЗаполнения( ) модуля объекта.
ВНИМАНИЕ! Если у формы свойство Проверять заполнение автоматически установлено в значение Истина при выполнении стандартных команд Записать ( Провести для документов и т. д.), а также стандартных команд формы OK, Да, Повторить, Пропустить , будет вызван метод ПроверитьЗаполнение (). В противном случае проверка заполнения не вызывается ни для формы, ни для объекта.
Процесс проверки заполнения происходит следующим образом:
● Формируется список имен реквизитов формы, для которых возможна проверка заполнения и для которых свойство ПроверкаЗаполнения установлено в значение ВыдаватьОшибку . В этот список не будут включены имена реквизитов, тип которых не поддерживает проверку заполнения (например, СправочникОбъект ), но будет включено имя основного реквизита формы.
В автоматически формируемый список реквизитов не будут включены реквизиты формы, отключенные с помощью функциональных опций.
● Вызывается обработчик события формы ОбработкаПроверкиЗаполненияНаСервере , в котором разработчик может описать свой алгоритм проверки заполнения или изменить состав проверяемых реквизитов. В обработчик будет передан сформированный список имен реквизитов. Если в обработчике необходимо добавить к списку какие-либо реквизиты, это можно сделать только для реквизитов вышеперечисленных типов (для
которых возможна проверка заполнения в форме) и основного реквизита. Добавление в список имен реквизитов объектного типа (например, СправочникОбъект ) вызовет исключение при дальнейшей автоматической проверке. Добавление в список имени несуществующего реквизита вызовет исключение при дальнейшей автоматической проверке.
● После завершения работы обработчика события механизм проверки заполнения получает обратно список имен, проверяемых реквизитом (который, возможно, был изменен в обработчике). Система анализирует список реквизитов и проверяет заполненность каждого реквизита. Если реквизиттявляется основным реквизитом объектного типа (например, Объект типа СправочникОбъект ), будет вызвана проверка заполнения самого объекта.
Если реквизит является реквизитом объектного типа, но не основным, будет вызвано исключение.
Для реквизитов, входящих в состав функциональных опций без параметров, значение опции учитывается при проверке заполнения. Если функциональная опция включена, то реквизит будет включен в список проверяемых реквизитов; если опция выключена, реквизит не будет включен в список проверяемых реквизитов. Это значит, что отключенное поле не будет передано через параметры ПроверяемыеРеквизиты в
ОбработкаПроверкиЗаполнения.
Реквизиты, входящие в состав функциональной опции с параметрами , всегда включаются в список проверяемых реквизитов (параметр ПроверяемыеРеквизиты ). Удаление реквизита из списка проверяемых реквизитов в таких случаях необходимо выполнять в обработчике ОбработкаПроверкиЗаполнения . Для этого следует получить значение функциональной опции, указав в качестве параметров необходимые данные
объекта.
Правила отображения отметки незаполненного
При вводе операций существующие, но незаполненные субконто отображаются не просто пустыми полями, а угловыми скобочками - "<. >". Есть ли возможность устроить такое отображение незаполненных полей в произвольной форме - например, в каком-нибудь документе? (У меня там по сути почти такая же произвольная операция, и в зависимости от ситуации может быть нужно разное количество данных, причем не в шапке, а в строке таблицы, так что просто скрывать "лишние" элементы не вариант, а пользователю нужно сразу видеть, какие поля надо будет заполнять, а какие нет ) При этом тип данных - не строка, а конкретный справочник, из которого надо сделать выбор, поэтому изначально заполнять пустоты многоточиями, само собой, не вышло: когда полю присваивается тип, неподходящие значения теряются.
Ошибка в коде при обнаружении незаполненного поля на форме
ребятки, подскажите пожалуйста, в коде выводит "Expected:=" If Form..Фамилия.Value = Null Or.
как обработать ошибку незаполненного поля в memo ?
например если нужно ввести построчно 5ть символов. и их меньше , то программа вылетает , что в.
Отображение в форме одного поля из разных записей
Здравствуйте! Нужно, чтобы при заполнении левых полей формы ("Дата" и "Количество") в правой части.
Отображение поля в форме только если оно не пустое
Добрый день. подскажите как прописать в VBA отображение поля "ПОЛЕ1" в форме только если оно не.
Отображение картинки на форме клиентского приложения из базы данных из поля OLE
ПРошу помочь начинающему. Есть клинское приложение связанное с базой данных в acceess. В базе.
Изменение цветом поля в подчиненной форме в зависимости от значения в форме
Добрый день. Есть такой вопрос. Есть БД, где в поле под Статусом печати выбирается номер List ID.
Ограничение вариантов заполнения поля в форме на основе уже заполненного поля
Здравствуйте. Сразу к делу- Имеется база, в ней,кроме прочих,существуют таблицы "Структура мест.
Подстановка поля в форме на основе другого поля (ввод с клавиатуры)
Всем привет. Извините за вопрос, уже видела кучу тем с похожими просьбами, но по ним не смогла.
Читайте также: