Имя: Пароль:
1C
1С v8
наиболее простой способ запрета ввода в таблицу значений одинаковых строк
,
0 Oz11
 
20.01.12
13:22
Есть задача. На форме лежит Таблица значений, в ней есть колонка "Сотрудник". когда пользователь вводит строку и выбирает сотрудника нужно запретить запись строк, если в таблице значений уже есть строка с этим сотрудник. ковырял ПриОкончанииРедактирования и ПередОкончаниемредактирования. в обоих случаях строка уже записана в ТЗ. как быть?
1 Cube
 
20.01.12
13:23
(0) А выбрать строки по условию и затем проверить, если в этой выборке строк больше одной никак?
2 Широкий
 
20.01.12
13:24
Удлить строку/ очистить поле сотрудник
3 Oz11
 
20.01.12
13:25
(1) в каком событии табличного поля делается проверка?
4 rs_trade
 
20.01.12
13:25
(0) открывать список выбора с отбором. что бы сотры из таблицы отсутствовали в списке выбора. но это конечно не избавляет от проверки.
5 Cube
 
20.01.12
13:26
(3) Уточни, ты проверку сделать не можешь или строку удалить?
6 Oz11
 
20.01.12
13:26
(4) думаю так нельзя, чисто эстетически.
7 Oz11
 
20.01.12
13:27
я и не думаю удалять строку, просто буду очищать это поле сотрудник, если такой уже есть. вопрос в том как и где сделать проверку
8 ШАВ
 
20.01.12
13:27
(0) Я обычно использую параметр Отказ у обработчика события ПередОкончаниеРедактирования. Иногда анализурую еще и параметры НоваяСтрока и ОтменаРедактирования.
9 Tazuya
 
20.01.12
13:28
(0)ну так удаляй, ведь могут же и отредактировать на выбранного
10 Oz11
 
20.01.12
13:29
(8) ковырял. в этом событии строка уже записана в таблицу значений. поэтому проверка на дубль в любом случае даст положительный ответ.
11 1с-кин
 
20.01.12
13:29
(0) во-первых, ТЗ не лежит на форме, а лежит ТП.
ТП само по себе ничего в базу не пишет. Так что пока не сделана запсиь - удаляйте и рихтуйте таблицу, как угоднро, хоть при окончании редактирования, хоть перед.
12 Oz11
 
20.01.12
13:30
(9) в таком случае можно тоже просто очищать сотрудника, ну или спрашивать пользователя об удалении строки
13 Cube
 
20.01.12
13:30
(10) Читай (1).
14 1с-кин
 
20.01.12
13:31
(10) вообще-то, ТП не сама по себе обычно - а к ТЧ привязана, а обратится к ТЧ, сохраненному в базе - очень даже можнро. И сравнить.ю
Или сразу - при открытии сохранять слепок ТЧ. И потом сравнивать после ввода строки.
15 Oz11
 
20.01.12
13:33
(13) видимо я чего-то не понимаю.

   ЕстьСовпадение = Ложь;
   Для каждого Стр Из ТабличнаяЧасть Цикл
       Если Стр.Сотрудник = Сотрудник Тогда
           ЕстьСовпадение = Истина;    
       КонецЕсли;    
   КонецЦикла;
   Возврат ?(ЕстьСовпадение, Истина, Ложь);
есть такая функция, запускаю ее ПередОкончаниемРедактирования и она выдает дубль, хотя строка одна. в первом параметре ей передается не табличное поле, а таблица значений.
16 5 Элемент
 
20.01.12
13:33
У автора проблема в том что он не может отличить текущую строку от других, чтобы правильно найти дубли :)
17 ШАВ
 
20.01.12
13:34
(10) если установить Отказ = Истина, то изменения не зафиксируются, и пользователь должен будет продолжить редактирование строки пока не исправит ошибку.
18 Cube
 
20.01.12
13:34
(15) НайтиСтроки()
19 Oz11
 
20.01.12
13:34
(16) вот. так и есть.
20 5 Элемент
 
20.01.12
13:38
(19) а зачем тебе отличать ее от других?
21 Shurjk
 
20.01.12
13:40
А если при изменении самого реквизита сотрудник искать, Тч.Найтистроки(ОтборПоСотруднику).Количество() > 1
22 Oz11
 
20.01.12
13:40
(20) чтобы найти дубли. когда я делаю проверка, то проверяемая строка тоже учитывается и выходит что всегда будет дубль.
23 5 Элемент
 
20.01.12
13:40
(22) ты не правильно определяешь дубли, тебе уже написали как надо
24 1с-кин
 
20.01.12
13:41
(22) в базе-то нет еще дубля - поэтому отменять ввод, очищать строку, и сообщить пользователю, где и как он ошибся.
25 5 Элемент
 
20.01.12
13:41
дубль это не когда в ТЧ есть такой же сотрудник, а когда их больше 1
26 Cube
 
20.01.12
13:41
(22) Читай (1) до полного просветления.
27 Oz11
 
20.01.12
13:53
всем спасибо. понял что дурак.
28 Oz11
 
20.01.12
13:54
(25) отдельное спасибо. даже в пятничный мозг можете вбить правильную траекторию мышления.