Имя: Пароль:
1C
1С v8
Объект не найден. Запрос.
0 Dno1C
 
03.12.19
21:49
Добрый вечер господа.
Подскажите как грамотно решить данную задачу без внесений изменений в конфигурацию.
Есть типовая Корфа от франча имя которого начинается на р и заканчивается на ус. В ней есть док который содержит реквизиты организация, подразделение, контрагент. Включено использование РЛС. У документа настроено ограничние "прочие поля" - организация, подразделение. Делаю запрос выбрать разрешённые организация, подразделение, контранент. Получаю несколько строк где контрагент - объект не найден. Как отсекать такие доки из результата запроса? Приходит вариант с использование ВТ в которую выбираю разрешённых контрагентов и потом присоединяю её к основному запросу. Но есть проблема в базе контрагентов дохрена выборка в вт занимает много времени. Как грамотно решить задачу без внесения изменений?
1 RomanYS
 
03.12.19
21:51
>>контрагентов дохрена выборка в вт занимает много времени
Сколько? Покажи запрос
2 Dno1C
 
03.12.19
21:54
Милионны.
Запрос прост выбрать разрешенные организация , подразделение, контрагент из док

Если с ВТ то соответственно добавляется левое соединение с выбрать разрешенные ссылка из контрагенты
3 OnNeOn
 
03.12.19
21:56
(2) В студию запрос поддаван, отцы сейчас совещаться будут. Смотри и учись.
4 Dno1C
 
03.12.19
21:56
Вернее внутренне. Сейчас оформим запрос. Ван секонд
5 RomanYS
 
03.12.19
21:57
(2) миллионы.. без внесения изменений.. Успехов! Может расширения помогут
6 Dno1C
 
03.12.19
22:09
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПоступлениеИнформации.Организация КАК Организация,
    ПоступлениеИнформации.Подразделение КАК Подразделение,
    ПоступлениеИнформации.Контрагент КАК Контрагент
ПОМЕСТИТЬ ДокПоступлениеИнформации
ИЗ
    Документ.ПоступлениеИнформации КАК ПоступлениеИнформации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Контрагенты.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
    Справочник.Контрагенты КАК Контрагенты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДокПоступлениеИнформации.Организация КАК Организация,
    ДокПоступлениеИнформации.Подразделение КАК Подразделение,
    ДокПоступлениеИнформации.Контрагент КАК Контрагент
ИЗ
    ДокПоступлениеИнформации КАК ДокПоступлениеИнформации
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
        ПО (ДокПоступлениеИнформации.Контрагент = ВТ_Контрагенты.Ссылка)
7 OnNeOn
 
03.12.19
22:09
(4) Нет запроса, тогда поднимайте веб сервис. Он поможет
8 Dno1C
 
03.12.19
22:10
(7) втф?
9 OnNeOn
 
03.12.19
22:11
В последнем запросе напиши выбрать разрешенные
10 Dno1C
 
03.12.19
22:12
(9) зачем? В первом и втором и так уже есть, результат от этого не изменится
11 OnNeOn
 
03.12.19
22:12
у тебя после соединения должны выйти те записи, которые доступны пользователю и после наложения РЛС на док, и на справочник тоже. тут собака зарыта.
12 OnNeOn
 
03.12.19
22:12
(10) Ты 3.14 завтра на работе будешь, а тут будешь учиться засранец!
13 Dno1C
 
03.12.19
22:13
(11) этот запрос и так возражает что надо. Проблема в том, что контрагентов милионны и создание вт занимает уйму времени, есть ли другие варианты решения задачи?
14 OnNeOn
 
03.12.19
22:13
Батька говорит делать, значит надо делать, какой результат? Докладывай сынок!
15 OnNeOn
 
03.12.19
22:14
Ты почему не идексировал таблицы сынок???
16 Dno1C
 
03.12.19
22:14
(12) дак если ты не прав, признай это или обоснуй
17 OnNeOn
 
03.12.19
22:14
Индексировать кто будет? Иван федорович крузернштейн?
В ВТ надо сделать индексацию! Миллионы записей тебе в запрос. Ха
18 Hmster
 
03.12.19
22:14
(6) Проиндексируй "Контрагент" в двух первых и используй вместо соединения ГДЕ Контрагент в (ВЫБРАТЬ ....)
19 Dno1C
 
03.12.19
22:15
(15) потому что у меня проблема не в этом, а проблема со скоростью создания вт, ускорение соединения с индексом для меня сейчас роли не играет
20 OnNeOn
 
03.12.19
22:16
(16) Зачем ему вообще вторая ВТ если потом внутреннее соединение? Сынок!!!! Ответь за вторую таблицу! Зачем она?
21 Dno1C
 
03.12.19
22:16
Вт на несколько милионнов - узкое место, а не соединение или поиск с или в этой вт
22 Hmster
 
03.12.19
22:16
(19) вот это сколько по времени выполняется?

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Контрагенты.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
    Справочник.Контрагенты КАК Контрагенты
23 Dno1C
 
03.12.19
22:16
(20) затем чтобы выбрать разрешённых контрагентов
24 OnNeOn
 
03.12.19
22:16
Народ, зачем вторая ВТ? В чем смысл этого велосипеда? потом внутренее соединение, ау народ!
25 Dno1C
 
03.12.19
22:17
(22) около 15 сек, что критично в данном случаи
26 OnNeOn
 
03.12.19
22:18
По мне бред какой то. Зачем это надо, левым соединением клеить надо, к первой таблице, а не внутреннем да еще и без индексов
27 Dno1C
 
03.12.19
22:19
(26) Твой уровень понятен..
28 Hmster
 
03.12.19
22:19
(25) а под полными правами?
29 OnNeOn
 
03.12.19
22:20
ну ладно, почитаю, умничать не буду, может ума добавится. не тяну тему ((( признаю, туповат еще.
30 Dno1C
 
03.12.19
22:21
(28) под полными чуть быстрее, но хотелось бы понять, есть ли другие способы решения проблемы без полного выбора разрешенных контрагентов из справочника.
31 Dno1C
 
03.12.19
22:25
(28) как минимум есть ещё одно решение, оставить только запрос к документу а в условии проверять, не Контрагент.представление есть null. Работает быстро, но сейчас такой код можно получить по рукам.
32 Dno1C
 
03.12.19
22:25
Но за такой*
33 Hmster
 
03.12.19
22:27
(30) не должен он долго выполняться под полными правами, может с железом что не то?
34 Hmster
 
03.12.19
22:28
(31) там изначально походу логика хромает, если напишешь комментарий с ответом почему так - думаю поймут
35 Dno1C
 
03.12.19
22:30
(33) Верно, железо не самое лучше, что приходиться крутиться на то что есть.
Как я думал задача банальная и есть красивое решение для таких случаев
36 Hmster
 
03.12.19
22:35
а пробовал в первом запросе делать соединение со справочником Контрагенты? И получать в запросе код или наименование?
Вообще странно почему у документа нет ограничения в рлс по полю контрагент
37 OnNeOn
 
03.12.19
22:38
(36) Не подсказывай ему. надо превозмочь.
38 Dno1C
 
03.12.19
22:40
(36) Попробовал, строки где контрагент объект не найден так же выводятся, код и наименование Null
39 Dno1C
 
03.12.19
22:41
(37) С тобой уже разобрались, ты не шаришь
40 Hmster
 
03.12.19
22:42
(38) а по времени как идет? а если сразу в ГДЕ написать НЕ Контрагент.Код ЕСТЬ NULL
41 Fram
 
03.12.19
22:46
(25) че то жесть какая то прям. а количество какое выбирается?
42 Dno1C
 
03.12.19
22:47
НЕ Контрагент.Код ЕСТЬ NULL такой вариант отрабатывает значительно быстрее, думаю что максимально быстро, что можно получить данном случаи.
ГДЕ написать НЕ Контрагент.Код ЕСТЬ NULL  - это решение подходит, но оч сильно смущает в плане говнокода
43 Dno1C
 
03.12.19
22:47
(41) несколько миллионов контрагентов
44 Dno1C
 
03.12.19
22:50
(28) Приношу прощение за дезинформацию, под полными правами создание ВТ контрагентов укладывается в 1-2 сек
45 Fram
 
03.12.19
22:51
(43) так и запишем тогда..  РЛС и несколько миллионов = жопа

А если серьезно.. база на MSSQL?.. tempdb и временные сеансовые данные на отдельном быстром ССД лежат?
46 OnNeOn
 
03.12.19
22:52
(44) Тогда надо запрос, что в РЛС смотреть, видимо там косяк.
47 Dno1C
 
03.12.19
22:55
(45) Ну как сказать быстром ССД... Рейд 10 sas
48 Dno1C
 
03.12.19
22:55
(45) база да mssql
49 H A D G E H O G s
 
03.12.19
22:55
Приведи текст запроса без ВТ.
50 Dno1C
 
03.12.19
23:03
(49)
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПоступлениеИнформации.Организация КАК Организация,
    ПоступлениеИнформации.Подразделение КАК Подразделение,
    ПоступлениеИнформации.Контрагент КАК Контрагент
ИЗ
    Документ.ПоступлениеИнформации КАК ПоступлениеИнформации
ГДЕ
    ПоступлениеИнформации.Контрагент В
            (ВЫБРАТЬ
                Контрагенты.Ссылка
            ИЗ
                Справочник.Контрагенты КАК Контрагенты)
51 Fram
 
03.12.19
23:03
(47) если есть возможность, перенесите. не знаю точно что за рейд у вас, но может в разы ускориться.
52 OnNeOn
 
03.12.19
23:08
А почему вот это говнокод:
ГДЕ написать НЕ Контрагент.Код ЕСТЬ NULL  - это решение подходит, но оч сильно смущает в плане говнокода ? Можно мнения отцов?
53 H A D G E H O G s
 
03.12.19
23:09
Ну допустим так

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПоступлениеТоваровУслуг.Контрагент,
    ПоступлениеТоваровУслуг.Организация
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО ПоступлениеТоваровУслуг.Контрагент = Контрагенты.Ссылка
ГДЕ
    ВЫБОР
            КОГДА ПоступлениеТоваровУслуг.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                ТОГДА ИСТИНА
            ИНАЧЕ НЕ Контрагенты.Ссылка ЕСТЬ NULL
        КОНЕЦ
54 H A D G E H O G s
 
03.12.19
23:10
(52) Оно не учитывает доки с пустым контром
55 OnNeOn
 
03.12.19
23:14
(54) Ясно, но пустого контра отобрал технично, молодец.
56 OnNeOn
 
03.12.19
23:49
(54) А как думаешь, если сделать в первом вт соединение с контрагентами, РЛС не отработает по контрагентам? ведь по сути то должно будет, и не будет второй вт?
57 PR
 
04.12.19
01:01
(31) Почему? Нормальный код