Доброго всем времени, хочу организовать поиск по цене в РМК Розница 1 при включение режима подбора. Точнее даже сделать фильтр по списку номенклатуры. Смысл такой:
Сделать поле для ввода строки поиска. две кнопки поиск и очистить.
Чтобы при нажатии на кнопку поиск в списке товаров отображались только товары с заданной в строке поиска ценой.
Ну и за раз добавить такой поиск по остальным полям.
В данный момент не могу даже найти где посмотреть форму РМК, где вообще открывается список при нажатии кнопки подбор в РМК.
Любой информации буду благодарен!!!
Сделать поле для ввода строки поиска. две кнопки поиск и очистить.
Чтобы при нажатии на кнопку поиск в списке товаров отображались только товары с заданной в строке поиска ценой.
Ну и за раз добавить такой поиск по остальным полям.
В данный момент не могу даже найти где посмотреть форму РМК, где вообще открывается список при нажатии кнопки подбор в РМК.
Любой информации буду благодарен!!!
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) pawonex, ИЩИ В документе ЧекККМ, ФормаРегистрации продаж. Через меню на главной панели ищешь Форма - Список элементов управления формы. Там все объекты, которы на диалог выводятся. то что ты ищешь скорее всего назвается ПанельПодборБыстрыеТовары - подбор
Подскажите пожалуйста как правильно сделать отбор в табличной части Товары.
Перерыл кучу инфы, ни как не могу разобраться..
Пытаюсь для начала сделать отбор по артикулу.
Прочитал что в динамическом списке отбор надо делать следующим образом:
Ругается так:
{Документ.ЧекККМ.Форма.ФормаРегистрацииПродаж.Форма(280)}: Значение не является значением объектного типа (Артикул)
Товар = ЭлементыФормы.Товары.ТекущиеДанные.Артикул;
Подскажите что делаю не так и как вообще правильно сделать отбор.
Цель такая сделать чтобы в Табличной части "Товары" в РМК, по нажатию кнопки Искать, отбирались товары содержащие строку указанную в Строке поиска.
Перерыл кучу инфы, ни как не могу разобраться..
Пытаюсь для начала сделать отбор по артикулу.
Прочитал что в динамическом списке отбор надо делать следующим образом:
Товар = ЭлементыФормы.Товары.ТекущиеДанные.Артикул;
Отбор = ЭлементыФормы.Товары.ОтборСтрок.Артикул;
Если Отбор.Найти("Артикул") = Неопределено Тогда
Отбор.Добавить("Артикул");
КонецЕсли;
Отбор["Артикул"].Значение = Товар;
Отбор["Артикул"].ВидСравнения = ВидСравнения.Содержит;
Отбор["Артикул"].Использование = Истина;
ПоказатьРугается так:
{Документ.ЧекККМ.Форма.ФормаРегистрацииПродаж.Форма(280)}: Значение не является значением объектного типа (Артикул)
Товар = ЭлементыФормы.Товары.ТекущиеДанные.Артикул;
Подскажите что делаю не так и как вообще правильно сделать отбор.
Цель такая сделать чтобы в Табличной части "Товары" в РМК, по нажатию кнопки Искать, отбирались товары содержащие строку указанную в Строке поиска.
(4) pawonex, так ведь в Рознице 1 уже реализован данный механизм. Поиск по практически любому реквизиту, плюс поиск "Везде". Самый красивый вариант, на мой взгляд, это добавить пункт в список полей для поиска "Цена". И в той процедуре, которая обрабатывает поиск по тому или иному реквизиту, написать что-то в роде
Благодаря такому способу Розница все сделает за тебя, при условии, что твой запрос будет выдавать результат по структуре идентичный тому, что она получает для штатных реквизитов поиска.
Если РеквизитПоиска = "Цена" Тогда
/// Лезем в РС ЦеныНоменклатурыВМагазине, ищем там нужную цену, выводим требуемые колонки
Иначе
/// Типовой код, уже написанный для остальных реквизитов
КонецЕсли;
Благодаря такому способу Розница все сделает за тебя, при условии, что твой запрос будет выдавать результат по структуре идентичный тому, что она получает для штатных реквизитов поиска.
Все ломаю голову как реализовать=)
(5) Понял о чем ты говорил и решил сделать именно так, добавляю поиск по цене в ОбщийМодуль.УправлениеНоменклатурой
Вот как сделал:
Основной вопрос на сколько верно я сделал запрос?
На данный момент ощибка такая:
Подскажите где накосячил=)
(5) Понял о чем ты говорил и решил сделать именно так, добавляю поиск по цене в ОбщийМодуль.УправлениеНоменклатурой
Вот как сделал:
Функция НайтиПоЦене(Наименование, ТекДата, Список = Неопределено) Экспорт
Если Не ТипЗнч(Список) = Тип("СписокЗначений") Тогда
Результат = Новый СписокЗначений;
Иначе
Результат = Список;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура.Ссылка
|ИЗ
| РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних КАК ЦеныНоменклатурыМагазиновСрезПоследних
|ГДЕ
| ЦеныНоменклатурыМагазиновСрезПоследних.Период = &Период
| И ЦеныНоменклатурыМагазиновСрезПоследних.Цена = &Цена";
//Параметры запроса
Запрос.УстановитьПараметр("Период","%"+ТекДата+"%");// Дата
Запрос.УстановитьПараметр("Цена", "%"+Наименование+"%");// Число
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
Результат.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("Ссылка"));
Возврат Результат;
КонецФункции
ПоказатьОсновной вопрос на сколько верно я сделал запрос?
На данный момент ощибка такая:
{ОбщийМодуль.УправлениеНоменклатурой.Модуль(174)}: Ошибка при вызове метода контекста (ВыгрузитьКолонку)
Результат.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("Ссылка"));
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
Подскажите где накосячил=)
(10) pawonex,
попробуй
Хотя я не уверена, что дело в этом
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура.Ссылка
|ИЗ
| РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних КАК ЦеныНоменклатурыМагазиновСрезПоследних
|ГДЕ
| ЦеныНоменклатурыМагазиновСрезПоследних.Период = &Период
| И ЦеныНоменклатурыМагазиновСрезПоследних.Цена = &Цена";
попробуй
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура.Ссылка как Ссылка
Хотя я не уверена, что дело в этом
(11) Наименование передается в функцию, по умолчанию решил не отходить от стандартов=)
Поменял как ты написал теперь на строку:
вот что говорит:
(12) Там в стандартных функциях так же запрос написан
Поэтому так и оставил, и я запрос в конструкторе собирал, он мне так написал=)
Вот нашел запрос работающий для поиска по цене для УТ:
Но не могу разобраться как переделать его так чтобы он возвращал так же список ссылок а не список номенклатуры,если я правильно конечно понимаю суть этого запроса=)
Переделывал его по ЦеныНоменклатурыМагазинов. как будто бы запрос проходит. но из функции возвращается не правильный формат. Вот о том чем я говорил, как его переделать так чтобы он вернул такой же формат как в запросе поиска по артикулу:
Поменял как ты написал теперь на строку:
ТаблицаПодборКлавиши.Отбор.Ссылка.Значение = ТекущаяНадпись;
вот что говорит:
{Документ.ЧекККМ.Форма.ФормаРегистрацииПродаж.Форма(313)}: Ошибка при установке значения атрибута контекста (Значение)
ТаблицаПодборКлавиши.Отбор.Ссылка.Значение = ТекущаяНадпись;
по причине:
Неверный тип значения
(12) Там в стандартных функциях так же запрос написан
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул ПОДОБНО &Наименование"
Поэтому так и оставил, и я запрос в конструкторе собирал, он мне так написал=)
Вот нашел запрос работающий для поиска по цене для УТ:
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК Код,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул КАК Артикул,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Родитель КАК Родитель,
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Цена = &Цена) КАК ЦеныНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменклатураСправочник
| ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = НоменклатураСправочник.Ссылка";
//Параметры запроса
Запрос.УстановитьПараметр("Период",ТекущаяДата());// Дата
Запрос.УстановитьПараметр("Цена",Число(ЭлементыФормы.ПолеПоиска.Значение));// Число
ПоказатьНо не могу разобраться как переделать его так чтобы он возвращал так же список ссылок а не список номенклатуры,если я правильно конечно понимаю суть этого запроса=)
Переделывал его по ЦеныНоменклатурыМагазинов. как будто бы запрос проходит. но из функции возвращается не правильный формат. Вот о том чем я говорил, как его переделать так чтобы он вернул такой же формат как в запросе поиска по артикулу:
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул ПОДОБНО &Наименование"
В общем вот к чему пришел, сделал запрос в отладчике запросов. В отладчике все благополучно работает=) В итоге получилась такая функция для поиска.
Далее вызываю с формы РМК вот так:
И вот как ругаецо:
Подскажите пожалуйста, что сейчас не так?
Функция НайтиПоЦене(Цена, ТекДата, ТекМагазин, Список = Неопределено) Экспорт
Если Не ТипЗнч(Список) = Тип("СписокЗначений") Тогда
Результат = Новый СписокЗначений;
Иначе
Результат = Список;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура.Ссылка
|ИЗ
| РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Дата, Цена = &Цена
| И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ (Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| И Магазин В (&Магазин)) КАК ЦеныНоменклатурыМагазиновСрезПоследних
|";
//Параметры запроса
Запрос.УстановитьПараметр("Дата","%"+ТекДата+"%");// Дата
Запрос.УстановитьПараметр("Цена", "%"+Цена+"%");// Число
Запрос.УстановитьПараметр("Магазин", "%"+ТекМагазин+"%");// Число
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
Результат.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("Ссылка"));
Возврат Результат;
КонецФункции
ПоказатьДалее вызываю с формы РМК вот так:
Процедура КнопкаПоискНажатие(Элемент)
ТекущаяНадпись = СокрЛП(ЭлементыФормы.ПолеПоискаТовары.Значение);
Если ТекущаяНадпись = "" Тогда
ТаблицаПодборКлавиши.Отбор.Сбросить();
ЭлементыФормы.ТаблицаПодборКлавиши.Свернуть(Справочники.Номенклатура.ПустаяСсылка());
ЭлементыФормы.ТаблицаПодборКлавиши.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Возврат;
КонецЕсли;
СписокЗначений = Новый СписокЗначений();
СписокОтбора = УправлениеНоменклатурой.НайтиПоЦене(ОбщегоНазначения.ПривестиСтрокуКЧислу(ТекущаяНадпись, Истина), ТекущаяДата(), Магазин);
Если СписокОтбора.Количество() <> 0 Тогда
Для Каждого текЭлементСпискаОтбора Из СписокОтбора Цикл
НовыйЭлемент = СписокЗначений.Добавить(текЭлементСпискаОтбора.Значение);
КонецЦикла;
ТаблицаПодборКлавиши.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
ТаблицаПодборКлавиши.Отбор.Ссылка.Значение = СписокЗначений;
ТаблицаПодборКлавиши.Отбор.Ссылка.Использование = Истина;
ЭлементыФормы.ТаблицаПодборКлавиши.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
КонецЕсли;
КонецПроцедуры
ПоказатьИ вот как ругаецо:
{ОбщийМодуль.УправлениеНоменклатурой.Модуль(172)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(4, 2)}: Ошибка обработки представления "РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних:Несоответствие типов (Параметр номер ""1"")"
<<?>>РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Дата, Цена = &Цена
Подскажите пожалуйста, что сейчас не так?
(15)А спасибо!!! ХЗ точно это помогло или нет не могу сказать, я просто еще вчера попробовал так сделать=) А щас доделал " ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура.Ссылка КАК Ссылка" и все прошло=)))(11)Спасибо, я как раз из-за твоего поста обратил внимание на то что нужно ставить "как ссылка"=)))
Щас оттестирую и выложу готовое решение=)
Щас оттестирую и выложу готовое решение=)
Для начала откроем конфигуратор.
1. Откроем конфигурацию : Конфигурация-Открыть Конфигурацию
2. Открываем Общие модули-УправлениеНоменклатурой Ищем функции Функция НайтиПоАртикулу, НайтиПоКоду и т.д.
Добавляем ниже
3. Откроем Справочники-Номенклатура-Формы-ФормаСписка, копируем поле поиска и кнопки поиск и очистить.
4. Сама форма РМК Кассира находится в Документы-ЧекККМ-Формы-ФормаРегистрацииПродаж, заходим туда, вставляем куда нужно скопированные поле поиска и кнопки.
Переименовываем вставленные элемент, для этого правой кнопкой по любому элементу и выбираем свойства:
После поиска - ПолеПоискаТовары
Кнопка Искать - КнопкаПоиск
Кнопка Очистить - КнопкаОчиститьПоиск
5. У каждого элемента в свойствах в самом низу списка есть События. Для кнопок на нажитие пишем следующиее:
Кнопка поиска:
На кнопку очистить:
Собственно вот и все, компилируем (F5) и в интерфейса кассира не забудьте открыть поле с подбором (Правда панель-Подбор либо F)
Если будет необходимо сделать поиск по Артикулу то нужно вместо
написать
Для поиска по всем полям:
Спасибо большое: Dos_1985,CnupT,dmt,Sherdrada,copybases
1. Откроем конфигурацию : Конфигурация-Открыть Конфигурацию
2. Открываем Общие модули-УправлениеНоменклатурой Ищем функции Функция НайтиПоАртикулу, НайтиПоКоду и т.д.
Добавляем ниже
Функция НайтиПоЦене(Цена, ТекДата, ТекМагазин, Список = Неопределено) Экспорт
Если Не ТипЗнч(Список) = Тип("СписокЗначений") Тогда
Результат = Новый СписокЗначений;
Иначе
Результат = Список;
КонецЕсли;
Запрос = Новый Запрос;
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Магазин", ТекМагазин);
Запрос.УстановитьПараметр("Период", ТекДата);
Запрос.УстановитьПараметр("Цена", Цена);
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура.Ссылка КАК Ссылка
|ИЗ
| РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Период, Цена = &Цена И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ (Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) И Магазин В (&Магазин)) КАК ЦеныНоменклатурыМагазиновСрезПоследних
|";
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
Результат.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("Ссылка"));
Возврат Результат;
КонецФункции
Показать3. Откроем Справочники-Номенклатура-Формы-ФормаСписка, копируем поле поиска и кнопки поиск и очистить.
4. Сама форма РМК Кассира находится в Документы-ЧекККМ-Формы-ФормаРегистрацииПродаж, заходим туда, вставляем куда нужно скопированные поле поиска и кнопки.
Переименовываем вставленные элемент, для этого правой кнопкой по любому элементу и выбираем свойства:
После поиска - ПолеПоискаТовары
Кнопка Искать - КнопкаПоиск
Кнопка Очистить - КнопкаОчиститьПоиск
5. У каждого элемента в свойствах в самом низу списка есть События. Для кнопок на нажитие пишем следующиее:
Кнопка поиска:
Процедура КнопкаПоискНажатие(Элемент)
ТекущаяНадпись = СокрЛП(ЭлементыФормы.ПолеПоискаТовары.Значение);
Если ТекущаяНадпись = "" Тогда
ТаблицаПодборКлавиши.Отбор.Сбросить();
ЭлементыФормы.ТаблицаПодборКлавиши.Свернуть(Справочники.Номенклатура.ПустаяСсылка());
ЭлементыФормы.ТаблицаПодборКлавиши.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Возврат;
КонецЕсли;
СписокЗначений = Новый СписокЗначений();
СписокОтбора = УправлениеНоменклатурой.НайтиПоЦене(ОбщегоНазначения.ПривестиСтрокуКЧислу(ТекущаяНадпись, Истина), ТекущаяДата(), Магазин);
Если СписокОтбора.Количество() <> 0 Тогда
Для Каждого текЭлементСпискаОтбора Из СписокОтбора Цикл
НовыйЭлемент = СписокЗначений.Добавить(текЭлементСпискаОтбора.Значение);
КонецЦикла;
ТаблицаПодборКлавиши.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
ТаблицаПодборКлавиши.Отбор.Ссылка.Значение = СписокЗначений;
ТаблицаПодборКлавиши.Отбор.Ссылка.Использование = Истина;
ЭлементыФормы.ТаблицаПодборКлавиши.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
КонецЕсли;
КонецПроцедуры
ПоказатьНа кнопку очистить:
Процедура КнопкаОчиститьПоискНажатие(Элемент)
ПолеПоискаТовары = "";
ТаблицаПодборКлавиши.Отбор.Сбросить();
ЭлементыФормы.ТаблицаПодборКлавиши.Свернуть(Справочники.Номенклатура.ПустаяСсылка());
ЭлементыФормы.ТаблицаПодборКлавиши.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
КонецПроцедуры
Собственно вот и все, компилируем (F5) и в интерфейса кассира не забудьте открыть поле с подбором (Правда панель-Подбор либо F)
Если будет необходимо сделать поиск по Артикулу то нужно вместо
СписокОтбора = УправлениеНоменклатурой.НайтиПоЦене(ОбщегоНазначения.ПривестиСтрокуКЧислу(ТекущаяНадпись, Истина), ТекущаяДата(), Магазин);
написать
СписокОтбора = УправлениеНоменклатурой.НайтиПоАртикулу(ТекущаяНадпись);
СписокОтбора = УправлениеНоменклатурой.НайтиВезде(ТекущаяНадпись);
Спасибо большое: Dos_1985,CnupT,dmt,Sherdrada,copybases
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот