#0
by Lex_Liven
Всем привет. Разбирая чужой код, наткнулся на странную организацию обработки проведения одного документа. Суть в том, что в обработке зачем-то делается запрос к табличной части этого документа с условием [1c]ГДЕ | ИнвентаризацияСостав.Ссылка = &Ссылка";[/1с] причем никаких больше отборов не задается, после получения результата все строки тупо перебираются одна за другой. Какой смысл в таком коде? Почему нельзя было использовать цикл "Для Каждого" по табчасти документа?
#2
by Lex_Liven
Вот и я спрашиваю, какие у автора кода могли быть причины написать именно так? Зачем так вообще делается?
#3
by Lex_Liven
Я понимаю, когда леается запрос к ТЧ с каким-то отбором, чтобы не все строки перебирать. Но зачем делать запрос ко всей ТЧ? Что дает такой метод? Прирост производительности относительно одного простого цикла? Сомневаюсь.
#5
by Lex_Liven
Не хочу. Я хочу понять, зачем. Я хочу переписать этот код на один простой цикл. И опасаюсь, что упадет производительность.
#6
by Lex_Liven
Тем более, что проведение документа и так занимает пару минут. (В ТЧ порядка 2-3 тысяч строк).
#8
by Wobland
вот я раньше бумажные книги читал. а страницу перелистывал всегда одной рукой - любой случайно выбранной. надо же как-то определиться, каким образом перебирать ТЧ
#11
by Lex_Liven
Мы теряем время во-первых, на запрос к ТЧ, во вторых, потом на перебор результата. Я просто не верю, что это может быть быстрее одного перебора по ТЧ.
#12
by hhhh
это для скорости, если групповое проведение документов, ваше "Для Каждого" раз в 15 будет медленнее, чем запрос. А бухгатера ведь очень часто перепроводят документы, поэтому это важно.
#13
by Lex_Liven
То есть все-таки, Запрос + "Пока Рез.Следующий Цикл" - быстрее, чем "Для Каждого"? Тогда возникает вопрос номер два. Почему в типовых это редко используется? (Честно говоря, вообще ни разу не встречал)
#14
by Wobland
мы тут как-то спец.олимпиаду устраивали - Спавочник.Выбрать против запроса. бывает такое, что объектный подход работает быстрее, для этого нужны какие-то особенные флуктуации в атмосфере и железо. но бывает, на миллисекунды, конечно. судя по тому, как ты описал свою ситуацию, ты занимаешься онанизмом. поэтому
#15
by Lex_Liven
Судя по этому комментарию, не , а "делай как тебе удобнее". Собственно, такой ответ меня устраивает.
#19
by HEKPOH
Проведи опыт. Сделай замер производительности по двум алгоритмам. Оч хочется посмотреть на результат :) Это не шутка. Объектный метод, действительно, иногда работает не медленнее запроса
#20
by mistеr
Это скорее следование общему подходу из типовых: при проведении использовать сохраненное состояние объекта из БД, согласованное со всем остальными данными. Просто в данном конкретном случае другие данные в запросе не используются.
#29
by Lex_Liven
Очевидно, что выводы делать я не могу. Я же туплю, судя по :) А какие могут быть несогласования в (данных документа) с (данными того же документа из базы) в момент его проведения? Это не важно просто потому, что вопрос был о двух подходах к одному действию в общем случае.
#34
by Lex_Liven
Да какие телепаты? Что вам даст название конфигурации? Она написана кем-то с нуля, абсолютно не связана с типовыми. Прочитайте внимательно сам вопрос и , часть 3.
#36
by mistеr
В данном случае несогласования нет. Я говорю про общий подход, который применяется в любом случае. Если завтра понадобится приджойнить еще какой-нибудь регистр для проверки, не нужно будет много переделывать (с цикла на запрос).
#37
by Belomor
"И опасаюсь, что упадет производительность." - религия не позволяет использовать замер производительности?
#38
by Lex_Liven
Замер производительности будет позже. Что-то мне подсказывает, что та оптимизация, которую я уже проделал, дает куда больше результатов :) Но чисто академический интерес остался, так что замер будет. Религия позволяет сначала спросить, а потом делать, а не сделать и переделывать.
#39
by МимохожийОднако
Применение объектного метода с перебором и запросом в конечном итоге завершается запросом к серверу. Тебе уже несколько раз сказали про замер, но результатов пока нет.
#41
by Lex_Liven
То есть вы два часа пытаетесь спросить, фаловая это база или серверная? Отвечаю. Файловая. А если разработчик уже недоступен? Представляете, и такое бывает.
#43
by Lex_Liven
В двух словах. Цикл "Для Каждого Строка ИЗ ТЧ" действительно выполняется выполняется дольше, чем, "Пока Рез.Следующий" по выборке. НО! Вся связка "запрос + цикл" занимает примерно столько же времени. Делать больше число сравнений у меня нет ни времени, ни желания. Я для себя делаю вывод, что цикл по ТЧ просто проще писать, а запрос с обработкой результата более гибок при каких-то сложных проверках и возможном расширении базы.
#46
by H A D G E H O G s
Ну там Остатки по номенклатуре получить, к примеру. И потом перебрать результат запроса. Просто у тебя упрощенный случай.
#48
by H A D G E H O G s
Тебе - тупо перебирать ТЧ документа, не лезть запросом на сервер. Он, да, будет быстр и шустр, ибо попадание в Индекс почти 100%, но все равно.
#49
by H A D G E H O G s
Но когда нужны остатки - тогда ТИПОВЫЕ и 1С рекомендуют механизм . Но я с ними - не согласен :-)
#50
by User_Agronom
Как вариант. Прог писал что-то. Поисковик выдал пример решения (с форума или еще откуда). Прог оттуда скопировал блок и заточил под свою задачу. Так оказалось быстрее. А теперь давайте всем форумом искать глубинные причины. Работает? Значит нормально.
#52
by Lex_Liven
Не люблю обращение "Тебе - тупо..." Меня как будто оскорбить пытаются. В данном конкретном случае весь (неграмотный)код вообще переписать надо. У меня тут во-первых, два запроса и два цикла, во-вторых, идиотское движение со списанием всех 3000 строк и оприходование их обратно, в-третьих, проверка некоторых условий все равно идет, но реализвано в цикле, а не в запросе. Короче, (неграмотный)код и есть. Я уже переписал его и доволен результатом. прог, писавший - это я или прог, писавший код который я привел?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Запрос с документу и Табличной частью
- Запрос и документы без табличной части
- Один запрос - все ок , два запрос - не получается :(
- Выгрузка табличной части и загрузка таб.части документа
- Запрос по строкам табличной части текущего элемента справочника
- Как объединить запрос по регистру накопления с запросом по табличной час
- v8: Запрос, Как получить сумму по колонке табличной части документа
- Запрос к табличной части текущего документа
- Обращение к табличной части справочника из табличной части документа
- Выбрать в табличной части документа элемент табличной части справочника
- почему в табличной части не выводится реквизит табличной части?
- Запрос в обработке и запрос в консоли отчетов выдают разные результаты
В этой группе 1С
- 1с 8.3 Множественный выбор в форме списка
- [При выборе номенклатуры в табличной части,Автоматически ставится Единица изм.]?
- 1с "Розница" акция-подарок , печать в кассовом чеке номенклатуры подарка
- ввод остатков по 19 счету в БП 2.0
- 1c 7.7 и SQL 2012
- Управление торговлей 10.3 Себестоимость списания с розничного склада
- 1c 8.2 ЗУП 2- ндфл нулевая
- Обход выборки несколько раз
- Определить при открытии Обработки нужно ли запускать авторегистрацию обработки
- Второй запрос не видит временную таблицу
- Версия сервера отличается от версии клиента
- не загружаются валюты в бухгалтерии 3.0 ???
- driver FlatbedScanner 22 for windows 7, 64бит.
- Добавить субконто в план счетов
- ВычислитьВыражениеСГруппировкойМассив - не получается формат поля
- WinServer2008 R2 Standart + RDP
- 8.3 Такси. Отключить текст "Введите строку для поиска"
- Журнал транзакций переполнен. ACTIVE_TRANSACTION
- УФ СКД Вывод параметров на форму отчета
- УФ. Как заставить поле ввода со списком выбора представление значения?