Обработчик события ОбработкаПроверкиЗаполнения
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1.1. В данном обработчике модуля объекта выполняются действия, связанные с проверкой правильности заполнения значений реквизитов объектов (измерений, ресурсов, реквизитов табличных частей и т.п., далее: просто «реквизиты»).
1.2. Данным обработчиком следует пользоваться в случаях, когда для проверки корректности значений реквизитов обычной проверки на заполненность уже недостаточно (например, значение реквизита логически связано со значением другого реквизита), или же требование к тому, чтобы значение реквизита было заполнено не является безусловным.
Если проверка заполнения какого-либо реквизита — условная (т.е. зависит от значений других реквизитов или значения параметризированной функциональной опции) в обработчике следует предусмотреть код, который удаляет имя такого реквизита из массива проверяемых реквизитов ПроверяемыеРеквизиты . В общем виде, схема проверки заполнения выглядит следующим образом:
- создать массив НепроверяемыеРеквизиты ;
- в процессе проверки условий, добавлять в этот массив имена непроверяемых реквизитов (табличных частей);
- вызвать процедуру для удаления непроверяемых реквизитов (текст процедуры УдалитьНепроверяемыеРеквизитыИзМассива приведен ниже).
При этом не рекомендуется использовать другие схемы проверки заполнения значений реквизитов, так как они затрудняют анализ логики работы конфигурации, поскольку скрывают из свойства «Проверка заполнения» случаи условной проверки заполнения значений объектов.
Например, неправильно:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Проверка значения реквизита на соответствие некоторым требованиям
Если НЕ ИННСоответствуетТребованиям(ИНН) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр(«ru = ‘ИНН задан неверно.'»);
Сообщение.Поле = «ИНН»;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
.
// Значение реквизита не должно быть пустым в зависимости от значения другого реквизита
Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
// Для индивидуального предпринимателя должно быть сопоставлено физ. лицо
ПроверяемыеРеквизиты.Добавить(«ИндивидуальныйПредприниматель»);
КонецЕсли;
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НепроверяемыеРеквизиты = Новый Массив();
.
// Проверка значения реквизита на соответствие некоторым требованиям
Если НЕ ИННСоответствуетТребованиям(ИНН) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр(«ru = ‘ИНН задан неверно.'»);
Сообщение.Поле = «ИНН»;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
НепроверяемыеРеквизиты.Добавить(«ИНН»);
КонецЕсли;
.
// Значение реквизита не должно быть пустым в зависимости от другого реквизита
Если ЮрФизЛицо <> Перечисления.ЮрФизЛицо.ФизЛицо Тогда
НепроверяемыеРеквизиты.Добавить(«ИндивидуальныйПредприниматель»);
КонецЕсли;
Процедура УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) Экспорт
Для Каждого ЭлементМассива Из МассивНепроверяемыхРеквизитов Цикл
// перед удалением реквизита из массива необходимо проверить, что он там есть
// (не был удален ранее платформой или в коде).
ПорядковыйНомер = МассивРеквизитов.Найти(ЭлементМассива);
Если ПорядковыйНомер <> Неопределено Тогда
МассивРеквизитов.Удалить(ПорядковыйНомер);
КонецЕсли;
1.3. Следует учитывать, что обработчик ОбработкаПроверкиЗаполнения вызывается не при каждой записи объекта, в частности, он не вызывается в случаях если запись были инициирована программно.
Методическая рекомендация (полезный совет)
1.4. В случае использования в конфигурации подсистемы «Обмен данными» Библиотеки стандартных подсистем обработчик ОбработкаПроверкиЗаполнения вызывается при проведении документов, после их загрузки из сообщения обмена. Для отключения некоторых проверок в этом режиме в обработчике можно анализировать дополнительное свойство объекта ДополнительныеСвойства . ОтложенноеПроведение .
Проверки, выполняемые в и вне транзакции записи объекта
2.1. Проверки в обработчике ОбработкаПроверкиЗаполнения выполняются вне транзакции записи объекта. Поскольку в случае некорректного заполнения объекта выполнение операции будет прервано еще до записи объекта в базу данных, то размещение проверок в этом обработчике является наиболее эффективным.
При выполнении внетранзакционных проверок в обработчике ОбработкаПроверкиЗаполнения необходимо учитывать тот факт, что новое состояние объекта еще не записано. Если требуется выполнить запрос к тем или иным данным системы, например, прочитать признак ВидНоменклатуры для товаров, выбранных в табличной части документа, «отталкиваясь» от данных документа, то такую поверку можно выполнить, применяя сохранение необходимых для запроса данных во временные таблицы.
2.2. В то же время, в обработчике ОбработкаПроверкиЗаполнения не следует размещать проверки, которые должны гарантировать целостное состояние объекта или зависящих от него данных (например, движений) на которые рассчитывает система. Поэтому для реквизитов, некорректные значения которых могут привести к рассогласованности данных в информационной базе, проверку корректности следует выполнять в обработчиках событий, возникающих в транзакции записи — ПередЗаписью , ПриЗаписи , ОбработкаПроведения (для документов).
Для транзакционных проверок, в свою очередь, выделяются два случая:
- Проверка состояния движений, формируемых документами оперативного учета. Такие проверки довольно часто встречаются в приложениях с оперативным учетом.
- Проверка состояния других объектов информационной базы, ссылки на которых содержатся в текущем объекте. Такие проверки следует применять очень редко. Не следует злоупотреблять количеством проверок в транзакции записи объекта. Следует помнить, что внутри транзакции записи имеет смысл выполнять только проверки таких ресурсов или таких правил соответствия объектов друг другу, которые не изменяются без проверок всеми участниками процесса.
В первом случае, проверку остатков некоторого ресурса имеет смысл выполнять в транзакции записи только в том случае, если все документы выполняют такую же проверку в транзакции записи. Если хоть один из документов, изменяющих ресурс, делает это без проверок, выполнение проверок другими участниками процесса бессмысленно и такие проверки необходимо выполнять вне транзакции. Исключением может быть только случай, когда документ, который выполняет изменение контролируемого ресурса без проверок, вводится крайне редко. Например, не смотря на то, что документ «Инвентаризация товаров» изменяет остатки товаров без проверок, эта ситуация допустима в виду того, что он вводится крайне редко. Каждое такое исключение из правила должно быть оправданным.
Во втором случае, если при записи Подразделения в транзакции записи выполняется проверка, что сотрудник, выбранный в качестве руководителя подразделения, имеет должность «Руководитель», то при записи Сотрудника также должна выполняться и «встречная» проверка этого же правила: нельзя записать Сотрудника с должностью отличной от «Руководитель», если он указан руководителем того или иного подразделения. Поскольку правило, что «Сотрудник», выбранный руководителем подразделения, должен иметь должность «Руководитель», может быть нарушено как при записи подразделения, так и при записи сотрудника, то и проверка должна выполняться или в транзакции записи обоих объектов, или вне транзакции записи обоих объектов (а может и не выполняться вообще).
Проверка заполнения стандартных реквизитов
- Закроем 1С:Предприятие и вернемся в режим конфигуратора.
Чтобы посмотреть состав и свойства стандартных реквизитов справочника, в окне редактирования объекта конфигурации Справочник Клиенты на закладке Данные нажмем кнопку Стандартные реквизиты. Выделим в списке реквизит Наименование, вызовем его контекстное меню и выберем пункт Свойства (рис. 3.29).
Рисунок 1.14 – Состав стандартных реквизитов справочника В палитре свойств стандартного реквизита Наименование свойство Проверка заполнения по умолчанию установлено в значение Выдавать ошибку, т.е. если реквизит Наименование не заполнен, то будет выведено сообщение об ошибке.
Рисунок 1.15 – Палитра свойств стандартного реквизита «Наименование» Задания на исследование:
- Исследовать процесс создания справочников.
- Выполнить задание №1.
- Ответить на вопросы и оформить отчет.
Вопросы для проверки подготовки студентов к занятию
- Для чего предназначен объект конфигурации Справочник.
- Для чего используются реквизиты справочника.
- Зачем нужны иерархические справочники и что такое родитель.
- Зачем нужны подчиненные справочники и что такое владелец.
- Что такое предопределенные элементы.
- Как пользователь может отличить обычные элементы справочника от предопределенных элементов.
- Как создать объект конфигурации Справочник и описать его структуру.
- Как добавить новые элементы в справочник.
ЛИТЕРАТУРА
- Введение в конфигурирование в системе «1С: Предприятие 8». Основные объекты. Версия 8.2. Фирма «1С», Москва, ООО «1С-Учебный центр№3», 2010.
- Использование запросов в системе «1С: Предприятие 8». Фирма «1С», Москва, ООО «1С-Учебный центр№3», 2009.
- 1С: Предприятие 8.2. Руководство разработчика. Часть 1. Фирма «1С», Москва, ООО «1С-Учебный центр№3», 2009.
- 1С: Предприятие 8.2. Руководство разработчика. Часть 2. Фирма «1С», Москва, ООО «1С-Учебный центр№3», 2009.
- 1С: Предприятие 8.2. Руководство администратора. Фирма «1С», Москва, ООО «1С-Учебный центр№3», 2009.
“ ”. 20_ _г Методическая разработка составлена ст. преподавателем кафедры АСУ Т.Авакян 16
19.05.2015 5.08 Mб 9 LISP.pdf
19.05.2015 1.01 Mб 73 list2small.doc
16.12.2018 361.47 Кб 2 LR1-Sodanie_IB.doc
22.07.2019 296.45 Кб 4 LR2-Podsistemy.doc
12.11.2019 911.36 Кб 1 LR2_Vlianie_flegmatizatorov.doc
16.12.2018 572.93 Кб 4 LR3-Spravochniki.doc
12.11.2019 208.9 Кб 4 LR3_Opredel_temper_samovosplam2005.doc
12.11.2019 74.75 Кб 2 LR4_Tem_vspyshki_ispr.doc
12.11.2019 90.62 Кб 1 LR5_tverdye_v-va.doc
13.07.2019 581.63 Кб 0 Luize_dlya_PGS.doc
20.04.2019 85.1 Кб 2 makroekonomika_otvety.docx
Ограничение
Для продолжения скачивания необходимо пройти капчу:
Вирус скуки
Продолжение одинэсной темы, ответы на книгу Радченко, занятие 2 и 3.
Для чего используется объект конфигурации «Подсистема»?
Подсистема — основной элемент для построения интерфейса 1С:Предприятие. Подсистемы выделяют в конфигурации функциональные части, на которые логически разбивается прикладное решение.
Как описать логическую структуру при помощи Подсистем?
При помощи разделения на функциональные части, представляющие собой отдельные предметные области.
Как управлять порядком вывода и отображения подсистем в конфигурации?
Правый клик мыши по конфигурации, выбираем команду «Открыть командный интерфейс конфигурации», поменять позиции можно с помощью стрелочек.
![]() |
| Управление порядком вывода подсистем. |
Что такое окно редактирования объекта конфигурации и в чем его отличие от панели свойств?
Окно редактирования — в основном используется для создания новых объектов.
Палитра свойств — не привязано к конкретному объекту конфигурации.
Для чего предназначен объект конфигурации Справочник?
Справочник предназначен для работы со списками данных, описания их свойств и структуры.
Какие характерные особенности объекта конфигурации Справочник?
Справочник состоит из элементов; Каждый элемент представляет собой отдельную запись в таблице, хранящей информацию из этого справочника;
Элемент также может содержать дополнительную информацию, которая подробнее описывает этот элемент — одинаковый для всех элементов справочника — реквизит; Реквизит также является объектом конфигурации;
Для чего используются реквизиты и табличные части справочника?
Реквизиты используются для описания дополнительной информации, описывающей элемент справочника;
Табличная часть используется для описания информации элемента справочника, одинаковой по структуре, но различной по количеству.
Зачем нужны иерархические справочники и что такое Родитель?
Иерархические справочники нужны для группировки элементов справочника по какому-либо признаку или принципы. Различаются несколько типов иерархий: иерархия групп и элементов — элемент справочника, представляющий группу — родитель для всех элементов и групп, входящих в эту группу;
Иерархия элементов — родителем является не группой элементов справочника, а непосредственно сам элемент.
Зачем нужны подчиненные справочники и что такое Владелец?
Элементы одного справочника могут быть подчинены элементам другого справочника, и в таком случае устанавливается связь один-ко-многим. Так же может быть использована связь один-к-одному, когда каждый элемент подчиненного справочника связан с одним из элементов справочника-владельца.
Какие основные формы существуют у справочника?
Форма элемента — для редактирования или создания элемента справочника;
Форма группы — для редактирования или создания группы справочника;
Форма списка — для отображения списка элементов в справочнике;
Форма выбора группы — для выбора одной из группы справочника;
Что такое предопределенные элементы справочника?
Элементы справочника, создающиеся в конфигураторе, данные элементы пользователь удалить не может; Служат для хранения информации всегда, независимо от действий пользователя;
Чем с точки зрения конфигурации отличается обычный элемент от предопределенного?
На предопределенные элементы могут быть завязаны алгоритмы работы конфигурации, следовательно, система добавляет эти элементы в структуру базы данных сама, без участия пользователя.

Как пользователь может отличить обычный элемент от предопределенного?
С помощью пиктограммы
Как создать объект конфигурации справочник и описать его структуру?
Создать новый справочник — структура — на вкладках иерархия, данные, рисунки сюда
![]() |
| На вкладке Иерархия можно выбрать тип иерархии элементов. |
![]() |
| На вкладке Данные происходит определение реквизитов и табличных частей |
Зачем нужна проверка заполнения у реквизитов справочника
Управляемое приложение.
Есть ОбщийМодуль, где должна происходить проверка заполненности элементов формы (ПолеВвода, Полевыбора). Т.е. по нажатию некоторой кнопки в форме должна вызваться функция общего модуля, которая вернет Истина, если все элементы заполнены.
Как это сделать?
Как вообще можно достать значение Элемента?
В Элементах, если что, указаны РЕКВИЗИТЫ.
Курим ПроверитьЗаполнение, Обработку проверки заполнения и различные свойства на реквизитах
Ну вот, например, у меня есть два реквизита формы: Контрагент (справочник.Контрагенты) и Примечание (Строка 100)
И на форме два элемента: ИмяКонтрагента (ПутькДанным = Контрагент.Наименование) и Примечание (ПутьКДанным = Примечание).
В общий модуль я могу форму (ЭтаФорма). Как поступать дальше? Что я там смогу с этим сделать?
(2) Хочется сделать универсально, т.е. чтобы это работало для любой формы, просто добавив вызов функции общего модуля. А так придется писать «ОбработкаПроверкиЗаполнения» в каждой форме
(4) а зачем писать «в каждой форме» ? у тебя какая-то нестандартная обработка проверки заполнения? Просто протыкал в конфигураторе нужные реквизиты, свойство «проверка заполнения — выдавать ошибку», и все.
(5) Тут немного другой механизм предполагается.
Один СуперПользователь (Администратор, например). Заполняет отмечает галочками те элементы формы и сохраняет эти настройки. Далее остальные пользователи работают уже на основе этих данных. Если какому-то элементу формы админ проставил обязательность заполнения, то они должны его заполнить.
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
(6) и чО? Для проверки заполнения событие имеется.
(8) по примеру из (3) я должен буду написать примерно такое:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(Контрагент.Наименование) Тогда
Сообщить(«Не заполнено имя контра!»);
КонецЕсли
Если Не ЗначениеЗаполнено(Примечание) Тогда
Сообщить(«Не заполнено примечание!»);
КонецЕсли
КонецПроцедуры
Так?
Я же не хочу писать один и тот же код во всех формах, а хочу вызвать так:
МойОбщийМодуль.ПроверитьЗаполненностьРеквизитов( ПроверяемаяФорма, СписокПроверяемыхПолей);
(7) это к чему?
(9) Нет. Такого писать не надо.
«Я же не хочу писать один и тот же код во всех формах, а хочу вызвать так» — покажи пальцем — кто тебе мешает?
(12)
а НЕ ЗначениеЗаполнено(текЭлемент) не канает?
текЭлемент — это Элемент (не реквизит) формы, поэтому нет, не канает.
(12) «СписокПроверяемыхПолей» — тебя ни на какие мысли не наводит?
И в общих модулях &НаКлиенте, &НаСервере и прочее — не используется.
(14) а ты пробовал? сейчас лень проверять, но вроде как этот метод проверяет любое не мутабельное значение.
(16) ЗначениеЗаполнено(ПолеВвода)? И что ж оно должно сообщить?
(15) а на что может натолкнуть «СписокПроверяемыхПолей»? Честно, не понимаю. Там хранятся строки — имена элементов формы. И все.
А НаСервере и НаКлиенте в общих модулях используется, если стоят галки «Клиент» и «Сервер» (у меня именно такой)
(16) а это как раз-таки и есть мутабельное значение. Сейчас попробовал.
(18) ЗАБУДЬ, пеляйт, про элементы формы. Нет их, не существует, пеляйт. Там хранятся имена РЕКВИЗИТОВ (еще раз обрати, пеляйт, внимание — НЕ ЭЛЕМЕНТОВ, а РЕКВИЗИТОВ) для проверки. Есть элемент в этом массиве — реквизит (не элемент формы, ты помнишь, да?) будет проверяться. нет элемента — не будет. Дальше сам додумаешься?
(20) не так он не поймет надо носом ткнуть)))
sbabay убери в (12) точку и слово «Элементы»
Давайте еще раз.
Есть обработка, в которой должно происходить проверка заполнения. У этой формы есть два реквизита: Контрагент (справочник.Контрагенты) и Примечание (Строка 100)
И на форме два элемента: ИмяКонтрагента (ПутькДанным = Контрагент.Наименование) и Примечание (ПутьКДанным = Примечание).
После того как админ установил обязательность заполнения элементов, сохранился СписокПроверяемыхПолей, который состоит из 2-х элементов-строк: «ИмяКонтрагента» и «Примечание»
Но такое пройдет только для «Примечания», для элемента «ИмяКонтрагента» такое не пройдет, т.к. данные хранятся в реквизите «Контрагент.Наименование»
(20) Я кажется понял, что ты имеешь ввиду.
Если я буду использовать:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
то про «ПроверяемыеРеквизиты» откуда у меня возьмутся? У меня есть только то, что заполнил СуперПользователь — а он отметил те ЭЛЕМЕНТЫ формы, которые должны быть заполнены.
(21) Да, ткни, пожалуйста.
(24) данные храняться в реквизите Контрагент, а если у тебя элемент формы ИмяКонтрагента связан с Контрагент.Наименование то пользователь все равно его ввести не может.
Короче тыкаю пальцем. В модуле формы
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Реквизит1);
МассивРеквизитов.Добавить(Объект.Клиент);
РаботаСДокументами.ПроверкаЗаполнения(МассивРеквизитов,Отказ);
КонецПроцедуры
В общем модуле
Процедура ПроверкаЗаполнения СтруктураРеквизитов,Отказ)Экспорт
Для каждого элемент из Структурареквизитов Цикл
Если НЕ ЗначениеЗаполнено(элемент) тогда
Отказ = Истина;
КонецЕсли;
КонецЦикла
Короче форму даже передавать не надо, простопередаешь список реквизитов
(25) Почему это не сможет ввести ИмяКонтрагента?
Контрагент — основной реквизит обработки. Я раскрываю это дерево и перетаскиваю в элементы формы «Контрагент.Наименование» и обзываю его «ИмяКонтрагента»
Про твой код. И где тут универсальность? Я ж говорил, что у меня есть только список Имен элементов. Как на основе этого напишу:
МассивРеквизитов.Добавить(Объект.Клиент);
?
(26) ты пробовар редактировать ИмяКонтрагента в режиме предприятия? только убедись что в свойствах, путь к данным у тебя именно Объект.Контрагент.наименование.
Я твоей структуры не знаю, в каком виде у тебя храниться список? Но блин неужли не сообразишь,
да хотя бы если у тебя хранится только наименование реквизита, то используй
Выполнить(«МассивРеквизитов.Добавить(«+ИмяТвоегоРеквизита+»);»


