Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 05:55

Подбор текста

Автор Zeus_God, 05 июн 2013, 07:40

0 Пользователей и 1 гость просматривают эту тему.

Zeus_God

Добрый день!


Конфиг. УТ 10.3. Необходимо, чтобы когда в справочнике "Номенклатура" пользователь вводил в строку "содержит" код товара (колонка "Артикул"), вместе с ним выходили все аналоги (одинаковые номера в колонке "Комментарии").



В модуле Формы списка справочника Номенклатура есть процедура ЗначениеОтбораСпискаНоменклатурыАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка). В ней как раз и происходит отбор нужных позиций номенклатуры.


Подскажите, пожалуйста, как отобрать все аналоги номенклатуры (позиции, в которых одинаковая колонка "Комментарий")?

Zeus_God

Текущий вопрос решил. Только не могу вывести этот список в форму. Никто не подскажет команду?
Ниже текст процедуры (нужно заменить чем-то функцию Сообщить() ).
Процедура ЗначениеОтбораСпискаНоменклатурыАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)

  мПоискОбъектовВСпискахДанных.АвтоПодборТекстаПоиска(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка);

// Получить реквизиты текущего элемента
Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
               | Номенклатура.Ссылка,
               | Номенклатура.Артикул,
               | Номенклатура.Комментарий
               |ИЗ
               | Справочник.Номенклатура КАК Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();

НомерСтроки = 0;
Пока Выборка.Следующий() Цикл
Если Выборка.Артикул = Текст Тогда
Коммент = Выборка.Комментарий;
КонецЕсли;
КонецЦикла;

//--------------------------------------------------------------------------------------------------------------
//-------------------------------------------------- Поиск аналогов --------------------------------------------
//--------------------------------------------------------------------------------------------------------------
Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
   | Номенклатура.Ссылка,
   | Номенклатура.Комментарий
   |ИЗ
   | Справочник.Номенклатура КАК Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
Если Выборка.Комментарий = Коммент Тогда
Сообщить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------

КонецПроцедуры

Добавлено: 05 июн 2013, 11:41


И это сделал. Может кто подскажет как подобным образом вывести аналоги в документе "Реализация товаров" при выборе номенклатуры?

MuI_I_Ika

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

Zeus_God

Согласен с вами, только я не могу понять какую именно :-) Может кто знает или подскажет?

MuI_I_Ika

Можно отменить стандартное действие выбора и указать ту форму, которая вам больше нравится.

Zeus_God

Проверял ПриИзменении, НачалоВыбора - они не подходят (пробовал просто вывести сообщение и оно выходило сразу после открытия списка, т.е. о сравнении с введенными данными речи и не идет), проверял еще какую-то функцию - там наоборот, сообщение выходило после выбора позиции и закрытия списка.
Добавлено: 05 июн 2013, 12:46


Т.е. вы имеете ввиду полностью переписать процедуру выбора?

MuI_I_Ika

Чем НачалоВыбора не подходит?

MuI_I_Ika

Можно переписать, можно чуть-чуть добавить свой код.

Zeus_God

Я начал проверять когда процедура будет считывать введенные данные и для наглядности добавил функцию Сообщить(). При открытии списка мне сразу же вылезло сообщение, т.е., как я понимаю, эта процедура уже не будет считывать введенные данные. Вот текст самой процедуры -
Процедура ТоварыНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
СтруктураВыборСХарактеристикой = Новый Структура("мУказаниеСкладовВТЧ, ПоляДляОбновления, ВладельцыФормы, СтрокаТабличнойЧасти, МетаданныеДокумента"
, мУказаниеСкладовВТЧ
, Новый Структура("Склад,ХарактеристикаНоменклатуры,Номенклатура", ЭлементыФормы.Товары.ТекущиеДанные["Склад"])
, Новый Структура("ЭтаФорма,Элемент", ЭтаФорма,Элемент)
, СтрокаТабличнойЧасти
, Метаданные());
ОбработкаТабличныхЧастей.ОткрытьФормуСправочникаНоменклатурыДляВыбора(СтруктураВыборСХарактеристикой);     
Сообщить ("Я собщение :-)");
КонецПроцедуры

Добавлено: 05 июн 2013, 13:01


Спасибо, сейчас попробую

MuI_I_Ika

Эта процедура специально создана для того, чтобы разработчик имел возможность переопределить форму выбора. Соответственно в ней не будет данных о выбранных элементах, как вы правильно заметили. Для этого есть специальная процедура ОбработкаВыбора.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск