Добрый вечер!
Столкнулся со странной ситуацией, гугл не помог!
Управляемая форма, поле ввода, источник данных реквизит типа "строка". Задача простая - нужно проверять введенное в строку, и если данные проверку не проходят, то восстанавливать прежние данные. Сделал обработку события "ОкончаниеВводаТекста". Столкнулся с непонятным (для меня) поведением платформы.
Вместо очистки строки выводится непонятное сообщение (см. картинку). Но самое смешное, та же конфигурация, другой справочник, тоже поле ввода, тоже "строка", обработка того же события - РАБОТАЕТ!
Столкнулся со странной ситуацией, гугл не помог!
Управляемая форма, поле ввода, источник данных реквизит типа "строка". Задача простая - нужно проверять введенное в строку, и если данные проверку не проходят, то восстанавливать прежние данные. Сделал обработку события "ОкончаниеВводаТекста". Столкнулся с непонятным (для меня) поведением платформы.
&НаКлиенте
Процедура МобильныйТелефонОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Вместо очистки строки выводится непонятное сообщение (см. картинку). Но самое смешное, та же конфигурация, другой справочник, тоже поле ввода, тоже "строка", обработка того же события - РАБОТАЕТ!
Прикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) dj_serega, Так как раз эта конструкция и должна очищать строку. Вернее, не очищать, а возвращать прежнее значение. Я специально оставил до предела простой код, чтобы не грешить на то, что я там при проверке что-то не так сделал. И, повторюсь, этот код работает в другом справочнике этой-же конфигурации. Пытался сравнивать в чем различия - вроде всё одно и то же: поле ввода, источник данных реквизит с типом "строка", и там и там строка имеет ограничение по символам... Что платформе не нравится? Сейчас попробовал создать с одним реквизитом типа "строка", ограничением в 10 символов. Вывел на форму, как поле ввода, подцепил обработку этого-же события. Так же ошибка... В крайнем замешательстве ушел "копать" дальше...
Мистика какая-то.... Одна конфигурация, два справочника в первом:
Отлично работает. Если функция проверки возвращает истину, то поле очищается (восстанавливается старое значение.
Другой справочник:
Если функция проверки возвращает истину, ошибка по типу той, что на скрине в первом посте.
Создал обработку из одного реквизита "ИНН", строка, длина 12 (как в первом справочнике)
НЕ работает (та же ошибка про "не найдено").... Уже не знаю куда думать.
Можно конечно запоминать старое значение, очищать поле, вставлять старое значение. Но это уже костыли. Хочется понять, почему в первом случаи всё идеально отрабатывает, в остальных валится в ошибку.
&НаКлиенте
Процедура ИННОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если ПроверкаНаДобавленноеСТакимИНН (Текст) тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Функция ПроверкаНаДобавленноеСТакимИНН (ИНН)
Отказ = Ложь;
Если НЕ ПустаяСтрока(ИНН) тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЮридическиеЛица.Ссылка
|ИЗ
| Справочник.ЮридическиеЛица КАК ЮридическиеЛица
|ГДЕ
| ЮридическиеЛица.ИНН = &ИНН
| И ЮридическиеЛица.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр("ИНН",ИНН);
Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
Рез = Запрос.Выполнить();
Если НЕ Рез.Пустой() тогда
Отказ = Истина;
Сообщить("Уже есть юр. лицо с таким ИНН!");
КонецЕсли;
КонецЕсли;
Возврат Отказ;
КонецФункции
ПоказатьОтлично работает. Если функция проверки возвращает истину, то поле очищается (восстанавливается старое значение.
Другой справочник:
&НаКлиенте
Процедура МобильныйТелефонОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если ПроверкаНаСозданногоСТакимТелефоном (Текст) тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Функция ПроверкаНаСозданногоСТакимТелефоном (Тел)
Отказ = Ложь;
Если Не ПустаяСтрока(Тел) тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Благополучатели.Ссылка
|ИЗ
| Справочник.Благополучатели КАК Благополучатели
|ГДЕ
| Благополучатели.МобильныйТелефон = &МобильныйТелефон
| И Благополучатели.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр("МобильныйТелефон",Тел);
Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
Рез = Запрос.Выполнить();
Если Не Рез.Пустой() тогда
Отказ = истина;
Сообщить("Уже есть благополучатель с такими данными!");
КонецЕсли;
КонецЕсли;
Возврат Отказ;
КонецФункции
ПоказатьЕсли функция проверки возвращает истину, ошибка по типу той, что на скрине в первом посте.
Создал обработку из одного реквизита "ИНН", строка, длина 12 (как в первом справочнике)
&НаКлиенте
Процедура Реквизит1ОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если ПроверитьВведенныйТекст (Текст) тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Функция ПроверитьВведенныйТекст (ИНН)
Отказ = Ложь;
Если НЕ ПустаяСтрока(ИНН) тогда
Если ИНН = "123" тогда
Отказ = Истина;
Сообщить("Текст не прошел проверу!");
КонецЕсли;
КонецЕсли;
Возврат Отказ;
КонецФункции
ПоказатьНЕ работает (та же ошибка про "не найдено").... Уже не знаю куда думать.
Можно конечно запоминать старое значение, очищать поле, вставлять старое значение. Но это уже костыли. Хочется понять, почему в первом случаи всё идеально отрабатывает, в остальных валится в ошибку.
Гугл ему не помог...
ИсторияВыбораПриВводе
И в том же синтакс-помощнике, куда ты полезешь читать, что это такое, обрати внимание на описание ОкончаниеВводаТекста:
...
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
ИсторияВыбораПриВводе
И в том же синтакс-помощнике, куда ты полезешь читать, что это такое, обрати внимание на описание ОкончаниеВводаТекста:
...
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
(6) Messenger Unchained,
Это вообще к чему, о чем и для чего? Вопрос совершенно о другом!
Тоже самое.
Делаем вот так, убираем вообще все внешние функции.
Та же проблема. Кстати, если прочитать тему полностью станет ясно, что:
1. Ошибка появляется даже есть убрать проверки, а просто указать
2. В определенном случае работает прекрасно, не смотря на обращение к процедуре на сервере.
ИсторияВыбораПриВводе
Это вообще к чему, о чем и для чего? Вопрос совершенно о другом!
И в том же синтакс-помощнике, куда ты полезешь читать, что это такое, обрати внимание на описание ОкончаниеВводаТекста:
...
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
...
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
&НаКлиенте
Процедура Реквизит1ОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если ПроверитьВведенныйТекст (Текст) тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПроверитьВведенныйТекст (ИНН)
Отказ = Ложь;
Если НЕ ПустаяСтрока(ИНН) тогда
Если ИНН = "123" тогда
Отказ = Истина;
Сообщить("Текст не прошел проверу!");
КонецЕсли;
КонецЕсли;
Возврат Отказ;
КонецФункции
ПоказатьТоже самое.
Делаем вот так, убираем вообще все внешние функции.
&НаКлиенте
Процедура Реквизит1ОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если Текст = "123" тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Та же проблема. Кстати, если прочитать тему полностью станет ясно, что:
1. Ошибка появляется даже есть убрать проверки, а просто указать
СтандартнаяОбработка = Ложь;
2. В определенном случае работает прекрасно, не смотря на обращение к процедуре на сервере.
(8) Кажется, что событие "ОкончаниеВводаТекста" не совсем подходящее событие для решения озвученной проблемы. Но если очень хочется, то попробуйте для восстановления значения заполнить данные выбора текущим значением:
Процедура Реквизит1ОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если Не ПроверкаТекстаПройдена(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.Добавить(Реквизит1);
КонецЕсли;
КонецПроцедуры
Показать
У меня тип поля строка,
ОбновлениеТекстаРедактирования = При изменении значения
Процедура НомерЛицевогоСчетаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
//СтандартнаяОбработка = Ложь; - вот так не выводит "не найдено"
Если Не ПустаяСтрока(Текст) И СтрДлина(Текст) > 5 Тогда
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("НомерЛицевогоСчета",Текст);
ОбновитьСписокЛС(ПараметрыПоиска);
КонецЕсли;
КонецПроцедуры
ОбновлениеТекстаРедактирования = При изменении значения
Процедура НомерЛицевогоСчетаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
//СтандартнаяОбработка = Ложь; - вот так не выводит "не найдено"
Если Не ПустаяСтрока(Текст) И СтрДлина(Текст) > 5 Тогда
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("НомерЛицевогоСчета",Текст);
ОбновитьСписокЛС(ПараметрыПоиска);
КонецЕсли;
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот