Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:20

Связать временную таблицу с РегистромСведений.СрезПоследних

Автор dello, 07 окт 2013, 10:48

0 Пользователей и 1 гость просматривают эту тему.

dello

в общем, сейчас есть запрос в цикле:

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

mixqn

dello, отличный вопрос!
На скорую руку набросал короткую заметку по теме получения среза последних по списку дат. Постараюсь в последствии дополнить написанное до более-менее полноценной статьи.
Итак, смотрим ссылку, там пример получения среза последних в запросе.
Добавлено: 07 окт 2013, 11:03


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

mixqn

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

СГРУППИРОВАТЬ ПО
СостоянияТранспортныхПирамид.Контрагент


вроде должно так быть...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск