Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Задваивание строк в результирующих данных запроса          
bizisoft Подменю пользователя
сообщение 30.04.20, 11:32
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

1С8 Предприятие 8.2.19.130
Альфа-Авто 4.1.21.01

Добрый день.
Подскажите пожалуйста, как решить проблему с задваиванием строк в данных полученных запросом?

Есть такой запрос:
Код
"ВЫБРАТЬ
                  |    Номенклатура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)";


Запрос выполняется нормально, но потребовалось добавить в запрос "СрокХранения" (сколько примерно запчасть лежит на складе).
Решил добавить в запрос строчку (в запросе отмечена "----> " ), после чего появилось задваивание некоторых данных.

Как показал анализ - задваиваются строки у которых есть больше одной партии, т.е. если старая партия еще не продалась, а пришла новая.
Думал исправить через команду Свернуть таблицу значения, но это приведет к суммированию остальных значений (Остатки, Цены и т.д.).

У меня уже других вариантов не осталось, кроме как получать СрокХранения отдельным запросом (Без повторяющихся) и потом в цикле объединять, но это как-то не по феншую наверное.

Подскажите пожалуйста, как подправить запрос, чтобы не дублировались строки из-за СрокХранения?

Сообщение отредактировал Vofka - 30.04.20, 11:54


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

pablo Подменю пользователя
сообщение 30.04.20, 11:46
Сообщение #2

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Добавьте группировку в запрос по всем полям, кроме Себест, СебестУпр и СрокХранения. Первые два поля суммировать, третье - Максимум.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 30.04.20, 12:03
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

pablo @ Сегодня, 12:46 * ,
Не совсем уяснил.
Если суммировать Себест, СебестУпр, Количество, Цена суммировать, то оно не просуммирует данные в задваивающихся строках?
Или это в самом запросе работает по другому, чем в Свернуть?


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Petre Подменю пользователя
сообщение 30.04.20, 12:04
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Если есть несколько партий, то как должен вычисляться СрокХранения?


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: bizisoft,

pablo Подменю пользователя
сообщение 30.04.20, 12:07
Сообщение #5

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

bizisoft @ Сегодня, 12:03 * ,
1. Цену и количество суммировать не надо, т.к. они берутся не из партий. Они - поля для группировки
2. суммировать нужно партии, т.к. две разные по дате партии в сумме дадут общую стоимость по номенклатуре.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 30.04.20, 12:21
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Цитата(Petre @ 30.04.20, 13:04) *
Если есть несколько партий, то как должен вычисляться СрокХранения?

Тут ограничений никаких не оговаривалось, поэтому я думал брать самую первую партию.
PABLO подсказал Максимум, т.е. если я правильно понял, то это будет брать максимальное значение.

pablo @ Сегодня, 13:07 * ,
Добавил все поля Артикул, Номенклатура, Производитель, Остаток, Цена в группировку, а СебестУпр, Себест, в суммируемое поле СУММ, а СрокХранение в суммированое поле как МАКСИМУМ

Получилось так:
...
|    СУММА(ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток) КАК Себест,
|    СУММА(ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток) КАК СебестУпр,
|    ЦеныСрезПоследних.Цена КАК ЦенаУпр,
|    МАКСИМУМ(РАЗНОСТЬДАТ(ПартииТоваровКомпанииОстатки.Партия.Дата, &Дата, ДЕНЬ)) КАК СрокХранения
|ИЗ
...


Я правильно понял идею?


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

pablo Подменю пользователя
сообщение 30.04.20, 12:33
Сообщение #7

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

bizisoft @ Сегодня, 12:21 * ,
да


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 01.05.20, 18:05
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Все получилось.
Благодарю за помощь.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

bizisoft Подменю пользователя
сообщение 25.05.20, 10:10
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Заметили некоторую неточность в работе запроса.
Если партия товара одна, то себестоимость считается нормально, но если партий больше, то после сворачивания результирующей ТЗ, получается неверная Себестоимость, которая суммирует Себестоимость каждой партии.

Подскажите пожалуйста, возможно-ли так, чтобы "Сворачивание" происходило в самом запросе, чтобы не требовалось выполнение Сворачивание результирующей ТЗ?


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

sava1 Подменю пользователя
сообщение 25.05.20, 10:15
Сообщение #10

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

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

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 25.05.20, 10:18
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

sava1 @ Сегодня, 11:15 * ,
Я правильно понимаю, что это нужно делать через временную таблицу?


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

sava1 Подменю пользователя
сообщение 25.05.20, 11:17
Сообщение #12

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

да. Выборка из рег.Партии - Поместить тВрем

Левое соединение тВрем (вместо регистра)

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 25.05.20, 15:35
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Сделал через вложенный запрос, т.к. у меня вызвало затруднение переделать запрос с использованием временныхТаблиц

ВЫБРАТЬ
                  |    Номенклатура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)


Проверил несколько значений - вроде все теперь нормально.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 17:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!