Информация об общем количестве всех приходов и расходов по номенклатуре
Читают тему
Вход в личный кабинет
Для получения доступа к форуму необходимо
авторизоваться
или
зарегистрироваться
на сайте.
{{ formTitle ? formTitle : 'Заказ обратного звонка' }}
{{ formDescription }}
Сообщить об ошибке
Подскажите, пожалуйста, где хранится/как получить программно информацию о том, сколько всего шт. определенной номенклатуры приходило и было продано?
Отчёты не подходят, т.к. хочется данную информацию вставить в какую-то из форм АРМ или основной интерфейс, где есть список номенклатуры.
Если в разрезе: склада, номенклатуры, характеристики, то используйте регистр "Остатки товаров компании", а если требуется и в разрезе партий, то используйте регистр "Партии товаров компании".
Приход и Расход по количеству можно получить из виртуальной функции Обороты.
Пример:
ВЫБРАТЬ
ОстаткиТоваровКомпанииОбороты.Номенклатура,
ОстаткиТоваровКомпанииОбороты.СкладКомпании,
ОстаткиТоваровКомпанииОбороты.ХарактеристикаНоменклатуры,
ОстаткиТоваровКомпанииОбороты.КоличествоПриход,
ОстаткиТоваровКомпанииОбороты.КоличествоРасход
ИЗ
РегистрНакопления.ОстаткиТоваровКомпании.Обороты(&ДатаНач, &ДатаКон, День, Номенклатура = &Номенклатура) КАК ОстаткиТоваровКомпанииОбороты
Но так Вы не получите конкретно сколько продано или поступило т.к. это может быть и операцией перемещения
Если нужно исключать некоторые документы из результата то нужно брать не виртуальную таблицу, а физическую и делать отбор по нужным регистраторам например:
ВЫБРАТЬ
ОстаткиТоваровКомпании.Номенклатура,
ОстаткиТоваровКомпании.СкладКомпании,
ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры,
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) КАК КоличествоПриход,
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) КАК КоличествоРасход
ИЗ
РегистрНакопления.ОстаткиТоваровКомпании КАК ОстаткиТоваровКомпании
ГДЕ
ОстаткиТоваровКомпании.Номенклатура = &Номенклатура И
(НЕ ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
СГРУППИРОВАТЬ ПО
ОстаткиТоваровКомпании.Номенклатура,
ОстаткиТоваровКомпании.СкладКомпании,
ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры
ИМЕЮЩИЕ
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) <> 0 ИЛИ
СУММА(ВЫБОР
КОГДА ОстаткиТоваровКомпании.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА
ОстаткиТоваровКомпании.Количество,
ИНАЧЕ
0
КОНЕЦ) <> 0
1. Получить общее количество шт., которое пришло и продали - что можно получить вышеприведенным запросом.
2. Получить количество шт. прихода и продажи в разрезе документов "Поступление товара" и "Реализация товара". Так чтобы была Номенклатура, Кол-во шт., Дата, Документ - такое возможно? - я так понимаю что-то подобное сделано в отчете "Остатки и обороты партий товаров", только без документов реализации.
Получить количество шт. прихода и продажи в разрезе документов "Поступление товара" и "Реализация товара". Так чтобы была Номенклатура, Кол-во шт., Дата, Документ - такое возможно? - я так понимаю что-то подобное сделано в отчете "Остатки и обороты партий товаров", только без документов реализации.
А второй запрос не подойдет?
он конечно база, но все же в нем есть условие:
ГДЕ
....
(НЕ ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
можно и так написать:
ГДЕ
....
(ОстаткиТоваровКомпании.Регистратор ССЫЛКА Документ.РеализацияТоваров)
тогда получим только реализованные товары и т.д.
не забудьте, а возвратах поставщику и от покупателя.
Регистратор это документ, который регистрирует движения по регистру (регистрирует хоз. операцию) Вам нужны поступления и реализации.
Спасибо, получилось!
только почему-то отображается 2 раза каждая строка, понимаю, что надо наложить какое-то ещё условие, но пока не получается, в какую сторону смотреть?
Скриншот
И код:
ПоступлениеТоваровТовары.Номенклатура.Ссылка это некрасивый подход нужно так ПоступлениеТоваровТовары.Номенклатура иначе при выполнении запроса будет создано дополнительное неявное соединение к справочнику Номенклатура (дополнительная нагрузка).
1) Однако если есть Регистратор - то данные не задваиваются (убрал уже расходы)
При этом если добавлять цену(из документа ПоступлениеТовара ТЧ Товары) - то в таком случае задваиваются. Как этого избежать? Регистратор мне нужен, чтобы иметь ссылку на документ Поступления товара...
2) Я так понимаю, что цена в док. ПоступлениеТовара ТЧ Товары - это входная цена поставщика, а себестоимость (входная цена + дополнительные расходы и т.п.)надо уже искать в Регистре Цены или в регистре ПартииТоваровКомпании?
2. Себестоимость нужно брать из регистра ПартииТоваровКомпании. Только если себестоимость нужна текущая, то используйте виртуальную функцию остатки, если себестоимость при поступлении, то вместо обращения к регистру ОстаткиТоваровКомпании используйте ПартииТоваровКомпании.
сделал запрос из 2-х регистров (ПартииТоваровКомпании и ПартииТоваровКомпанииОстатки) и получил себестоимость(ЦенаСклада) только для оставшихся деталей и это понятно:
попробовал получить информацию только по регистру "ПартииТоваровКомпании" сложив все суммы по партиям(поступление товара и доп.расходы) и разделив на кол.товара в рамках партии, однако при этом, во-первых, получаю ненужную строку Дополнительные расходы, а во вторых, почему-то эти дополнительные расходы не суммируются с суммой самой детали
Помогите, пожалуйста, привести запрос к нужному виду - чтобы по строкам были только партии(Поступление товара), а в колонке ЦенаСклада корректно считалась себестоимость для всех пришедших партий.
Подскажите, насколько это правильно, может можно самому получить информацию, которая лежит в ПартииТоваровКомпанииОбороты?
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) КАК ЦенаСклада
ИЗ
ТаблицаПартииТоваровКомпании КАК ПартииТоваровКомпании
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаЦенПоСкладам КАК ТаблицаЦенПоСкладам
ПО
ПартииТоваровКомпании.Партия = ТаблицаЦенПоСкладам.Партия И
ПартииТоваровКомпании.ХарактеристикаНоменклатуры = ТаблицаЦенПоСкладам.ХарактеристикаНоменклатуры
УПОРЯДОЧИТЬ ПО
ДатаПоступления УБЫВ
Да так корректно работает.
Подскажите, пожалуйста, а как-то проще можно проверить ХозОперацию а не делать
Есть ли возможность сразу что-то сравнить с Документ.ПоступлениеТоваров?