1с скд неверные параметры

Обновлено: 06.07.2024

Помогите с запросом в СКД ВЫБРАТЬ ПодразделенияОрганизаций.КодПоОКТМО , Выбор НЕ Выразить(ПодразделенияОрганизаций.Наименование КАК СТРОКА) Есть Null И ПодразделенияОрганизаций.КодПоОКТМО Есть Null Тогда Не работает, и не приводится к СТРОКЕ . Что не так у меня? может с головой? :)

Выразить(ПодразделенияОрганизаций.Наименование КАК СТРОКА) = ПодразделенияОрганизаций.Владелец У тебя Владелец подразделения - строка.

естьnull не нужен нигде вобще, он не для этого. Сравнивать надо одинаковые типы, а не строку со ссылкой.

Это ты что пытаешься сделать? >>Выразить(ПодразделенияОрганизаций.Наименование КАК СТРОКА) = ПодразделенияОрганизаций.Владелец сравниваешь заведомо ссылку с заведомо строкрй или пытаешься присвоить одно другому?:-)

выразить владельца строкой - тоже не рабочий вариант - пробовал

подменить наименование подразделения без ОКТМО владельцем - т.е. головной орг.

Шикарно! он все таки присваивает.:-) А я то надеялся, что ошибаюсь

Выбор Когда НЕ ПодразделенияОрганизаций.Наименование Есть Null И ПодразделенияОрганизаций.КодПоОКТМО Есть Null Тогда ПодразделенияОрганизаций.Владелец ПодразделенияОрганизаций.Наименование Конец

или наоборот Тогда ПодразделенияОрганизаций.Владелец

хотя если .Наименование Есть NULL какой так нафиг владелец.. Вобщем запрос в топку!

ПодразделенияОрганизаций.КодПоОКТМО Есть Null Тогда ПодразделенияОрганизаций.Владелец Конец

Если утебя нулл наименование, то и Владелец темболее нул. Как оно у тебя вообще работает.

Доставка рабочих 78701000 Ларек на ул. Салтыкова-Щедрина 44.01 Овощехранилище29 78701000 Рынок Перекоп овощи 4401 Головная орг 78701000 Ларек на ул. Салтыкова-Щедрина 44.01 Головная орг 78701000 Рынок Перекоп овощи 4401

> До просветления ну тут же нет, в итоге запрос не работает как надо

если пусто октмо "" тогда подставляем владельца если нет - то ссылку-наименование ВЫБРАТЬ ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец, ИЗ

Пустое значение это не NULL, null это отсутствие значения впринципе

у тебя никогда оно не будет null в этом запросе. короче, работает или нет?

проверить строковое поле с переменной длиной строки на пусто = "", так правильно

Как узнать тип ВСЕХ полей справочника (документа - короче метаданные в формулировке 1с) ? в конфигураторе нет некоторых полей а в скд-конструкторе - они есть, но без свойств

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

Параметры обозначаются знаком & после которого следует имя параметра.

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

При построении запроса конструктором на вкладке “Условия” если не стоит галочка “Произвольное”, то конструктор считает что в правом значении параметр и он записывается без символа &.


Таким образом этот блок настраивается в конструкторе.

Если значение параметра не задано, то построение СКД будет невозможно и будет выдана ошибка, поэтому такие параметры называют “обязательными” или “жесткими”.

Выбрать.

Этот блок располагается в запросе типа выборка данных пакета запросов СКД в первом запросе объединения между перечнем полей и “ИЗ” и заключается в фигурные скобки.


Таким образом этот блок настраивается в конструкторе.

При автоматическом заполнении полей набора данных, для не включенных в блок расширения “ВЫБРАТЬ”, добавляются все поля списка выборки и их дочерние поля. Они становятся доступными для выбора, упорядочивания, группировки, отбора. Также добавляются поля, которые упомянуты в параметре “Условия” виртуальных таблиц как доступные для отбора.

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

Блок расширения “ГДЕ” может быть расположен после или вместо обычного блока “ГДЕ” в любом запросе, подзапросе, запросах объединения и заключается в фигурные скобки. Для присвоения отбору псевдонима используется конструкция “КАК”. Псевдоним нужно использовать чтобы отбор производился конструкцией расширения языка запросов, но не происходил автоматически по наименованию поля.

Если автозаполнение полей набора отключено, поля из этого блока попадают в перечень полей набора доступными только для отбора, использование дочерних полей зависит от наличия конструкции “.*”.

Если автозаполнение включено, и это поле включено в блок расширения “ВЫБРАТЬ” тогда настройки обоих блоков объединяются. Если не включено в “ВЫБРАТЬ” то поля попадают доступными для вывода, группировки, отбора и упорядочивания.


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

Также в блоке “ГДЕ” вместо параметра может быть произвольное выражение с использованием конструкции ВЫБОР или параметров со страницы “Параметры” СКД. Правда в последнем случае вид сравнения необходимо указывать конкретно.

Нужно с осторожностью использовать вид сравнения МЕЖДУ поскольку:

Если параметры НачалоПериода и КонецПериода не будут заданы, то система получит документы за весь период.

Если параметры НачалоПериода и КонецПериода будут заданы, то система получит документы за указанный период.

Если какой-то один из параметров не будет задан, то система выдаст ошибку.

Один из вариантов решения это разбить МЕЖДУ на два условия чтобы система не выдавала ошибку в случае одного незаполненного параметра.

Это же замечание относится к любым выражением с использованием нескольких параметров.

Параметры виртуальных таблиц.

В параметрах виртуальных таблиц в отличие от предыдущих блоков, каждый параметр заключается в фигурные скобки. В полях относящихся к периоду название параметра ставится с &. Пример &ДатаНачала. В поле “Условие” параметры оформляются аналогично блоку “ГДЕ”.

Параметры из полей периода попадают на страницу “Параметры” СКД. Если автозаполнение включено и в поле периода параметр не вписан, параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД.


Таким образом, эти параметры заполняются в конструкторе запроса. Для открытия формы “Параметры виртуальной таблицы” нужно выбрать виртуальную таблицу в списке таблиц и нажать выделенную синим кнопку. Также тут у таблиц есть булевый реквизит “Обязательная” и числовой реквизит “Номер группы”. Если признак обязательности таблицы не установлен, то она будет добавляться в результирующий запрос только в случае, когда хотя бы одно поле из нее задействовано в компоновке. Номер группы заполняется для необязательных таблиц и обозначает группу таблиц, которые будут добавлены в результирующий запрос только, когда из этой группы таблиц задействовано хотя бы одно поле.

В параметрах виртуальных таблиц возможно совместное использование “жестких” параметров запросов и “мягких” параметров компоновки данных.

В этом примере если в настройках установлено значение параметра &НачалоПериода, то будет использоваться его значение. В противном случае в качестве значения параметра виртуальной таблицы будет использоваться значение “жесткого” параметра “&Начало”.

Если автозаполнение включено и в поля периода не вписаны “мягкие” параметры компоновки данных то параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД и текст запроса:

будет соответствовать следующему:

В этом случае “мягкие” параметры также будут иметь приоритет над “жесткими”.


Обзорный вид страницы.


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

Строка параметра имеет следующие реквизиты:


Таким же образом можно указать формат числа для численного параметра и длину строки для строкового.

А для того чтобы введенные значения интерпретировались в отчете как начало и конец дня следует в запросе использовать функции НачалоПериода() и КонецПериода() .

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

и в запросе можно было бы писать проще поскольку в параметрах уже будет содержаться начало и конец периода:



Даты начала и конца стандартного периода также содержат и время. ДатаНачала имеет время 00:00:00, а ДатаОкончания 23:59:59. Получится что пользователь выберет стандартный период в “Период” а разработчик будет использовать корректные “ПериодНачало” и “ПериодОкончание”.




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

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



Если Режим редактирования установить Быстрый доступ, то параметр появится на форме.


Если у параметра “Период” представление заполнить строкой “ПеРиОд”, то вместо название будет показано содержания поля представление.

Если у отчета СКД нет формы, то платформа создаст автоматическую, на которой будут табличный документ результата, кнопки управления и быстрые пользовательские настройки.


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


Для этого в созданной форме в конфигураторе вытаскиваем на форму Пользовательские настройки из Компоновщика отчета.


В некоторых случаях параметр не прост, и для его расчета нужен некий алгоритм с циклом или ветвлениями. К примеру если отчет формируем в понедельник то в отчете сравниваются продажи по дням позапрошлой и прошлой недели, а в остальные дни недели сравниваются продажи по дням прошлой и текущей недели. Получается у нас от значения дня недели текущего дня зависит сразу четыре параметра: &НачалоПрошлойНедели, &КонецПрошлойНедели, &НачалоТекущейНедели и &КонецТекущейНедели. А еще нам надо дать возможность пользователю формировать отчет как будто он сформирован вчера или неделю назад. В таком случае мы создаем реквизит формы ТекДата типа Дата. Выводим его на форму. В событии ПриИзменении() пишем.

Таким образом можно программно менять параметры из формы.

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



skype: live:di-sem

@programmist_1C

Запретить СКД изменять запрос. СКД меняет запрос. СКД оптимизирует итоговый запрос.



Сегодня неожиданно столкнулся с такой проблемой. Был очень удивлен.
Сделал сложный запрос в консоли запросов. Этот запрос планировал использовать для отчета СКД.

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

В итоге обрезал место, где скд меняет запрос и через консоль СКД начал мучать отчет.

Вот простейший запрос. 2 временные таблицы и выборка.

Что делает запрос:
Нужно по менеджеру выбрать клиентов, которым он продал на сумму параметра &порогВыручкиПоТорговойТочке. Просуммировать сколько у каждого менеджера таких клиентов.

Как делает:
1 Из регистра накопления "ПродажиОбороты" выбирает записи за определенный период во временную таблицу "ПродажиЗаПериод".
2 Делает выборку Менеджер, Контрагент, Выручка, выч.поле "Торговая точка подходит под категорию"(если сумма выручки больше &порог то 1 иначе 0). Пишет выборку во временную таблицу "Торговые точки".
3 Делает выборку из "торговые точки". Группирует по менеджерам, суммирует поле "ТорговаяТочкаПодходитПодДиректорию".

ПродажиЗаПериод.Контрагент,
СУММА(ПродажиЗаПериод.Выручка) КАК Выручка
ПОМЕСТИТЬ торговыеТочки
ИЗ
ПродажиЗаПериод КАК ПродажиЗаПериод

СГРУППИРОВАТЬ ПО
ПродажиЗаПериод.Менеджер,
ПродажиЗаПериод.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
торговыеТочки.Менеджер КАК Менеджер,
СУММА(торговыеТочки.ТорговаяТочкаПодходитПодКатегорию) КАК ТорговыеТочки
ИЗ
торговыеТочки КАК торговыеТочки

СГРУППИРОВАТЬ ПО
торговыеТочки.Менеджер


Красным я выделил что удалит СКД. Можете сами проверить. Соответственно запрос становится совершенно неправильным.
Теперь выручка считается не по контрагентам, а просто по каждому менеджеру.

СКД изменяет текст запроса

Вот сравнение через блокнот.

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

Искал ответ в интернете.
Предложили такие способы. НЕ ПЫТАЙТЕСЬ ВСЕ ИХ СРАЗУ ПРОВЕРИТЬ, В КОНЦЕ ПРЕДЛОЖУ ПРОСТЕЙШЕЕ РЕШЕНИЕ.

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

Итак простейшее решение.
1 НЕ ДОБАВЛЯТЬ В ВЫБОРКУ ПОЛЯ, КОТОРЫЕ НЕ БУДЕТЕ ИСПОЛЬЗОВАТЬ ДАЛЬШЕ.
2 А КАК ЖЕ ДЕЛАТЬ ГРУППИРОВКУ? ЛЕГКО! ДЛЯ ЭТОГО НЕ НУЖНО ДОБАВЛЯТЬ ПОЛЕ В ВЫБОРКУ. НУЖНО ПРОСТО ПЕРЕЙТИ НА ВКЛАДКУ "ГРУППИРОВКА", ОТКРЫТЬ СПИСОК "ВСЕ ПОЛЯ" И ВЫБРАТЬ НУЖНОЕ ПОЛЕ. ВОТ ТОГДА СКД НЕ БУДЕТ УДАЛЯТЬ ВАШУ ГРУППИРОВКУ!

Очевидно, но т.к. я нигде не нашел такого решения, решил сделать эту статью.

Покажу на этом же примере.

Вот как нужно делать:

Этот запрос СКД не будет оптимизировать, т.к. теперь он сделан корректно.

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

1. Как установить параметр в запросе?

Параметр запроса – это некоторый элемент, который находится внутри функции поиска по базе данных. Рассмотрим пример, как должны быть установлены параметры запроса. Например, пускай нам нужно получить составляющие из перечня-справочника под названием «Еда» красного, жёлтого или зелёного цвета, это будет иметь такой вид:

Как установить параметр в запросе «Красный»

Рис. 1 Как установить параметр в запросе «Красный»

Как установить параметр в запросе желтый

Рис. 2 Как установить параметр в запросе «Желтый»

Как установить параметр в запросе

Рис. 3 Как установить параметр в запросе «Зеленый»

Можно увидеть, что, по факту, все эти запросы одинаковые и разность только в цвете. Это-то и есть наш параметр – та переменная, которую не хотелось бы каждый раз повторять. В вышеуказанном примере параметр – это цвет, дадим ему имя «ВыбранныйЦвет» и поменяем значения цветов на эту переменную внутри запроса. А для того чтобы указать, что это именно параметр, нужно приписать перед именем амперсанд «&», тогда мы сможем задать параметр в запросе:

Как задать параметр в запросе

Рис. 4 Как задать параметр в запросе «ВыбранныйЦвет»

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

Результат неверного параметра в запросе пустой

Рис. 5 Результат неверного параметра в запросе пустой

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

Редактор запросов – панель с текстом запросов

Рис. 6 Редактор запросов – панель с текстом запросов

Система 1С уже узнала параметр внутри запроса и выделила его в соответствующей секции, но пока без значений. Меняем пустое значение запроса, например, на значение «Жёлтый».

панель с текстом запросов

Рис. 7 Смена пустого значения запроса на «Желтый»

Теперь запрос выполнится! Аналогично можно заполнить оставшиеся значения. Так при помощи параметра можно в одном и том же запросе получать результаты, которые отличаются. То есть, главная функция параметров внутри запросов – делать их более обобщёнными. Это особенно актуально в сложных запросах, так как достаточно будет только изменить сам параметр, не меняя весь запрос.

2. Функция параметра «Ссылка»

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

Рис. 8 Ограничение для параметра – значение по ссылке

Наш параметр «ВыбранныйЦвет» из строки превратился в ссылку на какой-то элемент внутри справочника «Цвета», поэтому у пользователя есть возможность изменить параметр и его тип:

Ограничение для параметра

Рис. 9 Изменения типа параметра в 1С

После этого, в момент, когда ведётся выбор значения данного параметра, перед нами появится выпадающий список с перечнем цветов – это функция параметра ссылки.

3. Параметр «Дата»

Допустим, нужен запрос, который будет выбирать заказы клиентов в определённый период. Данный период будет иметь две границы – «НачалоИнтервала» и «КонецИнтервала».

Параметр «Дата»

Рис. 10 Параметр «Дата»

Аналогично выполняем данный запрос и видим, что 1С уже распознала, что у данного параметра тип «Дата». Пусть нам нужны заказы за январь 2014 года, тогда получим:

Параметр «Дата» в 1С

Рис. 11 Пример запроса по параметру «Дата»

Результат запроса с параметром «Дата» будет выглядеть следующим образом:

Результат запроса с параметром «Дата»

Рис. 12 Результат запроса с параметром «Дата»

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

Читайте также: