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

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

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

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

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


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

ВЫБОР
            КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.ПЕРИОД
        КОНЕЦ
18 Eiffil123
 
01.11.18
12:14
(17) +1.
И периодичность указать "Регистратор" в виртуальной таблице остатков и оборотов.
19 ksenod
 
01.11.18
12:19
(10) Можете подсказать что должно произойти чтобы он стал не равен дате документа?
20 ptiz
 
01.11.18
12:19
(16) Это условие лучше запихнуть в ГДЕ: ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

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

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

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

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