Справочник: Отменить ввод нового значения при уже существующем (способ редактирования "в списке")
Приветствую, Форумчане!
УТ 10.3, обычные формы
Есть справочник "Атрибуты". Ввод новых значений осуществляется способом редактирования "в списке"
Вопрос: если я ввожу новое значение, то нужно проверить, есть ли такое значение уже в списке, если есть то отменить ввод нового и убрать новую строку...
Подскажите как сделать...
УТ 10.3, обычные формы
Есть справочник "Атрибуты". Ввод новых значений осуществляется способом редактирования "в списке"
Вопрос: если я ввожу новое значение, то нужно проверить, есть ли такое значение уже в списке, если есть то отменить ввод нового и убрать новую строку...
Подскажите как сделать...
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Перед началом редактирования кэшируем данные в какой-нибудь список/таблицу/соответствие.
Когда закончили редактировать (перед окончанием редактирования проверяем). Если уже есть, то по текущей строке находим в кэшированных данных и возвращаем как было.
правочник "Атрибуты". Ввод новых значений осуществляется способом редактирования "в списке"
Вопрос: если я ввожу новое значение, то нужно проверить, есть ли такое значение уже в списке, если есть то отменить ввод нового и убрать новую с
Вопрос: если я ввожу новое значение, то нужно проверить, есть ли такое значение уже в списке, если есть то отменить ввод нового и убрать новую с
Перед началом редактирования кэшируем данные в какой-нибудь список/таблицу/соответствие.
Когда закончили редактировать (перед окончанием редактирования проверяем). Если уже есть, то по текущей строке находим в кэшированных данных и возвращаем как было.
(3) Запрос сработал и находит повторения.
Как теперь удалить эту новую строчку, если есть повторение?
Как теперь удалить эту новую строчку, если есть повторение?
Процедура СправочникСписокНаименованиеПриИзменении(Элемент)
// Вставить содержимое обработчика.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| саАТР_Ширина.Наименование
|ИЗ
| Справочник.саАТР_Ширина КАК саАТР_Ширина
|ГДЕ
| саАТР_Ширина.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", Элемент.Значение);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Есть");
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецПроцедуры
Показать
(4)Я бы лучше объявил переменную формы НовоеНаименование и в процедуре списка перед началом добавления сделал как-то так
А потом допустим в процедуре при активизации ячейки проверял если наименование не заполнено заполнял его из переменной НовоеНаименование и обнулял переменную.
Процедура СправочникСписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
ВвестиСтроку(НовоеНаименование, "Введите новое наименование", 50, Ложь);
НовоеНаименование = СокрЛП(НовоеНаименование);
Если НовоеНаименование = Неопределено ИЛИ НЕ ТипЗнч(НовоеНаименование) = Тип("Строка") Тогда
НовоеНаименование = "";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НовоеНаименование) Тогда
Сообщить("Необходимо указать новое наименование элемента справочника");
Отказ = Истина;
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| саАТР_Ширина.Наименование
|ИЗ
| Справочник.саАТР_Ширина КАК саАТР_Ширина
|ГДЕ
| саАТР_Ширина.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", НовоеНаименование);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Наименование элемента справочника не уникально");
Отказ = Истина;
Возврат;
КонецЦикла;
КонецПроцедуры
ПоказатьА потом допустим в процедуре при активизации ячейки проверял если наименование не заполнено заполнял его из переменной НовоеНаименование и обнулял переменную.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот