Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запрет добавления строки в табличную часть
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
rodrigezrobert
Здравствуйте! Хочу запретить ввод одинаковых строк в табличную часть. Для этого перед началом добавления новой строки, создаю массив элементов, которые есть в табличной части. Потом в событии "ПриОкончанииРедактирования" проверяю на вхождение данного элемента в массив. Если элемент такой элемент существует в табличной части, тогда параметр «Отказ» выставлю в истину, но система застывает в точке "ПриОкончанииРедактирования". Чем можно воспользоваться, что бы запретить добавление строки в табличную часть? Или возможны какие - то другие схемы реализации.

&НаКлиенте
Процедура ПереченьУслугОбслуживанияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
    ТекНом = Элемент.ТекущиеДанные.Номенклатура;
    РезултатПоиска = МассивЭл.Найти(ТекНом);
    Если РезултатПоиска <> Неопределено Тогда
        Отказ = Истина;
        Сообщить ("Такой элемент уже существует!");
        Возврат;     
    КонецЕсли;     
КонецПроцедуры
Vofka
Навскидку: в событии ПриИзменении колонки Номенклатура проверяйте её заполненность в текущей строке. Если заполнено - делаем поиск строк в табличной части по нужному условию. Если строк больше 1 - очищаем колонку в текущей строке.
logist
Как пример, в событие ОбработкаВыбора колонки Номенклатура
&НаКлиенте
Процедура ПереченьУслугНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Если УжеЕстьВТаблице(ВыбранноеЗначение) Тогда
        СтандартнаяОбработка = Ложь;
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Выбранная номенклатура уже есть в табличной части");
    КонецЕсли;        
КонецПроцедуры

&НаСервере
Функция УжеЕстьВТаблице(Выбор)
    МассивНайденныхСтрок = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура",Выбор));
    Возврат МассивНайденныхСтрок.Количество();
КонецФункции
Vofka
logist,
&НаСервере
Функция УжеЕстьВТаблице(Выбор)
    МассивНайденныхСтрок = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура",Выбор));
    Возврат МассивНайденныхСтрок.Количество() > 1;
КонецФункции
Petre
Vofka, число нуль преобразуется в ложь, а любое другое - в истина.
Vofka
Petre, верно. Но в таком случае условие будет истинно, даже если у нас в таблице 1 строка. Но по условию задачи 1 строка - это не дубли.
Petre
Точно, не обратил внимание на единицу.

Но здесь при проверке в "ОбработкаВыбора" выбранное значение еще не помещено в данные формы.
Vofka
Цитата(Petre @ 14.01.15, 16:48) необходимо зарегистрироваться для просмотра ссылки
Но здесь при проверке в "ОбработкаВыбора" выбранное значение еще не помещено в данные формы.

У меня были мысли, что оно может быть так, но проверять мне было лениво, так что я написал так, чтоб наверняка. Но даже если бы я был 100% уверен, что оно именно так, я бы всеравно написал подобное условие, т.к. неявное приведение одного типа к другому лично мне не очень нравится и на буквах я не экономлю smile.gif
logist
Цитата(Vofka @ 14.01.15, 17:07) необходимо зарегистрироваться для просмотра ссылки
но проверять мне было лениво,

А зачем проверять? ОбработкаВыбора возникает в момент окончания ввода/выбора, до помещения значения в реквизит, все просто wink.gif

Цитата(Vofka @ 14.01.15, 17:07) необходимо зарегистрироваться для просмотра ссылки
и на буквах я не экономлю

а я экономлю =)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.