Заказ покупателя и Реализация товаров и услуг в одном запросе
Всем привет. Что-то я туплю под вечер, может, кто подскажет решение. Имеется УТ 10.3. Необходимо вывести в отчет следующие данные: номенклатура, заказано, зарезервировано, где "заказано" - это количество из тч документа "Заказ покупателя", а "зарезервировано" - количество из документа "Реализация товаров и услуг". При этом должны выполняться следующие условия:
а) в тч РТиУ должен быть указан заказ покупателя (который уйдет в заказано)
б) Дата РТиУ должна быть не позже, чем через 4 дня после заказа покупателя (иначе количество считается равным нулю).
Накорябала такой запрос:
(Просьба не обращать внимания на лишние поля типа регистратора или месяца, а также на названия полей)
И все бы ничего, но отрабатывает лишнее суммирование по заказам. Поясню на примере:
Есть заказ покупателя, заказано 4 штуки какой-то номенклатуры.
Есть две реализации. Один раз реализовали 3 штуки, второй раз 1 штуку.
И по результатам выполнения запроса заказ покупателя показывается дважды, соответственно, вместо 4 нужных штук один раз (заказано и зарезервировано) в отчет выходит 2 строки, где по 4 штуки в заказано и 3/1 штуки в зарезервировано.
Прошу вашей помощи, что я делаю не так?
а) в тч РТиУ должен быть указан заказ покупателя (который уйдет в заказано)
б) Дата РТиУ должна быть не позже, чем через 4 дня после заказа покупателя (иначе количество считается равным нулю).
Накорябала такой запрос:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Регистратор.Дата, МЕСЯЦ) КАК Месяц,
ЗаказыПокупателейОбороты.Номенклатура,
ЗаказыПокупателейОбороты.КоличествоОборот КАК КоличествоОборот,
ЗаказыПокупателейОбороты.Регистратор
ПОМЕСТИТЬ ВТЗаказы
ИЗ
РегистрНакопления.ЗаказыПокупателей.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ЗаказыПокупателейОбороты
ГДЕ
ЗаказыПокупателейОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура)
И ЗаказыПокупателейОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Номенклатура,
РеализацияТоваровУслугТовары.Количество КАК Количество,
РеализацияТоваровУслугТовары.Ссылка,
РеализацияТоваровУслугТовары.ЗаказПокупателя
ПОМЕСТИТЬ ВТРезервы
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
РеализацияТоваровУслугТовары.Ссылка.Проведен = &Проведен
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТЗаказы.Месяц КАК Месяц,
ВТРезервы.Номенклатура КАК Номенклатура,
ВТЗаказы.КоличествоОборот КАК Заказано,
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ВТРезервы.Ссылка.Дата, ВТЗаказы.Регистратор.Дата, ДЕНЬ) > 4
ТОГДА 0
ИНАЧЕ ВТРезервы.Количество
КОНЕЦ КАК Зарезервировано,
ВТЗаказы.Регистратор
ИЗ
ВТЗаказы КАК ВТЗаказы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРезервы КАК ВТРезервы
ПО ВТЗаказы.Регистратор = ВТРезервы.ЗаказПокупателя
И ВТЗаказы.Номенклатура = ВТРезервы.Номенклатура
УПОРЯДОЧИТЬ ПО
Месяц
ИТОГИ
СУММА(Заказано),
СУММА(Зарезервировано)
ПО
ОБЩИЕ,
Месяц
АВТОУПОРЯДОЧИВАНИЕ
Показать(Просьба не обращать внимания на лишние поля типа регистратора или месяца, а также на названия полей)
И все бы ничего, но отрабатывает лишнее суммирование по заказам. Поясню на примере:
Есть заказ покупателя, заказано 4 штуки какой-то номенклатуры.
Есть две реализации. Один раз реализовали 3 штуки, второй раз 1 штуку.
И по результатам выполнения запроса заказ покупателя показывается дважды, соответственно, вместо 4 нужных штук один раз (заказано и зарезервировано) в отчет выходит 2 строки, где по 4 штуки в заказано и 3/1 штуки в зарезервировано.
Прошу вашей помощи, что я делаю не так?
По теме из базы знаний
- Перенос остатков, документов и справочников из БП 3.0 в УТ 10.3. Переносятся остатки товаров, взаиморасчетов и денежных средств, а также документы и справочники
- Товарный чек с логотипом организации (поддержка старых релизов начиная с УТ 11.1.2, где нет такой возможности) для документа Реализация товаров и услуг (РТУ) без использования ККТ. Редакции с 11.1.2 по 11.2
- Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Дюжина вопросов для программиста 1С
- Расходный ордер на товары из документа Реализация товаров и услуг, из Заказа клиента, из Заказа на перемещение или из Перемещения товаров
Найденные решения
(5)Лучше взять не т.ч. документа, а сразу к регистру обратится продажам
В силу понимания задачи думаю вот так
В силу понимания задачи думаю вот так
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, МЕСЯЦ) КАК Месяц,
ЗаказыПокупателейОбороты.Номенклатура,
СУММА(ЗаказыПокупателейОбороты.КоличествоОборот) КАК Количество,
ЗаказыПокупателейОбороты.Регистратор,
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ ВТЗаказы
ИЗ
РегистрНакопления.ЗаказыПокупателей.Обороты(&НачПериода, &КонПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЗаказыПокупателейОбороты
ГДЕ
ЗаказыПокупателейОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя
СГРУППИРОВАТЬ ПО
ЗаказыПокупателейОбороты.Номенклатура,
ЗаказыПокупателейОбороты.Регистратор,
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, ДЕНЬ),
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) КАК Месяц,
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК Период,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество
ПОМЕСТИТЬ ВТРезервы
ИЗ
РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты
ГДЕ
ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО
ПродажиОбороты.ЗаказПокупателя,
ПродажиОбороты.Номенклатура,
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ),
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТЗаказы.Месяц,
ВТЗаказы.Период КАК ПериодЗаказа,
ВТРезервы.Период КАК ПериодРезерва,
ВТЗаказы.Номенклатура,
ВТЗаказы.Количество КАК Заказано,
ЕСТЬNULL(ВТРезервы.Количество, 0) КАК Зарезервировано
ИЗ
ВТЗаказы КАК ВТЗаказы
ЛЕВОЕ СОЕДИНЕНИЕ ВТРезервы КАК ВТРезервы
ПО ВТЗаказы.Номенклатура = ВТРезервы.Номенклатура
И ВТЗаказы.Регистратор = ВТРезервы.ЗаказПокупателя
И (РАЗНОСТЬДАТ(ВТЗаказы.Период, ВТРезервы.Период, ДЕНЬ) <= 4)
АВТОУПОРЯДОЧИВАНИЕ
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Сгруппируй две таблицы и потом объединяй
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Регистратор.Дата, МЕСЯЦ) КАК Месяц,
ЗаказыПокупателейОбороты.Номенклатура,
СУММА(ЗаказыПокупателейОбороты.КоличествоОборот) КАК КоличествоОборот,
ЗаказыПокупателейОбороты.Регистратор
ПОМЕСТИТЬ ВТЗаказы
ИЗ
РегистрНакопления.ЗаказыПокупателей.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ЗаказыПокупателейОбороты
ГДЕ
ЗаказыПокупателейОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура)
И ЗаказыПокупателейОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя
СГРУППИРОВАТЬ ПО
ЗаказыПокупателейОбороты.Номенклатура,
ЗаказыПокупателейОбороты.Регистратор,
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Регистратор.Дата, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Номенклатура,
СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
РеализацияТоваровУслугТовары.Ссылка,
РеализацияТоваровУслугТовары.ЗаказПокупателя
ПОМЕСТИТЬ ВТРезервы
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
РеализацияТоваровУслугТовары.Ссылка.Проведен = &Проведен
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслугТовары.Номенклатура,
РеализацияТоваровУслугТовары.ЗаказПокупателя,
РеализацияТоваровУслугТовары.Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТЗаказы.Месяц КАК Месяц,
ВТРезервы.Номенклатура КАК Номенклатура,
ВТЗаказы.КоличествоОборот КАК Заказано,
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ВТРезервы.Ссылка.Дата, ВТЗаказы.Регистратор.Дата, ДЕНЬ) > 4
ТОГДА 0
ИНАЧЕ ВТРезервы.Количество
КОНЕЦ КАК Зарезервировано,
ВТЗаказы.Регистратор
ИЗ
ВТЗаказы КАК ВТЗаказы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРезервы КАК ВТРезервы
ПО ВТЗаказы.Регистратор = ВТРезервы.ЗаказПокупателя
И ВТЗаказы.Номенклатура = ВТРезервы.Номенклатура
УПОРЯДОЧИТЬ ПО
Месяц
ИТОГИ
СУММА(Заказано),
СУММА(Зарезервировано)
ПО
ОБЩИЕ,
Месяц
АВТОУПОРЯДОЧИВАНИЕ
Показать
(2)
А вот в запросе, то что все реализации выбираются (проведенные), разве это нормально ?
Если мы в первой таблице, явно указали ссылку на регистратор, то не проще и во второй ее использовать ?
ВТЗаказы.КоличествоОборот КАК Заказано, ВЫБОР КОГДА РАЗНОСТЬДАТ(ВТРезервы.Ссылка.Дата, ВТЗаказы.Регистратор.Дата, ДЕНЬ) > 4 ТОГДА 0 ИНАЧЕ ВТРезервы.Количество КОНЕЦ КАК Зарезервировано, ВТЗаказы.Регистратор ИЗ ВТЗаказы КАК ВТЗаказы ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРезервы КАК ВТРезервы ПО ВТЗаказы.Регистратор = ВТРезервы.ЗаказПокупателя И ВТЗаказы.Номенклатура = ВТРезервы.Номенклатура УПОРЯДОЧИТЬ ПО
А вот в запросе, то что все реализации выбираются (проведенные), разве это нормально ?
Если мы в первой таблице, явно указали ссылку на регистратор, то не проще и во второй ее использовать ?
(7) не помогло. Вот получившийся код:
А вот 2 сообщения:
1 136
01.07.2017 0:00:00 2 272
Причем, по результатам универсального отчета по регистру "Заказы покупателей" заказано за июль 978 шт.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Регистратор.Дата, МЕСЯЦ) КАК Месяц,
| ЗаказыПокупателейОбороты.Номенклатура,
| ЗаказыПокупателейОбороты.КоличествоОборот КАК КоличествоОборот,
| ЗаказыПокупателейОбороты.Регистратор
|ПОМЕСТИТЬ ВТЗаказы
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ЗаказыПокупателейОбороты
|ГДЕ
| ЗаказыПокупателейОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура)
| И ЗаказыПокупателейОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(РеализацияТоваровУслугТовары.Ссылка.Дата, МЕСЯЦ) КАК Месяц,
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Количество КАК Количество,
| РеализацияТоваровУслугТовары.Ссылка,
| РеализацияТоваровУслугТовары.ЗаказПокупателя
|ПОМЕСТИТЬ ВТРезервы
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Проведен = &Проведен
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВТЗаказы.Месяц КАК Месяц,
| ВТРезервы.Номенклатура КАК Номенклатура,
| ВТЗаказы.КоличествоОборот КАК Заказано,
| ВЫБОР
| КОГДА РАЗНОСТЬДАТ(ВТРезервы.Ссылка.Дата, ВТЗаказы.Регистратор.Дата, ДЕНЬ) > 4
| ТОГДА 0
| ИНАЧЕ ВТРезервы.Количество
| КОНЕЦ КАК Зарезервировано
|ИЗ
| ВТЗаказы КАК ВТЗаказы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРезервы КАК ВТРезервы
| ПО ВТЗаказы.Регистратор = ВТРезервы.ЗаказПокупателя
| И ВТЗаказы.Номенклатура = ВТРезервы.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Месяц
|ИТОГИ
| СУММА(Заказано),
| СУММА(Зарезервировано)
|ПО
| ОБЩИЕ,
| Месяц
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Проведен", Истина);
Результат = Запрос.Выполнить().Выгрузить();
ТЗ = Результат.Скопировать(,"Месяц,Заказано,Зарезервировано");
ТЗ.Свернуть("Месяц","Заказано,Зарезервировано");
Для Каждого СтрокаТЗ из ТЗ Цикл
Сообщить(СтрокаТЗ.Месяц+" "+СтрокаТЗ.Заказано);
КонецЦикла;
ПоказатьА вот 2 сообщения:
1 136
01.07.2017 0:00:00 2 272
Причем, по результатам универсального отчета по регистру "Заказы покупателей" заказано за июль 978 шт.
(5)Лучше взять не т.ч. документа, а сразу к регистру обратится продажам
В силу понимания задачи думаю вот так
В силу понимания задачи думаю вот так
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, МЕСЯЦ) КАК Месяц,
ЗаказыПокупателейОбороты.Номенклатура,
СУММА(ЗаказыПокупателейОбороты.КоличествоОборот) КАК Количество,
ЗаказыПокупателейОбороты.Регистратор,
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ ВТЗаказы
ИЗ
РегистрНакопления.ЗаказыПокупателей.Обороты(&НачПериода, &КонПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЗаказыПокупателейОбороты
ГДЕ
ЗаказыПокупателейОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя
СГРУППИРОВАТЬ ПО
ЗаказыПокупателейОбороты.Номенклатура,
ЗаказыПокупателейОбороты.Регистратор,
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, ДЕНЬ),
НАЧАЛОПЕРИОДА(ЗаказыПокупателейОбороты.Период, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) КАК Месяц,
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК Период,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество
ПОМЕСТИТЬ ВТРезервы
ИЗ
РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты
ГДЕ
ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО
ПродажиОбороты.ЗаказПокупателя,
ПродажиОбороты.Номенклатура,
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ),
НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТЗаказы.Месяц,
ВТЗаказы.Период КАК ПериодЗаказа,
ВТРезервы.Период КАК ПериодРезерва,
ВТЗаказы.Номенклатура,
ВТЗаказы.Количество КАК Заказано,
ЕСТЬNULL(ВТРезервы.Количество, 0) КАК Зарезервировано
ИЗ
ВТЗаказы КАК ВТЗаказы
ЛЕВОЕ СОЕДИНЕНИЕ ВТРезервы КАК ВТРезервы
ПО ВТЗаказы.Номенклатура = ВТРезервы.Номенклатура
И ВТЗаказы.Регистратор = ВТРезервы.ЗаказПокупателя
И (РАЗНОСТЬДАТ(ВТЗаказы.Период, ВТРезервы.Период, ДЕНЬ) <= 4)
АВТОУПОРЯДОЧИВАНИЕ
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот