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

Как в запросе получить значение предыдущей строки табличной части документа?

Автор patchwork1, 09 янв 2020, 15:22

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

patchwork1

Добрый день всем !

Как в запросе получить значение предыдущей строки табличной части документа? 

нужно по условию получить предыдущую строку  в запросе

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

если меньше 15 числа то текущую строку .

LexaK

по номеру строки, любая ТЧ имеет служебное поле  НомерСтроки, соеденяте так
выбрать
    Док1.НомерСтроки,
    Док1.Цена,
    Док2.Цена как ПредыдущаяЦена //для строки 1 здесь будет Null
Из
Документ.РеализацияТоваров.Товары Док1
левое соединение
Документ.РеализацияТоваров.Товары Док2
по Док1.Ссылка = Док2.Ссылка
по Док1.НомерСтроки = Док2.НомерСтроки+1
Где
Док1.Сссылка = &Ссылка

//это пример, без всякой оптимизации
если помогло нажмите: Спасибо!

patchwork1


LexaK

а при чем здесь Итоги?
и еще не понятно
Цитироватьесли меньше 15 числа то текущую строку .
что значит текущая строка? а сколько всего строк? как/кем определяется текущая? а куда ее надо выбрать/взять?
если помогло нажмите: Спасибо!

patchwork1

Запрос = Новый запрос;

запрос.Текст=
"ВЫБРАТЬ
|   ЛК_ГрафикДоговораЛизингОсновныеДанные.ДатаПлатежа КАК ДатаПлатежа,
|   ЛК_ГрафикДоговораЛизингОсновныеДанные.СуммаПлатежа - ЛК_ГрафикДоговораЛизингОсновныеДанные.ПроцентыПоКредиту КАК ПлатежДосрочка
|ИЗ
|   Документ.ЛК_ГрафикДоговораЛизинг.ОсновныеДанные КАК ЛК_ГрафикДоговораЛизингОсновныеДанные
|ГДЕ
|   ЛК_ГрафикДоговораЛизингОсновныеДанные.Ссылка.Контрагент = &Контрагент
|   И ЛК_ГрафикДоговораЛизингОсновныеДанные.Ссылка.Договор = &Договор
|   И ЛК_ГрафикДоговораЛизингОсновныеДанные.ДатаПлатежа МЕЖДУ &ДатаОтчета И &ДатаК
|
|СГРУППИРОВАТЬ ПО
|   ЛК_ГрафикДоговораЛизингОсновныеДанные.ДатаПлатежа,
|   ЛК_ГрафикДоговораЛизингОсновныеДанные.СуммаПлатежа - ЛК_ГрафикДоговораЛизингОсновныеДанные.ПроцентыПоКредиту
|
|УПОРЯДОЧИТЬ ПО
|   ДатаПлатежа
|ИТОГИ
|   СУММА(ПлатежДосрочка)
|ПО
|   ОБЩИЕ";   



  Запрос.УстановитьПараметр("Контрагент",Отчет.Контрагент);
  Запрос.УстановитьПараметр("Договор",Отчет.ДоговорКонтрагента);
  Запрос.УстановитьПараметр("ДатаОтчета",НачалоДня(Отчет.ДатаОтчета));
   Запрос.УстановитьПараметр("ДатаК",('20500101'));

  Рез1 = запрос.Выполнить();

выборкаРез1 = рез1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаРез1.Следующий() Цикл
   
        
    Неу1= ВыборкаРез1.ПлатежДосрочка; 
   
          
 
   Стр.Параметры.СуммаПлатежа=Неу1;
   
   
КонецЦикла;

Добавлено: 09 янв 2020, 17:30


текущая которая совпадает с датой платежа предыдущая . та что раньше на строку таб части

depb

 У выборки запроса есть метод Количество(). Т.е. получаете кол-во строк в запросе КолСтрокЗапроса = Выборка.Количество() В цикле делаете счетчик и условие. Соответственно, если счетчик = КолСтрокЗапроса - 1, то это предыдущее значение. Но этот способ не совсем по фэншую.

patchwork1

Цитата: depb от 09 янв 2020, 20:24
У выборки запроса есть метод Количество(). Т.е. получаете кол-во строк в запросе КолСтрокЗапроса = Выборка.Количество() В цикле делаете счетчик и условие. Соответственно, если счетчик = КолСтрокЗапроса - 1, то это предыдущее значение. Но этот способ не совсем по фэншую.

Супер по феншую мне тоже понравилось)


Теги:

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

Рейтинг@Mail.ru

Поиск