Справочник: Отменить ввод нового значения при уже существующем (способ редактирования "в списке")

1. Arkadag 27.08.21 13:59 Сейчас в теме
Приветствую, Форумчане!
УТ 10.3, обычные формы

Есть справочник "Атрибуты". Ввод новых значений осуществляется способом редактирования "в списке"

Вопрос: если я ввожу новое значение, то нужно проверить, есть ли такое значение уже в списке, если есть то отменить ввод нового и убрать новую строку...

Подскажите как сделать...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. markw 27.08.21 14:04 Сейчас в теме
(1)
правочник "Атрибуты". Ввод новых значений осуществляется способом редактирования "в списке"

Вопрос: если я ввожу новое значение, то нужно проверить, есть ли такое значение уже в списке, если есть то отменить ввод нового и убрать новую с

Перед началом редактирования кэшируем данные в какой-нибудь список/таблицу/соответствие.
Когда закончили редактировать (перед окончанием редактирования проверяем). Если уже есть, то по текущей строке находим в кэшированных данных и возвращаем как было.
3. soft_wind 27.08.21 14:07 Сейчас в теме
Обрабатывайте событие ПриИзменении
Запросом проверяете на повтор,
если есть выводите сообщение,и просто чистите текущее значение
т.е. надо ввести новое

а уже удалять строчку или нет, это на решении пользователя
4. Arkadag 27.08.21 14:20 Сейчас в теме
(3) Запрос сработал и находит повторения.

Как теперь удалить эту новую строчку, если есть повторение?

Процедура СправочникСписокНаименованиеПриИзменении(Элемент)
	// Вставить содержимое обработчика.
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	саАТР_Ширина.Наименование
		|ИЗ
		|	Справочник.саАТР_Ширина КАК саАТР_Ширина
		|ГДЕ
		|	саАТР_Ширина.Наименование = &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", Элемент.Значение);
	
	Результат = Запрос.Выполнить();
	
	Выборка = Результат.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		Сообщить("Есть");
		// Вставить обработку выборки ВыборкаДетальныеЗаписи
	КонецЦикла;
КонецПроцедуры
Показать
5. user995537 38 27.08.21 14:57 Сейчас в теме
(4)Я бы лучше объявил переменную формы НовоеНаименование и в процедуре списка перед началом добавления сделал как-то так

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



Показать

А потом допустим в процедуре при активизации ячейки проверял если наименование не заполнено заполнял его из переменной НовоеНаименование и обнулял переменную.
6. Arkadag 27.08.21 15:07 Сейчас в теме
(5) Скорее всего я напрочь всё забыл в обычных формах, но такого события для формы списка обычной формы не нашел...
7. user995537 38 27.08.21 15:10 Сейчас в теме
(6)
Прикрепленные файлы:
9. DJ_Codebase 27.08.21 16:44 Сейчас в теме
(7) А в чем сакральный смысл редактирования именно в списке? объект достаточно нетривиальный. я бы сделал редактирование в диалоге, ИМХО в дальнейшем проще будет и удобнее для пользователя
8. soft_wind 27.08.21 16:22 Сейчас в теме
(7) это вы смотрите события всей Таблицы
ткните мышкой в конкретное поле - у него свой набор событий
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот