Имя: Пароль:
1C
1С v8
Дубли в табличной части
0 VKRNA5
 
13.09.15
20:06
Здравствуйте!

Подскажите, пожалуйста, как в табличной части документа, программно ограничить пользователю ввод значений, которые уже присутствуют в этой табличной части.

К примеру, в колонке таблицы, значения 30 40 50 60, пользователь вводит число 50, система не должна давать ввести данное значение, пока пользователь не отредактирует число на другое, которого нет в табличной части.
1 PR третий
 
13.09.15
20:11
(0) Программно
2 Defender aka LINN
 
13.09.15
20:12
Придется написать немного кода.
Или много, если промеж ушей масла маловато.
Или заплатить денег тому, кто умеет, если промеж ушей только ниточка.
3 VKRNA5
 
13.09.15
20:20
Заплатить денег за 2 строчки кода?)

Я сделал так, что при вводе значений в табличную часть, если значение повторяется, то строка удаляется, но это не корректно, как сделать так, чтобы строка не удалялась, но и не давала пользователю ввести не корректное значение в таблицу, пока он его не изменит?
4 1sanekmaloi1
 
13.09.15
20:23
Так если знаешь что 2 строки, чего спрашиваешь?
5 PR третий
 
13.09.15
20:23
(3) Да не вопрос, напиши сам, нечего раскидываться деньгами
6 VKRNA5
 
13.09.15
20:26
Если бы знал как правильно это написать, не спрашивал бы советов.
7 PR третий
 
13.09.15
20:29
(6) Так если ты разбираться не хочешь, а хочешь готовый код, то почему тебя возмущает предложение заплатить за это?
8 spectre1978
 
13.09.15
20:32
У табличной части есть всяки-разны события. Вот их надо покурить и написать обработчик, который не даст закончить ввод строки, если введены значения которые уже были
9 PR третий
 
13.09.15
20:32
Вообще просто не давай закончить редактирование строкт ТЧ и все
10 VKRNA5
 
13.09.15
20:36
(9) Это я понимаю, но как это сделать программно, не придумал, можете привести пример?
11 oslokot
 
13.09.15
20:39
(0) Вообще-то в идеале, принято ограничивать пользователю выбор данных уже имеющихся в ТЧ.
И сделать это нужно на уровне параметра выбора для поля ввода.
12 VKRNA5
 
13.09.15
20:45
(11)а можете подсказать новичку более подробно как это сделать?
13 PR третий
 
13.09.15
20:47
(10) А в чем проблема-то?
14 oslokot
 
13.09.15
20:51
(12) Если это выбор из имеющихся данных, например из справочника, то имеет смысл наложить на него отбор при интерактивном подборе. А если это число, то проверять ввод в событии, например, в ПриОкончанииРедактирования
15 VKRNA5
 
13.09.15
21:02
(14) Это число и У меня Выбрано событие ПередОкончаниемРедактирования

Я в цикле обхожу табличную часть, проверяю каждую строку табличной части на соответствие введенной строке, если строки совпадают, то Отказ

Но когда в режиме предприятия пользователь вводит в таблицу значение. которые уже есть в табличной части, всё зависает и не даёт совершить больше никаких действий, в том числе и отредактировать данное число.
16 PR третий
 
13.09.15
21:13
(15) Что-то не похоже на две строки кода, больше похоже на небольшую тележечку копрокода
17 breezee
 
13.09.15
22:21
А зачем накладывать? пусть пользователь хоть 10 раз вводит. Можно(нужно) же потом свернуть табличную часть. В том же запросе поставить группировку по нужному полю. Можно постановку задачи где такое необходимо?
18 1Сергей
 
14.09.15
07:38
(15) нажми Esc
19 SiAl-chel
 
14.09.15
07:47
(18) ESC в восьмерке не всегда не поможет, там вроде Ctrl+Break рулит, и то при условии прямых рук кодера.
(15) В цикле наложи условие
Если СтрокаТЧ <> ТекущаяСтрокаТЧ Тогда
ПыСы: Переменные в условии надо воспринимать абстрактно.
20 SeraFim
 
14.09.15
07:48
Сделать проверку в обработке проведения не предлагали еще?
Предположим наколотили 500 строк в таблице. Пользователь тыкает 50, система не дает ничего сделать, просит ввести другое., тыкает 40, то же самое. А пользователь не знает, какие значения уже введены, пересматривать все 500 строк будет очень долго. Пока пользователь пытается угадать нужную цифирку, могут отключить свет/админ перезагрузит сервак и тд. А пользователь даже сохраниться не может.

А так - хоть 500 одинаковых строк пусть введет, но сможет сохраниться, однако потом все-таки провести он нифига не сможет.
21 Wirtuozzz
 
14.09.15
07:58
Свернуть ТЧ не предлагать?
22 1Сергей
 
14.09.15
07:59
23 SiAl-chel
 
14.09.15
08:04
(22) Ха-ха. "Ты такой умный, это что-то..." (Реклама из 1990-х).
24 ЧеловекДуши
 
14.09.15
08:18
(0) Отлавливать в "ПриИзменении". А "ПриНачалеРедактирования", запоминать значения для восстановления :)
25 ЧеловекДуши
 
14.09.15
08:19
(19) В 8.х таки вообще проблематично прервать процесс. Особенно на УФ :)
26 ЧеловекДуши
 
14.09.15
08:21
(20) >>> в обработке проведения

Откуда у вас такое маниакальное желание засорять лишними проверками и тормозными диалогами Модули, которые выполняются в Транзакции? :)
27 SeraFim
 
14.09.15
08:54
(26) это маниакальное желание решить задачу сразу, просто и комплексно, дабы потом по 15 раз не возвращаться к ней.
Сейчас окажется, что:
1. Автор забыл сделать проверку при копировании строки.
2. Документ вводится на основании другого. То есть в другом документе (например, "ЗаказПокупателя") можно указывать 20 20 20, а в этом документе (скажем, "Продажа") - этого делать уже нельзя, а автоматом уже заполнилось.
3. Есть какие-то другие операции, которые программно заполняют документ. Какие-то обмены, обработки и тд.
28 Vladal
 
14.09.15
10:57
(27) Тогда перед записью проверять. ЧТобы при первом вводе не было дублей.

(15), (19) В типовых есть процедура ОбщегоНазначения.ОтобратьСтрокиПоКритериям