• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

umbra

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

unknown181538

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

Darlock

Только, условие в запросе наложить не забудьте:

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

Если вам это надо в конкретном документе (параметр ссылка = ссылка на документ).

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

umbra

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

Darlock

Регистр сведений периодический (странно будет, если нет)?

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

Код:
ПоступлениеТоваровИУслугТовары  |  V  | РегистрСведенийЦеныВАТТСрезПоследних  |  | |  Номенклатура  |  Номенклатура

По этому условию установится отбор на выборку записей из регистра сведений. Т.е. каждой строке таблицы документа будет соответсвовать одна запись из регистра сведений (самая посленяя по периоду)
 
U

umbra

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

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

Darlock

на выходе он превратился в 5 с разными ценами...
При условии, что у вас для этого товара назначено 5 разных типов цен. Нужен один, укажите тип цен в параметрах виртуальной таблицы.

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

или, если интересующий тип цен предопределен в системе, то

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

evgenyatam

а если вместо левого соединения использовать "ВНУТРЕННЕЕ СОЕДИНЕНИЕ"?
 
D

Darlock

а если вместо левого соединения использовать "ВНУТРЕННЕЕ СОЕДИНЕНИЕ"?

Не уверен. Никогда не пользовался, т.к. в "библии" (она же "книга убийца) написано, что в 8.1 быстрее всего работает ЛЕВОЕ СОЕДИНЕНИЕ.
 
E

evgenyatam

да я уже понял, что отбор по типу цен необходим. а внутреннее соединение в данном случае возьмет последнюю физически записанную цену, что не есть хорошо.
 
U

umbra

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

Darlock

Без полного текста запроса трудно угадать ответ на вопрос "почему?"
 
U

umbra

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

Darlock

Группировку делаете по Номенклатуре?
Если да, то у вас ведется учет по характеристикам. И в регистре цены в разрезе характеристик. Отсюда и 5 строк (5 характеристик)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!