Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Отличие отбора от параметра в СКД

Здравствуйте. При создании отчёта в СКД есть 2 вкладки - "отборы" и "параметры". В чём их разница? Нагуглила только отличие на уровне реализации и выполнения запросов к SQL, а чисто в практическом плане? Когда нужно создавать отбор, а когда - задавать параметр?
Ответ: () всё, понял
просто не пользовался таким, сколь извращенные отчеты не писал :)
Вопрос: Как в отчете на СКД параметр привязать к функциональной опции?

Делаю отчет в упр.приложении на СКД. Отчет простой - обороты по регистру Продажи. В регистре Продажи есть измерение - Организация. Соответственно в отчете есть параметр для отбора - Организация.
В конфигурации есть функциональная опция "Учет по нескольким организациям".
Как привязать параметр Организация к этой функциональной опции?
Т.е. чтобы если эта опция отключена, параметр пользователь бы не видел.
Ответ: Еще одна засада обнаружилась с функц.опцией.
В той же конфигуре делаю отчет на СКД по таблице остатков и таблице оборотов регистра Бухгалтерии.
В регистре бухгалтерии есть измерение Организация. Включил его в ту же функц.опцию.
В отчете сделал отбор по организации.
Но в отличии от предыдущего отчета, этот отбор не пропадает, если отключить функц.опцию.
Что не так?
Вопрос: Открыть регистр сведений с отбором

Доброго всем дня!

Для создания документа "Отчет об исполнении мероприятий" хочу предоставить для выбора мероприятия из Регистра сведений с отбором по подразделению и со статусом не равно "выполнен".
Документ "Отчет..." с полями Подразделение и ТЧ "Нарушения"
Регистр Сведений "ХодИсполнения" независимый непериодический
Измерения: СсылкаНаПланМероприятий, Подразделение;
Ресурс: Статус (Перечисление).

Создала форму списка Регистра с названием ФормаВыбора.
Форма открывается, но без отбора
Код 1C
1
2
3
4
5
6
7
8
9
&НаКлиенте
Процедура ВыбратьНарушения(Команда)
    ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина);
    Отбор = Новый Структура; 
    Отбор.Вставить("ОбъектСТУ", Объект.ЗонаОтветственности); 
    ПараметрыПодбора.Вставить("Отбор", Отбор); 
    ФормаПодбора =ОткрытьФорму("РегистрСведений.ХодИсполнения.Форма.ФормаВыбора", ПараметрыПодбора, ЭтаФорма);
    
КонецПроцедуры
Мои попытки побороть:
Как выяснила, значение отбора не передается в регистр.
Попробовала создать Параметр в форме выбора - не получилось передача\прием
В форме выбора создала реквизит ЗонаОтветственности с типом Справочник.Подразделения, чтобы передать в него значение из документа "Отчет..." и
Код 1C
1
2
3
4
5
6
7
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Фрм = РегистрыСведений.ХодИсполнения.СоздатьНаборЗаписей();
    Фрм.Отбор.ЗонаОтветственности.Установить(ЗонаОтветственности);
    Фрм.Прочитать();
КонецПроцедуры
 
Ошибок нет, отбора тоже. В отладчике
Сначала открывает форму регистра, затем - ПриСозданииНаСервере, только потом реквизиту формывыбора присваивается значение реквизита документа "отчет..", и конечно отбора не происходит.

Объясните, пожалуйста, мне на пальцах как должно быть, и я постараюсь понять и сделать)
Спасибо)

Прошу прощения. УФ, 8.3
Ответ: SHIFT_969, спасибо.
Именно так я и делала, создала на форме параметр с типом Справочник.Подразделения
И не получается. Если выбираю из ТЧ документа Мероприятия. С передачей и обработкой параметра не возникает проблемы, все отбирается по Подразделению.
А вот с регистром никак...

Можно конечно не заморачиваться с этим регистром и выбирать из ТЧ документа, но хотелось бы разобраться почему у меня не получается

Добавлено через 15 часов 53 минуты
Получилось с параметром, ошибка была в запросе.
Всем спасибо)
Вопрос: Отчет СКД упр.формы. Как программно добавить условие, чтобы появилось в Настройки-Отбор?

Есть самописный отчет на СКД на управляемых формах.
В нем производится запрос к регистру бухгалтерии по определенному списку счетов.
В модуле объекта отчета в процедуре ПриКомпоновкеРезультата() этот список счетов (МассивСчетов) я формирую программно и передаю его как параметр КомпоновщикНастроек.

    Параметр = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СчетаУчета"));
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = МассивСчетов;
        Параметр.Использование = Истина;
    КонецЕсли;

В запросе в параметрах виртуальной таблицы есть условие:
 Счет В (&СчетаУчета)

А как сделать, чтобы этот список счетов пользователь мог увидеть нажав кнопку "Настройки" во вкладке "Отбор"?
И при необходимости изменить этот список.
Ответ: Нашел одну статейку. Оказывается настройка параметров виртуальных таблиц производится отдельно от отборов.
Т.е. параметр виртуальной таблицы нельзя засунуть в отбор.

Значит, при выполнении отчета, сначала сработает мое программно установленное условие в параметре виртуальной таблицы, а потом, если пользователь вручную установил отбор по  счету, сработает его условие.
Правильно понимаю?
Вопрос: Проблема с отбором в СКД

Привет Всем
в 1С предприятие 8.2 есть "Отчет" универсальный список сотрудников , на форме(обычная форма) добавил реквизит Отдел(Справочник.ПодразделениеОрганизации), в СКД добавил Параметр Отдел что бы делал отбор только по одному подразделению, все работает, в отчете когда заходишь в "Редактировать Структуру Отчета" во вкладке Отбор можно добавить условия то есть в левом поле выбирается "Поле Компоновки Данных" --> "Подразделение" ВидСравнения --> Равно в правом поле "Поле Компоновки Данных" --> Параметр.Отдел, как прописать это условие программно? в Общем модуле(ТиповыеОтчеты)  есть готовая функция:

Функция ДобавитьОтбор(ЭлементСтруктуры, Знач Поле, Значение, ВидСравнения = Неопределено, Использование = Истина) Экспорт
    
    Если ТипЗнч(Поле) = Тип("Строка") Тогда
        Поле = Новый ПолеКомпоновкиДанных(Поле);
    КонецЕсли;
    
    Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
        Отбор = ЭлементСтруктуры.Настройки.Отбор;
    Иначе
        Отбор = ЭлементСтруктуры;
    КонецЕсли;
    
    Если ВидСравнения = Неопределено Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    КонецЕсли;
    
    НовыйЭлемент = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйЭлемент.Использование  = Использование;
    НовыйЭлемент.ЛевоеЗначение  = Поле;
    НовыйЭлемент.ВидСравнения   = ВидСравнения;
    НовыйЭлемент.ПравоеЗначение = Значение;
    Возврат НовыйЭлемент;    
КонецФункции
      
в ЭлементСтруктуры я передаю КомпоновщикНастроек, а вот в "Поле" и в "Значение" как передать "Поле Компоновки Данных"?
Ответ: отбор и параметр!? нафейхоа
Вопрос: динамический список. параметры или отбор?

добрый день всем!

вот задумался над такой вещею, что лучше использовать: устанавливать параметры для динамического списка или юзать отбор?

ситуация:
есть обработка, в ней форма, а на форме динамический список(далее ДС),и вот задача сего ДС показывать остатки товара на разных складах, НО юзеру нужно их увидеть то на одном складу, то на другом, то на всех складах. с запросом все понятно, и мы даем юзеру реквизит для для выбора склада, после того как он его поменяет как лучше, логичнее, правильнее и самое главное быстрее получить данные:

вариант 1 (юзать параметры):
ДС.Параметры.УстановитьЗначениеПараметра("Склад", Склад);

вариант 2 (юзать отбор):
ЭлементОтбора = ДС.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = Склад;


все время юзал вариант 1, и не думал, тупо красивее оно, но вот где-то наткнулся на использование варианта 2 и теперь вот меня МУЧАЮТ И РАЗРЫВАЮТ НА ЧАСТИ сомнения... как быть граждане?)))
Ответ: () Отбор работает с уже полученной из БД выборкой, т.е. все соединения и проч условия наложены и сформировано представление (нечто типа временной таблицы), дальше отборы работают с сим представлением. Объёмы работы по формированию списка меньше или сравним (при простом запросе) с запросом в БД.
Вопрос: Передача параметров в форму выбора.

Прошу подсказки.
Из документа "Реализация товаров и услуг" вызывается форма выбора по договору (ERP). Конфа правленая, сравниваю с типовой. В ОбработкеСозданияНаСервере формы выбора смотрю в отладчике Параметры.Отбор. Никак не могу понять как список отбора формируется - явного вызова этой формы с параметрами нет, в свойстве "СвязиПараметровВыбора" только один элемент отбора, а в Параметры.Отбор уже несколько. Может кто подскажет где искать.
Ответ: () Да, я понимаю что где-то они должны заполняться, но как они называются в реализации (то что есть "Параметры" в выборе)? Смотрю например выбор контрагента, там же должен измениться отбор по контрагенту.
Вопрос: Отбор в подборе номенклатуры.

В форме документа в форме, в структуру добавляю параметр (список номенклатуры по которорй нужно добавить отбор).

Процедура ДействиеПодбор(ТабличнаяЧасть)

    Перем Команда, Валюта;

    РазворачиватьДоКачества = Ложь;
    ЕстьЦена            = мМожноМенятьЦенуВДокументе;
    ЕстьСерия           = Истина;
    Валюта              = ВалютаДокумента;
    СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры;
    Качество            = ?(ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия, Справочники.Качество.Новый, Неопределено);
    ПодбиратьУслуги         = Ложь;
    ЕстьСкладВТабличнойЧасти = мУказаниеСкладовВТЧ;

    Если ТабличнаяЧасть = Товары Тогда

        Команда           = "ПодборВТабличнуюЧастьТовары";
        ИмяТабличнойЧасти = "Товары";

    ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда

        Команда           = "ПодборВТабличнуюЧастьВозвратнаяТара";
        ЕстьСерия         = Ложь;
        ИмяТабличнойЧасти = "Тара";

    ИначеЕсли ТабличнаяЧасть = Услуги Тогда

        Команда                  = "ПодборВТабличнуюЧастьУслуги";
        ЕстьСерия                = Ложь;
        ИмяТабличнойЧасти        = "Услуги";
        Качество                 = Неопределено;
        ЕстьСкладВТабличнойЧасти = Ложь;
        СкрыватьХарактеристику   = Истина;
        ПодбиратьУслуги          = Истина;

    КонецЕсли;

    СписокВидовПодбора = СформироватьСписокЗапросовДляПодбора(ТабличнаяЧасть, РазворачиватьДоКачества);
    ПредставлениеДок   = Метаданные().Представление();

    СтруктураПараметровПодбора = Новый Структура();
    СтруктураПараметровПодбора.Вставить("Команда"            , Команда);
    СтруктураПараметровПодбора.Вставить("СписокВидовПодбора" , СписокВидовПодбора);

    // Параметры запросов.

    ВременнаяДатаРасчетов = ?(НачалоДня(Дата) = НачалоДня(ТекущаяДата()), Неопределено, Дата);
    СтруктураПараметровПодбора.Вставить("ДатаРасчетов"         , ВременнаяДатаРасчетов);
    СтруктураПараметровПодбора.Вставить("Склад"                , Склад);
    СтруктураПараметровПодбора.Вставить("ТипЦен"               , ТипЦен);
    СтруктураПараметровПодбора.Вставить("ДоговорКонтрагента"   , ДоговорКонтрагента);
    СтруктураПараметровПодбора.Вставить("Контрагент"           , Контрагент);
    СтруктураПараметровПодбора.Вставить("Сделка"               , Сделка);
    СтруктураПараметровПодбора.Вставить("Организация"          , Организация);
    СтруктураПараметровПодбора.Вставить("Качество"             , Качество);
    СтруктураПараметровПодбора.Вставить("СпособЗаполненияЦен"  , СпособЗаполненияЦен);
    СтруктураПараметровПодбора.Вставить("ЕстьЦена"             , ЕстьЦена);
    СтруктураПараметровПодбора.Вставить("ЕстьСерия"            , ЕстьСерия);
    СтруктураПараметровПодбора.Вставить("ВалютаДокумента"      , Валюта);
    СтруктураПараметровПодбора.Вставить("РазворачиватьДоКачества", РазворачиватьДоКачества);
    СтруктураПараметровПодбора.Вставить("СкрыватьХарактеристику" , СкрыватьХарактеристику);
    СтруктураПараметровПодбора.Вставить("ИспользоватьГруппуДоступности", Истина);
    СтруктураПараметровПодбора.Вставить("ПодбиратьУслуги"        , ПодбиратьУслуги);
    СтруктураПараметровПодбора.Вставить("Заголовок", "Подбор номенклатуры в документ " + 
                                        ПредставлениеДок + " № " + Номер + " (" + ИмяТабличнойЧасти + ")");
    СтруктураПараметровПодбора.Вставить("УсловиеПродаж"        , УсловиеПродаж);
    СтруктураПараметровПодбора.Вставить("ЕстьСкладВТабличнойЧасти", ЕстьСкладВТабличнойЧасти);
    СтруктураПараметровПодбора.Вставить("ВременныеТаблицы",ОбработкаТабличныхЧастей.СтруктураДляРасчетаРезерваПриПодбореНоменклатуры(ЭтаФорма, Истина, "Сделка"));
    //Тут добавляю список!!!

    Если ДоговорКонтрагента.Спецификация.Количество() > 0 Тогда
        Список = Новый СписокЗначений;
        Для Каждого Стр ИЗ ДоговорКонтрагента.Спецификация Цикл
            Список.Добавить (Стр.Номенклатура);
        КонецЦикла;
        СтруктураПараметровПодбора.Вставить("СписокОтбора",Список);
    КонецЕсли;
    //Тут добавляю список!!!

    РаботаСДиалогами.ОткрытьПодборНоменклатуры(ЭтаФорма, СтруктураПараметровПодбора, Метаданные());

КонецПроцедуры// ДействиеПодбор()



В обработке, подборНоменклатуры в процедуре - ОткрытьПодборНоменклатуры. Нахожу свой переданный параметр СписокОтбора. А дальше,НЕ МОГУ НАЙТИ ОТБОР В "ФормаПодбора", или не там смотрю? Как добратся до отбора?  


    // Открываем форму подбора.

    ФормаПодбора = Обработки.ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ФормаДокумента, ФормаДокумента);
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметров;
    //ТУТ

    Если ЗначениеЗаполнено(СтруктураПараметров.СписокОтбора) Тогда
        
НЕ МОГУ НАЙТИ ОТБОР В "ФормаПодбора", или не там смотрю? Как добратся до отбора?
    КонецЕсли;    
    //ТУТ

    ФормаПодбора.Открыть();
Ответ: ВСЕ НАШЕЛ!!! ПАРДОН РЕБЯТ!!!
В ДеревоНоменклатуры было.

ФормаПодбора.ДеревоНоменклатуры.Отбор
Вопрос: Поле выбора отбора в отчёте СКД

Приветствую ребята, вопрос возник. Хочу вывести поле выбора отбора в отчёте, но что-то стопорится у меня это дело, нужен ваш совет...

Для поля контрагенты внёс код такой, он делает внутренний отбор, а как для поля слева отобразить ВидСравнения и привязать его к Пользователям?

1C
1
2
3
4
5
6
7
8
9
10
11
Процедура ПользователиПриИзменении(Элемент) Экспорт
    
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Пользователи"));
    Параметр.Значение = Пользователи;
    Параметр.Использование = Истина;
 
    ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтветственныйЗаОтветНаЗапрос");
    ЭлементОтбора.ПравоеЗначение = Пользователи;
КонецПроцедуры
Ответ: Dethmontt, убираю код, есть только СКД и поле отборов на форме - пустой отчёт...

Добавлено через 1 час 50 минут
Dethmontt, разобрался, почему пустой отчёт при отборе скд был, стояло условие в запросе скд по пользователям - удалил его и всё заработало. Благодарю за подсказки)
Вопрос: Псевднонимы в параметрах вирт.таблицы оборотов рег.накопления

Здравствуйте.

Столкнулся с задачкой доработки типового отчета, для решения задачи нужно было к типовому запросу сделать объединение с другим запросом по оборотному регистру накопления.
Запрос я написал, данные формировались, но при попытке установки отбора по контрагенту отбор устанавливался только на данные типового запроса, а на данные идущего после "ОБЪЕДИНИТЬ ВСЕ" без учета отбора. Парился несколько часов, искал причину, в конце концов более опытный коллега подсказал, что дело в псевдонимах, указываемых в параметрах вирт. таблицы оборотов в фигурных скобках, т.е.:

ВЫБРАТЬ ...

ИЗ
		РегистрНакопления.Выручка.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, Авто, {(ВидЗапаса.Поставщик).* КАК Поставщик}) КАК Таб1
...


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

Так вот, я так и не понял, где эти параметры указываются в конструкторе или это можно установить только при ручной корректировке запроса?
Ответ:
автор
Скорее всего закладка в компоновке - таблица, а в ней маленькая кнопочка "параметры виртуальной таблицы".


Действительно, не заметил эту кнопочку, буду знать. Всем спасибо.