как описать в запросе..

  • Автор темы umbra
  • Дата начала
U

umbra

Гость
#1
Задача такова: необходимо связать в запросе данные взятые из документа Поступление товаров и услуг с розничными ценами на товар взятыми из регистра сведений "цены автоматизированной торговой точки" По какому принципу и параметру их нужно соединять?
Я понимаю что это вопрос может и не серьезный, но для меня очень актуальный...важен не столько код сколько объяснение...
Буду очень признателен за проявленное терпение и объяснения.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Запускаете конструктор.
Выбераете таблицы "ПоступлениеТоваровУслуг.Товары" и "Регистр сведений цены в АТТ срез последних". На закладке связи указываете левое соединение по номенклатуре.
И на первой закладке выбираете нужные поля.
Примерно так...
 

Darlock

Well-Known Member
04.01.2008
560
1
#3
Только, условие в запросе наложить не забудьте:

Код:
ПоступлениеТоваровУслуг.Товары.Ссылка = &Ссылка
Если вам это надо в конкретном документе (параметр ссылка = ссылка на документ).

Если вам необходимо по нескольким документам получить выборку, то лучше использовать пакет запросов, в котором во временную таблицу поместить всю номенклатуру, а в основном запросе уже делать ЛЕВОЕ СОЕДИНЕНИЕ с временной талицей
 
U

umbra

Гость
#4
Это все хорошо и понятно и огромное спасибо за это) НО в регистре несколько цен...и товар у нас далеко не один в накладной...так как же выбрать\сопоставить только актуальные цены? Документ один.
 

Darlock

Well-Known Member
04.01.2008
560
1
#5
Регистр сведений периодический (странно будет, если нет)?

когда вы используете виртуальную таблицу
Регистр сведений цены в АТТ срез последних
платформа сама отбирает последние записи в регистре по каждой номенклатуре. Левое соединение нужно для того, чтоб у вас не возникло падение БД из-за объема выборки. Посему у вас на закладке связи должно быть следующее:

Код:
ПоступлениеТоваровИУслугТовары  |  V  | РегистрСведенийЦеныВАТТСрезПоследних  |  | |  Номенклатура  |  Номенклатура
По этому условию установится отбор на выборку записей из регистра сведений. Т.е. каждой строке таблицы документа будет соответсвовать одна запись из регистра сведений (самая посленяя по периоду)
 
U

umbra

Гость
#6
Простите мою безграмотность но...

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

Darlock

Well-Known Member
04.01.2008
560
1
#7
на выходе он превратился в 5 с разными ценами...
При условии, что у вас для этого товара назначено 5 разных типов цен. Нужен один, укажите тип цен в параметрах виртуальной таблицы.

Код:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныАТТ.СрезПоследних КАК ЦеныАТТСрезПоследних
Код:
...
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныАТТ.СрезПоследних КАК ЦеныАТТСрезПоследних(, &ТипЦен)
...
Запрос.УстановитьПараметр("ТипЦен", ИнтересующийТипЦен);
или, если интересующий тип цен предопределен в системе, то

Код:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныАТТ.СрезПоследних КАК ЦеныАТТСрезПоследних(, ЗНАЧЕНИЕ(Справочник.ТипыЦен.ПредопределенныйТипЦен))
 

evgenyatam

Well-Known Member
07.09.2007
175
0
#8
а если вместо левого соединения использовать "ВНУТРЕННЕЕ СОЕДИНЕНИЕ"?
 

Darlock

Well-Known Member
04.01.2008
560
1
#9
а если вместо левого соединения использовать "ВНУТРЕННЕЕ СОЕДИНЕНИЕ"?
Не уверен. Никогда не пользовался, т.к. в "библии" (она же "книга убийца) написано, что в 8.1 быстрее всего работает ЛЕВОЕ СОЕДИНЕНИЕ.
 

evgenyatam

Well-Known Member
07.09.2007
175
0
#10
да я уже понял, что отбор по типу цен необходим. а внутреннее соединение в данном случае возьмет последнюю физически записанную цену, что не есть хорошо.
 
U

umbra

Гость
#11
спасибо выручили\объяснили)
сделал так:
Код:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
только непонятно почему без наложения группировки двоятся некоторые позиции...
P.S. взял данные из другого регистра...нужны были просто розничные цены на товар....
 

Darlock

Well-Known Member
04.01.2008
560
1
#12
Без полного текста запроса трудно угадать ответ на вопрос "почему?"
 
U

umbra

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

Darlock

Well-Known Member
04.01.2008
560
1
#14
Группировку делаете по Номенклатуре?
Если да, то у вас ведется учет по характеристикам. И в регистре цены в разрезе характеристик. Отсюда и 5 строк (5 характеристик)