Регистры накопления и отборы в них.

1. Alexponenta 16.09.22 15:21 Сейчас в теме
Задача следующая - собрать данные по количеству и сумме проданной номенклатуры за период. Накидал самый банальный запрос, но есть проблема: обозначив период в РН, я все равно получаю записи которые лежат вне периода (касается это документов корректировки).

Запрос:

ВЫБРАТЬ
	ПродажиОбороты.Регистратор,
	ПродажиОбороты.КоличествоОборот,
	ПродажиОбороты.СтоимостьОборот,
	ПродажиОбороты.СтоимостьБезСкидокОборот,
	ПродажиОбороты.НДСОборот
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ДокументПродажи.Дата МЕЖДУ &НачалоПериода И &КонецПериода) КАК ПродажиОбороты
ГДЕ
	(ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
			ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации)

УПОРЯДОЧИТЬ ПО
	ПродажиОбороты.Регистратор
АВТОУПОРЯДОЧИВАНИЕ
Показать



ДокументПродажи.Дата МЕЖДУ &НачалоПериода И &КонецПериода - не нашел ничего лучше - поскольку в движениях есть корректировки с датой лежащей в периоде движения - а вот сам документ нет.

Насколько такой запрос уместен для решения задачи?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. soft_wind 16.09.22 15:40 Сейчас в теме
(1)вы в запросе используете Регистратор, вот по нему или нужный тип документа отберите или ненужный отборосьте
примерно так

Где
ПродажиОбороты.Регистратор Ссылка Документ.РТУ //подставьте правильное имя типа документа

или
Где
Не ПродажиОбороты.Регистратор Ссылка Документ.Корректировка //подставьте правильное имя типа документа
6. tamidi 8 16.09.22 15:44 Сейчас в теме
(3)Так ведь надо не все корректировки отбросить, а только те, что корректируют продажи другого периода. Все верно в запросе
7. Alexponenta 16.09.22 16:09 Сейчас в теме
(3) Нужно чтобы в отбор попадали и продажи и корректировки за период. (например сентябрь) документы продаж также должны быть за сентябрь.

Но вот если убрать: ДокументПродажи.Дата МЕЖДУ &НачалоПериода И &КонецПериода
То в выборку попадают движения корректировок которые были в сентябре, но по документам которые были раньше сентября
8. user1831019 16.09.22 16:10 Сейчас в теме
(7) Логично. Ибо именно так запрос и написан.
4. Release 16.09.22 15:41 Сейчас в теме
(1)
Насколько такой запрос уместен для решения задачи?

Что касается этого, то если нужно выбрать записи по документам, дата которых находится в нужном периоде и не совпадающая с датой регистрации записи, то вроде нормально все.
5. tamidi 8 16.09.22 15:42 Сейчас в теме
9. spacecraft 16.09.22 16:11 Сейчас в теме
(1) Период регистра и Дата документа это совсем разные вещи. Соответственно первых 2 параметра виртуально таблицы Обороты это отбор по Периоду регистра. Так что, если из этого отбора нужно исключить документы, которые созданы с датой не в этом периоде, то вполне корректно.
21. Release 16.09.22 17:19 Сейчас в теме
(17)
Период, что задается в скобках отсеивает
отсеивает записи несоответствующего периода, а не регистраторы.
Считается правильным, что запись периода соответствует дате регистратора. Но разработчик в обработке проведения может выставить добавляемым записям период какой вздумается.
(17)
Но никак не влияет на дату документа продажи.

И не должно. Меня смутило ваше заявление, уже упомянутое мной выше
все равно получаю записи которые лежат вне периода

А это неверно, т.к. записи соответствуют заданному вами периоду, а документы, на которые есть ссылки в этих записях, вполне могут не соответствовать.
23. Alexponenta 16.09.22 20:31 Сейчас в теме
(21) Из РН мы получаем все записи, дата регистратора которого укладывается в период , обозначенный в параметрах.

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


Ну по крайней мере мне не встречалось такого в классических конфигурациях, тут обычно период равен дате регистратора.
24. Release 17.09.22 12:19 Сейчас в теме
(23) То что вам не встречалось, не означает, что такого не может быть. Примером может служить документ "Корректировка" ("Корректировка документов", "Корректировка записей регистров" - название зависит от конфигурации), который напрямую позволяет добавлять записи регистров с любыми значениями их ограниченными типом и доп.проверками заданными разработчиком.
Бывают еще документы с дополнительной датой (реквизитом), например как дата оплаты или дата отгрузки, которая влияет на дату(период) записей по отдельным регистрам, управленческого характера. Т.е. по одним регистрам даты будут совпадать, а по другим могут различаться.
2. Release 16.09.22 15:31 Сейчас в теме
Виноват, не дочитал.
Но что-то я сомневаюсь в этом утверждении:
все равно получаю записи которые лежат вне периода

Если, конечно, запрос на тот момент был составлен так, как сейчас, пусть и без условие на документ продажи.
Хотелось бы увидеть результат, подтверждающий такое поведение.
10. Alexponenta 16.09.22 16:22 Сейчас в теме
(2) Вот без условия отбора по дате документа продажи, с ним - данная запись пропадает.
Прикрепленные файлы:
12. Release 16.09.22 16:42 Сейчас в теме
(10) А где там колонка периода? Почему вы решили, что запись с регистратором документа корректировки не входит в заданный период отбора РН?
Корректировка проведена сентябрем, запись в РН зарегистрирована в том же периоде, а не периодом документа продажи.
17. Alexponenta 16.09.22 17:07 Сейчас в теме
(12) Период, что задается в скобках отсеивает регистраторы по периоду. Но никак не влияет на дату документа продажи. Поэтому в условие и добавлен отсев тех регистраторов, у которых документ продажи не в периоде отбора, по факту это касается только корректировок, т.к. регистратором документа реализации выступает сам документ реализации - поэтому тут отсев не требуется
20. Alexponenta 16.09.22 17:14 Сейчас в теме
(12) Да, я уже понял это. Так как собственно первый запрос который я писал - отсеивал именно по дате документа продажи, и вот щас чет думаю а нужны ли в скобках
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ДокументПродажи.Дата МЕЖДУ &НачалоПериода И &КонецПериода) КАК ПродажиОбороты

Т.к. по идее условием вроде итак покрываем нужный нам период
22. Release 16.09.22 17:22 Сейчас в теме
(20) Это зависит от реализации и на клиент-серверном способе нужно смотреть профайлер SQL, т.е. и зависит от SQL сервера.
Но, думаю, в любом случае эти параметры не помешают и хуже не сделают.

Собственно, в 1С есть свой замер производительности, и ничто не мешает это проверить самостоятельно. Есть даже обработки консоли запросов с таким замером выполнения.
11. kras01 16.09.22 16:40 Сейчас в теме
Попробуйте так

ВЫБРАТЬ
    ПродажиОбороты.Регистратор,
    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот,
    ПродажиОбороты.НДСОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ДокументПродажи.Дата МЕЖДУ &НачалоПериода И &КонецПериода) КАК ПродажиОбороты
ГДЕ
    (ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
            ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации)

И ПродажиОбороты.Регистратор.Дата МЕЖДУ &Дата1 И &Дата2

УПОРЯДОЧИТЬ ПО
    ПродажиОбороты.Регистратор
АВТОУПОРЯДОЧИВАНИЕ
Показать
13. tamidi 8 16.09.22 16:47 Сейчас в теме
(11)Зачем вы советуете неверный вариант? У человека все работает и правильно работает, он просто поинтересовался верно ли и теперь пытается ответить на вопросы, которые ему тут накидали.
14. Release 16.09.22 16:48 Сейчас в теме
(11) И что это даст? У автора попадают записи относящиеся к документам продажи с датой вне заданного периода. А регистратор и так попадает в нужный период.
15. user1831019 16.09.22 16:56 Сейчас в теме
(14) Ну и в какой период попадут записи регистратора Корректировка от 02.10, который корректирует документ продажи РТУ от 29.09?
16. Release 16.09.22 16:58 Сейчас в теме
(15) А как насчет того, чтобы самому проверить?

З.Ы.
По скрину автора видно в какой период попадают такие записи.
19. Alexponenta 16.09.22 17:10 Сейчас в теме
(15) Тут как бы все логично:
Если отбор по октябрю - то корректировка попадет, т.к. регистратор - корректировка и ее дата попадает в период.
Если сентябрь - то нет
18. Alexponenta 16.09.22 17:08 Сейчас в теме
(11) И ПродажиОбороты.Регистратор.Дата МЕЖДУ &Дата1 И &Дата2

Это мы указываем в скобках :

ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, ...

Так что ваша строчка - это масло масляное
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот