|
|
Проверка заполнения по условию
kogotaz, evorle145, PLUT, calmius, obs191, Fish, okmail, Михаил Козлов, ass1c, alexis_nov, Буковка, RomanYS, Garykom, PuhUfa, Fedor-1971, nick86, Homer, Tarlich, Timon1405, DemonShinji2, dergreche, Prog_man, maxar, CepeLLlka, RVN, SleepyHead, Климов Сергей, inkvizitr, Niveus, Волшебник, Amra, Мультук, Kongo2019, banco, Dotoshin, arsik, Доминошник
| ☑ |
|
0
kogotaz
17.05.26
✎
17:03
|
Управляемая форма констант. Константы: Поле1 (булево), Поле2 (строка).
Почему не работает код? В Поле1 ставлю "истина", Поле2 не заполняю. Дает записать форму.
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если НаборКонстант.Поле1 Тогда
ПроверяемыеРеквизиты.Добавить("Поле2");
КонецЕсли;
КонецПроцедуры
|
|
|
1
kogotaz
17.05.26
✎
19:11
|
Понимаю, что вопрос глупый, но что-то не могу разобраться
|
|
|
2
evorle145
17.05.26
✎
20:13
|
Основная причина: неверное имя процедуры. В 1С имя обработчика должно точно совпадать с именем события платформы. Директива &НаСервере указывается отдельно, но добавлять НаСервере в само имя процедуры нельзя. Платформа просто не находит обработчик ОбработкаПроверкиЗаполнения и не вызывает ваш код.
✅ Правильный вариант:
1c
123456
🔍 Почему это происходит:
Платформа 1С ищет обработчик по строгому имени: ОбработкаПроверкиЗаполнения.
Суффикс НаСервере в имени процедуры (ОбработкаПроверкиЗаполненияНаСервере) нарушает привязку события. Код существует, но никогда не выполняется.
🛠 Если после исправления всё ещё не работает, проверьте:
Подписка на событие
Откройте свойства формы → раздел События → убедитесь, что в строке ОбработкаПроверкиЗаполнения выбран ваш обработчик (после переименования обычно подставляется автоматически).
Ручная установка Отказ (fallback)
В некоторых конфигурациях или старых релизах платформа может не отрабатывать ПроверяемыеРеквизиты для констант автоматически. Тогда добавьте явную проверку:
1c
12345678
Значения NULL у булевых констант
По умолчанию булевы константы имеют значение NULL (неопределено), а не Ложь. Условие Если НаборКонстант.Поле1 Тогда сработает корректно, но явное сравнение = Истина надёжнее и читаемее.
Имя реквизита
Убедитесь, что "Поле2" точно совпадает с именем в дереве метаданных (регистр не важен, но пробелы или дополнительные символы могут нарушить проверку).
|
|
|
3
Amra
17.05.26
✎
20:18
|
(2) Садись, кол. Ты бы хоть СП бы открыл
|
|
|
4
Fish
гуру
18.05.26
✎
08:57
|
(3) Это же явно ответ от ИИ.
|
|
|
5
kogotaz
18.05.26
✎
09:46
|
У ИИ я и сам мог бы спросить, но он не знает.
Я просто не понимаю, если я добавляю реквизит в ПроверяемыеРеквизиты, почему форма пропускает незаполненное поле?
|
|
|
6
ass1c
18.05.26
✎
09:58
|
(0) Подзабыл че то немного, но возможно, стоит проверить у формы флаг:
Проверять заполнение автоматически и установить его в Истина.
Вроде есть взаимосвязь если не путаю.
|
|
|
7
Garykom
гуру
18.05.26
✎
10:04
|
(6) Это если нет процедуры со своим кодом
|
|
|
8
RomanYS
18.05.26
✎
10:24
|
(0) Судя по описанию добавлять надо не "Поле2", а "НаборКонстант.Поле2".
НО! Проверил - ни фига не работает, проверки вторичных свойств реквизитов формы не происходит.
Поэтому просто проверяй кодом и давай отказ
|
|
|
9
Fish
гуру
18.05.26
✎
10:25
|
(7) Из СП:
"Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение.
Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство ПроверятьЗаполнениеАвтоматически. В этом случае вначале будет вызван данный обработчик, а затем, если в списке проверяемых реквизитов присутствует реквизит <Объект>, обработчик ОбработкаПроверкиЗаполнения() модуля объекта."
|
|
|
10
Garykom
гуру
18.05.26
✎
10:25
|
(8) В типовых давно все проверки только кодом, даже первичных
|
|
|
11
Garykom
гуру
18.05.26
✎
10:28
|
(9) Ну я почти это и написал, в своем коде смотря что с реквизитами проверяемыми сделали
|
|
|
12
RomanYS
18.05.26
✎
10:32
|
(10) Что в целом логично: если флажков в метаданных недостаточно и ты уже создал процедуру, то почему не выдать отказ и нормальное описание ошибки.
Ну и насчет "все" ты сильно не прав, см. счетчик на скрине
|
|
|
13
Garykom
гуру
18.05.26
✎
10:54
|
(12) Согласен, много проверок системных осталось в типовых
Судя по корректировкам кодом массива проверяемых реквизитов
|
|
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой