Имя: Пароль:
1C
1С v8
v8: (Запрос), которому трудно придумать название в теме
0 Adgjj
 
23.11.11
16:20
ВЫБРАТЬ
   уатОстаткиГСМнаТС.Регистратор КАК Регистратор,
   уатСчетчикиТС.СпНач КАК СпНач,
   уатСчетчикиТСпосл.Значение КАК СпКон
ИЗ
   РегистрНакопления.уатОстаткиГСМнаТС КАК уатОстаткиГСМнаТС
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС
       ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТС.Регистратор
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор
ГДЕ
   уатОстаткиГСМнаТС.Период >= &ДатаС
   И уатОстаткиГСМнаТС.Период <= &ДатаПо
   И уатОстаткиГСМнаТС.Регистратор ССЫЛКА Документ.уатПутевойЛист
   И уатОстаткиГСМнаТС.ТС = &ТС
СГРУППИРОВАТЬ ПО
   уатОстаткиГСМнаТС.Регистратор,
   уатСчетчикиТС.СпНач,
   уатСчетчикиТСпосл.Значение
Рез-т запроса - таблица:
Путевой лист     СпНач      СпКон
ПЛ1                77024      -
ПЛ2                77056     77066
ПЛ3                77030      -
СпНач нужен для каждой путевки, а СпКон берется из самой поздней по времени ПЛ.
Как В ЗАПРОСЕ сделать, чтобы 77066 писалось в каждой строке вместо "-"?
1 Ненавижу 1С
 
гуру
23.11.11
16:25
вот так:

       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       ПО ИСТИНА
2 Adgjj
 
23.11.11
16:27
тогда строчек становится намного больше и числа в последнем столбце неизвестные
3 rs_trade
 
23.11.11
16:34
Убрать последний джойн, заменив его на скалярный подзапрос получения последнего значения. И в селект выводить значение.
4 rs_trade
 
23.11.11
16:37
Типа кросс-джойн получиться единственного значения из подзапроса с результатами левого соединения
5 Ненавижу 1С
 
гуру
23.11.11
16:40
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
      ПО <тут соединение по ТС>
6 IBTM
 
24.11.11
01:39
(0) Выбор когда уатСчетчикиТСпосл.Значение = "-" Тогда 77066 Иначе уатСчетчикиТСпосл.Значение Конец

Не?
7 Adgjj
 
24.11.11
08:53
(5) результат как в (2)
(6)
ВЫБРАТЬ
   уатОстаткиГСМнаТС.ТС КАК ТС,
   уатОстаткиГСМнаТС.Регистратор КАК Регистратор,
   уатСчетчикиТС.СпНач КАК СпНач,
   //ЕСТЬnull(уатСчетчикиТСпосл.Значение,уатСчетчикиТСпосл.Значение) КАК СпКон
   Выбор когда уатСчетчикиТСпосл.Значение = 0 Тогда
       5
   Иначе уатСчетчикиТСпосл.Значение
   Конец КАК СпКон
ИЗ
   РегистрНакопления.уатОстаткиГСМнаТС КАК уатОстаткиГСМнаТС
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатМестонахождениеТС.СрезПоследних(&ДатаПо, ) КАК уатМестонахождениеТССрезПоследних
       //ПО уатОстаткиГСМнаТС.ТС = уатМестонахождениеТССрезПоследних.ТС
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС
       //ПО уатОстаткиГСМнаТС.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС
       ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТС.Регистратор
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор

Выбор когда уатСчетчикиТСпосл.Значение = 0 Тогда - не знаю, к чему приравнять: 0, Null не подходят
8 Adgjj
 
24.11.11
09:41
(3)(4)
пробую пока не катит
ВЫБРАТЬ
   уатОстаткиГСМнаТС.ТС КАК ТС,
   уатОстаткиГСМнаТС.Регистратор КАК Регистратор,
   уатСчетчикиТС.СпНач КАК СпНач,
   уатСчетчикиТСпосл.Значение КАК СпКон
   //ЗапросСпКон.Значение КАК СпКон
   //Выбор когда уатСчетчикиТСпосл.Значение = 0 Тогда
   //    555
   //Иначе уатСчетчикиТСпосл.Значение
   //Конец КАК СпКон
ИЗ
   РегистрНакопления.уатОстаткиГСМнаТС КАК уатОстаткиГСМнаТС
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатМестонахождениеТС.СрезПоследних(&ДатаПо, ) КАК уатМестонахождениеТССрезПоследних
       ПО уатОстаткиГСМнаТС.ТС = уатМестонахождениеТССрезПоследних.ТС
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС
       ПО уатОстаткиГСМнаТС.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС
       ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТС.Регистратор,
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       //ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор
       //ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       // ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор
   //ЛЕВОЕ СОЕДИНЕНИЕ    
   //(ВЫБРАТЬ
   // РегистрНакопления.уатОстаткиГСМнаТС КАК уатОстаткиГСМнаТС
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатМестонахождениеТС.СрезПоследних(&ДатаПо, ) КАК уатМестонахождениеТССрезПоследних
       //ПО уатОстаткиГСМнаТС.ТС = уатМестонахождениеТССрезПоследних.ТС
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС
       //ПО уатОстаткиГСМнаТС.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС
       //ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТС.Регистратор
       //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       //ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор
       //ИЗ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
        //ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор) КАК ЗапросСпКон
   //ПО ЗапросСпКон.Регистратор = уатСчетчикиТСпосл.Регистратор
   
   РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
   //     ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор) КАК ЗапросСпКон
   //ПО ЗапросСпКон.Регистратор = уатСчетчикиТСпосл.Регистратор

   
ГДЕ
   уатОстаткиГСМнаТС.Период >= &ДатаС
   И уатОстаткиГСМнаТС.Период <= &ДатаПо
   И уатОстаткиГСМнаТС.Регистратор ССЫЛКА Документ.уатПутевойЛист
   И уатОстаткиГСМнаТС.ТС = &ТС
СГРУППИРОВАТЬ ПО
   уатОстаткиГСМнаТС.ТС,
   уатОстаткиГСМнаТС.Регистратор,
   уатСчетчикиТС.СпНач,
   уатСчетчикиТСпосл.Значение
9 IBTM
 
24.11.11
15:21
(7) Как незнаешь? Ты же можешь поспотреть что идет в ячейку!!! Или Например можешь использовать параметр в запрос, если (судя по (0)) это ТекстПоле "-". Тогда

Запрос.УстановитьПараметр("парам", "-");
------------------------------------------
Выбор когда уатСчетчикиТСпосл.Значение = &парам Тогда 77066 Иначе уатСчетчикиТСпосл.Значение Конец

Не?
10 rs_trade
 
24.11.11
15:29
(8) так понятно?

ВЫБРАТЬ
   ЗаказКлиентаТовары.Номенклатура,
   ЗаказКлиентаТовары.Количество,
   ВложенныйЗапрос.Курс
ИЗ
   Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента
       ПО ЗаказКлиентаТовары.Ссылка = ЗаказКлиента.Ссылка,
   (ВЫБРАТЬ
       КурсыВалютСрезПоследних.Курс КАК Курс
   ИЗ
       РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалютСрезПоследних) КАК ВложенныйЗапрос
ГДЕ
   ЗаказКлиента.Ссылка = &Ссылка
11 rs_trade
 
24.11.11
15:34
Во вложенном запросе, скалярный запрос возвращающий СпКон из самой поздней по времени ПЛ. Это значение потом соединяется с каждой строкой результата предыдущих джойнов. Так же надо?
12 Adgjj
 
25.11.11
09:53
ИЗ
   РегистрНакопления.уатОстаткиГСМнаТС КАК уатОстаткиГСМнаТС
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатМестонахождениеТС.СрезПоследних(&ДатаПо, ) КАК уатМестонахождениеТССрезПоследних
       ПО уатОстаткиГСМнаТС.ТС = уатМестонахождениеТССрезПоследних.ТС
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС
       ПО уатОстаткиГСМнаТС.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС
       ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТС.Регистратор,
       //ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл
       // ПО уатОстаткиГСМнаТС.Регистратор = уатСчетчикиТСпосл.Регистратор
       (ВЫБРАТЬ
       //уатСчетчикиТСпосл.Регистратор КАК Регистратор,
       уатСчетчикиТСпосл.Значение КАК СпКон
       ИЗ
       РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл) КАК ВложенныйЗапрос

Почему-то пишет "Поле не найдено: уатСчетчикиТСпосл.Значение"?
13 Adgjj
 
25.11.11
09:59
ВЫБРАТЬ
       //уатСчетчикиТСпосл.Регистратор КАК Регистратор,
       уатСчетчикиТСпосл.Значение КАК СпКон
       ИЗ
       РегистрСведений.уатСчетчикиТС.СрезПоследних КАК уатСчетчикиТСпосл

эта внутренняя часть работает
14 Adgjj
 
25.11.11
10:01
отбой
15 Adgjj
 
25.11.11
10:04
rs_trade, огромное Вам спасибо, получилось!