Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Быстрый способ получить дату последнего поступления

Быстрый способ получить дату последнего поступления
Я
   ksenod
 
01.11.18 - 11:00
МАКСИМУМ(ВЫБОР
            КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор.Дата
        КОНЕЦ) КАК ДатаПоследнего поступления
К сожалению данный запрос отрабатывает очень долго, слишком уж долго он просматривает регистры 6 лет, есть идеи как сделать это побыстрее?
 
 
   Базис
 
1 - 01.11.18 - 11:01
Просматривай в обратную сторону, с конца.
   Timon1405
 
2 - 01.11.18 - 11:16
(0)
ТОГДА выразить(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор как Документ.ПоступлениеТоваровУслуг).Дата
   youalex
 
3 - 01.11.18 - 11:19
или явное соединение с таблицей Документ.ПоступлениеТоваровУслуг (внутреннее)
   Serg_1960
 
4 - 01.11.18 - 11:29
"ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор.Дата" - лишнее, слишком много точек. Нужная дата есть в самом регистре.
   ptiz
 
5 - 01.11.18 - 11:34
(0) Не надо от нас скрывать весь запрос, не стесняйся.
   Serg_1960
 
6 - 01.11.18 - 11:36
Остатки и обороты - тоже излишняя информация. Достаточно отбор по приходу остатков.
   ksenod
 
7 - 01.11.18 - 11:45
(1) Не смог найти в гугле/документации как это делать, сам об этом думал.
(2) Можете подсказать что мне даст эта операция?
(4)(6)  Не понимаю как воспользоваться этой информацией, можете показать пример?
(5) Я читал несколько веток этого форума, думаю учитывая качество моего кодинга на 1с(я сишарпер, наш 1с гуру в отпуске) все что я получу лишь негатив.
   Tonik992
 
8 - 01.11.18 - 11:46
(2) Однозначно, отсутствует ВЫРАЗИТЬ.
   Tonik992
 
9 - 01.11.18 - 11:50
(7) >> Можете подсказать что мне даст эта операция?

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

Наличие условия ССЫЛКА Документ.ПоступлениеТоваровУслуг не дает платформе 1С какой-либо информации о том, что
ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор.Дата  означает получать именно из таблица ПоступлениеТоваровУслуг
   catena
 
10 - 01.11.18 - 11:52
(7)"Можете подсказать что мне даст эта операция? "

Обращение Решистратор.Дата приводит к соединению со всеми таблицами всех возможных регистраторов. ВЫРАЗИТЬ или явное соединение с нужной таблицей значительно сократит выборку.
А чем не устраивает Период самого регистра? Я понимаю, что он не всегда равен дате документа, но в типовый движениях обычно именно так.
 
 Рекламное место пустует
   Ботаник Гарден Меран
 
11 - 01.11.18 - 12:04
ВЫБРАТЬ ПЕРВЫЕ 1
    ПартииТоваровНаСкладах.Период КАК Период
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
    ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    И ПартииТоваровНаСкладах.Активность 

УПОРЯДОЧИТЬ ПО
    Период УБЫВ
   ksenod
 
12 - 01.11.18 - 12:04
Можете еще подсказать имеет ли такая конструкция право на жизнь?
СУММА(ВЫБОР
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата > &НачПер
                    И ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата < &КонПер
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход
        КОНЕЦ) КАК КоличествоПриход,
Не хочу накладывать ограничение на всю выборку, т.к. дату поступления получаю из этой же таблицы, и все что поступила раньше диапазона получается без даты.


(9)(10)  Спасибо за информацию, действительно стало на ~30% быстрее
(10) Что вы имеете в виду под <Период самого регистра>?
   ptiz
 
13 - 01.11.18 - 12:06
(7) Задача непонятна.
Если нужно получить запросом одну дату по одному товару - это один способ решения, если нужно таблицу дат, например, по каждому товару - это другой способ решения.
   ksenod
 
14 - 01.11.18 - 12:07
(13) Таблицу дат для множества номенклатур
   catena
 
15 - 01.11.18 - 12:10
(12)У оборотной таблицы регистра есть реквизит Период, который как правило равен дате документа. И не придется лезть внутрь регистратора.
   ksenod
 
16 - 01.11.18 - 12:10
Вариант с Периодом не подходит, туда попадают перемещения товаров со склада на склад. Нужны только поступления от поставщиков
   catena
 
17 - 01.11.18 - 12:11
(16)Смеешься?

ВЫБОР
            КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.ПЕРИОД
        КОНЕЦ
   Eiffil123
 
18 - 01.11.18 - 12:14
(17) +1.
И периодичность указать "Регистратор" в виртуальной таблице остатков и оборотов.
   ksenod
 
19 - 01.11.18 - 12:19
(10) Можете подсказать что должно произойти чтобы он стал не равен дате документа?
   ptiz
 
20 - 01.11.18 - 12:19
(16) Это условие лучше запихнуть в ГДЕ: ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
и брать просто МАКСИМУМ(Период)
   catena
 
21 - 01.11.18 - 12:28
(19)Эм... В обработке проведения должна произойти запись туда произвольной даты, а не даты документа.
   ksenod
 
22 - 01.11.18 - 12:35
Спасибо всем кто откликнулся, самый быстрый вариант из всех получился этот:
МАКСИМУМ(ВЫБОР
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.Период
        КОНЕЦ) КАК Период
   ksenod
 
23 - 01.11.18 - 12:43
ВЫБРАТЬ
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Ссылка,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.АртикулФабрики,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Колшт,
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
    ЦеныНоменклатурыСрезПоследних.Цена,
    СУММА(ВЫБОР
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.СписаниеТоваров
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход
        КОНЕЦ) КАК КолСпис,
    МАКСИМУМ(ВЫБОР
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.Период
        КОНЕЦ) КАК Период
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&началопериода, &конецпериода, Регистратор, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&конецпериода, ) КАК ТоварыВРезервеНаСкладахОстатки
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    НЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Ссылка,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.АртикулФабрики,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Колшт,
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
    ЦеныНоменклатурыСрезПоследних.Цена

Отчет быстрый и почти то что мне нужно, но периодом я отрезаю даты поступления у части номенклатуры, можете подсказать как это обойти? мой вариант (12) но мне кажется я свернул не туда, явно есть способы адекватнее.
   ptiz
 
24 - 01.11.18 - 13:08
(23) Жуть какая...
У тебя выводятся и товары, которых нет на остатках - это надо?
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток - выдаёт неверные данные
   ptiz
 
25 - 01.11.18 - 13:09
Делай пакетный запрос:
1) Остатки резервов
2) Остатки товаров (если нужны только товары с остатками)
3) Цены (с отбором по списку товаров из п.1 и п.2)
4) Даты последнего прихода (с отбором по списку товаров из п.1 и п.2)
5) Всё склеиваем в конце
   ksenod
 
26 - 01.11.18 - 13:13
(24) да, если они продавались за этот период (25) Пойду пробовать
   ksenod
 
27 - 01.11.18 - 13:14
(24) ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток - выдаёт неверные данные Можно вот про это поподробнее?
   ptiz
 
28 - 01.11.18 - 15:46
(27) А ты проверь, какое количество в резерве выдается запросом по товарам, по которым было несколько документов прихода, реализации, списания (т.е.кроме перемещений).
   ksenod
 
29 - 06.11.18 - 12:35
(28) попытался найти неверное, не смог, можете подсказать как надо делать правильно чтобы было с чем сравнивать
   d4rkmesa
 
30 - 06.11.18 - 13:01
(0) Какая надобность за этим в ПартииТоваровНаСкладах лезть, к тому же еще и с виртуальной таблицей?
   ksenod
 
31 - 06.11.18 - 13:47
(30) На момент написания (0) Это было первым найденым решением, буду рад услышать любое другое более быстрое чем (22)
   VS-1976
 
32 - 06.11.18 - 14:13
(31) Ну так возьми физическую таблицу РегистрНакопления.ТоварыНаСкладах фильтрани по периоду и НЕ Регистратор ССЫЛКА Документ.ПеремещениеТоваров. Зачем тебе виртуальная ( и ладно бы просто обороты ), тем более что ты остатки берёшь на конец периода, при этом зачем-то полным соединением :)...

PS: Из поля ВидДвижения можно понять приход или расход к примеру ВидДвижения = ЗНАЧЕНИЕ( ВидДвиженияНакопления.Приход )
   gantonio
 
33 - 06.11.18 - 14:14
сразу видно, что самого нужного в программе и нет.
 
 


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует