Собеседование на программиста 1С. Задача 2. Регистр сведений - последний и предпоследний срез.

Поделиться
HTML-код
  • Опубликовано: 24 ноя 2024

Комментарии • 71

  • @alm6543
    @alm6543 5 месяцев назад +3

    Ролик можно раза в 2 сократить, если использовать создание запросов с обработкой данных.

    • @domrachevconsulting
      @domrachevconsulting  5 месяцев назад +1

      Спасибо за комментарий.

    • @alm6543
      @alm6543 5 месяцев назад

      @@domrachevconsulting Вам спасибо за ролики.

  • @zapivahinzapivahin3474
    @zapivahinzapivahin3474 8 месяцев назад

    Сделайте запрос чтобы он выдавал курс валюты на дату документа поступление товаров в разрезе товаров, часто спрашивают и по дате планирования по этой поставке. Спасибо.

  • @domrachevconsulting
    @domrachevconsulting  Год назад +3

    Друзья. Скажите, пожалуйста, нужно выкладывать данные обработки куда-нибудь?

  • @olegshpilevoy
    @olegshpilevoy Год назад +3

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

    • @domrachevconsulting
      @domrachevconsulting  Год назад +1

      Да. согласен с курсами может и надуманно. С другими данными это может быть нормально. Надо давать зарядку мозгу.

    • @АндрейКрасненков-ы6щ
      @АндрейКрасненков-ы6щ 6 месяцев назад

      Почему не выводится курс рубля?

    • @АндрейКрасненков-ы6щ
      @АндрейКрасненков-ы6щ 6 месяцев назад

      Если для валюты всего одна запись в регистре, что будет?

  • @MsMcGoblin1
    @MsMcGoblin1 5 месяцев назад

    Курс рубля пропал - а это тоже валюта

  • @РусланАбиев-ю4х
    @РусланАбиев-ю4х 5 месяцев назад

    Отсортировать таблицу регистра по периоду по убыванию и выбрать ПЕРВЫЕ 2 + условие по валюте нужной наложить

    • @domrachevconsulting
      @domrachevconsulting  5 месяцев назад

      Привет. И выведет из 10 валют 2 первые валюты и актуальные курсы на дату)

    • @РусланАбиев-ю4х
      @РусланАбиев-ю4х 4 месяца назад +1

      @@domrachevconsulting привет. Я ведь указал, что условие по валюте нужно наложить. Так что выведет две записи по одной валюте. Если нужно по нескольким валютам получить, что можно через конструкцию объединить все это сделать. Сортировки можно не бояться, в таблице есть индекс по периоду.

    • @domrachevconsulting
      @domrachevconsulting  4 месяца назад

      @@РусланАбиев-ю4х Добрый день. Пожалуйста. Приведите пример. (сюда даже вставьте - если все верно то перезапишу видео). За год было столько хейта - и никто толком ничего не выдал - я бы только рад хорошему решению. Пока работы на два месяца вперед - не смогу уделить время преверить вашу идею (еще раз повторю - пишут комментарии - и они ни о чем).

    • @РусланАбиев-ю4х
      @РусланАбиев-ю4х 4 месяца назад

      @@domrachevconsulting
      ВЫБРАТЬ ПЕРВЫЕ 2
      КурсыВалют.Валюта КАК Валюта,
      КурсыВалют.Курс КАК Курс,
      КурсыВалют.Период КАК Период
      ИЗ
      РегистрСведений.КурсыВалют КАК КурсыВалют
      ГДЕ
      КурсыВалют.Валюта = &Евро
      ОБЪЕДИНИТЬ ВСЕ
      ВЫБРАТЬ ПЕРВЫЕ 2
      КурсыВалют.Валюта,
      КурсыВалют.Курс,
      КурсыВалют.Период
      ИЗ
      РегистрСведений.КурсыВалют КАК КурсыВалют
      ГДЕ
      КурсыВалют.Валюта = &Доллар
      УПОРЯДОЧИТЬ ПО
      Валюта,
      Период УБЫВ

    • @РусланАбиев-ю4х
      @РусланАбиев-ю4х 4 месяца назад

      @@domrachevconsulting
      ВЫБРАТЬ ПЕРВЫЕ 2

      КурсыВалют.Валюта КАК Валюта,
      КурсыВалют.Курс КАК Курс,

      КурсыВалют.Период КАК Период
      ИЗ

      РегистрСведений.КурсыВалют КАК КурсыВалют
      ГДЕ

      КурсыВалют.Валюта = &Евро
      ОБЪЕДИНИТЬ ВСЕ
      ВЫБРАТЬ ПЕРВЫЕ 2

      КурсыВалют.Валюта,

      КурсыВалют.Курс,

      КурсыВалют.Период
      ИЗ

      РегистрСведений.КурсыВалют КАК КурсыВалют
      ГДЕ

      КурсыВалют.Валюта = &Доллар
      УПОРЯДОЧИТЬ ПО

      Валюта,
      Период УБЫВ

  • @underwaterdigital505
    @underwaterdigital505 7 месяцев назад +1

    А зачем вам регистр сведений, если вы в конечном итоге лезете в справочник и берете оттуда курс?

  • @alextsyzman5032
    @alextsyzman5032 Год назад +1

    Пока не работаю программистом, надеюсь устроиться стажером. Но хочу выдать свой вариант данного решения, так как в задаче нет конкретизации с какой таблицы брать: или основной таблицы или из срезов. Я взял из основной. Итак текст запроса :
    ВЫБРАТЬ ПЕРВЫЕ 2
    КурсыВалют.Период КАК Период,
    КурсыВалют.Валюта КАК Валюта
    ПОМЕСТИТЬ ВременнаяТаблица
    ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
    ГДЕ
    КурсыВалют.Период < &Дата
    УПОРЯДОЧИТЬ ПО
    Период УБЫВ
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ВременнаяТаблица.Период КАК Период,
    ВременнаяТаблица.Валюта КАК Валюта,
    КурсыВалют.Курс КАК Курс
    ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
    ПО ВременнаяТаблица.Период = КурсыВалют.Период
    Прошу работающих в этой области спецов дать оценку и прокомментировать.

  • @АнтонЖирнов-ч7в
    @АнтонЖирнов-ч7в 3 месяца назад

    Предложу свой вариант решения на оценку профессионалов:
    &НаСервере
    Процедура ВыполнитьКомандуНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КурсыВалют.Валюта КАК Валюта,
    | КурсыВалют.Период КАК Период,
    | КурсыВалют.Курс КАК Курс
    |ИЗ
    | РегистрСведений.КурсыВалют КАК КурсыВалют
    |ГДЕ
    | КурсыВалют.Период

  • @Допканал1С
    @Допканал1С Год назад +1

    Задача конечно синтетическая, но вот маленький вопрос, что будет, если записей всего одна по валюте?

    • @AlexSolk
      @AlexSolk Год назад +1

      А что должно быть по вашему? Выведется одна запись, если у нее период меньше или равен даты среза.
      Запрос такая штука, что он пытается получить все данные, которые соответствуют условиям, а если их нет.... ну чтож, сам он их придумывать не будет.
      Если ты думаешь, что будет ошибка, то ее не будет. Просто во втором методе Сообщить выведутся пустые значения.

    • @Допканал1С
      @Допканал1С 11 месяцев назад +3

      @@AlexSolk казалось бы, вроде умный человек, а несет какую-то пургу. На будущее, если пытаетесь принизить собеседника, то хотя бы убедитесь, что ваша позиция крепка, а то сейчас это выглядит как попытка пукнуть в лужу. Ну что же, раз кто-то не догнал, когда ему прямо написали ошибку в запросы - объясню, у тебя стоит внутреннее соединение во временной таблицы "ПредпоследниеДаты", при этом условие на больше (а не больше или равно), таким образом если запись в разрезе валюты одна, то в данной ВТ будет просто пусто, так как соединение не отработает, и далее у тебя также используется Внутреннее соединение, что приводит просто к пустому результату запроса. Откуда вы только беретесь доморощенные гуру.

    • @AlexSolk
      @AlexSolk 11 месяцев назад +1

      @@Допканал1С прошу прощения. Видео смотрел побыстрому и с телефона, поэтому не заметил, что автор поставил внутренние соединение.
      Такая грубейшая ошибка мне даже в голову не пришла.

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад +2

      Почему ошибка? если хотите подискутировать обоснуйте. Код рабочий.

    • @AlexSolk
      @AlexSolk 11 месяцев назад

      @@domrachevconsulting потому что пока у вас есть валюты, по которым несколько значений курсов, все работает. Введите новую валюту, задав ей только один текущий курс и ваше внутреннее соединение не выведет эту строку. Соединение неверное.

  • @evgenievgeni2016
    @evgenievgeni2016 10 месяцев назад +1

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

    • @domrachevconsulting
      @domrachevconsulting  10 месяцев назад +1

      Приглашаем к нам на работу. Удаленно. проектно. до 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.

  • @evgeniuxp2evgeniuxp234
    @evgeniuxp2evgeniuxp234 11 месяцев назад +1

    Перемудрил. Логика перемешена. Такой код лучше переписать, а не сопровождать.

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад +1

      Добрый день. Выкладывайте текст запроса. посмотрим.) у меня на сопровождении был код (куда даже я не залазил - работал корректно - все довольны - я занимался другими задачами. Переписывать (делать рефакторинг) все что не нравится - здоровья и денег работодателя не хватит)

  • @AlexSolk
    @AlexSolk Год назад +1

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

    • @ОлегСенченко-е8ч
      @ОлегСенченко-е8ч Год назад

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

    • @AlexSolk
      @AlexSolk Год назад

      @@ОлегСенченко-е8ч я тестировал. На больших таблицах разница во времени чуть ли не в 10 раз

    • @ОлегСенченко-е8ч
      @ОлегСенченко-е8ч Год назад

      @@AlexSolk А в план запроса смотрел? Почему так?

    • @AlexSolk
      @AlexSolk Год назад

      @@ОлегСенченко-е8ч в подробности я не вдавался. Мне когда-то сказали об этом эффекте на одном собеседовании, я потом проверил замер производительности на больших таблицах, разницу заметил.

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад +2

      Нельзя здесь сделать две таблицы (если считаете что можно - предлагайте решения). в вашем решении выше. нельзя вывести курс из-за агрегатной функции МАКСИМУМ!

  • @YardenVokerol
    @YardenVokerol 9 месяцев назад +1

    ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    КурсыВалютСрезПоследних.Период КАК ПоследнийПериод,
    КурсыВалютСрезПоследних.Курс КАК ПоследнийКурс,
    естьNULL(КурсыВалют.Период,ДАТАВРЕМЯ(1,1,1)) КАК ПредПоследнийПериод,
    естьNULL(КурсыВалют.Курс,0) КАК ПредПоследнийКурс
    ИЗ
    (ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    КурсыВалютСрезПоследних.Период КАК Период,
    КурсыВалютСрезПоследних.Курс КАК Курс,
    МАКСИМУМ(КурсыВалют.Период) КАК ПериодДо
    ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
    ПО КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта И КурсыВалют.Период < КурсыВалютСрезПоследних.Период
    СГРУППИРОВАТЬ ПО
    КурсыВалютСрезПоследних.Валюта,
    КурсыВалютСрезПоследних.Период,
    КурсыВалютСрезПоследних.Курс
    ) КАК КурсыВалютСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
    ПО (КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта И КурсыВалют.Период = КурсыВалютСрезПоследних.ПериодДо)