|
Обращение к табличной части при создании или изменении документа. | ☑ | ||
---|---|---|---|---|
0
Dice2307
26.02.13
✎
11:31
|
Подскажите, пожалуйста, как сделать, чтобы при заполнении строк табличной части пользователь не мог выбрать один и тот же элемент справочника в разных строках несколько раз.
Наверное, нужно что то написать в процедуре ПриИзменении этого элемента табличной части? Но как проверить, что выбрано в других строках, если документ ещё не записан? |
|||
1
zladenuw
26.02.13
✎
11:32
|
ТабличнайЧасть.Найти(НоваяСтрока). нашел, не добавляешь.
|
|||
2
elCust
26.02.13
✎
11:37
|
Используй ПередОкончаниемРедактирования, там можно отменить добавление новой строки.
|
|||
3
Dice2307
26.02.13
✎
11:40
|
Табличная часть называется "Оборудование", в ней один реквизит - "Номенклатура".
Вот так не даёт писать: &НаКлиенте Процедура ОборудованиеТерминалыПриИзменении(Элемент) Если Оборудование.Номенклатура.Найти(Элемент)Тогда // КонецЕсли; КонецПроцедуры |
|||
4
Rovan
модератор
26.02.13
✎
11:41
|
(0) в ПриОкончанииРедактирования()
|
|||
5
Dice2307
26.02.13
✎
11:42
|
Там есть только ПриОкончанииВводаТекста
|
|||
6
Rovan
гуру
26.02.13
✎
11:42
|
(+4) даже лучше в ПередОкончаниемРедактирования()
|
|||
7
Dice2307
26.02.13
✎
11:46
|
Там есть только:
ПриИзменении НачалоВыбора НачалоВыбораИзСписка Очистка Регулирование Открытие ОбработкаВыбора Автоподбор ОкончаниеВводаТекста |
|||
8
zladenuw
26.02.13
✎
11:47
|
(7) табличнаяЧасть.найти. а не реквизит табличной части
|
|||
9
zladenuw
26.02.13
✎
11:47
|
(7) ДенисЧ СП продает.
а вообще вот Пример: НайденнаяСтрока = Состав.Найти(ТекТовар, "Номенклатура"); Если НайденнаяСтрока = Неопределено Тогда Текст = "ru = ""Товар не найден!"";" + " en = ""Article not found!"""; Предупреждение(НСтр(Текст)); Иначе Количество = НайденнаяСтрока.Количество; КонецЕсли; |
|||
10
Reset
26.02.13
✎
11:50
|
(9) Найти() не подходит для задачи
Процитируй, раз взялся, НайтиСтроки() |
|||
11
zladenuw
26.02.13
✎
11:52
|
(10) почему нет ? если проверять на уникальность сразу. то в каждой строке будет одна уникальная номенклатура.
|
|||
12
Reset
26.02.13
✎
12:05
|
(11) Когда сразу? Лепить отдельный механизм выбора, отвязанный от элемента формы?
Найти() не подходит, так как будет находить номенклатуру в текущей строке, а не дубль |
|||
13
Dice2307
26.02.13
✎
12:17
|
Нашёл процедуры ПриОкончанииРедактирования() и ПередОкончаниемРедактирования() у самой табличной части документа, а не у её элемента
Говорит, что нельзя обратиться так - ТекущаяСтрока: Документ.Поступление.Форма.ФормаДокумента.Форма(4,2)}: Переменная не определена (ТекущаяСтрока) |
|||
14
Dice2307
26.02.13
✎
12:21
|
И пример zladenuw тоже не получается:
{Документ.Поступление.Форма.ФормаДокумента.Форма(4,19)}: Переменная не определена (Состав) |
|||
15
kosts
26.02.13
✎
12:21
|
Для удобства пользователей можно подсвечивать серым шрифтом строки в форме выбора, которые уже есть в документе (и не реагировать на их выбор).
|
|||
16
Reset
26.02.13
✎
12:28
|
+(15) Но проверку все равно делать, так могут ввести "по строке", скопировать строку
|
|||
17
Xatori
26.02.13
✎
12:29
|
Да сгруппируй данные перед последующей обработкой и всего делов и пусть добавляют сколько угодно.
|
|||
18
Dice2307
26.02.13
✎
12:32
|
Парни, я совсем новичок. Что писать то.. ТекущаяСтрока - он не понимает.
|
|||
19
Dice2307
26.02.13
✎
12:32
|
ой, то есть ТабличнаяЧасть не понимает
|
|||
20
Xatori
26.02.13
✎
12:37
|
Да и собственно почему не обратится в модуле формы к самой табличной части например ЭтаФорма.СписокДокументовВыработкаОС
СписокДокументовВыработкаОС - ТЧ. Методы работы с ТЧ думаю не надо писать. |
|||
21
Reset
26.02.13
✎
12:40
|
(19) Объект.Оборудование - вот твоя "табличная часть".
Только это не табличная часть, строго говоря, а ДанныеФормыКоллекция |
|||
22
Xatori
26.02.13
✎
12:43
|
(21) а где то писали что Управляемая форма? что то я пропустил)) Да там на 5 строчек кода, неинтересно)
|
|||
23
Reset
26.02.13
✎
12:53
|
(22) Телепатия, 2 дан
|
|||
24
Dice2307
26.02.13
✎
12:58
|
Форма управляемая, да.
|
|||
25
Xatori
26.02.13
✎
13:01
|
(23) :) ГрандМастер прям, грац
|
|||
26
notebug
26.02.13
✎
13:42
|
лайткод =)
[CODE]&НаКлиенте Процедура ОборудованиеПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) Если ОтменаРедактирования Тогда Возврат; КонецЕсли; ОчиститьСообщения(); ТекущиеДанные = Элементы.Оборудование.ТекущиеДанные; Найдено = Объект.Оборудование.НайтиСтроки(Новый Структура("Номенклатура", ТекущиеДанные.Номенклатура)); Отказ = Найдено.Количество() > 1; Если Отказ Тогда НомерСтроки = 0; Для Каждого СтрокаОборудование Из Найдено Цикл Если СтрокаОборудование.НомерСтроки = ТекущиеДанные.НомерСтроки Тогда Продолжить; КонецЕсли; НомерСтроки = СтрокаОборудование.НомерСтроки; КонецЦикла; Сообщить("Дубли в строке: " + НомерСтроки); КонецЕсли; КонецПроцедуры[/CODE] |
|||
27
kosts
26.02.13
✎
13:46
|
CODE заменяй на 1с, будет работать
|
|||
28
kosts
26.02.13
✎
13:48
|
"Дубли в строке: " пиши человеческим языком, как-то так
Товар <Name> уже введен в строке № |
|||
29
notebug
26.02.13
✎
13:51
|
(28) нафиг мне это писать =) Это же пример. Как будет ТС делать - это уже меня не волнует =)
|
|||
30
kosts
26.02.13
✎
14:06
|
(29) =) Я что то подумал, что это ТС так сделал...
|
|||
31
Dice2307
26.02.13
✎
14:47
|
Всем большое спасибо за терпение!
Особенно notebug - этот пример заработал! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |