Как найти элемент отбора компоновки данных

Поиск по элементам коллекции набора данных СКД

Я
   Leksus

16.09.11 – 14:11

Например часто возникает такая задача:

необходимо в настройках СКД программно найти и установить поле отбора.

Как это эффективно решать?

У элементов коллекции набора данных СКД нет метода Найти()

Есть возможность получить по индексу, но как получить индекс необходимого элемента?

   also

1 – 16.09.11 – 14:21

Перебор

   Leksus

2 – 16.09.11 – 14:37

(1) печально 🙁

   chingiz

3 – 16.09.11 – 15:24

КоллекцияЭлементовОтбораКомпоновкиДанных (DataCompositionFilterItemCollection)

Индекс (IndexOf)

Синтаксис:

Индекс(<Элемент>)

Параметры:

<Элемент> (обязательный)

Тип: ЭлементОтбораКомпоновкиДанных; ГруппаЭлементовОтбораКомпоновкиДанных. Элемент, индекс которого определяется.

Возвращаемое значение:

Тип: Число.

Описание:

Получает индекс элемента в коллекции.

   Axel2009

4 – 16.09.11 – 15:35

(3) особенно если надо найти по имени

   chingiz

5 – 16.09.11 – 15:36

Минуя индекс – http://1cskd.ru/2010/06/kak_izmenit_otbor_programmno/

   chingiz

6 – 16.09.11 – 15:37

Сам сейчас сижу над подобным. Только не с отбором, а с выбором 8)

   Axel2009

7 – 16.09.11 – 15:42

а с индексом как по имени?

   chingiz

8 – 16.09.11 – 15:48

Да я вот сам бьюсь. Мне нужно получить индекс ГруппыВыбранныхЭлементов и что-то не выходит.

КомпоновщикНастроек.Настройки.Выбор.Элементы[2].Элементы.Получить(ЭлементыФормы.ПолеСписка.ТекущаяСтрока.ПолучитьИдентификатор())

Вот с ПолемСписка все ясно, он берет Текущую Строку и получает индекс, и мы его благополучно пихаем в Получить. Но вот порнографию в виде “Элементы[2]” мне нужно убрать, а то пользователь ведь может передвинуть ГруппуПолей в настройках…

   Axel2009

9 – 16.09.11 – 15:53

а что во 2ом элементе находится?

   Axel2009

10 – 16.09.11 – 15:53

что делать если пользователь “может удалить”?

   chingiz

11 – 16.09.11 – 16:05

Первый это ГруппаВыбранныхПолей, а второй сами поля. Ну дак если удалит, то и поля не будет…значит ошибка 🙂 Мне то не грозит, эта Группа всегда включена и используется….а вот то что ее могут подвинуть, это нужно решить :

   Axel2009

12 – 16.09.11 – 16:08

ну сделай имя группировки. и проверяй по имени

   Робинзон Крузо

13 – 16.09.11 – 16:19

В (1), пожалуй, правильно сказано. Отборов не бывает уж очень много. так что использование перебора в данном случае некритично.

   chingiz

14 – 16.09.11 – 16:27

Мда, что же я на (1) не посмотрел 🙂 Вот и решение в коде:

   Для каждого Элемент из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл

       Если Элемент.Заголовок = “Характер поездок” Тогда

           Индекс = КомпоновщикНастроек.Настройки.Выбор.Элементы.Индекс(Элемент);

       КонецЕсли;

   КонецЦикла;

  

chingiz

15 – 16.09.11 – 16:28

Респект (1) и (13), я уже как только не извращаюсь 2 часа по незнанию 8))

Прочитай, хотя бы, Митичкина “Разработка в системе 1С:Предприятие 8”. Волшебник

Найти отбор в компоновщике настроек

Автор magnifico61, 27 июн 2017, 12:49

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

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

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


искать и анализировать/модифицировать состав отбора, довольно таки муторное дело.
гораздо проще добавить всего одну команду:

КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();

и дальше формируете Отбор так как надо.

если помогло нажмите: Спасибо!


очистить отбор это просто, но не в моем случае, так как клиенту всегда придется добавлять некоторые вещи руками (они могу меняться).
Вышел из положения перебором полей отбора и если есть нужный отбор использую его, если нет создаю новый


Contents

  • 1 Предисловие
  • 2 Фиксированный отбор
  • 3 Исключение определенных группировок из отчета
  • 4 Добавить отбор для пользователя
  • 5 Отборы на форме и в динамических списках
  • 6 Материалы для подготовки

Предисловие

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

После того как вы добавили наборы, определили ресурсы, задали структуру отчета с помощью группировок , можно приступать к настройке фильтров. В СКД это делается на закладке «Отбор», которая доступна или для всего отчета или для определенной группировки.

Новый элемент в список отбора можно добавить несколькими способами – двойной клик по доступному полю, перетаскивание, клавиша в меню:

При этом только через клавишу в меню можно добавить группу в отбор, которая объединяет элементы внутри этой группы по заданному условию (И, ИЛИ).

По умолчанию если элементы отбора не включены ни в какую группу и объединяются с помощью оператора «И».

Вид сравнения в элементе отбора зависит от типа поля (левого значения):

Операции доступные для числа:

Операции доступные для строки:

Для строки добавлены операции – «содержит», «начинается с», «соответствует шаблону» и те же операции с оператором «Не» (Не содержит и т.д.).

Операции доступные для ссылки:

Далее разберем типовые ситуации при использовании отбора

Фиксированный отбор

Самый простой вариант использование отбора – добавить фиксированный отбор, который будет действовать всегда (если конечно пользователь не изменит его в варианте отчета):

Обычно такие отборы имеет смысл переносить в текст запроса. Особенно в том случае, если пользователь не должен его менять вообще ни при каком условии.

Исключение определенных группировок из отчета

Иногда в отчете на 1С СКД возникает необходимость исключить в отчете значения некоторых группировок (колонок или строк). Причем сделать это в запросе не представляется возможным, потому что исключать такие строки возможно только после компоновки.

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

Допустим нам нужно исключить из отчета все строки, в которых итоговое количество по номенклатуре меньше 15. В запросе мы такое условие применить не можем. Установим для этого отбора для группировки «Номенклатура»:

Получим такой отчет:

Отборы на группировках часто используются в отчетах вида «Ведомость по остаткам»:

При использовании группировки по периоду (регистратору) в таких отчетах появляются строки, отвечающие за начальный остаток при использовании даты начала периода отличной от самой ранней. Чтобы убрать такие строки, можно использовать отбор на группировке по регистратору:

Чтобы убрать отбор, выделенный на рисунке на закладке «Другие настройки» для этой же группировки отключим вывод отбора:

Добавить отбор для пользователя

Обычно мы редко используем фиксированные отборы. Чаще нам нужны отборы, которые может изменять пользователь. Можно, чтобы пользователь изменял отборы через функционал 1С СКД «Изменить вариант», но это не совсем верный путь – вариант отчета это скорее постоянный «скелет», который настраивается один раз и потом используется многократно. Отборы же это что-то часто изменяемое, поэтому правильнее редактировать их через механизм пользовательских настроек.

Итак, вернемся к нашему отчету. Допустим нам необходимо добавить в отчет отбор по группе номенклатуры (или по элементу) и чтобы этот отбор был доступен для изменения пользователем.

Добавим для этого отбор на уровне отчета. Вид сравнения по умолчанию сделаем «В группе», отключим по умолчанию использование отбора и в диалоге редактирования пользовательских настроек включим наш отбор в пользовательские настройки.

Перейдем теперь в режим предприятия.

Наш отбор доступен для редактирования на форме. За доступность прямо в форме отчета отвечает «Режим редактирования». Значение «Быстрый доступ» означает, что отбор доступен прямо на форме отчета. Если значение равно «Обычный», отбор доступен через кнопку «Настройки». Как видно на рисунке пользователь может выбирать вариант сравнения, управлять действием (включен / отключен) отбора.

Если вам необходимо установить фиксированный отбор (вид сравнения и правое значение константы), но пользователь должен управлять включением / отключением отбора, тогда вам необходимо заполнить представление отбора в пользовательской настройке:

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

Если вам в отборе нужно изменить представления поля, по которому делается отбор, то для этого есть еще одно представление:

Получается вот так:

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

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

Отборы на форме и в динамических списках

Как известно, в 1С СКД используется не только в отчетах, но и в формах, содержащих динамические списки. У динамического списка есть несколько свойств, которые относятся к СКД. Среди этих свойств имеется свойство «Отбор» с типом «ОтборКомпоновкиДанных». Чтобы установить отбор в динамическом списке есть два способа. Первый способ – передать отборы через параметр формы с одноименным названием – «Отбор». Этот параметр является структурой, в которой ключ ссылается на поле, для которого устанавливается отбор. Значение же содержит данные, с которыми производится сравнение. Можно также передать в качестве правого значения – массив, фиксированный массив, список значений. В этом случае вид сравнения равняется «ВСписке», для одиночного элемента вид сравнения устанавливается как «Равно». Этот способ ограничен в возможностях – с его помощью нельзя накладывать сложные условия с операторами «И» и «ИЛИ», нельзя использовать виды сравнения кроме двух указанных.

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

Второй способ – непосредственное редактирование отбора в динамическом списке или в компоновщике. Обычно в типовых конфигурация для этого есть ряд методов и функций для установки таких отборов.

Например, вызов основного метода для установки отбора выглядит так:

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, «Ссылка», Параметры.ДобавитьДля, ВидСравненияКомпоновкиДанных.НеРавно);

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

Функция ДобавитьЭлементКомпоновки(ОбластьДобавления,

                                    Знач ИмяПоля,

                                    Знач ВидСравнения,

                                    Знач ПравоеЗначение = Неопределено,

                                    Знач Представление = Неопределено,

                                    Знач Использование = Неопределено,

                                    знач РежимОтображения = Неопределено,

                                    знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт

    Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);

    Элемент.ВидСравнения = ВидСравнения;

    Если РежимОтображения = Неопределено Тогда

        Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

    Иначе

        Элемент.РежимОтображения = РежимОтображения;

    КонецЕсли;

    Если ПравоеЗначение <> Неопределено Тогда

        Элемент.ПравоеЗначение = ПравоеЗначение;

    КонецЕсли;

    Если Представление <> Неопределено Тогда

        Элемент.Представление = Представление;

    КонецЕсли;

    Если Использование <> Неопределено Тогда

        Элемент.Использование = Использование;

    КонецЕсли;

    Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда

        Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;

    ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда

        Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля;

    КонецЕсли;

    Возврат Элемент;

КонецФункции

В форме содержащей динамический список также как в отчете на СКД, возможно настроить пользовательский отбор. Как это можно сделать показано на рисунке:

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

В режиме предприятия это будет выглядеть следующим образом:

Материалы для подготовки

Отборы в отчётах. Нюансы работы компоновщика настроек

Особенности использования отборов в системе компоновки данных

Курс по СКД

 +1 

   

Распечатать

Как программно Изменить Отбор в отчете СКД

Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция:

Код 1C v 8.х

 КомпоновщикНастроек.Настройки.Отбор.Элементы   

в отличие от аналогичной коллекции параметров, не имеет метода Найти(). Можно конечно изменять отбор «в лоб», т.е. по индексу, но это не есть хорошо. Самый оптимальный вариант, обходить все поля отбора в цикле.

Приведу пример универсальной функции для изменения отбор компоновки данных:

Код 1C v 8.х

 //Ищет отбор в компоновщике настроек по параметрам, заданным через
//"СоответствиеПоискаОтбора", и заменяет
//на отбор с параметрами, указанными в "СоответствиеНовогоОтбора"
Процедура ИзменитьОтбор(ЭлементСтруктуры,
СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт

Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
Отбор = ЭлементСтруктуры.Настройки.Отбор;
Иначе
Отбор = ЭлементСтруктуры;
КонецЕсли;

Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка") Тогда
нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение);
Иначе
нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"];
КонецЕсли;

Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда
нВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Иначе
нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"];
КонецЕсли;

Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда
нИспользование = Истина;
Иначе
нИспользование = СоответствиеНовогоОтбора["Использование"];
КонецЕсли;

нЗначение = СоответствиеНовогоОтбора["Значение"];

ТолькоПоЛевомуЗначению = Ложь;
Если СоответствиеПоискаОтбора = Неопределено Тогда
ТолькоПоЛевомуЗначению = Истина;
КонецЕсли;

сЛевоеЗначение = СоответствиеПоискаОтбора.Получить("ЛевоеЗначение");
Если сЛевоеЗначение = Неопределено Тогда
сЛевоеЗначение = нПоле;
КонецЕсли;

сВидСравнения = СоответствиеПоискаОтбора.Получить("ВидСравнения");
Если ВидСравнения = Неопределено Тогда
сВидСравнения = ВидСравнения;
КонецЕсли;

сИспользование = СоответствиеПоискаОтбора.Получить("Использование");
Если сИспользование = Неопределено Тогда
сИспользование = нИспользование;
КонецЕсли;

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

Если НайденныйОтбор <> Неопределено Тогда
НайденныйОтбор.ЛевоеЗначение = нПоле;
НайденныйОтбор.Использование = нИспользование;
НайденныйОтбор.ВидСравнения = нВидСравнения;
НайденныйОтбор.ПравоеЗначение = нЗначение;
КонецЕсли;

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

Пример вызова процедуры:

Код 1C v 8.х

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

СоответствиеНовогоОтбора = Новый Соответствие;
СоответствиеНовогоОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("Наименование"));
СоответствиеНовогоОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.Содержит);
СоответствиеНовогоОтбора.Вставить("Использование",Истина);
СоответствиеНовогоОтбора.Вставить("Значение","бла-бла-бла");

ИзменитьОтбор(КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);

Автор: also

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

    Код следующий:

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

    — Объединение сообщений, 17 авг 2016

    Набор данных первой (основной) схемы представлен следующим запросом

    ВЫБРАТЬ
        ЕС_ПартииТоваров.Номенклатура.ЕС_Менеджер КАК Менеджер,
        ЕС_ПартииТоваров.Номенклатура КАК Номенклатура,
        ЕС_ПартииТоваров.Регистратор,
        ЕС_ПартииТоваров.Количество,
        ЕС_ПартииТоваров.Стоимость КАК Себестоимость,
        ЕС_ПартииТоваров.СтоимостьПродаж КАК Выручка,
        ЕС_ПартииТоваров.Период КАК Период
    ПОМЕСТИТЬ Продажи
    {ВЫБРАТЬ
        Номенклатура.*,
        Период,
        Менеджер.*}
    ИЗ
        РегистрНакопления.ЕС_ПартииТоваров КАК ЕС_ПартииТоваров
    ГДЕ
        (ЕС_ПартииТоваров.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
                ИЛИ ЕС_ПартииТоваров.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияВРозницу))
    {ГДЕ
        ЕС_ПартииТоваров.Номенклатура.*,
        (ЕС_ПартииТоваров.Период МЕЖДУ &ДатаН И &ДатаК),
        ЕС_ПартииТоваров.Номенклатура.ЕС_Менеджер.* КАК Менеджер}
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Продажи.Менеджер КАК Менеджер,
        Продажи.Номенклатура КАК Номенклатура,
        Продажи.Регистратор,
        Продажи.Количество,
        Продажи.Себестоимость,
        Продажи.Выручка,
        Продажи.Период
    {ВЫБРАТЬ
        Менеджер.*,
        Номенклатура.*}
    ИЗ
        Продажи КАК Продажи
    {ГДЕ
        Продажи.Менеджер.*,
        Продажи.Номенклатура.*}

    — Объединение сообщений, 17 авг 2016

    Вроде бы все поля определены, всё на месте, но…

    Последнее редактирование модератором: 23 авг 2016
  2. Неужели никто не сталкивался?


  3. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.888
    Симпатии:
    1.029
    Баллы:
    204

    А если взять и скопировать все элементы пользовательских настроек в свою ТЗ и уже из этой ТЗ заполнять отбор?

    Копировать, это всмысле сделать что-то вроде:

    Для Каждого ТекЭлемент ИЗ КоллекцияЭлементов ЦИкл

    ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), ТекЭлемент);

    КонецЦикла

  4. Левое значение отбора от этого все равно не появится:) Будет ошибка: “глобальный отбор должен обязательно использовать поля”

  5. Решение найдено, тему можно закрывать.


  6. adc3

    Offline

    adc3

    Регистрация:
    22 сен 2016
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1

    Добрый день! Столкнулся с точно такой же проблемой, а именно: ЛевоеЗначение во всех элементах отбора пользовательских настроек СКД всегда равно “Неопределено”.

    Пожалуйста, прошу поделиться найденным решением.)


  7. adc3

    Offline

    adc3

    Регистрация:
    22 сен 2016
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1

    Сам спросил – сам ответил, как говорится…

    Итак, для таких же незнающих, как я: элементы настроек и элементы пользовательских настроек СКД связаны между собой свойством ИдентификаторПользовательскихНастроек. Достаточно найти методом перебора ЛевогоЗначения нужный элемент отбора в не-пользовательских настройках (а в них с ЛевымЗначением все в порядке), а затем найти соответствующий ему элемент пользовательских настроек по вышеупомянутому идентификатору.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Добавить комментарий