Имя: Пароль:
1C
1С v8
Условие проверки похожих полей табличной части
,
0 grandmaster
 
22.11.17
14:12
На управляемой форме, есть табличная часть (Накладные). По нажатию кнопки в таблицу прилетает более 400 записей. В каждой записи есть поле (Идентификатор) тип строка. Очень много записей, где этот Идентификатор повторяется. Так же есть поле (ВыбратьСтроку) тип булево, а вот теперь вопрос! Когда идёшь по списку накладных и проставляешь галку у нужных записей, необходимо сделать так, что если встречается запись с идентификатором, у которого уже стоит галка (т.е истина), сообщать ("запись с данным идентификатором уже выбрана") и на ней не проставлять галку.
Вот чтоб было более понятно. Например сейчас смотрю у 5-12-23 записи один и тот же идентификатор. И у 8-21-35-41 записи такая же ситуация. Теперь если ставлю галку на 5 записи и после когда попытаюсь поставить на 23 записи - мне вылетит сообщение и не даст поставить галку.
Надеюсь более-менее понятно изложил.
1 grandmaster
 
22.11.17
14:14
Знаю что это надо делать через событие поля (ВыбратьСтроку) приизменение
2 drcrasher
 
22.11.17
14:16
что не получается?
3 FIXXXL
 
22.11.17
14:18
(1) при изменении флажка НайтиСтроки с Истина, долго думать
4 grandmaster
 
22.11.17
14:19
(3) я именно так и делаю, только через массив, чтоб находил именно записи истина, с данным идентификатором, ща скину
5 grandmaster
 
22.11.17
14:24
(2) &НаКлиенте
Процедура ТТНВыбранаПартияПриИзменении(Элемент)    
    
ТекущиеДанные = Элементы.Накладные.ТекущиеДанные;

ДанныеП = Новый Структура;
ДанныеП.Вставить("Идентификатор",      ТекущиеДанные.Идентификатор);
ДанныеП.Вставить("СтрокаВыбрана",    ТекущиеДанные.ВыбратьСтроку);    

Для каждого стр из Объект.Накладные Цикл
        
        ИдентификаторНакладной = стр.Идентификатор;         
        СтруктураНакладной = Новый Структура;
        СтруктураНакладной.Вставить("Идентификатор", ИдентификаторНакладной);
            НайденныеСтроки = Объект.Накладные.НайтиСтроки(СтруктураНакладной);
            
Если стр.ВыбратьСтроку= Истина Тогда
                 Сообщить ("запись с данным идентификатором уже выбрана!");
                    Прервать;    
            КонецЕсли;    

КонецПроцедуры
6 grandmaster
 
22.11.17
14:26
на строчке
СтруктураНакладной.Вставить("Идентификатор", ИдентификаторНакладной);

прилетает
Значение не является значением объектного типа (Вставить)
7 Numerus Mikhail
 
22.11.17
14:30
(6) Кажется вы чего-то недоговариваете. На этой строчке не должно падать.
8 FIXXXL
 
22.11.17
14:30
(6) смотри в отладчике, что там в этой строке
9 grandmaster
 
22.11.17
14:38
Всё теперь проходит. Только как теперь сделать чтоб оно галку не проставляло и если выбираю первую запись (тоесть такой идентификатор ещё не выбран) на ней тоже почему-то прилетает сообщение
10 Numerus Mikhail
 
22.11.17
14:48
(9) потому что код неправильно написан
11 grandmaster
 
22.11.17
14:49
(10) ну подскажите где что исправить?
я только учусь пока
12 Numerus Mikhail
 
22.11.17
14:53
Как-то так

Процедура ТТНВыбранаПартияПриИзменении(Элемент)    
    
ТекущиеДанные = Элементы.Накладные.ТекущиеДанные;

Если НЕ Стр.ВыбратьСтроку Тогда
Возврат;
КонецЕсли;

СтруктураНакладной = Новый Структура;
СтруктураНакладной.Вставить("Идентификатор", ИдентификаторНакладной);
СтруктураНакладной.Вставить("ВыбратьСтроку", Истина);
НайденныеСтроки = Объект.Накладные.НайтиСтроки(СтруктураНакладной);
Если НайденныеСтроки.Количество() > 1 Тогда

Сообщить ("запись с данным идентификатором уже выбрана!");
ТекущиеДанные.ВыбратьСтроку = Ложь;
КонецЕсли;

КонецПроцедуры
13 FIXXXL
 
22.11.17
14:54
(9) галку сам снимай, кодом
и я не догоняю, зачем ты в цикле проверяешь?
14 FIXXXL
 
22.11.17
14:55
(13) + ну вот, тебе уже все разжевали :)
15 grandmaster
 
22.11.17
15:14
(12) спасибо спасибо спасибо :)