Информация об общем количестве всех приходов и расходов по номенклатуре

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
Информация об общем количестве всех приходов и расходов по номенклатуре
 
Добрый день!
Подскажите, пожалуйста, где хранится/как получить программно информацию о том, сколько всего шт. определенной номенклатуры приходило и было продано?

Отчёты не подходят, т.к. хочется данную информацию вставить в какую-то из форм АРМ или основной интерфейс, где есть список номенклатуры.
 
Можно получить написав запрос к регистру накопления.
Если в разрезе: склада, номенклатуры, характеристики, то используйте регистр "Остатки товаров компании", а если требуется и в разрезе партий, то используйте регистр "Партии товаров компании".
Приход и Расход по количеству можно получить из виртуальной функции Обороты.

Пример:
ВЫБРАТЬ
ОстаткиТоваровКомпанииОбороты.Номенклатура,
ОстаткиТоваровКомпанииОбороты.СкладКомпании,
ОстаткиТоваровКомпанииОбороты.ХарактеристикаНоменклатуры,
ОстаткиТоваровКомпанииОбороты.КоличествоПриход,
ОстаткиТоваровКомпанииОбороты.КоличествоРасход
ИЗ
РегистрНакопления.ОстаткиТоваровКомпании.Обороты(&ДатаНач, &ДатаКон, День, Номенклатура = &Номенклатура) КАК ОстаткиТоваровКомпанииОбороты

Но так Вы не получите конкретно сколько продано или поступило т.к. это может быть и операцией перемещения

Если нужно исключать некоторые документы из результата то нужно брать не виртуальную таблицу, а физическую и делать отбор по нужным регистраторам например:
ВЫБРАТЬ
ОстаткиТоваровКомпании.Номенклатура,
ОстаткиТоваровКомпании.СкладКомпании,
ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры,
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) КАК КоличествоПриход,
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) КАК КоличествоРасход
ИЗ
  РегистрНакопления.ОстаткиТоваровКомпании КАК ОстаткиТоваровКомпании
ГДЕ
ОстаткиТоваровКомпании.Номенклатура = &Номенклатура И
(НЕ ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
СГРУППИРОВАТЬ ПО
ОстаткиТоваровКомпании.Номенклатура,
ОстаткиТоваровКомпании.СкладКомпании,
ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры
ИМЕЮЩИЕ
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) <> 0 ИЛИ
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) <> 0
Изменено: Виктор Радько - 16.09.2010 15:12:27
 
На самом деле, наверно задачу надо разделить на 2 части.
1. Получить общее количество шт., которое пришло и продали - что можно получить вышеприведенным запросом.

2. Получить количество шт. прихода и продажи в разрезе документов "Поступление товара" и "Реализация товара". Так чтобы была Номенклатура, Кол-во шт., Дата, Документ - такое возможно? - я так понимаю что-то подобное сделано в отчете "Остатки и обороты партий товаров", только без документов реализации.
 
Цитата
Александр Тугаенко пишет:
Получить количество шт. прихода и продажи в разрезе документов "Поступление товара" и "Реализация товара". Так чтобы была Номенклатура, Кол-во шт., Дата, Документ - такое возможно? - я так понимаю что-то подобное сделано в отчете "Остатки и обороты партий товаров", только без документов реализации.

А второй запрос не подойдет?
он конечно база, но все же в нем есть условие:
ГДЕ
....
(НЕ ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)

можно и так написать:

ГДЕ
....
(ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.РеализацияТоваров)

тогда получим только реализованные товары  и т.д.

не забудьте, а возвратах поставщику и от покупателя.

Регистратор это документ, который регистрирует движения по регистру (регистрирует хоз. операцию) Вам нужны поступления и реализации.
Изменено: Виктор Радько - 17.09.2010 12:38:25
 
Виктор Радько,
Спасибо, получилось!
только почему-то отображается 2 раза каждая строка, понимаю, что надо наложить какое-то ещё условие, но пока не получается, в какую сторону смотреть?
Скриншот
И код:
Код
ВЫБРАТЬ
    ОстаткиТоваровКомпании.Номенклатура,
    ОстаткиТоваровКомпании.СкладКомпании,
    ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры,
    ВЫБОР
        КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
            ТОГДА ОстаткиТоваровКомпании.Количество
        ИНАЧЕ 0
    КОНЕЦ КАК КоличествоПриход,
    ВЫБОР
        КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
            ТОГДА ОстаткиТоваровКомпании.Количество
        ИНАЧЕ 0
    КОНЕЦ КАК КоличествоРасход,
    ПоступлениеТоваровТовары.Цена,
    ОстаткиТоваровКомпании.Регистратор
ИЗ
    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании КАК ОстаткиТоваровКомпании
        ПО ПоступлениеТоваровТовары.Номенклатура.Ссылка = ОстаткиТоваровКомпании.Номенклатура.Ссылка
ГДЕ
    ОстаткиТоваровКомпании.Номенклатура = &Номенклатура
    И (НЕ ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)

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

ИМЕЮЩИЕ
    (СУММА(ВЫБОР
                КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                    ТОГДА ОстаткиТоваровКомпании.Количество
                ИНАЧЕ 0
            КОНЕЦ) <> 0
        ИЛИ СУММА(ВЫБОР
                КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                    ТОГДА ОстаткиТоваровКомпании.Количество
                ИНАЧЕ 0
            КОНЕЦ) <> 0)
 
Задвоение происходит т.к. две строки из документа с разной ценой соединяются с двумя строками таблицы  ОстаткиТоваровКомпании( у нее два различных регистратора), а соединяем только по номенклатуре. Вот и получаем для каждой строки документа, по две строки из регистра с разными регистраторами. Если будет еще один регистратор, то получим две строки документа умноженные на три строки движений остатков, на каждую строку документа по три строки регистра. Советую обе таблицы формировать и сгруппировывать отдельно при помощи пакетного запроса, причем при формировании таблицы из регистра использовать отбор из строк таблицы документа, условие соединения должно быть как можно подробней, т.е. если выводите характеристики, то делайте по ним соединение тоже, по складу тоже нужно делать ведь это дополнительные разрезы ресурсов иначе снова получите задвоение если значения этих полей будут различаться у соединяемых таблиц. Если нужно получать для одной строки документа одну строку регистра нужно убрать вывод регистратора.

ПоступлениеТоваровТовары.Номенклатура.Ссылка это некрасивый подход нужно так ПоступлениеТоваровТовары.Номенклатура иначе при выполнении запроса будет создано дополнительное неявное соединение к справочнику Номенклатура (дополнительная нагрузка).
 
Спасибо за развернутый ответ!
1) Однако если есть Регистратор - то данные не задваиваются (убрал уже расходы)

При этом если добавлять цену(из документа ПоступлениеТовара ТЧ Товары) - то в таком случае задваиваются. Как этого избежать? Регистратор мне нужен, чтобы иметь ссылку на документ Поступления товара...

2) Я так понимаю, что цена в док. ПоступлениеТовара ТЧ Товары - это входная цена поставщика, а себестоимость (входная цена + дополнительные расходы и т.п.)надо уже искать в Регистре Цены или в регистре ПартииТоваровКомпании?
Изменено: Александр Тугаенко - 21.09.2010 17:43:20 (уточнение)
 
1. Можно получить цену из формулы СУММА(ПоступлениеТоваровТовары.СуммаВсего)/СУММА(ПоступлениеТоваровТовары.КоличествоБазовое) КАК Цена

2. Себестоимость нужно брать из регистра ПартииТоваровКомпании. Только если себестоимость нужна текущая, то используйте виртуальную функцию остатки, если себестоимость при поступлении, то вместо обращения к регистру ОстаткиТоваровКомпании используйте ПартииТоваровКомпании.
 
Спасибо! :)
 
Мда, всё-таки, не до конца ещё разобрался.
сделал запрос из 2-х регистров (ПартииТоваровКомпании и ПартииТоваровКомпанииОстатки) и получил себестоимость(ЦенаСклада) только для оставшихся деталей и это понятно:

Код
ВЫБРАТЬ
   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
   ПартииТоваровКомпании.Регистратор.Дата КАК Дата,
   ПартииТоваровКомпании.Регистратор КАК Документ,
   ПартииТоваровКомпании.Регистратор.Контрагент КАК Контрагент,
   ПартииТоваровКомпании.Количество КАК Количество,
   ПартииТоваровКомпании.СуммаУпр,
   ВЫБОР
      КОГДА (НЕ ПартииТоваровКомпании.Количество = 0)
         ТОГДА ПартииТоваровКомпании.СуммаУпр / ПартииТоваровКомпании.Количество
      ИНАЧЕ 0
   КОНЕЦ КАК ЦенаДилера,
   ПартииТоваровКомпанииОстатки.СуммаУпрОстаток Как ЦенаСклада
ИЗ
   РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
      ПО (ПартииТоваровКомпанииОстатки.Номенклатура = ПартииТоваровКомпании.Номенклатура)
         И (ПартииТоваровКомпанииОстатки.Партия = ПартииТоваровКомпании.Партия)
ГДЕ
   ПартииТоваровКомпании.Номенклатура = &Номенклатура
   И ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
   И ПартииТоваровКомпании.Количество > 0

СГРУППИРОВАТЬ ПО
   ПартииТоваровКомпании.Партия,
   ПартииТоваровКомпании.Регистратор,
   ПартииТоваровКомпании.Номенклатура,
   ПартииТоваровКомпании.Регистратор.Дата,
   ПартииТоваровКомпании.Регистратор.Контрагент,
   ПартииТоваровКомпании.Количество,
   ПартииТоваровКомпании.СуммаУпр,
   ВЫБОР
      КОГДА ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
         ТОГДА ПартииТоваровКомпании.Количество
      ИНАЧЕ 0
   КОНЕЦ,
   ПартииТоваровКомпанииОстатки.КоличествоОстаток,
   ПартииТоваровКомпанииОстатки.СуммаУпрОстаток

УПОРЯДОЧИТЬ ПО
   Дата УБЫВ

попробовал получить информацию только по регистру "ПартииТоваровКомпании" сложив все суммы по партиям(поступление товара и доп.расходы) и разделив на кол.товара в рамках партии, однако при этом, во-первых, получаю ненужную строку Дополнительные расходы, а во вторых, почему-то эти дополнительные расходы не суммируются с суммой самой детали :( :

Код
ВЫБРАТЬ
    ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
    ПартииТоваровКомпании.Регистратор.Дата КАК Дата,
    ПартииТоваровКомпании.Партия Как Партия,
    ПартииТоваровКомпании.Регистратор КАК Документ,
    ПартииТоваровКомпании.Регистратор.Контрагент КАК Контрагент,
    ПартииТоваровКомпании.Количество КАК Количество,
    ПартииТоваровКомпании.СуммаУпр,
    ВЫБОР
        КОГДА (НЕ ПартииТоваровКомпании.Количество = 0)
            ТОГДА ПартииТоваровКомпании.СуммаУпр / ПартииТоваровКомпании.Количество
        ИНАЧЕ 0
    КОНЕЦ КАК ЦенаДилера,
    ВЫБОР
        КОГДА (НЕ ПартииТоваровКомпании.Количество = 0)
            ТОГДА ПартииТоваровКомпании.СуммаУпр / ПартииТоваровКомпании.Количество
        ИНАЧЕ 0
    КОНЕЦ КАК ЦенаСклада
ИЗ
    РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
ГДЕ
    ПартииТоваровКомпании.Номенклатура = &Номенклатура
    И ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

СГРУППИРОВАТЬ ПО
    ПартииТоваровКомпании.Партия,
    ПартииТоваровКомпании.Номенклатура,
    ПартииТоваровКомпании.Регистратор.Дата,
    ПартииТоваровКомпании.Регистратор,
    ПартииТоваровКомпании.Регистратор.Контрагент,
    ПартииТоваровКомпании.Количество,
    ПартииТоваровКомпании.СуммаУпр

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ

Помогите, пожалуйста, привести запрос к нужному виду - чтобы по строкам были только партии(Поступление товара), а в колонке ЦенаСклада корректно считалась себестоимость для всех пришедших партий.
Изменено: Александр Тугаенко - 22.09.2010 15:18:05 (уточнение регистров)
 
Получил результут взяв 2 регистра:ПартииТоваровКомпании (для основных данных) и ПартииТоваровКомпанииОбороты (я так понимаю виртуальной - для получения себестоимости)
Подскажите, насколько это правильно, может можно самому получить информацию, которая лежит в ПартииТоваровКомпанииОбороты?

Код
ВЫБРАТЬ
   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
   ПартииТоваровКомпании.Регистратор.Дата КАК Дата,
   ПартииТоваровКомпании.Партия КАК Партия,
   ПартииТоваровКомпании.Регистратор КАК Документ,
   ПартииТоваровКомпании.Регистратор.Контрагент КАК Контрагент,
   ПартииТоваровКомпании.Количество КАК Количество,
   ПартииТоваровКомпании.СуммаУпр,
   ВЫБОР
      КОГДА (НЕ ПартииТоваровКомпании.Количество = 0)
         ТОГДА ПартииТоваровКомпании.СуммаУпр / ПартииТоваровКомпании.Количество
      ИНАЧЕ 0
   КОНЕЦ КАК ЦенаДилера,
   ВЫБОР
      КОГДА (НЕ ПартииТоваровКомпанииОбороты.КоличествоПриход = 0)
         ТОГДА ПартииТоваровКомпанииОбороты.СуммаУпрПриход / ПартииТоваровКомпанииОбороты.КоличествоПриход
      ИНАЧЕ 0
   КОНЕЦ КАК ЦенаСклада
ИЗ
   РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.Обороты КАК ПартииТоваровКомпанииОбороты
      ПО ПартииТоваровКомпанииОбороты.Номенклатура = ПартииТоваровКомпании.Номенклатура
         И ПартииТоваровКомпанииОбороты.Партия = ПартииТоваровКомпании.Партия
ГДЕ
   ПартииТоваровКомпании.Номенклатура = &Номенклатура
   И ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
   И ПартииТоваровКомпании.Количество > 0

СГРУППИРОВАТЬ ПО
   ПартииТоваровКомпании.Партия,
   ПартииТоваровКомпании.Номенклатура,
   ПартииТоваровКомпании.Регистратор.Дата,
   ПартииТоваровКомпании.Регистратор,
   ПартииТоваровКомпании.Регистратор.Контрагент,
   ПартииТоваровКомпании.Количество,
   ПартииТоваровКомпании.СуммаУпр,
   ПартииТоваровКомпанииОбороты.Партия,
   ПартииТоваровКомпанииОбороты.КоличествоПриход,
   ПартииТоваровКомпанииОбороты.СуммаУпрПриход

УПОРЯДОЧИТЬ ПО
   Дата УБЫВ


P.S. извиняюсь за такое влезание в дебри кода, привык к обыкновенным запросам к БД и переучиться на идеологию запросов 1С пока не очень получается - не всегда понятно в каком объекте какую информацию нужно искать...
 
Такой запрос подойдет?

ВЫБРАТЬ
   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
   ПартииТоваровКомпании.СкладКомпании КАК СкладКомпании,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ПартииТоваровКомпании.Партия Как Партия,
   ВЫРАЗИТЬ(ПартииТоваровКомпании.Партия КАК Документ.ПоступлениеТоваров).Дата КАК ДатаПоступления,
   ВЫРАЗИТЬ(ПартииТоваровКомпании.Партия КАК Документ.ПоступлениеТоваров).Контрагент КАК Контрагент,
   СУММА(ПартииТоваровКомпании.Количество) КАК Количество,
   СУММА(ПартииТоваровКомпании.СуммаУпр) КАК СуммаУпр
ПОМЕСТИТЬ
ТаблицаПартииТоваровКомпании
ИЗ
   РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
ГДЕ
   ПартииТоваровКомпании.Номенклатура = &Номенклатура И
   ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И
   ПартииТоваровКомпании.Партия ССЫЛКА Документ.ПоступлениеТоваров
СГРУППИРОВАТЬ ПО    
ПартииТоваровКомпании.Номенклатура,
ПартииТоваровКомпании.СкладКомпании,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры,
   ПартииТоваровКомпании.Партия
ИМЕЮЩИЕ
СУММА(ПартииТоваровКомпании.Количество) <> 0 ИЛИ
   СУММА(ПартииТоваровКомпании.СуммаУпр) <> 0
;

ВЫБРАТЬ
   ПартииТоваровКомпании.СкладКомпании КАК СкладКомпании,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ВЫРАЗИТЬ(СУММА(ПартииТоваровКомпании.СуммаУпр) / СУММА(ПартииТоваровКомпании.Количество) КАК Число(15, 2)) КАК Цена
ПОМЕСТИТЬ
ТаблицаЦенПоСкладам
ИЗ
   ТаблицаПартииТоваровКомпании КАК ПартииТоваровКомпании
СГРУППИРОВАТЬ ПО    
   ПартииТоваровКомпании.СкладКомпании,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры
ИМЕЮЩИЕ
СУММА(ПартииТоваровКомпании.Количество) <> 0
;    

ВЫБРАТЬ
   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
   ПартииТоваровКомпании.СкладКомпании КАК СкладКомпании,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ПартииТоваровКомпании.Партия Как Партия,
   ПартииТоваровКомпании.ДатаПоступления КАК ДатаПоступления,
   ПартииТоваровКомпании.Контрагент КАК Контрагент,
   ПартииТоваровКомпании.Количество КАК Количество,
   ПартииТоваровКомпании.СуммаУпр КАК СуммаУпр,
   ВЫБОР
КОГДА ПартииТоваровКомпании.Количество = 0 ТОГДА
0
ИНАЧЕ
ВЫРАЗИТЬ(ПартииТоваровКомпании.СуммаУпр / ПартииТоваровКомпании.Количество КАК Число(15, 2))
КОНЕЦ КАК ЦенаДилера,
ЕСТЬNULL(ТаблицаЦенПоСкладам.Цена, 0) КАК ЦенаСклада
ИЗ
ТаблицаПартииТоваровКомпании КАК ПартииТоваровКомпании
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаЦенПоСкладам КАК ТаблицаЦенПоСкладам
ПО
   ПартииТоваровКомпании.СкладКомпании = ТаблицаЦенПоСкладам.СкладКомпании И
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры = ТаблицаЦенПоСкладам.ХарактеристикаНоменклатуры
   
УПОРЯДОЧИТЬ ПО
  ДатаПоступления УБЫВ
 
Такой тоже запрос подойдет, тока тогда нужно подрихтовать колонку ЦенаСклада(в коде), на картинке я поменял местами ЦенаСклада(Себестоимость) и ЦенаДилера(то по какой цене получаем в ПоступленииТоваров)
Должно быть 1,5 - т.е. где-то во втором знаке в связи с округлением теряется точность, и почему-то одинаковая цена для всех строк... хотя уже по суммам видно, что должна быть разная.
 
Цитата
Александр Тугаенко пишет:
Получил результут взяв 2 регистра:ПартииТоваровКомпании (для основных данных) и ПартииТоваровКомпанииОбороты (я так понимаю виртуальной - для получения себестоимости)
Подскажите, насколько это правильно, может можно самому получить информацию, которая лежит в ПартииТоваровКомпанииОбороты?

Вы избавились от лишней строки не за счет добавления соединения по оборотам, а за счет добавления нового условия в отборе И ПартииТоваровКомпании.Количество > 0. Доп. расходы не увеличивают количество только себестоимость. В этом примере оборотная таблица за весь период без отборов равна таблице остатков, а если еще не передавать отбор параметром, то и по всем товарам это плохо. Виртуальная таблица для регистров с видом регистра "остатки" всегда формируется из физической. Так что для данной реализации выиграша никакого только минусы.
 
Исправленный запрос

ВЫБРАТЬ
   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ПартииТоваровКомпании.Партия Как Партия,
   ПартииТоваровКомпании.Период КАК ДатаПоступления,
   ВЫРАЗИТЬ(ПартииТоваровКомпании.Партия КАК Документ.ПоступлениеТоваров).Контрагент КАК Контрагент,
   СУММА(ПартииТоваровКомпании.Количество) КАК Количество,
   СУММА(ПартииТоваровКомпании.СуммаУпр) КАК СуммаУпр,
    ВЫБОР
КОГДА СУММА(ПартииТоваровКомпании.Количество) = 0 ТОГДА
0
ИНАЧЕ
ВЫРАЗИТЬ(СУММА(ПартииТоваровКомпании.СуммаУпр) / СУММА(ПартииТоваровКомпании.Количество) КАК Число(15, 2))
КОНЕЦ КАК ЦенаДилера
ПОМЕСТИТЬ
ТаблицаПартииТоваровКомпании
ИЗ
   РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
ГДЕ
   ПартииТоваровКомпании.Номенклатура = &Номенклатура И
   ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И
   ПартииТоваровКомпании.Регистратор ССЫЛКА Документ.ПоступлениеТоваров
СГРУППИРОВАТЬ ПО    
ПартииТоваровКомпании.Номенклатура,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры,
   ПартииТоваровКомпании.Период,
   ПартииТоваровКомпании.Партия
ИМЕЮЩИЕ
СУММА(ПартииТоваровКомпании.Количество) <> 0 ИЛИ
   СУММА(ПартииТоваровКомпании.СуммаУпр) <> 0
;

ВЫБРАТЬ
   ПартииТоваровКомпании.Партия КАК Партия,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ВЫРАЗИТЬ(СУММА(ПартииТоваровКомпании.СуммаУпр) / СУММА(ПартииТоваровКомпании.Количество) КАК Число(15, 2)) КАК Цена
ПОМЕСТИТЬ
ТаблицаЦенПоСкладам
ИЗ
РегистрНакопления.ПартииТоваровКомпании КАК ПартииТоваровКомпании
ГДЕ
   ПартииТоваровКомпании.Номенклатура = &Номенклатура И
   ПартииТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И
   ПартииТоваровКомпании.Партия ССЫЛКА Документ.ПоступлениеТоваров
СГРУППИРОВАТЬ ПО    
ПартииТоваровКомпании.Партия,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры
ИМЕЮЩИЕ
СУММА(ПартииТоваровКомпании.Количество) <> 0
;    

ВЫБРАТЬ
   ПартииТоваровКомпании.Номенклатура КАК Номенклатура,
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ПартииТоваровКомпании.Партия Как Партия,
   ПартииТоваровКомпании.ДатаПоступления КАК ДатаПоступления,
   ПартииТоваровКомпании.Контрагент КАК Контрагент,
   ПартииТоваровКомпании.Количество КАК Количество,
   ПартииТоваровКомпании.СуммаУпр КАК СуммаУпр,
   ПартииТоваровКомпании.ЦенаДилера КАК ЦенаДилера,
ЕСТЬNULL(ТаблицаЦенПоСкладам.Цена, 0) КАК ЦенаСклада
ИЗ
ТаблицаПартииТоваровКомпании КАК ПартииТоваровКомпании
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаЦенПоСкладам КАК ТаблицаЦенПоСкладам
ПО
   ПартииТоваровКомпании.Партия = ТаблицаЦенПоСкладам.Партия И
   ПартииТоваровКомпании.ХарактеристикаНоменклатуры = ТаблицаЦенПоСкладам.ХарактеристикаНоменклатуры
   
УПОРЯДОЧИТЬ ПО
  ДатаПоступления УБЫВ
 
Спасибо!
Да так корректно работает.

Подскажите, пожалуйста, а как-то проще можно проверить ХозОперацию а не делать
Код
ВЫРАЗИТЬ(ПартииТоваровКомпании.Партия КАК Документ.ПоступлениеТоваров)
а потом
Код
ПартииТоваровКомпании.Партия ССЫЛКА Документ.ПоступлениеТоваров 
?

Есть ли возможность сразу что-то сравнить с Документ.ПоступлениеТоваров?
 
Все сделано и так оптимально Функция ВЫРАЗИТЬ() нужна не для проверки, а для приведения составного типа к конкретному в данном случае данная функция помогает избавиться от неявных соединений для получения из партий контрагента. Без явного указания типа через ВЫРАЗИТЬ() план запросов не может определить с каким конкретным типом из всевозможных (у партии составной тип) мы работаем и он попросту сделает соединение к каждому документу входящему в описание типа, а так мы получим всего одно соединение с документами поступление.
 
Спасибо за разъяснение.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С