1с значение заполнения не подставляется
Хочу спросить, кто чем пользуется, что бы проверить заполнено ли значение. Я не заморачиваюсь и использую всегда ЗначениеЗаполнено(), вместо пустой ссылки и тому подобное.
ЗначениеЗаполнено() Работает как куча длинного Если, если тип такой и значение такое то истина, если такой и такое то истина иначе ложь.
Следовательно, если заранее известен тип значения проверяемого объекта, то использовать функцию не эффективно.
(11) зато если в результате пост-обработки заранее известный тип сваливается в НЕопределено - получим критическую ошибку :))))
(16) Ну это проблема разработчика :)
(17) Не обращай внимания, просто попроси разработчиков платформы ответить тебе как же оно работает.
(23) А если это проверка заполения реквизита на форме, опять же в описании функции сказано что она и на клиенте работает. Опять же в скулевом запросе нет кейсов.
(25) Тонкий клиент ни с чем кроме примитивных типов работать не умеет, все остальное происходит на стороне сервера.
(0) Принимай меня в свой клуб, большой брат. Но уже сталкивался несколько раз, что у нас какие-то быдлокодеры или кто-то еще создают в общих модулях процедуру ЗначениеНЕЗаполнено. Вот ее я отовсюду выпиливал где встречал)
Раздражает она меня)
(37) она тянется еще с 8.0 - там не было типового метода определения пустого значения вот и писали функцию, которую ты и встречаешь
(23) Нафига там скулевый запрос? Пустую ссылку можно по GUID определить, не говоря уже про строки, числа и т.д.
(35) Я не могу понять, как запосы работают на уровне интерфесных объектов и где в запросах есть кейсы.
ПустаяСтрока(), Ссылка.Пустая(), ЗначениеЗаполнено() -- доступны в тонком клиенте, про вызов сервера справка не упоминает.
В общем, эта функция не требует обращения к серверу, и запросов к БД не выполняется, что в общем-то неудивительно.
(49) Частыми слешами.
А что, самим слабО написать простенькую обработку и выяснить, что быстрее выполняется - ЗначениеЗаполнено() или какая другая? Обязательно мнение других спрашивать?
(52) Ну во первых результат ее выполнения нельзя будет явно оценить, к тому же если для чистоты эксперименты то писать ее надо для каждого типа, а то вдргу груви прав был и там на самом деле длиннющий кейс, хотя мне сдается там просто выполняется некое приведение к примитивному типу и уже по нему определяется (лично я бы так сделал)
Вызов базы может быть только в случаях:
ЗначениеЗполненно( СсылкаНаОбъектИлиСправочник.ПолеОбъекта ) или ЗначениеЗполненно( СсылкаНаОбъект.ТабличнаяЧасть )
В общем лишь там, где для проверки предварительно идёт выборка и к функции это не относится.
(53) Не может быть в этой функции длиннющий кейс не смешите людей. Каждый объект в 1С ( будь то строки или число и т.д. ) имеет функцию которая определяет заполненность. При вызове данной функции просто вызывается метод данного типа объекта и всё.
Механизм проверки заполнения позволяет автоматически проверить, заполнены ли указанные реквизиты объекта. Для этого нужно воспользоваться свойством ПроверкаЗаполнения , которое есть у реквизитов объектов конфигурации.
Разработчик может повлиять на стандартную проверку заполнения, выполняемую платформой. Для этого у него есть два события:
- Одно событие — ОбработкаПроверкиЗаполненияНаСервере — можно обработать в модуле формы.
- Другое событие — ОбработкаПроверкиЗаполнения — можно обработать в модуле прикладного объекта.
У формы, как правило, есть основной реквизит (редактируемый объект) и могут быть реквизиты, не относящиеся к редактируемому объекту, а являющиеся лишь частью формы:
Поэтому серверное событие формы ОбработкаПроверкиЗаполненияНаСервере предназначено для проверки заполнения тех реквизитов формы, которые не относятся к редактируемому объекту. Это данные только формы, у формы могут быть свои причины и алгоритмы для проверки этих данных.
Напротив, событие объекта ОбработкаПроверкиЗаполнения предназначено для для того, чтобы проверить реквизиты основного реквизита формы.
Обработчики обеих событий имеют параметр ПроверяемыеРеквизиты , в который платформа передает массив имен тех реквизитов, которые подлежат проверке. Если после выхода из обработчика в этом массиве все еще останутся какие-то имена реквизитов — платформа выполнит автоматическую проверку оставшися реквизитов.
Поэтому существует несколько сценариев того, как разработчик может встроить свой алгоритм в механизм проверки заполнения:
- самостоятельно проверить заполненность всех реквизитов и очистить массив ПроверяемыеРеквизиты , чтобы платформа не выполняла их проверку
- проверить часть реквизитов самостоятельно, удалить их из массива ПроверяемыеРеквизиты , а оставшиеся оставить на проверку платформе
- добавить в массив ПроверяемыеРеквизиты какие-то реквизиты, чтобы платформа проверила и их тоже
- вообще отказаться от проверки заполненности реквизитов, очистив массив
Все эти сценарии реализуются довольно просто. Например, чтобы самостоятельно проверить заполненность реквизитов, можно выполнить следующий код:
Чтобы проверить лишь часть реквизитов, можно выполнить такой код:
Добавить в массив проверяемых реквизитов еще один реквизит можно следующим образом:
А очистить массив проверяемых реквизитов, чтобы ничего не проверять ни самому, ни платформе, можно так:
Вторым параметром в обработчиках этих событий является параметр Отказ . Если ему присвоить значение Истина , то после выхода из обработчика дальнейшая запись объекта будет отменена. Таким образом этот параметр нужно устанавливать в значение Истина тогда, когда ваш алгоритм приходит к выводу, что реквизит не заполнен. В этом случае запись объекта выполнена не будет.
Справка
ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
- Отказ . Тип: Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись выполнена не будет. Значение по умолчанию Ложь .
- ПроверяемыеРеквизиты . Тип: Массив . Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение() . Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство ПроверятьЗаполнениеАвтоматически . В этом случае вначале будет вызван данный обработчик, а затем обработчик ОбработкаПроверкиЗаполнения() модуля объекта.
Позволяет разработчику самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
Для формы документа, если при конфигурировании для документа свойство Проведение установлено в Разрешить , событие вызывается только при проведении. Если документ не проводится (свойство Проведение установлено в Запретить ), то вызывается при записи.
ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
- Отказ . Тип: Булево . Если в теле процедуры-обработчика установить данному параметру значение Истина , то будет выполнен отказ от продолжения работы после выполнения проверки заполнения. Значение по умолчанию Ложь .
- ПроверяемыеРеквизиты . Тип: Массив . Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи или при проведении документа в форме, а также при выполнении метода ПроверитьЗаполнение() . Если для документа при конфигурировании свойство Проведение установлено в Разрешить , то вызывается только при проведении. Если документ не проводится (установлено Запретить ), то вызывается при записи.
Позволяет разработчику конфигурации самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Часто при вводе новой строки табличного поля нужно автоматически заполнить некоторые колонки, например Дата или Ставка НДС:
При добавлении в табличное поле новой строки может возникнуть ситуация, когда необходимо заполнить некоторые поля новой строки значениями по умолчанию. Для этого следует использовать событие ПриНачалеРедактирования() табличного поля. Обработчик данного события вызывается при начале редактирования старой или добавленной строки табличного поля и имеет параметры НоваяСтрока и Копирование. Параметр НоваяСтрока указывает, что происходит редактирование новой строки, а параметр Копирование указывает, что происходит копирование строки. Ниже код для управляемого приложения и обычного:
Результат при добавлении новой строки:
В обычном приложении:
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 3
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 0
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же ВКС - Высококвалифицированные специалисты - какие настройки нужно сделать ЗУП? 0
В этой статье мы вкратце расскажем - какие настройки нужно сделать ЗУП для временно пребывающих высококвалифицированных иностранных специалистов. Гражданство Откройте сотрудника и перейдите в настройки данных о Гражданстве Если сотрудник ВКС то Посмотреть все результаты поиска похожих
Еще в этой же категории
Часто при вводе новой строки табличного поля нужно автоматически заполнить некоторые колонки, например Дата или Ставка НДС:
При добавлении в табличное поле новой строки может возникнуть ситуация, когда необходимо заполнить некоторые поля новой строки значениями по умолчанию. Для этого следует использовать событие ПриНачалеРедактирования() табличного поля. Обработчик данного события вызывается при начале редактирования старой или добавленной строки табличного поля и имеет параметры НоваяСтрока и Копирование. Параметр НоваяСтрока указывает, что происходит редактирование новой строки, а параметр Копирование указывает, что происходит копирование строки. Ниже код для управляемого приложения и обычного:
Результат при добавлении новой строки:
В обычном приложении:
Похожие FAQ
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Функция (часто называют подпрограмма) – это некоторый фрагмент внутри кода программы к которому можно обращаться из другого места в коде программы. Обычно связывается с функцией идентификатор, но иногда встречаются и функции без имени. К названию функции всегда привязан адрес первого оператора, который входит в заданную функцию. По завершению функции управление переходит в ту часть программы, где закончилось упоминание функции. Также функция способна брать некоторые параметры, а затем возвращать их в виде некоторого значения (иногда значение функции пустое).
1. Функция ЗначениеЗаполнено
В системе 1С существует особая функция, подстановкой в которую можно проверить не пустое ли значение функции. Для того чтобы узнать заполнено ли какое-то значение, параметр, реквизит или переменная, нужно воспользоваться функцией «ЗначениеЗаполнено», которая находится в глобальном контексте и имеет вид, как на вставке ниже:
Рис. 1 Функция Значение заполнено в 1С
В платформе 1С считается заполненным только то значение, которое разнится со значением, по умолчанию заведенным в данный тип.
Например: стандартное значение в ссылочном типе – это пустая ссылка.
Примечание: считаются пустыми значения, которые содержат Ноль или Неопределённо – в них возвращается «Ложь».
Функция ЗначениеЗаполнено() проверяет, что «Истина» возвращается для:
· реквизиты и параметры типа «Булево»;
· если в строке есть символы отличные от пробела, то значения с типом «Строка»;
· если в массиве есть не меньше одного элемента, то «Массив».
Примечание: в функции ЗначениеЗаполнено() не поддерживаются мутабельные значения (один из типов данных, в котором объекты могут менять собственные свойства, например «Таблица значений» или «Древо значений», чтобы, к примеру, проверить, что таблица не пустая – в системе 1С используется функция Количество()). Помимо этой особенности, функция прекрасно работает в любой конфигурации системы 1С.
2. Примеры использования функции
Пример подпрограммы (функции):
Рис. 2 Пример функции 1С ЗначениеЗаполнено
В примере подпрограммы на картинке выше в переменной «Проверка» будет храниться значение «Ложь». А в самих условиях можно пользоваться также данной функцией – ЗначениеЗаполнено(). Также можно взглянуть на аналогичный пример, который следует из определения данной функции:
Рис.3 Пример использования ЗначениеЗаполнено
Рис. 4 Использование функции ЗначениеЗаполнено
На этом примере показано, что в случае, когда документ с названием «Авансовый отчёт», который имеет номер «000000001», существует, тогда внутри параметра «Проверка» станет находится значение «Истина», в другом случае – «Ложь».
Третий пример использования функции:
Рис. 5 Пример ЗначениеЗаполнено с параметром Ложь
В данном примере сделаны варианты использования функции ЗначениеЗаполнено() и, в комментариях заведомо подписано, что является результатом выполнения функции.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Читайте также: