Имя: Пароль:
1C
1С v8
Выбор записи из регистра сведений.
,
0 Ly_Alena
 
14.09.16
05:18
Доброе утро! Какой-то тупняк!
Нужно выбрать из регистра сведений последнюю запись удовлетворяющую усовиям: регистратор документ поступления, контрагент регистратора не ИП "Пупкин" и период меньше 01.09.
Если брать РС срез последних, и последняя запись с контрагентом ИП Пупкин - то он возвращает пусто.
Т.е. с документом регистратором и с датой прокатывает - он отбирает как положено, но как только дело касается контрагента - выводит пусто.
Текст запроса:
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Период КАК ДатаПоследнегоПоступления,
    ЦеныНоменклатурыСрезПоследних.Регистратор.Контрагент КАК ПоследнийПоставщик,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.Регистратор
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
    ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
    И ЦеныНоменклатурыСрезПоследних.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
    И НЕ ЦеныНоменклатурыСрезПоследних.Регистратор.Контрагент = &Организация
1 AneJIbcuH
 
14.09.16
05:49
Доброе утро!

"ЦеныНоменклатурыСрезПоследних.Регистратор.Контрагент КАК ПоследнийПоставщик"
Явно же Регистратор - составной тип, значит так в запросе писать нельзя!

"РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
    ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура"

И как такое писать можно?? Вы только учитесь?

По делу: Может все цены только по контрагенту ИП "Пупкин"?
2 Ly_Alena
 
14.09.16
06:09
(1) А как можно писать? Да регистратор составной. Цены не только по Пупкину.
3 Ly_Alena
 
14.09.16
06:11
(2) если не срез последних брать, просто РС - то регистратор.контрагент берет. По мне если в регистраторе нет контрагента, то запрос 0. Проблема не ясна с составным регистратором.
4 AneJIbcuH
 
14.09.16
06:12
А так задачка немного сложнее, вам необходимо получить список периодов с ценами (по вашим условиям) и я бы сделал это так:

ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Период КАК ДатаПоследнегоПоступления,
    ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Регистратор Как Документ.ПоступлениеТоваровУслуг).Контрагент КАК ПоследнийПоставщик,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.Регистратор
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период,Номенклатура = &Номенклатура И  ВЫРАЗИТЬ(Регистратор Как Документ.ПоступлениеТоваровУслуг).Контрагент <> &Организация) КАК ЦеныНоменклатурыСрезПоследних

Помещаем во временную таблицу, следующим пакетом из этой ВТ получим максимальный период, опять помещаем в ВТ и окончательный пакет: Левое соединение второй ВТ с первой ВТ по периоду.
5 Ly_Alena
 
14.09.16
06:29
(4) Попробую - спасибо!
6 Ly_Alena
 
14.09.16
06:34
(4) Это просто божественно! Спасибо, все работает как надо.
7 AneJIbcuH
 
14.09.16
06:40
Надеюсь ошибки написания запроса на будущее свои учли ;)
8 Ly_Alena
 
14.09.16
06:43
(7) Учту
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.