Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:31

Запрет на введение символов в имени контрагента

Автор vienya, 12 апр 2024, 14:54

0 Пользователей и 1 гость просматривают эту тему.

vienya

Как и где (в общем модуле, модуле объекта, ФормеЭлемента справочника?) установить запрет на использование определенных спецсимволов в наименовании  контрагента, исключительно юридического лица?


vienya

Пробывал код на ФормеЭлемена в процедуре ПередЗаписью (Отказ, ПараметрыЗаписи):


        Если СтрокаНеСодержит (ЗначениеСсылка.Наименование, "!@#$%^&*()_=+{}[];:'/\<>,.?")
      Тогда
      Отказ = Истина;
      Сообщить ("В имени контрагента недопустимы символы!");
      КонецЕсли;


ЗначениеСсылка - переменная не определена
СтрокаНеСодержит - не определена
Как обратиться?

Максим75

vienya, как то так

МассивСтрок = СтрРазделить(ВхСтрока,СимволыПоиска,Истина);
Если МассивСтрок.Количество() > 1 Тогда
    //есть в исходной строке искомые символы
КонецЕсли;

Ну и проверять просто Наименование

vienya

Максим75,
я вставил в процедуре ПередЗаписью(Отказ) в на форме элемента и модуле объекта следующий код:

МассивСтрок = СтрРазделить(Объект.Наименование, "!@#$%^&*()_=+{}[];:'/\<>,.?",Истина);
Если МассивСтрок.Количество() > 1 Тогда
    //есть в исходной строке искомые символы
КонецЕсли;

Но он режиме пользователя не срабатывает. Может что дописать надо?

antoneus

vienya, ну, разумеется. Надо же дописать код обработки той самой ситуации, когда есть в исходной строке искомые символы.

МассивСтрок = СтрРазделить(Объект.Наименование, "!@#$%^&*()_=+{}[];:'/\<>,.?",Истина);
Если МассивСтрок.Количество() > 1 Тогда
    Отказ = Истина;
    Возврат
КонецЕсли;

vienya

antoneus, Спасибо! :zebzdr:  На тестовой сработало.
Для рабочей базы создал внешнюю обработку, в её модуле объекта разместил СведенияОВнешнейОбработке и указанный код в процедуре ПередЗаписью:

Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();   
    ПараметрыРегистрации.Версия = "1.0"; 
   
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Ограничение Наименования Контрагента'");
    Команда.Идентификатор = "ОграничениеНаименованияКонтрагента";   
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();       
    Команда.ПоказыватьОповещение = Истина;

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

    Возврат ПараметрыРегистрации;
КонецФункции

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
МассивСтрок = СтрРазделить(Объект.Наименование, "!@#$%^&*()_=+{}[];:'/\<>,.?",Истина);
Если МассивСтрок.Количество() > 1 Тогда
    Отказ = Истина;
    Возврат
КонецЕсли;
КонецПроцедуры

Разместил данную обработку в справочник Контрагенты. Но никаких изменений при записи имени контрагента не происходит. Что я забыл сделать или где ошибся?

LexaK

а какая у вас связь между внешней обработкой и формой элемента?
(где вы сделали проверку)
если помогло нажмите: Спасибо!

vienya

LexaK,
Цитата: LexaK от 15 апр 2024, 10:37а какая у вас связь между внешней обработкой и формой элемента?
(где вы сделали проверку)
Точно! - Никакой. А как обратиться?

Попробовал в функции СведенияОВнешнейОбработке() добавить:
ПараметрыРегистрации.Назначение.Добавить("Справочник. Контрагенты");Безрезультатно.

LexaK

vienya, нет - это разные вещи

выше вы сделали проверку ОДНОГО элемента справочника (в событии ПередЗаписью)
а теперь вы хотите проверить ВСЕХ Контрагентов (юр.лиз) на правильность Имен? так?
если помогло нажмите: Спасибо!

vienya

LexaK, Действительно, мне нужно проверить лишь одну вносимую строку на форме элемента, это вообще возможно реализовать внешней обработкой?

Похожие темы (5)

Рейтинг@Mail.ru

Поиск