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