Как преобразовать число в дату в запросе?
Вообщем в скд в параметрах есть Год - тип число( 4 0 неотрицательное). Так же есть соответственно Параметр Дата. Для него в выражении Нужно задать функцию, которая преобразует Наше число к формату Дата. Как это сделать???
Вообще это делается для красоты, чтобы пользователь вводил Год, а дальше уже за этот год выводился отчет.
PS. ДатаВремя() не подходит, т.к. аргументы могут быть только константами.
Вообще это делается для красоты, чтобы пользователь вводил Год, а дальше уже за этот год выводился отчет.
PS. ДатаВремя() не подходит, т.к. аргументы могут быть только константами.
По теме из базы знаний
- Спуск на уровень СУБД
- Универсальный конструктор отчетов СКД (управляемые формы, тонкий клиент)
- О времени и 1С
- Комплексный контроль остатков. Для одного или сразу нескольких логически связанных регистров накопления. Универсальное решение уровня данных для контроля не только складских остатков
- Переход на Clickhouse для анализа метрик
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) drugoi_mir, Виноват, действительно программисты платформы ниасилили такое простое действие, как подставление полей таблиц в функции, как и многое другое.Тут я был неправ. Однако есть обходное решение:
Сделал с точностью до дня, но принцип общий, ничего не меняется для других вариантов
ВЫБРАТЬ
12 КАК Год,
5 КАК Месяц,
14 КАК День
ПОМЕСТИТЬ ВТДаты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
12,
6,
14
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
13,
12,
31
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТДаты.Год,
ВТДаты.Месяц,
ВТДаты.День,
ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, ВТДаты.Год), МЕСЯЦ, ВТДаты.Месяц), ДЕНЬ, ВТДаты.День) КАК Дата
ИЗ
ВТДаты КАК ВТДаты
ПоказатьСделал с точностью до дня, но принцип общий, ничего не меняется для других вариантов
(16)Ясное дело на клиенте, т.к. там возможностей значительно больше, да и всевозможные проверки введенного значения описать куда проще.
(17) А параметр &Год ты каким образом собрался передавать в скд? Разница лишь в значении, которое будет передано, изначально обработанное на предмет ошибок и типа, или сырое.
(17) А параметр &Год ты каким образом собрался передавать в скд? Разница лишь в значении, которое будет передано, изначально обработанное на предмет ошибок и типа, или сырое.
(16) logos, а зачем нам решать этот вопрос? Я конечно понимаю что совсем правильно решить так чтобы больше этой проблемы ни у кого, никогда и нигде не возникало, но в данном случае, имхо, проще пареной репы, в форме превратить число в дату и подставить в отбор. Но, конечно, можно попробовать решить проблему неправильного мироустройства ;)
(10) mymyka, Опять же, что проще: сделать выражение содержащее параметр в запросе вместо параметра или расколупывать скд, чтоб оно формировалось не штатно, а с предварительно обработанными параметрами? :) Мне так кажется, мой вариант по трудозатратам в разы меньше, а для пользователя одинаково прозрачен.
(23)Этот вопрос уже обсуждался. В вебинаре Гилева на конкретном примере(через консоль СКД) показывается, что отборы все равно приводятся к параметрам в конечном запросе, формируемом на основе макета СКД(который от описанного в макете может отличаться кардинально).
(26)В в случае обычного запроса он как есть передается транслятору(серверу приложения), который получает текст скуль запроса и отправляет его в БД. В СКД же есть макет запроса, который приводится к более менее оптимальному виду на основе введенных данных(в частности отборов) и только потом передается транслятору. И по-этому отборы(трансформированные процессором скд в параметры виртуальных таблиц) применяются именно на стороне СУБД, а не на сервере приложения.
(27) mymyka,
все умные слова означают только:) :
- запросы обрабатывает 1С-сервер и передает их для построения плана запроса в SQL
- запросы СКД обрабатывает предпроцессор СКД, передает в 1С-сервер, а оттуда - для построения плана в SQL
Т.е. в любом случае все проходит через 1С-платформу (а то и кружится там, и не только в предпроцессорах), и только потом выдается в транслятор СУБД. Потом процесс идет в обратном направлении - СУБД выдает данные, 1с-платформа их обрабатывает и возвращает вызвавшему объекту.
И 1с-обработка в любом направлении медленней обработки в СУБД.
Для вот этого надо создавать вебинар? :)
все умные слова означают только:) :
- запросы обрабатывает 1С-сервер и передает их для построения плана запроса в SQL
- запросы СКД обрабатывает предпроцессор СКД, передает в 1С-сервер, а оттуда - для построения плана в SQL
Т.е. в любом случае все проходит через 1С-платформу (а то и кружится там, и не только в предпроцессорах), и только потом выдается в транслятор СУБД. Потом процесс идет в обратном направлении - СУБД выдает данные, 1с-платформа их обрабатывает и возвращает вызвавшему объекту.
И 1с-обработка в любом направлении медленней обработки в СУБД.
Для вот этого надо создавать вебинар? :)
(28)Я хз как еще объяснить.
Во-первых, это был только один из огромного списка вопросов по СКД, рассмотренных в том вебинаре.
Во-вторых, время на трансляцию запроса из "1Сного" в "скульный" ничтожно мало и им можно пренебречь, как и формирование оптимального текста "1Сного" запроса из макета. Существенное время занимает обработка выборки на предмет условий "ГДЕ бла бла бла" на сервере приложений. Процессор СКД же создает запрос с параметрами виртуальной таблицы, а не примитивными условия ГДЕ, т.о. вся обработка ведется на стороне СУБД и нет никакой "1с-платформа их обрабатывает", там нечего "обрабатывать", выборка содержит именно те данные и именно в тех объемах, что были запрошены.
Во-первых, это был только один из огромного списка вопросов по СКД, рассмотренных в том вебинаре.
Во-вторых, время на трансляцию запроса из "1Сного" в "скульный" ничтожно мало и им можно пренебречь, как и формирование оптимального текста "1Сного" запроса из макета. Существенное время занимает обработка выборки на предмет условий "ГДЕ бла бла бла" на сервере приложений. Процессор СКД же создает запрос с параметрами виртуальной таблицы, а не примитивными условия ГДЕ, т.о. вся обработка ведется на стороне СУБД и нет никакой "1с-платформа их обрабатывает", там нечего "обрабатывать", выборка содержит именно те данные и именно в тех объемах, что были запрошены.
(32) Скуль работает с тем, что ему выдал транслятор запросов. Параметры виртуальной таблицы включаются в скульный запрос, т.к. необходимы при формирование этих самых таблиц, условия - обрабатываются на сервере приложений.
(33) Возьми КонсольСКД да глянь итоговый запрос. Я не Гилев какой-нить, чтобы ванговать текст запроса по ТЗ.
(33) Возьми КонсольСКД да глянь итоговый запрос. Я не Гилев какой-нить, чтобы ванговать текст запроса по ТЗ.
(34) mymyka,
зачем мне глядеть на 1с изнутри 1С, чтобы понять, что на выходе - нет виртуальных таблиц?
Это как раз вам надо смотреть, раз говорите, что SQL работает "с параметрами виртуальных таблиц" (и к чему он эти параметры прикладывает?), да еще и без "примитивных ГДЕ".
К чему сейчас разговоры о "десятках" 1с-преобразований, когда и так ясно, что 1с лопатит запрос, чтобы дать его в ПОНЯТНОЙ (но не оптимальной) форме для СУБД??
вот так берутся и включаются? без образования вложенных подзапросов обычного формата к таблицам "типа виртуальным"?
выборки всегда обрабатываются на 1с-сервере, если только они не настолько "примитивны" (в логике вашей и 1С), что полностью один-в-один ложатся в план запроса SQL.
Я не собираюсь Гилеву в рот смотреть, тем более - он так же обманут недоговорками 1С. Но, в отличие от меня, обманываться рад.
Возьми КонсольСКД да глянь итоговый запрос.
зачем мне глядеть на 1с изнутри 1С, чтобы понять, что на выходе - нет виртуальных таблиц?
Это как раз вам надо смотреть, раз говорите, что SQL работает "с параметрами виртуальных таблиц" (и к чему он эти параметры прикладывает?), да еще и без "примитивных ГДЕ".
Процессор СКД же создает запрос с параметрами виртуальной таблицы, а не примитивными условия ГДЕ, т.о. вся обработка ведется на стороне СУБД
К чему сейчас разговоры о "десятках" 1с-преобразований, когда и так ясно, что 1с лопатит запрос, чтобы дать его в ПОНЯТНОЙ (но не оптимальной) форме для СУБД??
Параметры виртуальной таблицы включаются в скульный запрос, т.к. необходимы при формирование этих самых таблиц
вот так берутся и включаются? без образования вложенных подзапросов обычного формата к таблицам "типа виртуальным"?
условия - обрабатываются на сервере приложений
выборки всегда обрабатываются на 1с-сервере, если только они не настолько "примитивны" (в логике вашей и 1С), что полностью один-в-один ложатся в план запроса SQL.
Я не Гилев какой-нить
Я не собираюсь Гилеву в рот смотреть, тем более - он так же обманут недоговорками 1С. Но, в отличие от меня, обманываться рад.
(35) ты разницу между формированием запроса и транляцией запроса улавливаешь вообще? Не? Я лишь говорю, что СКД оптимально строит "1сный" запрос там, где это возможно(читай используются виртуальные таблицы).
(36) Будет сделано 2 запроса к физическим таблицам в СУБД, а потом результаты обоих перелопачены на сервере приложений согласно связи. Какое это вообще имеет отношение к обсуждаемому вопросу? Мб все таки рассмотрим пример где возможны виртуальные таблицы?
(36) Будет сделано 2 запроса к физическим таблицам в СУБД, а потом результаты обоих перелопачены на сервере приложений согласно связи. Какое это вообще имеет отношение к обсуждаемому вопросу? Мб все таки рассмотрим пример где возможны виртуальные таблицы?
(37) mymyka, А это и есть вполне себе случай виртуальной таблицы, только зашитой не на уровне платформы, как это делается в случае с РН.Остатки(), а на уровне СКД. Если засунуть всё в 1 набор, то будет 1 запрос с нормальным планом, прилетят на сервер предприятия только данные за 1 день по 1 организации. А вот как сейчас работает СКД - прилетит шапка за 1 день, а табличная часть вообще вся, распухнет резко рпхост и потом по мегаэффективному алгоритму будут скомпонованы 2 набора. А так нет, никакого отношения не имеет
(38)Этот запрос у меня по данным за год(1372 РТиУ, в среднем 5 записей ТЧ на документ, отбор по 1 организации из 4) формируется в СКД за 0.798 сек согласно замеру производительности. За 5 лет(8611 РТиУ) формирование занимает 2.148 сек(нелинейный прирост). Я хз где тут "распухший рпхост" и чудовищные таблицы. Более того, в итоговом запросе видно, что СКД исключила из выборки неиспользуемые поля(не указанные в списке отборов или выводимых полей) дабы не создавать лишних соединений, что свидетельствует о более менее "интеллектуальном" подходе к формированию запроса даже в таком простом случае.
(31) mymyka, А вот скажите пожалуйста, какие запросы sql будут созданы если сделать такую схему компоновки:
НаборДанных1 (типа запрос) содержит выборку таблицы шапки документа реализация товаров и услуг с отбором по организации и периоду.
НаборДанных2 (тоже запрос) содержит выборку таблицы товаров документа реализация товаров и услуг без отборов.
Оба эти набора связаны по полю Ссылка.
НаборДанных1 (типа запрос) содержит выборку таблицы шапки документа реализация товаров и услуг с отбором по организации и периоду.
НаборДанных2 (тоже запрос) содержит выборку таблицы товаров документа реализация товаров и услуг без отборов.
Оба эти набора связаны по полю Ссылка.
(19)С примитивными типами вполне справиться можно, особенно если передать форматную строку. Другое дело, что анализ значения внутри запроса нужен исключительно в СКД, которая, кстати, умеет использовать внешние функции в вычисляемых полях. В любом другом случае, проще обработать результат выборки.
8611 РТиУ
Это за 5 лет - право слово смешно. У меня было по 800 РТиУ в сутки стабильно каждый день. И это далеко не самая интенсивная по документообороту база. Естественно Вы не заметили каких либо проблем с памятью. А так, на больших объемах заметно, что СКД тормознее, чем аналогичный отчет, например на построителе.
(44) mymyka, Упираетесь тут Вы. Я уже 2 раза предложил посмотреть формируемые sql запросы, а Вы всё цифрами разбрасываетесь. Естественно кроме замеров времени выполнения Вы покажете счетчики: свободной памяти, процессорного времени, очереди обращения к жесткому диску, предположите где использовались индексы при получении данных, были ли они в кэше и ещё тысячу других причин, по которым нерепрезентативные выборки могут давать поразительно нелогичные результаты?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот