Консультация № 150319
12.11.2008, 14:22
0.00 руб.
0 4 4
Здравствуйте, эксперты.
Как при подборе элементов в табличную часть документа, исключить повторение этих самых элементов в табличной части, допустим, при случайном повторном выборе элемента в форме подбора?
Заранее спасибо.

Обсуждение

Неизвестный
12.11.2008, 15:07
общий
это ответ
Здравствуйте, Shilvlad!
В обработке подбора включить проверку на наличие подбираемого элемента
Неизвестный
12.11.2008, 15:09
общий
это ответ
Здравствуйте, Shilvlad!
В 1С 77 можно поступить следующим образом: выгрузить табличную часть в таблицу значений и свернуть, а после загрузить, пример ниже.

Приложение:
Процедура ОбработкаПодбора()
//добавляем из подбора элементы
......
//ищем дубли, в примере у табличной части документа следующие реквизиты: Номенклатура, Единица, Цена, Количество, Сумма
тз=СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(тз);
тз.Свернуть("Номенклатура,Единица,Цена","Количество,Сумма");
ЗагрузитьТабличнуюЧасть(тз);
КонецПроцедуры
Неизвестный
12.11.2008, 15:36
общий
это ответ
Здравствуйте, Shilvlad!
Надо в форме документа создать (или изменить) процедуру ОбработкаВыбораЗначения().
Например надо контролировать, чтобы при подборе Реквизита табличной части "РеквизитТЧ" не было дублей в ТЧ.
Подбор осуществляется простым методом по кнопочке Insert или через клавиши панели управления.

Приложение:
Процедура ОбработкаВыбораЗначения(ВыбЗнач, ИдентЭлемДиалога, ФлагСтандОбр)
Если ИдентЭлемДиалога = "РеквизитТЧ" Тогда
спис = СоздатьОбъект("СписокЗначений");
ВыгрузитьТабличнуюЧасть(спис,"РеквизитТЧ");
Если спис.НайтиЗначение(ВыбЗнач) = 0 Тогда
//Добавляем значение;
РеквизитТЧ = ВыбЗнач;
Иначе
Предупреждение("Повторение данных!",3);
// и тут действия, которые надо сделать при повторении. Учтем, что новая строка в ТЧ уже введена.
// Например так...
СтатусВозврата(0);
КонецЕсли;
ФлагСтандОтб = 0;
// Переводим фокус на следующую колонку ТЧ...
Активизировать("Количество",0);
КонецЕсли;
КонецПроцедуры // ОбработкаВыбораЗначения()
Неизвестный
12.11.2008, 16:28
общий
это ответ
Здравствуйте, Shilvlad!

Самый простой и лаконичный способ уже предложил Strawberry. А сделать это можно так: допустим, контекст формы документа в форме подбора это Конт = Форма.Параметр, а реквизит документа, в который выбираем элемент - это "ТМЦ". Тогда в подборе в процедуре выбора элементов включаем проверку,как в приложении

Приложение:
СП = СоздатьОбъект("СписокЗначений");
Конт.ВыгрузитьТабличнуюЧасть(СП,"ТМЦ");
Если СП.НайтиЗначение(ТекущийЭлемент()) = 0 Тогда
//Такого еще нет
Иначе
//Такой уже есть
КонецЕсли;
Форма ответа