Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 дек 2024, 00:49

Как получить цену товара в документе запросом

Автор headstik, 28 дек 2012, 17:09

0 Пользователей и 1 гость просматривают эту тему.

headstik

Типовая конфигурация УТ 10.3
Запросом к регистру накопления ТоварыНаСкладах вытаскиваю документы связанные с движением товаров на складе за определенный период с детализацией вида и номера документа, контрагента, номенклатуры, количества товара. А вот получить цену товара в документе ну никак. Есть сумма документа, но это не то.

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

Msoul

Я бы сделал так:
Запрос сокращен, но я думаю без труда можно его расширить

ВЫБРАТЬ
ТоварыНаСкладах.Регистратор КАК Документ
ПОМЕСТИТЬ Документы
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
ТоварыНаСкладах.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
И ТоварыНаСкладах.Номенклатура В ИЕРАРХИИ(&Номенклатура)

СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Ссылка.Дата,
РеализацияТоваровУслугТовары.Ссылка.Контрагент,
РеализацияТоваровУслугТовары.Номенклатура,
РеализацияТоваровУслугТовары.Цена
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
РеализацияТоваровУслугТовары.Ссылка.Ссылка В
(ВЫБРАТЬ
Документы.Документ
ИЗ
Документы)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка.Дата,
ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
ПоступлениеТоваровУслугТовары.Номенклатура,
ПоступлениеТоваровУслугТовары.Цена
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка В
(ВЫБРАТЬ
Документы.Документ
ИЗ
Документы)

headstik

Честно говоря для меня это немного сложно, я новичок. Это несколько запросов или один? Я так пониманию каждый новый текст запроса начинается со слова ВЫБРАТЬ?
А нельзя дополнить текст запроса размещенный мной выше для получения цены товара?

Msoul

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


headstik

Что-то не так. Выдает ошибку:
Ошибка при вызове метода контекста (Выполнить): {(11, 1)}: Синтаксическая ошибка "РеализацияТоваровУслугТовары.Ссылка.Дата"
<<?>>РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,

Насколько я понимаю в данном коде
ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка.Дата,
    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.Цена
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка В
            (ВЫБРАТЬ
                Документы.Документ
            ИЗ
                Документы)
|ОБЪЕДИНИТЬ ВСЕ

происходит обращение к табличной части документа к параметрам Дата и Контрагент которых там нет.

headstik

Почему-то в этом месте
СГРУППИРОВАТЬ ПО
    ТоварыНаСкладах.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ

пишет что
ЦитироватьПропущен символ '"' (двойная кавычка)
   |СГРУППИРОВАТЬ ПО ТоварыНаСкладах.Регистратор<<?>>
Что не так?
Добавлено: 07 янв 2013, 14:37


Нашел. Забыл поставить перед ; и ////// прямой слэш )))

Все таки я добью свой вариант.
Следующий код
|  ВЫБОР
|    КОГДА ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА Документ.РеализацияТоваровУслуг.Товары.Цена
|  КОНЕЦ КАК Цена

считается не валидным. Выходит следующее сообщение
ЦитироватьОшибка при вызове метода контекста (Выполнить): {(27, 93)}: Неверные параметры "Документ.РеализацияТоваровУслуг.Товары.Цена"
КОГДА ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА ЗНАЧЕНИЕ(<<?>>Документ.РеализацияТоваровУслуг.Товары.Цена)
Просьба знающих подсказать в чем моя ошибка. Заранее спасибо.

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

headstik

Все таки добил вариант Msoul'а
Написал так:
ВЫБРАТЬ
    ТоварыНаСкладах.Регистратор КАК Документ
ПОМЕСТИТЬ Документы
ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
    ТоварыНаСкладах.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
СГРУППИРОВАТЬ ПО
    ТоварыНаСкладах.Регистратор
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
""Реализация товаров и услуг"" КАК ВидДокумента,
РеализацияТоваровУслуг.Ссылка.Дата КАК Дата,
    РеализацияТоваровУслуг.Ссылка.Контрагент КАК Клиент,
РеализацияТоваровУслуг.Ссылка.Номер КАК НомерДокумента,
РеализацияТоваровУслугТовары.Номенклатура.Код КАК КодТовара,
    РеализацияТоваровУслугТовары.Номенклатура КАК Товар,
РеализацияТоваровУслугТовары.Количество*РеализацияТоваровУслугТовары.Коэффициент КАК Количество,
    ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Цена/РеализацияТоваровУслугТовары.Коэффициент КАК ЧИСЛО (15,2)) КАК Цена
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
            ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
            ГДЕ
    РеализацияТоваровУслуг.Ссылка В
            (ВЫБРАТЬ Документы.Документ ИЗ Документы) И
                РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура)

Всем спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск