1С отбор по нескольким значениям

1С отбор по нескольким значениям

sernikant
27.11.2018 21:37

Прочитано: 449

Всем привет!. Начинаю программировать. Не судите строго.

Требуется сформировать отчет по справочнику Товары, в котором есть 3 реквизита — все имеют тип "Перечисление"

На форме отчет отчета 3 списка с пометками (список 1, список2, список 3) , заполненные программно значениями перечислений, например

Список1 (значения РФ, РБ). список2 (Годный,Негодный), Список3(Мелкий, Средний, Крупный)

Как программно перебором (с функцией) вывести в отчет те Товары, которые соответствуют выбранным пользователем значениям в списках, при этом в списке могут быть выбраны несколько значений. К примеру получить все элементы у которых стоит пометка РФ, Годный, Мелкий, Средний.

Помогите реализовать без использования запроса

Yandex
Возможно, вас также заинтересует
АВП
28.11.2018 17:40

Ответ № 1

Хотя бы скрин того что получается без отбора покажи. Пока непонятно что есть и что надо

Saagiv
03.12.2018 10:59

Ответ № 2

Так же как и с использованием чОрного запроса. спСписок1 = СоздатьОбъект("СписокЗначений"); // сюда собираем то что помечено в первом списке . Для I = 1 По Список1.РазмерСписка() ЦиклЕсли Список1.Пометка(I) = 1 ТогдаспСписок1.ДобавитьЗначение(Список1.ПолучитьЗначение(I));КонецЕсли;КонецЦикла;. спСписок2 = СоздатьОбъект("СписокЗначений"); // сюда собираем то что помечено во втором списке списке . спСписок2 = СоздатьОбъект("СписокЗначений"); // сюда собираем то что помечено в третьем списке . СпрНоменклатура.ВыбратьЭлементы(); // шаримся в справочникеПока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл// Определяем пациента . Если спСписок1.НайтиЗначение(прНоменклатура.Реквизит1) > 0И спСписок2.НайтиЗначение(прНоменклатура.Реквизит2) > 0И спСписок2.НайтиЗначение(прНоменклатура.Реквизит3) > 0 Тогда

АВП
03.12.2018 19:32

Ответ № 3

А теперь то же самое, но выделите тегом код. Не читается такое. Неужели не видите?

sernikant
06.12.2018 13:35

Ответ № 4

Попробую Вашу идею. Сам пока решил для себя так. Функцией возвращаю только помеченные значения списков в строку с разделителями, далее по справочнику в цикле проверяю необходимый реквизит через СтрЧислоВхождений, если значение 0, тогда продолжить.

Читайте также:  Самсунг не работает кнопка возврата
sernikant
06.12.2018 13:35

Ответ № 5

Попробую Вашу идею. Сам пока решил для себя так. Функцией возвращаю только помеченные значения списков в строку с разделителями, далее по справочнику в цикле проверяю необходимый реквизит через СтрЧислоВхождений, если значение 0, тогда продолжить.

sernikant
06.12.2018 13:36

Ответ № 6

Попробую Вашу идею. Сам пока решил для себя так. Функцией возвращаю только помеченные значения списков в строку с разделителями, далее по справочнику в цикле проверяю необходимый реквизит через СтрЧислоВхождений, если значение 0, тогда продолжить.

sernikant
06.12.2018 13:36

Ответ № 7

Попробую Вашу идею. Сам пока решил для себя так. Функцией возвращаю только помеченные значения списков в строку с разделителями, далее по справочнику в цикле проверяю необходимый реквизит через СтрЧислоВхождений, если значение 0, тогда продолжить.

sernikant
06.12.2018 13:36

Ответ № 8

Попробую Вашу идею. Сам пока решил для себя так. Функцией возвращаю только помеченные значения списков в строку с разделителями, далее по справочнику в цикле проверяю необходимый реквизит через СтрЧислоВхождений, если значение 0, тогда продолжить.

Часто возникают ситуации, когда в 1С 8.3 нужно произвести отбор в таблице определенных строк по определенным критериям. Рассмотрим, как это сделать в динамическом списке и в таблице значений.

Отборы в динамическом списке 1С 8.3

Тут мы имеем два пути: создать отбор на форме списка и установить отбор программно.

Отбор в настройка формы

В конфигураторе добавим динамический список на форму, назначим ему основную таблицу и зайдем в свойства списка. В свойствах есть раздел «Настройка списка», нажмем ссылку «Открыть». Появится такое вот окно:

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

Установка отбора в динамическом списке 1С программно

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

Чтобы отбор заработал, нужно прописать параметры «ЛевоеЗначение», «ВидСравнения» и «ПравоеЗначение». Кроме того необходимо свойство «Использование» установить в «Истина».

Получите 267 видеоуроков по 1С бесплатно:

Таким образом, мы создаем простой отбор. Кроме простого, можно задать условия по нескольким полям. Для этого используем тип данных «ГруппаЭлементовОтбораКомпоновкиДанных»:

Отборы в таблице значений 1С

Тут у нас также имеется несколько вариантов.

  • Можно просто перебрать таблицу в цикле и выбрать нужные строки либо скрыть ненужные. Считаю этот способ самым неоптимальным, но для новичков пойдет.
  • Второй способ – использовать метод таблицы «НайтиСтроки». Иногда очень хороший способ, но есть серьезный недостаток. Это единственный тип для сравнения – «Равно».
  • Третий вариант отбора – мой любимый, так как лишен в итоге всех недостатков. В этом варианте я использую «ПостроительЗапроса». Вот пример:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:

Отбор на форме в поле ввода 1С 8.2 с несколькими значениями

В примере выше мы рассмотрели как устанавливать отбор на форме выбора по конкретному значению. Теперь давайте рассмотрим ситуацию когда нужно подставить несколько значений, это может быть например как массив, так и выгрузка из результата запроса. Это отбор в поле ввода 1с с несколькими значениями.

Для начала получаем форму выбора, в параметрах передаем "Элемент" (владельца), устанавливаем флаг режима выбора. Потом создаем список значений и массив, отмечаем что в качестве отбора когда устанавливается вид сравнения в списке, может присутствовать объект только с типом СписокЗначений. Добавляем элементы в массив, затем этот массив загружаем в СписокЗначений который в следствии мы устанавливаем в отборе. Также не забываем включить флаг использования данного отбора, и установить ВидСравнения.

Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора

Теперь рассмотрим отбор в поле ввода на управляемой форме в 1С 8.3. Найдем на форме интересующий нас элемент, в котором мы будем устанавливать отбор, в нашем случае это поле «Организация». Находим событие «НачалоВыбора», щелкаем на лупу и оказываемся в процедуре. Мы видим параметр ДанныеВыбора, этот параметр имеет тип СписокЗначений. Для того чтобы ограничить выбор необходимыми элементами , нам необходимо заполнить СписокЗначений. Элементы выбрать можем только на сервере, поэтому создаем процедуру с директивой компиляции &НаСервере. В данной процедуре заполняем ДанныеВыбора.

Как альтернатива можно воспользоваться вариантом как описано открытие формы выбора с отбором для 1С 8.2, конечно код возможно чуть-чуть придется модифицировать, но суть остается та же.

У нас вы можете заказать услуги сопровождения 1с баз данных, а также любые доработки для 1с.

Читайте также:  Бюджетный смартфон 2018 рейтинг до 10000
Ссылка на основную публикацию
Adblock detector