Имя: Пароль:
1C
 
Правильно ли составляю запрос к документам?
0 Wirtuozzz
 
31.01.16
15:35
Добрый день. Сразу попрошу не пинать сильно. Итак, задача у меня сделать печатную форму для документа Х.
Сложность, заключается в том, что в ТЧ документа Х содержатся ссылки на документы У.
База серверная, данных очень много поэтому запрос должен быть грамотно составлен, что бы не повесить сервер.
Составляю запрос:

ВЫБРАТЬ
    ДокументХ.Ссылка
ПОМЕСТИТЬ ВтДокументыХ
ИЗ
    Документ.ВтДокументыХ КАК ДокументХ
ГДЕ
    ДокументХ.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВтДокументыХ.Ссылка КАК Ссылка1,
    ДокументУ.Ссылка,
    ДокументУ.НомерИсходногоДокумента,
    ДокументУ.НомерИсправленияИсходногоДокумента
ИЗ
    ДокументХ КАК ДокументХ
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДокументУ КАК ДокументУ
        ПО ВтДокументыХ.Ссылка = Выразить( ДокументУ.ДокументОснование КАК Документы.ДокументХ)
ГДЕ
    ДокументУ.Ссылка В
            (ВЫБРАТЬ
                ВтДокументыХ.Ссылка
            ИЗ
                ВтДокументыХ КАК ВтДокументыХ)
Это не правильный подход?
1 Wirtuozzz
 
31.01.16
15:43
Или надо из ТЧ докуметаХ сразу вытаскивать ссылки на документУ, помещать в ВТ, потом из вт вытаскивать в результирующую таблицу?
2 ДенисЧ
 
31.01.16
15:43
Let me unseen it!...
3 Wirtuozzz
 
31.01.16
15:43
Или это будет в принципе одно и тоже?
4 Wirtuozzz
 
31.01.16
15:44
(2) не понял? ты хочешь увидеть или не хочешь видеть?
5 ДенисЧ
 
31.01.16
15:45
(4) На русский это переводится приблизительно как "развидеть"....
6 Wirtuozzz
 
31.01.16
15:47
(5) Запрос нужен?
7 mistеr
 
31.01.16
15:58
(0) Тебе нужно просто получить некоторые реквизиты документа Y? Тогда временные таблицы тут лишние. Наоборот, дополнительная нагрузка на сервер. Соединяй ТЧ с таблицей документа сразу и все.
8 Wirtuozzz
 
31.01.16
16:00
ВЫБРАТЬ
    ДокументХ.Ссылка
ПОМЕСТИТЬ ВтРеализация
ИЗ
    Документ.РеализацияТоваровУслуг КАК ДокументХ
ГДЕ
    ДокументХ.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВтРеализация.Ссылка КАК Ссылка1,
    ДокументУ.Ссылка,
    ДокументУ.НомерИсходногоДокумента,
    ДокументУ.НомерИсправленияИсходногоДокумента
ИЗ
    ВтРеализация КАК ВтРеализация
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК ДокументУ
        ПО (ВтРеализация.Ссылка = (ВЫРАЗИТЬ(ДокументУ.ДокументОснование КАК Документ.РеализацияТоваровУслуг)))
ГДЕ
    ДокументУ.ДокументОснование В
            (ВЫБРАТЬ
                ВтРеализация.Ссылка
            ИЗ
                ВтРеализация КАК ВтРеализация)

Хорошо, вот запрос. Какой будет алгоритм поиска СФВ? скажите пожалуйста.
9 mistеr
 
31.01.16
16:03
(8) >Какой будет алгоритм поиска СФВ?

А в типовой посмотреть? Там, где на форме реквизиты СФВ показываются?
10 Wirtuozzz
 
31.01.16
16:10
(9) Я имел в виду в запросе как будет искаться СФв ? Т.е. сначала будут выбраны все Сфв за весь период, а потом сработает условие, на проверку, что основание СФв это документ реализация, потом уже только будет попытка соединить две таблицы по указанному условию соединения таблиц?
11 Drac0
 
31.01.16
16:11
(8) Вот ты сам п русски можешь объяснить, что делаешьэтим запросом?

"Сохраняю во временную таблицу нужную реализацию, потом выираю из этой таблицы строки и соединяю с ними..." И так далее?
12 GreatOne
 
31.01.16
16:15
-запрос должен быть грамотно составлен, что бы не повесить сервер.

Какой серьёзный подход к написанию печатной формы)
13 GreatOne
 
31.01.16
16:18
В общих модулях есть функция поиска сф к документу, вроде ЕстьСчетФактура(); Найдёшь в модуле реализации её вызов.
14 GreatOne
 
31.01.16
16:18
И обойдешься вообще без запроса
15 Wirtuozzz
 
31.01.16
16:22
Хорошо какой алгоритм построения запроса для решения такой задачи:
Необходимо получить стогимость Номенклатуры в выбранном типе цен, которая была оплачена в документе ПКО.

Там структура будет такая :
1. Док ПКО - > В тч находятся реализации, которые оплачены, в реализациях товар.

Особое условие что документов реализаций очень очень много.
16 GreatOne
 
31.01.16
16:37
Запрос к объекту документ редко когда нужен. Посмотри движения ПКО. У счета 62 третье субконто - документ расчетов, в них будет лежать твоя реализация. Далее из них тяни номенклатуру и левым соединением цену ставь.
17 GreatOne
 
31.01.16
16:38
(15) очень и очень много - это сколько?
18 Wirtuozzz
 
31.01.16
16:40
Вот накидал запрос, прошу любить и жаловать.

ВЫБРАТЬ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка КАК СсылкаПриходныйКассовыйОрдер,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.ОснованиеПлатежа КАК ОснованиеПлатежа
ПОМЕСТИТЬ ВТОснования
ИЗ
    Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
ГДЕ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &Ссылка

ИНДЕКСИРОВАТЬ ПО
    ОснованиеПлатежа
;

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

Теперь вопрос знатокам: если у меня в базе несколько сотен тысяч документов Реализаций товаров, то запрос базу повесит потому что он не оптимизированный или он будет работать долго, потому что банально большой объем данных?
И оптимально ли составлен запрос? или можно по другому собрать его, так сказать более правильно?
19 GreatOne
 
31.01.16
16:42
Миша, все х**ня (с)

Покупай книжку по запросам.
20 Wirtuozzz
 
31.01.16
16:43
Наверное так будет более правильно

ВЫБРАТЬ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка КАК СсылкаПриходныйКассовыйОрдер,
    ВЫРАЗИТЬ(ПриходныйКассовыйОрдерРасшифровкаПлатежа.ОснованиеПлатежа КАК Документ.РеализацияТоваровУслуг) КАК ОснованиеПлатежа
ПОМЕСТИТЬ ВТОснования
ИЗ
    Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
ГДЕ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &Ссылка

ИНДЕКСИРОВАТЬ ПО
    ОснованиеПлатежа
;

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

Сразу скажу, что смотрю только документы реализации т.к. для остальных будет идентично.
21 Wirtuozzz
 
31.01.16
16:43
(19) что не так?
22 GreatOne
 
31.01.16
16:43
Кстати, если что и повесит сервер, то не реализация, а обращение к объекту ПКО через точку
23 Drac0
 
31.01.16
16:44
(20) Ты мне хот бы объясни, зачем тебе секция ГДЕ?
24 GreatOne
 
31.01.16
16:44
Ты вообще понимаешь, что брать данные из объекта - затея бредовая?
25 GreatOne
 
31.01.16
16:45
(23) чтоб наверняка)) Еще в три попытки обернуть
26 Wirtuozzz
 
31.01.16
16:46
(23) какая именно секция?
27 Wirtuozzz
 
31.01.16
16:47
(24) как надо делать? откуда брать данные?
28 Drac0
 
31.01.16
16:50
(26) Вторая.

(27) Регистры
29 GreatOne
 
31.01.16
16:50
(27) не поверишь, регистры!
30 Wirtuozzz
 
31.01.16
16:54
(29) РЕГИСТРЫ!!! Это хорошо.
Но полностью мою задачу не решит.
31 Wirtuozzz
 
31.01.16
16:57
Короче чет я вообще ступил конкретно. Надо все из регистров брать.
32 Wirtuozzz
 
31.01.16
17:04
Вопрос для собственного развития. А конструкция отбора, мною предложенная как будет отработана? Т.е. все равно все документы РТиУ будут просмотрены, и в момент перебора будут условия накладываться?
33 GreatOne
 
31.01.16
17:06
(32) ГДЕ - это значит из полученного результата что-то отобрать.
34 Wirtuozzz
 
31.01.16
17:08
(33) Спасибо.
35 Wirtuozzz
 
31.01.16
17:26
А такой момент. в (20) в итоговом запросе есть конструкция где. Она поможет сократить время исполнения запроса? или только удлинит?
36 GreatOne
 
31.01.16
17:38
(35) встречный вопрос: а зачем она там нужна?
37 Wirtuozzz
 
31.01.16
17:45
(36) Скажем я буду цену искать из РС "цены номенклатуры" с определенным видом. Так что будет? Быстрее с "Где" или не конструкция не сыграет роли?
38 GreatOne
 
31.01.16
17:45
С такой кашей в голове на подобные темы лучше не рассуждать. Читай книжку по запросам, на сайте 1С найдешь.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший