Имя: Пароль:
1C
1С v8
Оптимизация проведения документа
0 tynoza
 
10.08.11
10:54
Здравствуйте!

5 часов перечитываю несколько раз параграф в книжке. Не понимаю как происходит оптимизация проведения документа.

Есть следующая конструкция:

ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры
ПереченьНоменклатуры - это табличная часть документа ОказаниеУслуги

Мы обращаемся к полю Номенклатура т.ч.д. ОказаниеУслуги. Данные о номенклатуре содержатся в т.ч.д. Но ВидНоменклатуры уже содержится в справочнике Номенклатура. Поэтому, когда существует такая конструкция
(ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры) платформа обращается к кешу по ссылке СправочникНоменклатура.Ссылка (что за кеш не понятно, нашел в вики, что кеш промежуточный буфер для храненя наиболее часто запрашиваемой информации).
Если в кеше данных о том, какой ВидНоменклатуры нету то платформа организует чтение в базу данных. И считывает все реквизиты одной из записей справочника Номенклатура. И потом возвращает ссылку на ВидНоменклатуры

Это долго. Почему это долго?

Вместо это рекомендуют делать запрос, потому что он "лучше" (именно так написано) считывает данные. Что значит "лучше"?

Есть цикл, в котором все записи документа переносятся в регистр (процедура обработка проведения), и обращаться по такой схеме это долго.

А запрос выбирает все данные из определенного документа (передается параметр по полю ссылка), так же еще группирует их, т.к. они повторяются.

Вот.

Что-то я ничего не понимаю. Хотя сам писал. Че делать???
1 John83
 
10.08.11
11:00
вбить себе в голову, что запросы - это круто!!! :)
2 Wobland
 
10.08.11
11:03
запрос читает не всё, а только то, что тебе надо. а когда несколько точек в одной строке, читается, соответственно несколько объектов.
3 PVV65
 
10.08.11
11:04
Жена написала тебе список продуктов, которые надо купить в магазине. К сожалению память у тебя плохая и ты можешь запомнить только одну строчку из списка. Что делать? Запомнил первую строчку и пошел в магазин. Вернулся. Запомнил вторую строчку и т.д.

А можно было взять список и один раз сходить в магазин.
4 tynoza
 
10.08.11
11:14
У меня жены нету, не знаю хорошо или плохо
Wobland, уже есть какое-то прояснение
John83, хорошо)
PVV65, аналогия со списком вроде не понятная и понятная.

Хорошо, есть ... Номенклатура.ВидНоменклатуры в документе нет поля ВидНоменклатуры, поэтому к нему можно обратиться только по ссылке. Это долго, и мы в для каждого проведения документа цикле каждый раз так делаем.

А при запросе что?
Мы каждый раз при проведении определенного документа выбираем нужные записи из БД, не читая все поля. И формирует выборку из запроса, и когда элементы этой выборки в цикле проходим, но там не надо уже обращаться к базе данных.

т.е. как бы в случае запроса мы перед походом в магазин "написали" себе списочек (я про выборку). И теперь будучи в магазине нам не надо из-за каждого элемента списка бегать и уточнять у жены.

Я просто написал для более правильного уяснения это сообщения))
5 tynoza
 
10.08.11
11:17
Для уточнения)), я правильно понимаю, что если в кеше нету данных о ВидНоменклатура, то мы читаем в базе данных не весь справочник Номенклатура, а только его определенную запись?
6 Wobland
 
10.08.11
11:17
с женой имхо не вполне близко к истине. нужны мне: гайка1, гайка2, винт1, шланг1, шланг2... можно сходить в магазин, принести оттуда пару-тройку автомобилей и дома раскрутить. а можно в магазине попросить открутить и сложить в карман ;)
7 Wobland
 
10.08.11
11:17
(5) да. конкретный объект целиком
8 FIXXXL
 
10.08.11
11:19
>А при запросе что?

прочитаешь один разик для всего списка номенклатуры
9 asady
 
10.08.11
11:21
(0) я правильно понимаю что речь идет о чтении объекта в обработке проведения документа то есть внутри транзакции?
10 tynoza
 
10.08.11
11:21
Wobland (7), под конкретным объектом ты имеешь ввиду конкретную запись справочника?
Что-то аналогию про магазин не понял, с женой проще было)
11 Wobland
 
10.08.11
11:22
(10) да. одна строка в таблице. ещё раз: через точку тащится всё, даже если нужно всего одно поле. а запрос только его (поле) и вернёт
12 tynoza
 
10.08.11
11:25
(8), а ну да, т.е. мы берем табличную часть определенного документа и из нее формируем таблицу, и не надо каждый раз обращаться к базе данных, когда это делается в цикле, потому что уже есть все в сформированной таблице
(9), правильно, только про внутри транзакции я не понял)
(10), ясно ;)

Похоже я разобрался, спасибо вам ;-)
13 Reset
 
10.08.11
11:26
Через точку:
жена говорит: сходи, купи масла и колбасы.
Идем в магазин, и поскольку не уточнено, сколько и какой колбасы нужно, покупаем все сорта какие есть и тащим домой.
Дома жена выбирает нужный сорт, остальное выбрасывает.
А теперь нужно сыр! Идем в магазин и покупаем весь сыр в магазине, прем домой и тд.

Запросом: Нужен сыр Дор-блю 400 грамм!
Идем в магазин и несем домой (не используя уже грузовик дл перевозки) 400 грамм нужного сыра.
14 Maxus43
 
10.08.11
11:26
(12) Типовые конфы писали не глупые люди как правило, а там в обработке проведения почти всё достаётся запросами
15 Reset
 
10.08.11
11:29
+(13) Т.е. от программиста (в данном случае им является жена) зависит, будет ди гоняться туда-сюда грузовик или все можно будет перенести в сеточке для продуктов.
16 tynoza
 
10.08.11
11:30
Reset, очень наглядная аналогия ;)
Maxus43, про это да, в книжке написано, пока сам ниче не знаю()))
17 Wobland
 
10.08.11
11:33
tynoza, ознакомся для начала с реляционной моделью данных
18 tynoza
 
10.08.11
11:34
Wobland, ОК
19 Wobland
 
10.08.11
11:35
есть у меня полезная книжечка. толстая, правда. Введение в системы баз данных. К. Дж. Дейт
20 asady
 
10.08.11
11:43
(0) открой стр.719 "гросбуха" (Проф.разработка в систиме 1С..."
читай параграф "оптимизировать действия выполняемые в транзакции"
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.