• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

umbra

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

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

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

Если вам необходимо по нескольким документам получить выборку, то лучше использовать пакет запросов, в котором во временную таблицу поместить всю номенклатуру, а в основном запросе уже делать ЛЕВОЕ СОЕДИНЕНИЕ с временной талицей
 
Это все хорошо и понятно и огромное спасибо за это) НО в регистре несколько цен...и товар у нас далеко не один в накладной...так как же выбрать\сопоставить только актуальные цены? Документ один.
 
Регистр сведений периодический (странно будет, если нет)?

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

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

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

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

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

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

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

Не уверен. Никогда не пользовался, т.к. в "библии" (она же "книга убийца) написано, что в 8.1 быстрее всего работает ЛЕВОЕ СОЕДИНЕНИЕ.
 
да я уже понял, что отбор по типу цен необходим. а внутреннее соединение в данном случае возьмет последнюю физически записанную цену, что не есть хорошо.
 
спасибо выручили\объяснили)
сделал так:
Код:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
только непонятно почему без наложения группировки двоятся некоторые позиции...
P.S. взял данные из другого регистра...нужны были просто розничные цены на товар....
 
Без полного текста запроса трудно угадать ответ на вопрос "почему?"
 
да конечно...
Код:
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаВРознице,
ПоступлениеТоваровУслугТовары.Номенклатура.Артикул,
ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
И ПоступлениеТоваровУслугТовары.Номенклатура.Артикул = ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка = &ТекущийДокумент
соответственно при наложении группировки все становится как надо..
 
Группировку делаете по Номенклатуре?
Если да, то у вас ведется учет по характеристикам. И в регистре цены в разрезе характеристик. Отсюда и 5 строк (5 характеристик)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы