#0
by August
В 1С получаю Таблицу Значений, нужно сделать запрос к Ораклу по полученной ТЗ. Раньше было так: Работает, но долго. Вопрос! Можно ли запрос делать не в цикле, а передавать в запрос не каждый код номенклатуры, а целый массив? И как это релизовать?
#0
by August
В 1С получаю Таблицу Значений, нужно сделать запрос к Ораклу по полученной ТЗ. Раньше было так: Работает, но долго. Вопрос! Можно ли запрос делать не в цикле, а передавать в запрос не каждый код номенклатуры, а целый массив? И как это релизовать?
#7
by August
скорее всего так и будет, но неужели никак больше не передать? скуль понимает только множество? массив, ТЗ не поймет?
#11
by ShoGUN
>В 8ке сняли ограничения на длину строки? Не сталкивался, скорей всего - да. Возможно COMSafeArray поймет.
#13
by shuhard
архитектуру меняй, добавь в таблицу SMCARD поле 1С, один раз пробеги циклом и сделай Update в True.
#14
by ShoGUN
+ Только тогда надо не вставлять строку в запрос, а делать хранимую процедуру и в нее передавать параметры.
#19
by Господин ПЖ
для начала надо знать насколько широки полномочия автора в базе оракла... может база не его, а вы тут с апдейтами носитесь... хто ж ему дасть апдейты эти делать...
#20
by ShoGUN
Может еще хитрее :) Он своими апдейтами запустит триггеры, которые полбазы переколбасят :))
#22
by shuhard
жаль обратный вариант, выгружаем всё из оракла и фильтруем на стороне 1С в ВТ например ?
#23
by ShoGUN
Как вариант, тоже нормально по скорости будет, хотя ОДИН правильный запрос - всё равно проще и быстрее.
#24
by August
хм, а это мысль)) и почему сам не подумал об этом... будет процентов 20 лишнего, но все равно скорее всего будет быстрее чем строку я думаю
#27
by ShoGUN
Объект COMSafeArray в 1С. Делаешь в оракловой базе хранимую процедуру со своим запросом и передаешь в нее список через COMSafeArray.
#29
by August
Если не проблвал, ятогда тоже пока не буду, попробую сделать запрос по всей номенклатуре и отсеять в 1С уже не нужное, посмотрю на производительность, если не устроит, буду думать что то другое... всем спасибо за ответы и советы =)
#30
by shuhard
попроси для себя одну таблицу для записи на Оракле, загрузи в неё номенклатуру (код и ARTICLE), получишь максимальную скорость, отсутствие блокировок и проблем с безопасностью
#31
by ShoGUN
Блин, вот объясните мне, зачем для ЧТЕНИЯ базу корячить? А потом тыкают, что 1С кривая и всё в ней через жо...
#33
by August
, ну допустим я выпросил для себя таблицу в оракле... какую номенклатуру я туда дожен записать? которая в 1С или которая в полной базе оракла?
#34
by ShoGUN
>затем, что данные надо связывать в источнике а запросы тогда на что, если на каждый чих отдельную таблицу плодить?
#36
by August
а дополнять мою таблицу новыми элементами, если в 1С появился новый элемент как? и самое главное когда?
#38
by shuhard
один раз синхронизуешь полностью. после этого подкладываешь кусочек кода при записи справочника Номенклатура, у рекордсета есть методы Insert и Update докажи, лучшего способа, чем внешний ключ на сиквеле нет
#39
by Господин ПЖ
>>у рекордсета есть методы Insert и Update угу. Только автор, сначала Update делай, потом Insert
#41
by August
хм, в принципе способ тоже достаточно интересен, немного не радует перспектива внесения изменений в конфу, и действительно ли стоит это делать ради выигрыша в скорости... тем более еще не понятно насколько большой этот выигрыш будет... но способ обязательно запомню, спасибо большое!
#44
by shuhard
на данный момент перепиши на выборку всех записей, по сравнению с открытием рекордсета в цикле выигрыш будет более чем достаточный. всё остальное для души.
#45
by August
эхъ, как приятно пообщаться с умными людьми, а то рядом с этими бухами чувствуешь себя прокаженным...
#46
by shuhard
еще раз - докажи, каждый раз перегонять на сторону сервера десятки тысяч идентичных записей - вот это оторви и брось.
#52
by ShoGUN
Не только слышал, я не против, что _внутри_ базы нужно делать именно так. Когда работаешь с внешними данными, модифицировать их для удобства чтения - подход сомнительный.
#58
by kipon
Вы же выбираете всю номенклатуру из 8-ки, значит у вас кода идут сплошняком? может тогда запросом в 8-ке определить границы кодов, а в запросе к ораклу поставить условие типа: Хотя это будет правильно, только если кода идут сплошняком, без дырок.
#63
by shuhard
не прокатит, потому что код мало того что символьный, он еще и вводится принудительно, на самом деле это некий партнамбер производителя.
#64
by August
мда, интересный результат... было: запрос в цикле, номенклатуры пока порядка 10000 в тестовой базе, время выполнения 72,5 с стало: запрос по всей номенклатуре, а затем цикл по временной таблице с поиском номенклатры (есть в базе/нет в базе) теперь выполняется 127 с... причем самое большое время, порядка 70% как раз хавает этот поиск дурацкий
#71
by August
В общем убрав с формы вывод наименования обрабатываемой в текущий момент времени номенклатры (которое из 120 секунд хавало 18), и сделав поиск в цикле не по справочнику, а предварительно выгрузив весь справочник во временную таблицу и поиск осущевляя по ней, достиг времени в 88 секунд...
#73
by August
выполнение запроса теперь занимает вообще доли секунды, всего справочника, остальное время ест обработка полученных результатов... из 88 секунд, поиск по ВТ занимает 51% времени
#75
by August
я уточнить хочу, ВТ = временная таблица, которая содержит весьсправочник номенклатры С, так?
#83
by ShoGUN
Перебираешь рекордсет, заполняешь ТаблицуЗначений. Потом: СНАЧАЛА делаешь запрос к Ораклу, а потом уже - запрос вместе к временной таблице с данными из Оракла и к 1С.
#84
by ShoGUN
+ Вместо отдельных запросов и менеджера ВТ можно использовать пакетный запрос, так наглядней.
#85
by August
, спасиба за направление, я ни разу не делал запрос к ВТ, так что разбираться буду долго)
#90
by August
а почему запрос к временной таблице будет намного быстрее работать нежели запрос к самому справочнику?
#91
by ShoGUN
>а почему запрос к временной таблице будет намного быстрее работать нежели запрос к самому справочнику? Кто тебе такую глупость сказал? Ты вообще понял, о чём я?
#92
by August
дык я же делал в цикле запрос к справочнику для нахождения номенклатуры, работает еще дольше чем поиск по ТЗ
#97
by ShoGUN
Песец ваще... Человек не понимает, зачем нужны запросы и как ими пользоваться. Писать - умеет, а пользоваться - нет.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- 1С + MS SQL Прямой запрос на SQL к журналу расчетов на V 7.7
- Как написать SQL запрос на 1С при обращении к другой SQL базе?
- Один запрос - все ок , два запрос - не получается :(
- 1cv8 SQL: Имя SQL сервера и имя SQL базы данных
- почему не работает SQL запрос (аналит SQL) ?
- Как получить текст запроса SQL имея запрос языка 1С ?
- Запрос в обработке и запрос в консоли отчетов выдают разные результаты
В этой группе 1С
- СКД: Подписи оси Y в диаграмме (СКД)
- Копирование диска ИТС
- не меняется дата при смене дня
- как при вводе пароля методом ВвестиСтроку() заменить символы на звездочки
- Как программно отменить проведение документа?
- Проблема с Kyocera FS-1116MFP и Вистой
- 64 битный сервер, а клиенты?
- Закрепление первых колонок в поле табличного документа
- Зик Больничный прошлого периода
- Как перебрать все метаданные в конфигурации?
- SQL 2005 Зависает при запросе... как искать проблему?
- Как обновить табличное поле как элемент формы?
- Как сделать процентную шкалу выполнения операции?
- Разбор xml
- Не удалось открыть файл! ("XBASE")
- Вылетает 1с. "Удаленный хост принудительно разорвал существующее соединение"
- v7: Расходы будущих периодов: как передать в филиал ?
- Не переносятся движения документов в РИБ
- Какой sql сервер лучше использовать для 1с 7.7 027 ?
- Сборник задач для подготовки к экзамену "1С:Специалист"