"ВЫБРАТЬ | Номенклатура1.Производитель.Наименование КАК Производитель, | Номенклатура1.Артикул КАК Артикул, | Номенклатура1.тАртикул КАК тАртикул, | Номенклатура1.Наименование, | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток - ОстаткиТоваровКомпанииОстатки.РезервОстаток КАК Количество, | ЦеныСрезПоследних.Цена, | NULL КАК Характеристика, | Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик, | ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК Себест, | ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК СебестУпр, | ЦеныСрезПоследних.Цена КАК ЦенаУпр, ----> | РАЗНОСТЬДАТ(ПартииТоваровКомпанииОстатки.Партия.Дата, &Дата, ДЕНЬ) КАК СрокХранения |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Дата, СкладКомпании В (&Склад)) КАК ОстаткиТоваровКомпанииОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1 | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = Номенклатура1.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних( | &Дата, | ТипЦен = &Цена | И ПодразделениеКомпании = &Подразделение) КАК ЦеныСрезПоследних | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ЦеныСрезПоследних.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ПартииТоваровКомпанииОстатки.Номенклатура |ГДЕ | Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик = 3 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Номенклатура1.Производитель.Наименование, | Номенклатура1.Артикул, | Номенклатура1.тАртикул, | Номенклатура1.Наименование, | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток - ОстаткиТоваровКомпанииОстатки.РезервОстаток, | NULL, | ЦеныСрезПоследних.ХарактеристикаНоменклатуры.Наименование, | Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик, | NULL, | NULL, | ЦеныСрезПоследних.Цена, | NULL |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Дата, СкладКомпании В (&Склад)) КАК ОстаткиТоваровКомпанииОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1 | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = Номенклатура1.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних( | &Дата, | ТипЦен = &Цена | И ПодразделениеКомпании = &Подразделение) КАК ЦеныСрезПоследних | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ЦеныСрезПоследних.Номенклатура | И (ЦеныСрезПоследних.ХарактеристикаНоменклатуры.Наименование = ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры.Наименование) |ГДЕ | (Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик = 1 | ИЛИ Номенклатура1.ТипНоменклатуры.ИспользованиеХарактеристик = 2)";
Запрос выполняется нормально, но потребовалось добавить в запрос "СрокХранения" (сколько примерно запчасть лежит на складе). Решил добавить в запрос строчку (в запросе отмечена "----> " ), после чего появилось задваивание некоторых данных.
Как показал анализ - задваиваются строки у которых есть больше одной партии, т.е. если старая партия еще не продалась, а пришла новая. Думал исправить через команду Свернуть таблицу значения, но это приведет к суммированию остальных значений (Остатки, Цены и т.д.).
У меня уже других вариантов не осталось, кроме как получать СрокХранения отдельным запросом (Без повторяющихся) и потом в цикле объединять, но это как-то не по феншую наверное.
Подскажите пожалуйста, как подправить запрос, чтобы не дублировались строки из-за СрокХранения?
pablo @ Сегодня, 12:46
, Не совсем уяснил. Если суммировать Себест, СебестУпр, Количество, Цена суммировать, то оно не просуммирует данные в задваивающихся строках? Или это в самом запросе работает по другому, чем в Свернуть?
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0
bizisoft @ Сегодня, 12:03
, 1. Цену и количество суммировать не надо, т.к. они берутся не из партий. Они - поля для группировки 2. суммировать нужно партии, т.к. две разные по дате партии в сумме дадут общую стоимость по номенклатуре.
Правильно поставленный вопрос содержит до 90% ответа.
Если есть несколько партий, то как должен вычисляться СрокХранения?
Тут ограничений никаких не оговаривалось, поэтому я думал брать самую первую партию. PABLO подсказал Максимум, т.е. если я правильно понял, то это будет брать максимальное значение.
pablo @ Сегодня, 13:07
, Добавил все поля Артикул, Номенклатура, Производитель, Остаток, Цена в группировку, а СебестУпр, Себест, в суммируемое поле СУММ, а СрокХранение в суммированое поле как МАКСИМУМ
Получилось так:
... | СУММА(ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток) КАК Себест, | СУММА(ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток) КАК СебестУпр, | ЦеныСрезПоследних.Цена КАК ЦенаУпр, | МАКСИМУМ(РАЗНОСТЬДАТ(ПартииТоваровКомпанииОстатки.Партия.Дата, &Дата, ДЕНЬ)) КАК СрокХранения |ИЗ ...
Заметили некоторую неточность в работе запроса. Если партия товара одна, то себестоимость считается нормально, но если партий больше, то после сворачивания результирующей ТЗ, получается неверная Себестоимость, которая суммирует Себестоимость каждой партии.
Подскажите пожалуйста, возможно-ли так, чтобы "Сворачивание" происходило в самом запросе, чтобы не требовалось выполнение Сворачивание результирующей ТЗ?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!