На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Этот раздел предназначен для заполнения/проверки/рехтования/* содержимого будущего FAQ и не более того.
Все вопросы касательно 1С следует задавать здесь: 1С: Проблемы и решения
  
> Запрос Срез на момент Документа
    Вдруг кому понадобится
    ExpandedWrap disabled
      ВЫБРАТЬ
          РеализацияТоваровУслуг.Ссылка,
          РеализацияТоваровУслуг.Дата,
          РеализацияТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента
      ПОМЕСТИТЬ Доки
      ИЗ
          Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
      ИНДЕКСИРОВАТЬ ПО
          ВалютаДокумента
      ;
       
      ////////////////////////////////////////////////////////////////////////////////
      ВЫБРАТЬ
          КурсыВалют.Валюта КАК Валюта,
          КурсыВалют.Курс,
          КурсыВалют.Кратность,
          Вн.ДатаСреза КАК ДатаСреза,
          Вн.ДатаУстановкиКурса
      ПОМЕСТИТЬ КурсыНаДатуДокумента
      ИЗ
          РегистрСведений.КурсыВалют КАК КурсыВалют
              ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  ДатыСрезов.ДатаУстановкиКурса КАК ДатаУстановкиКурса,
                  ДатыСрезов.Валюта КАК Валюта,
                  ДатыСрезов.ДатаСреза КАК ДатаСреза
              ИЗ
                  (ВЫБРАТЬ
                      МАКСИМУМ(КурсыВалют.Период) КАК ДатаУстановкиКурса,
                      КурсыВалют.Валюта КАК Валюта,
                      Доки.Дата КАК ДатаСреза
                  ИЗ
                      РегистрСведений.КурсыВалют КАК КурсыВалют
                          ЛЕВОЕ СОЕДИНЕНИЕ Доки КАК Доки
                          ПО КурсыВалют.Период <= Доки.Дата
                  
                  СГРУППИРОВАТЬ ПО
                      Доки.Дата,
                      КурсыВалют.Валюта) КАК ДатыСрезов) КАК Вн
              ПО КурсыВалют.Валюта = Вн.Валюта
                  И КурсыВалют.Период = Вн.ДатаУстановкиКурса
       
      ИНДЕКСИРОВАТЬ ПО
          ДатаСреза,
          Валюта
      ;
       
      ////////////////////////////////////////////////////////////////////////////////
      ВЫБРАТЬ
          Доки.Ссылка,
          КурсыНаДатуДокумента.Курс,
          КурсыНаДатуДокумента.Кратность,
          Доки.Дата,
          Доки.ВалютаДокумента,
          КурсыНаДатуДокумента.ДатаУстановкиКурса
      ИЗ
          Доки КАК Доки
              ЛЕВОЕ СОЕДИНЕНИЕ КурсыНаДатуДокумента КАК КурсыНаДатуДокумента
              ПО Доки.Дата = КурсыНаДатуДокумента.ДатаСреза
                  И Доки.ВалютаДокумента = КурсыНаДатуДокумента.Валюта


    Попробую рассказать принцип
    1) Сначала получем таблицу с Датами и Измерениями на которые нужны курсы
    2) Из таблицы регистра получем даты наиболее близкие к датам документа "КурсыВалют.Период <= Доки.Дата"
    3) К полученной таблице пристраиваем значения Ресурсов регистра. Не забываем указать ДатуДокумента
    Собственно полученный результат кладем в "КурсыНаДатуДокумента"
    4) Используем "КурсыНаДатуДокумента" в своих целях соединяя левым соединением по Датам и Измерениям


    Все работает достаточно быстро и без индексирования, но с индексированием все совсем хорошо :D
    Сообщение отредактировано: Outlander -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0206 ]   [ 17 queries used ]   [ Generated: 19.03.24, 09:35 GMT ]