1с неверные параметры началопериода
ВЫБРАТЬ
БигС.Док КАК Док,
БигС.Номер КАК Номер,
БигС.Дата КАК Дата,
ЕстьNULL(БигС.Дата,ДАТАВРЕМЯ(0001,01,01,0,0,0)),
НАЧАЛОПЕРИОДА(ЕстьNULL(NULL,ДАТАВРЕМЯ(0001,01,01,0,0,0)), ДЕНЬ) КАК Пр
ИЗ
(ВЫБРАТЬ NULL Док,NULL Номер,NULL Дата) КАК БигС
Док Номер Дата Поле1 Пр
NULL NULL NULL 01.01.01 0:00:00 01.01.01 0:00:00
Если поменять на НАЧАЛОПЕРИОДА(ЕстьNULL(БигС.Дата, .
то пишет: Неверные параметры "НАЧАЛОПЕРИОДА", НАЧАЛОПЕРИОДА(>ЕстьNULL(БигС.Дата,ДАТАВРЕМЯ(0001,01,01,0,0,0)), ДЕНЬ) КАК Пр
В третьем поле NULL, в четвертом поле функция прекрасно работает, в пятом с прямым указанием NULL тоже работает.
Вопрос: Чё ему надо.
Запрос строится в цикле в зависимости от различных условий. Пустой запрос нужен для обозначения полей в объединении.
Изначально было НАЧАЛОПЕРИОДА(БигС.Дата, ДЕНЬ). Работает. Но если ничего не объединялось, а был только пустой запрос, то вылезла ошибка. Поставил ЕстьNULL, тоже самое. Остальное в (0).
Немного повторюсь: "В третьем поле NULL, в четвертом поле функция прекрасно работает, в пятом поле с прямым указанием NULL тоже работает. "
(8) Я прекрасно понимаю, что НГ не я один встречал, так что сейчас это норм. Почитайте, пожалуйста, (0) :)))
Есть простой запрос.
Возращает.
Если поменять.
то ошибка.
У Вас в (7) пункт номер 2 из (0) выполняется
(9) Вот именно, что НГ. Нужно думать, что требуешь от программы.
(10) Ух ты. Спасибо, добрейший! В (6), вроде, логично все показалось - в поле установил NULL, потом из него дату сделал. А, оказывается, нужен был "датированный" NULL. Понятно, что тип значения в поле обозначить - не лишнее. Но ведь на выходе я свое поле делаю, на основании данных из другого поля по принципу ВЫБОР КОГДА NULL.
(12) Д вот. При чем конструкция
ВЫБОР КОГДА БигС.Дата Есть NULL ТОГДА ДАТАВРЕМЯ(0001,01,01,0,0,0) ИНАЧЕ НАЧАЛОПЕРИОДА(БигС.Дата, ДЕНЬ) КОНЕЦ
ту же ошибку выдает, ругаясь на текст после ИНАЧЕ. Хотя тут вообще конкретно все указано.
В итоге вообще ушел от ЕстьNULL, типизируя в итоговом поле
(13) После иначе у тебя идёт НАЧАЛОПЕРИОДА(БигС.Дата, ДЕНЬ). Но нигде не сказано, какого типа БигС.Дата, и что это вообще дата. Поэтому НачалоПериода и ругается
Описание ошибки:
Платформа 1С: Предприятие 8.3.16.1063. Клиент-серверный вариант работы базы. Конфигурация не указана, т.к., забегая вперед, не в ней проблема.
Столкнулся с проблемой при реализации отчета на СКД. При этом, как привычно - запрос для сбора данных тестировался с помощью обработки "Консоль запросов" для 1С 8. Удивительно, но получилось так, что выводимые данные результата запроса в консоли и реализованном отчете отличались. В консоли результат был верный, в СКД - не верный.
В частности, на примере, видно, что сумма из колонки "Полная оплата" в результате запроса консоли в результате отчета на СКД содержится в колонке "Без оплаты".
Было предположено, что возможно интерпретатор СКД и консоли все-таки по-разному воспринимают текст запроса. Т.е. СКД что-то еще проделывает с запросом, в результате чего получается, что в 1С 8 один и тот же запрос возвращает разные данные в консоли и СКД.
Ниже была получена еще одна подсказка, указывающая на проблему в моем случае и примерный вариант решения проблемы различия данных результата запроса в консоли и СКД
В моем случае "хитрым полем" оказалось не Минимум(), а Максимум() для поля с типом значений "Дата" (дата со временем): МАКСИМУМ(РасчетыСКонтрагентамиОбороты.Период) КАК Период
На скрине ниже видно, что СКД его не обрабатывает прямо совсем.
Вариант решения проблемы предполагался в том, чтобы заменить временную таблицу, т.к. именно временные таблицы СКД и преобразует, на вложенный запрос. И, как видно на скрине примера, как раз выражение Максимум() сдержится в тексте запроса, который помещается во временную таблицу. Как известно, вложенные запросы по методике - это наименее производительный результат для СКД, чем временные таблицы, но других очевидных вариантов не оставалось. Но вариант с вложенным запросом не решил проблему. Хотя некоторым помогает решить.
В моем запросе использовались таблицы оборотов регистров, но параметры в них не были указаны, т.к. подразумевалось, что выборка должна осуществляться за все время. Но, как отмечено в комментарии на скрине выше, СКД подставляет параметры &НачалоПериода и &КонецПериода все равно. Ситуацию усугубило (в плане поиска корня проблемы) то, что в используемом запросе уже использовались параметры с этими же названиями в других временных таблицах. После замены виртуальных таблиц оборотов регистров, на физическую таблицу, у которой нет виртуальных параметров, результат вывода данных в СКД стал таким же, как и в консоли запросов. Т.е. срабатывала ненужная выборка по периоду из-за одноименных параметров запроса &НачалоПериода и &КонецПериода и параметров виртуальной таблицы оборотов регистра накопления, хотя они явно и не указывались:
Хоть предыдущие варианты, кроме последнего, и не помогли решить конкретную проблему и не помогли, но их описание может помочь Вам в решении проблемы, т.к. они из наиболее встречающихся.
Ошибка при вычислении параметра "НачалоПериода"
: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: : Процедура или функция с указанным именем не определена (НачалоПериода)
Ошибка при вычислении параметра "КонецПериода"
: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: : Ожидается символ ')'
Вот штатный отчет из УПП 1.3 , в конфигураторе и в штатной консоле СКД он открывается без проблем, но при загрузке в Вашу консоль СКД и затем переход в консоль запросов появляется ошибка:
Ошибка при вычислении параметра "ДатаПослеАктуальности"
: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: : Процедура или функция с указанным именем не определена (ДОБАВИТЬКДАТЕ)
Можно ли доработать связке "Консоль СКД" "Консоль запросов"?
В штатной консоли СКД, после перехода в консоль запросов, появляется закладка "Компоновка данных", на которой можно определять директивы компоновки данных (которые в фигурных скобках (если нужно, то я могу дать описание что за что отвечает)
А у вас этой закладки нет, но есть закладка "Итоги" или закладка "Построитель"
В приведённом примере "конфигурация не важна"
В любом отчете СКД в параметрах используйте "выражение" - ДОБАВИТЬКДАТЕ(Параметры.Период, "секунда", 1)
И Вы получите диагностику приведённую в моём постинге
Ошибка при вычислении параметров СКД: : Ошибка при вызове метода контекста (Выполнить): Ошибка компоновки макета: Ошибка в выражении: Неверные параметры "ДобавитьКДате"
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
<(49, 21)>: Неверные параметры "Перечисление.ПричиныИзмененияСостояния.Увольнение"
КОНЕЦ <> ЗНАЧЕНИЕ(>Перечисление.ПричиныИзмененияСостояния.Увольнение)
К сожалению :-(
СКД работает либо с источником типа "Объект" (было бы классно, если бы ИР позволяло бы работать в таком варианте - если позволяет, подскажите плз где посмотреть пример такой работы), или с источником типа "Запрос" или "Объединение" (но они принципиально базируются на метаданных конфигурации).
Итак, для воспроизведения проблемы мы берём любую конфу, в которой есть хотя бы один простой периодический регистр сведений (хотя бы с одним измерением и хотя бы одним ресурсом).
Запускам приложение, переходим в консоль СКД ИР и проверяем релиз
Далее создаем отчет "Простой отчет" в котором (для простоты) сделаем все "ручками".
1. Создаем источник "ПростойРС" и переходим в конструктор запроса (обращаю внимания, что у нас сейчас запустился штатный конструктор СКД и из него будет запускаться штатный конструктор запроса).
В конструкторе запроса выбираем наш простой периодический регистр сведений (виртуальную таблицу срез последних (обращаем внимание, что закладки "Компоновка данных" и "Характеристики" присутствуют так как это "стандартный" конструктор запроса)
Говорим ОК и возвращаемся обратно в стандартный конструктор СКД
Теперь переходим на закладку "Параметры" и к параметру "Период" добавляем ещё один параметр "ДатаПослеАктуальности" с выражением СКД - ДобавитьКДате(&Период,"Секунда", 1)
И говорим ОК (возвращаемся в консоль СКД ИР)
Теперь я хучу внести изменения в запрос (например наложить какой-нибудь отбор. Я перехожу в окно запросы (я правильно всё делаю?) и двойным кликом щёлкаю на ветке "ПростойРС".
Я попадаю в консоль запросов (ИР) в котором вызываю контекстное меню конструктора запросов
Из которого я попадаю в Конструктор запросов в котором закладки "Итого" и "Построитель", но нет закладок "Компоновка данных" и "Характеристики".
Итак, повторяю свой вопрос заданный выше - возможно ли доработать связку "Консоль СКД ИР" "Конструктор запроса ИР" до полнофункциональной работай с СКД?
ПыСы. Но вполне возможно, что я где-то что-то делаю не так. Подскажите, я исправлюсь :-)
Параметр в 1С – это некий элемент, принятый функцией. В данной статье поговорим о видах и типах параметров, а также рассмотрим, как задать параметры так, чтобы избежать ошибки «Неверные параметры» в 1С.
1. Как установить параметр в запросе?
Параметр запроса – это некоторый элемент, который находится внутри функции поиска по базе данных. Рассмотрим пример, как должны быть установлены параметры запроса. Например, пускай нам нужно получить составляющие из перечня-справочника под названием «Еда» красного, жёлтого или зелёного цвета, это будет иметь такой вид:
Рис. 1 Как установить параметр в запросе «Красный»
Рис. 2 Как установить параметр в запросе «Желтый»
Рис. 3 Как установить параметр в запросе «Зеленый»
Можно увидеть, что, по факту, все эти запросы одинаковые и разность только в цвете. Это-то и есть наш параметр – та переменная, которую не хотелось бы каждый раз повторять. В вышеуказанном примере параметр – это цвет, дадим ему имя «ВыбранныйЦвет» и поменяем значения цветов на эту переменную внутри запроса. А для того чтобы указать, что это именно параметр, нужно приписать перед именем амперсанд «&», тогда мы сможем задать параметр в запросе:
Рис. 4 Как задать параметр в запросе «ВыбранныйЦвет»
После этой процедуры пробуем выполнить наш запрос, результат будет пустым и выглядеть так:
Рис. 5 Результат неверного параметра в запросе пустой
Результат запроса пустой по причине того, что в коде не было указано само значение параметра. Выберем имя, для этого потребуется задействовать панель, которая находится над редактором запросов. Внутри данной панели размещен текст запросов:
Рис. 6 Редактор запросов – панель с текстом запросов
Система 1С уже узнала параметр внутри запроса и выделила его в соответствующей секции, но пока без значений. Меняем пустое значение запроса, например, на значение «Жёлтый».
Рис. 7 Смена пустого значения запроса на «Желтый»
Теперь запрос выполнится! Аналогично можно заполнить оставшиеся значения. Так при помощи параметра можно в одном и том же запросе получать результаты, которые отличаются. То есть, главная функция параметров внутри запросов – делать их более обобщёнными. Это особенно актуально в сложных запросах, так как достаточно будет только изменить сам параметр, не меняя весь запрос.
2. Функция параметра «Ссылка»
В этом варианте будет сравниваться в качестве ограничения для параметра не название цвета, а значение по ссылке:
Рис. 8 Ограничение для параметра – значение по ссылке
Наш параметр «ВыбранныйЦвет» из строки превратился в ссылку на какой-то элемент внутри справочника «Цвета», поэтому у пользователя есть возможность изменить параметр и его тип:
Рис. 9 Изменения типа параметра в 1С
После этого, в момент, когда ведётся выбор значения данного параметра, перед нами появится выпадающий список с перечнем цветов – это функция параметра ссылки.
3. Параметр «Дата»
Допустим, нужен запрос, который будет выбирать заказы клиентов в определённый период. Данный период будет иметь две границы – «НачалоИнтервала» и «КонецИнтервала».
Рис. 10 Параметр «Дата»
Аналогично выполняем данный запрос и видим, что 1С уже распознала, что у данного параметра тип «Дата». Пусть нам нужны заказы за январь 2014 года, тогда получим:
Рис. 11 Пример запроса по параметру «Дата»
Результат запроса с параметром «Дата» будет выглядеть следующим образом:
Рис. 12 Результат запроса с параметром «Дата»
В данной статье были рассмотрены параметры в системе 1С, видов параметр внутри запроса, параметр с типом «Дата», параметры с типом «Ссылка», аналогично проводится работа с параметрами в списках таблиц и таблиц со значениями. Ошибка в них возникает в случае задания невозможного названия, типа, их несоответствий, пунктуационных ошибок в коде программы.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Параметр в 1С – это некий элемент, принятый функцией. В данной статье поговорим о видах и типах параметров, а также рассмотрим, как задать параметры так, чтобы избежать ошибки «Неверные параметры» в 1С.
1. Как установить параметр в запросе?
Параметр запроса – это некоторый элемент, который находится внутри функции поиска по базе данных. Рассмотрим пример, как должны быть установлены параметры запроса. Например, пускай нам нужно получить составляющие из перечня-справочника под названием «Еда» красного, жёлтого или зелёного цвета, это будет иметь такой вид:
Рис. 1 Как установить параметр в запросе «Красный»
Рис. 2 Как установить параметр в запросе «Желтый»
Рис. 3 Как установить параметр в запросе «Зеленый»
Можно увидеть, что, по факту, все эти запросы одинаковые и разность только в цвете. Это-то и есть наш параметр – та переменная, которую не хотелось бы каждый раз повторять. В вышеуказанном примере параметр – это цвет, дадим ему имя «ВыбранныйЦвет» и поменяем значения цветов на эту переменную внутри запроса. А для того чтобы указать, что это именно параметр, нужно приписать перед именем амперсанд «&», тогда мы сможем задать параметр в запросе:
Рис. 4 Как задать параметр в запросе «ВыбранныйЦвет»
После этой процедуры пробуем выполнить наш запрос, результат будет пустым и выглядеть так:
Рис. 5 Результат неверного параметра в запросе пустой
Результат запроса пустой по причине того, что в коде не было указано само значение параметра. Выберем имя, для этого потребуется задействовать панель, которая находится над редактором запросов. Внутри данной панели размещен текст запросов:
Рис. 6 Редактор запросов – панель с текстом запросов
Система 1С уже узнала параметр внутри запроса и выделила его в соответствующей секции, но пока без значений. Меняем пустое значение запроса, например, на значение «Жёлтый».
Рис. 7 Смена пустого значения запроса на «Желтый»
Теперь запрос выполнится! Аналогично можно заполнить оставшиеся значения. Так при помощи параметра можно в одном и том же запросе получать результаты, которые отличаются. То есть, главная функция параметров внутри запросов – делать их более обобщёнными. Это особенно актуально в сложных запросах, так как достаточно будет только изменить сам параметр, не меняя весь запрос.
2. Функция параметра «Ссылка»
В этом варианте будет сравниваться в качестве ограничения для параметра не название цвета, а значение по ссылке:
Рис. 8 Ограничение для параметра – значение по ссылке
Наш параметр «ВыбранныйЦвет» из строки превратился в ссылку на какой-то элемент внутри справочника «Цвета», поэтому у пользователя есть возможность изменить параметр и его тип:
Рис. 9 Изменения типа параметра в 1С
После этого, в момент, когда ведётся выбор значения данного параметра, перед нами появится выпадающий список с перечнем цветов – это функция параметра ссылки.
3. Параметр «Дата»
Допустим, нужен запрос, который будет выбирать заказы клиентов в определённый период. Данный период будет иметь две границы – «НачалоИнтервала» и «КонецИнтервала».
Рис. 10 Параметр «Дата»
Аналогично выполняем данный запрос и видим, что 1С уже распознала, что у данного параметра тип «Дата». Пусть нам нужны заказы за январь 2014 года, тогда получим:
Рис. 11 Пример запроса по параметру «Дата»
Результат запроса с параметром «Дата» будет выглядеть следующим образом:
Рис. 12 Результат запроса с параметром «Дата»
В данной статье были рассмотрены параметры в системе 1С, видов параметр внутри запроса, параметр с типом «Дата», параметры с типом «Ссылка», аналогично проводится работа с параметрами в списках таблиц и таблиц со значениями. Ошибка в них возникает в случае задания невозможного названия, типа, их несоответствий, пунктуационных ошибок в коде программы.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Читайте также: