Сделайте запрос чтобы он выдавал курс валюты на дату документа поступление товаров в разрезе товаров, часто спрашивают и по дате планирования по этой поставке. Спасибо.
Немного искусственная задачка. Можно условие перефразировать на выбрать два последних курса в разрезе валют. Завтра могут решить выбрать три или четыре последних курса. Проще выбрать все курсы, сделать Итоги с сортировкой убывания по периоду. Потом в цикле обойти выборку по группировке валюта и выводить столько сколько нужно последних курсов.
@@domrachevconsulting привет. Я ведь указал, что условие по валюте нужно наложить. Так что выведет две записи по одной валюте. Если нужно по нескольким валютам получить, что можно через конструкцию объединить все это сделать. Сортировки можно не бояться, в таблице есть индекс по периоду.
@@РусланАбиев-ю4х Добрый день. Пожалуйста. Приведите пример. (сюда даже вставьте - если все верно то перезапишу видео). За год было столько хейта - и никто толком ничего не выдал - я бы только рад хорошему решению. Пока работы на два месяца вперед - не смогу уделить время преверить вашу идею (еще раз повторю - пишут комментарии - и они ни о чем).
@@domrachevconsulting ВЫБРАТЬ ПЕРВЫЕ 2 КурсыВалют.Валюта КАК Валюта, КурсыВалют.Курс КАК Курс, КурсыВалют.Период КАК Период ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Валюта = &Евро ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 2 КурсыВалют.Валюта, КурсыВалют.Курс, КурсыВалют.Период ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Валюта = &Доллар УПОРЯДОЧИТЬ ПО Валюта, Период УБЫВ
Пока не работаю программистом, надеюсь устроиться стажером. Но хочу выдать свой вариант данного решения, так как в задаче нет конкретизации с какой таблицы брать: или основной таблицы или из срезов. Я взял из основной. Итак текст запроса : ВЫБРАТЬ ПЕРВЫЕ 2 КурсыВалют.Период КАК Период, КурсыВалют.Валюта КАК Валюта ПОМЕСТИТЬ ВременнаяТаблица ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Период < &Дата УПОРЯДОЧИТЬ ПО Период УБЫВ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВременнаяТаблица.Период КАК Период, ВременнаяТаблица.Валюта КАК Валюта, КурсыВалют.Курс КАК Курс ИЗ ВременнаяТаблица КАК ВременнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВременнаяТаблица.Период = КурсыВалют.Период Прошу работающих в этой области спецов дать оценку и прокомментировать.
Предложу свой вариант решения на оценку профессионалов: &НаСервере Процедура ВыполнитьКомандуНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КурсыВалют.Валюта КАК Валюта, | КурсыВалют.Период КАК Период, | КурсыВалют.Курс КАК Курс |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют |ГДЕ | КурсыВалют.Период
А что должно быть по вашему? Выведется одна запись, если у нее период меньше или равен даты среза. Запрос такая штука, что он пытается получить все данные, которые соответствуют условиям, а если их нет.... ну чтож, сам он их придумывать не будет. Если ты думаешь, что будет ошибка, то ее не будет. Просто во втором методе Сообщить выведутся пустые значения.
@@AlexSolk казалось бы, вроде умный человек, а несет какую-то пургу. На будущее, если пытаетесь принизить собеседника, то хотя бы убедитесь, что ваша позиция крепка, а то сейчас это выглядит как попытка пукнуть в лужу. Ну что же, раз кто-то не догнал, когда ему прямо написали ошибку в запросы - объясню, у тебя стоит внутреннее соединение во временной таблицы "ПредпоследниеДаты", при этом условие на больше (а не больше или равно), таким образом если запись в разрезе валюты одна, то в данной ВТ будет просто пусто, так как соединение не отработает, и далее у тебя также используется Внутреннее соединение, что приводит просто к пустому результату запроса. Откуда вы только беретесь доморощенные гуру.
@@Допканал1С прошу прощения. Видео смотрел побыстрому и с телефона, поэтому не заметил, что автор поставил внутренние соединение. Такая грубейшая ошибка мне даже в голову не пришла.
@@domrachevconsulting потому что пока у вас есть валюты, по которым несколько значений курсов, все работает. Введите новую валюту, задав ей только один текущий курс и ваше внутреннее соединение не выведет эту строку. Соединение неверное.
Ну так себе. Оставляем в регистре только курсы на одну дату, и запрос вообще ничего не выдаст. Вообще строк не будет. Я бы вас не взял на работу после такого решения😂
Приглашаем к нам на работу. Удаленно. проектно. до 300 000 рублей в мес. Требования ниже: Грейд: Middle Порядок работы: Удаленно Режим работы: Full time Дата привлечения: 15.01.2024г. Срок привлечения: до 31.12.2024г. Система: 1С: ERP УХ + Горнодобывающее производство Описание проекта: Внедрение 1С: ERP УХ + Горнодобывающее производство ❗Требование к специалисту: Обязательно: Опыт разработки в 1С: Предприятие 8.3, управляемые формы. Опыт разработки внешних механизмов в 1С: Предприятие 8.3 (обработки, отчеты, печатные формы). Опыт работы в проектной команде более 3-х человек разработчиков. Опыт разработки в 1С: Предприятие 8.3 в конфигурации 1С: ERP 2.5 / УТ 11 / КА 2 / ERP УХ 3.1. Опыт работы с хранилищем 1С Приветствуется: Опыт доработки типовых и разработки новых шаблонов RLS. Опыт разработки интеграции конфигураций 1С с другими системами. Опыт работы с Git репозиторием. Опыт решения задач повышения скорости запросов, с использованием профайлера или др. средств MS SQL. Сертификат специалиста по платформе 1С Предприятие 8.3.
Добрый день. Выкладывайте текст запроса. посмотрим.) у меня на сопровождении был код (куда даже я не залазил - работал корректно - все довольны - я занимался другими задачами. Переписывать (делать рефакторинг) все что не нравится - здоровья и денег работодателя не хватит)
Друг, ты два неправильных варианта дал. Второй вариант рабочий, но туда ты впихнул лишнюю таблицу. Ты уже до этого выводил последний срез и предпоследнюю дату. Оставалось только вывести поле предпоследнего курса. А еще есть поверие, что срез последних не стоит использовать никогда. Потому как это влияет на быстродействие системы. Быстрее отработает запрос с выбором максимальной даты, меньшей даты среза.
Да, я тоже не понял зачем третья таблица если нужный курс уже есть во второй. По поводу поверия, а кто нибудь это вообще обстоятельно тестировал? Есть статьи на тему?
@@ОлегСенченко-е8ч в подробности я не вдавался. Мне когда-то сказали об этом эффекте на одном собеседовании, я потом проверил замер производительности на больших таблицах, разницу заметил.
Нельзя здесь сделать две таблицы (если считаете что можно - предлагайте решения). в вашем решении выше. нельзя вывести курс из-за агрегатной функции МАКСИМУМ!
ВЫБРАТЬ КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Период КАК ПоследнийПериод, КурсыВалютСрезПоследних.Курс КАК ПоследнийКурс, естьNULL(КурсыВалют.Период,ДАТАВРЕМЯ(1,1,1)) КАК ПредПоследнийПериод, естьNULL(КурсыВалют.Курс,0) КАК ПредПоследнийКурс ИЗ (ВЫБРАТЬ КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Период КАК Период, КурсыВалютСрезПоследних.Курс КАК Курс, МАКСИМУМ(КурсыВалют.Период) КАК ПериодДо ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта И КурсыВалют.Период < КурсыВалютСрезПоследних.Период СГРУППИРОВАТЬ ПО КурсыВалютСрезПоследних.Валюта, КурсыВалютСрезПоследних.Период, КурсыВалютСрезПоследних.Курс ) КАК КурсыВалютСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО (КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта И КурсыВалют.Период = КурсыВалютСрезПоследних.ПериодДо)
Ролик можно раза в 2 сократить, если использовать создание запросов с обработкой данных.
Спасибо за комментарий.
@@domrachevconsulting Вам спасибо за ролики.
Сделайте запрос чтобы он выдавал курс валюты на дату документа поступление товаров в разрезе товаров, часто спрашивают и по дате планирования по этой поставке. Спасибо.
Друзья. Скажите, пожалуйста, нужно выкладывать данные обработки куда-нибудь?
Немного искусственная задачка. Можно условие перефразировать на выбрать два последних курса в разрезе валют. Завтра могут решить выбрать три или четыре последних курса. Проще выбрать все курсы, сделать Итоги с сортировкой убывания по периоду. Потом в цикле обойти выборку по группировке валюта и выводить столько сколько нужно последних курсов.
Да. согласен с курсами может и надуманно. С другими данными это может быть нормально. Надо давать зарядку мозгу.
Почему не выводится курс рубля?
Если для валюты всего одна запись в регистре, что будет?
Курс рубля пропал - а это тоже валюта
Отсортировать таблицу регистра по периоду по убыванию и выбрать ПЕРВЫЕ 2 + условие по валюте нужной наложить
Привет. И выведет из 10 валют 2 первые валюты и актуальные курсы на дату)
@@domrachevconsulting привет. Я ведь указал, что условие по валюте нужно наложить. Так что выведет две записи по одной валюте. Если нужно по нескольким валютам получить, что можно через конструкцию объединить все это сделать. Сортировки можно не бояться, в таблице есть индекс по периоду.
@@РусланАбиев-ю4х Добрый день. Пожалуйста. Приведите пример. (сюда даже вставьте - если все верно то перезапишу видео). За год было столько хейта - и никто толком ничего не выдал - я бы только рад хорошему решению. Пока работы на два месяца вперед - не смогу уделить время преверить вашу идею (еще раз повторю - пишут комментарии - и они ни о чем).
@@domrachevconsulting
ВЫБРАТЬ ПЕРВЫЕ 2
КурсыВалют.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс,
КурсыВалют.Период КАК Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Валюта = &Евро
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ПЕРВЫЕ 2
КурсыВалют.Валюта,
КурсыВалют.Курс,
КурсыВалют.Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Валюта = &Доллар
УПОРЯДОЧИТЬ ПО
Валюта,
Период УБЫВ
@@domrachevconsulting
ВЫБРАТЬ ПЕРВЫЕ 2
КурсыВалют.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс,
КурсыВалют.Период КАК Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Валюта = &Евро
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ПЕРВЫЕ 2
КурсыВалют.Валюта,
КурсыВалют.Курс,
КурсыВалют.Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Валюта = &Доллар
УПОРЯДОЧИТЬ ПО
Валюта,
Период УБЫВ
А зачем вам регистр сведений, если вы в конечном итоге лезете в справочник и берете оттуда курс?
Курса нет в справочнике
Пока не работаю программистом, надеюсь устроиться стажером. Но хочу выдать свой вариант данного решения, так как в задаче нет конкретизации с какой таблицы брать: или основной таблицы или из срезов. Я взял из основной. Итак текст запроса :
ВЫБРАТЬ ПЕРВЫЕ 2
КурсыВалют.Период КАК Период,
КурсыВалют.Валюта КАК Валюта
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Период < &Дата
УПОРЯДОЧИТЬ ПО
Период УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВременнаяТаблица.Период КАК Период,
ВременнаяТаблица.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс
ИЗ
ВременнаяТаблица КАК ВременнаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО ВременнаяТаблица.Период = КурсыВалют.Период
Прошу работающих в этой области спецов дать оценку и прокомментировать.
Предложу свой вариант решения на оценку профессионалов:
&НаСервере
Процедура ВыполнитьКомандуНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КурсыВалют.Валюта КАК Валюта,
| КурсыВалют.Период КАК Период,
| КурсыВалют.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Период
Задача конечно синтетическая, но вот маленький вопрос, что будет, если записей всего одна по валюте?
А что должно быть по вашему? Выведется одна запись, если у нее период меньше или равен даты среза.
Запрос такая штука, что он пытается получить все данные, которые соответствуют условиям, а если их нет.... ну чтож, сам он их придумывать не будет.
Если ты думаешь, что будет ошибка, то ее не будет. Просто во втором методе Сообщить выведутся пустые значения.
@@AlexSolk казалось бы, вроде умный человек, а несет какую-то пургу. На будущее, если пытаетесь принизить собеседника, то хотя бы убедитесь, что ваша позиция крепка, а то сейчас это выглядит как попытка пукнуть в лужу. Ну что же, раз кто-то не догнал, когда ему прямо написали ошибку в запросы - объясню, у тебя стоит внутреннее соединение во временной таблицы "ПредпоследниеДаты", при этом условие на больше (а не больше или равно), таким образом если запись в разрезе валюты одна, то в данной ВТ будет просто пусто, так как соединение не отработает, и далее у тебя также используется Внутреннее соединение, что приводит просто к пустому результату запроса. Откуда вы только беретесь доморощенные гуру.
@@Допканал1С прошу прощения. Видео смотрел побыстрому и с телефона, поэтому не заметил, что автор поставил внутренние соединение.
Такая грубейшая ошибка мне даже в голову не пришла.
Почему ошибка? если хотите подискутировать обоснуйте. Код рабочий.
@@domrachevconsulting потому что пока у вас есть валюты, по которым несколько значений курсов, все работает. Введите новую валюту, задав ей только один текущий курс и ваше внутреннее соединение не выведет эту строку. Соединение неверное.
Ну так себе. Оставляем в регистре только курсы на одну дату, и запрос вообще ничего не выдаст. Вообще строк не будет. Я бы вас не взял на работу после такого решения😂
Приглашаем к нам на работу. Удаленно. проектно. до 300 000 рублей в мес.
Требования ниже:
Грейд: Middle
Порядок работы: Удаленно
Режим работы: Full time
Дата привлечения: 15.01.2024г.
Срок привлечения: до 31.12.2024г.
Система: 1С: ERP УХ + Горнодобывающее производство
Описание проекта:
Внедрение 1С: ERP УХ + Горнодобывающее производство
❗Требование к специалисту:
Обязательно:
Опыт разработки в 1С: Предприятие 8.3, управляемые формы.
Опыт разработки внешних механизмов в 1С: Предприятие 8.3 (обработки, отчеты, печатные формы).
Опыт работы в проектной команде более 3-х человек разработчиков.
Опыт разработки в 1С: Предприятие 8.3 в конфигурации 1С: ERP 2.5 / УТ 11 / КА 2 / ERP УХ 3.1.
Опыт работы с хранилищем 1С
Приветствуется:
Опыт доработки типовых и разработки новых шаблонов RLS.
Опыт разработки интеграции конфигураций 1С с другими системами.
Опыт работы с Git репозиторием.
Опыт решения задач повышения скорости запросов, с использованием профайлера или др. средств MS SQL.
Сертификат специалиста по платформе 1С Предприятие 8.3.
Перемудрил. Логика перемешена. Такой код лучше переписать, а не сопровождать.
Добрый день. Выкладывайте текст запроса. посмотрим.) у меня на сопровождении был код (куда даже я не залазил - работал корректно - все довольны - я занимался другими задачами. Переписывать (делать рефакторинг) все что не нравится - здоровья и денег работодателя не хватит)
Друг, ты два неправильных варианта дал. Второй вариант рабочий, но туда ты впихнул лишнюю таблицу.
Ты уже до этого выводил последний срез и предпоследнюю дату. Оставалось только вывести поле предпоследнего курса.
А еще есть поверие, что срез последних не стоит использовать никогда. Потому как это влияет на быстродействие системы. Быстрее отработает запрос с выбором максимальной даты, меньшей даты среза.
Да, я тоже не понял зачем третья таблица если нужный курс уже есть во второй. По поводу поверия, а кто нибудь это вообще обстоятельно тестировал? Есть статьи на тему?
@@ОлегСенченко-е8ч я тестировал. На больших таблицах разница во времени чуть ли не в 10 раз
@@AlexSolk А в план запроса смотрел? Почему так?
@@ОлегСенченко-е8ч в подробности я не вдавался. Мне когда-то сказали об этом эффекте на одном собеседовании, я потом проверил замер производительности на больших таблицах, разницу заметил.
Нельзя здесь сделать две таблицы (если считаете что можно - предлагайте решения). в вашем решении выше. нельзя вывести курс из-за агрегатной функции МАКСИМУМ!
ВЫБРАТЬ
КурсыВалютСрезПоследних.Валюта КАК Валюта,
КурсыВалютСрезПоследних.Период КАК ПоследнийПериод,
КурсыВалютСрезПоследних.Курс КАК ПоследнийКурс,
естьNULL(КурсыВалют.Период,ДАТАВРЕМЯ(1,1,1)) КАК ПредПоследнийПериод,
естьNULL(КурсыВалют.Курс,0) КАК ПредПоследнийКурс
ИЗ
(ВЫБРАТЬ
КурсыВалютСрезПоследних.Валюта КАК Валюта,
КурсыВалютСрезПоследних.Период КАК Период,
КурсыВалютСрезПоследних.Курс КАК Курс,
МАКСИМУМ(КурсыВалют.Период) КАК ПериодДо
ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта И КурсыВалют.Период < КурсыВалютСрезПоследних.Период
СГРУППИРОВАТЬ ПО
КурсыВалютСрезПоследних.Валюта,
КурсыВалютСрезПоследних.Период,
КурсыВалютСрезПоследних.Курс
) КАК КурсыВалютСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО (КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта И КурсыВалют.Период = КурсыВалютСрезПоследних.ПериодДо)