Имя: Пароль:
1C
1С v8
Обмен по OLE 7.7 -> 8.2 Ускорение.
,
0 ProProg
 
20.09.12
11:48
Какие есть варианты чтобы загрузить 300 000 номенклатуры быстро.


ТекстЗапроса = "
   |Обрабатывать НеПомеченныеНаУдаление;
   |ЭлементСсылка        = Справочник.Номенклатура.ТекущийЭлемент;
   |Поле_Наименование  = Справочник.Номенклатура.Наименование;
   |Поле_Код           = Справочник.Номенклатура.Код;
   |Поле_Артикул       = Справочник.Номенклатура.Артикул;";
   Если ПереноситьИерархию Тогда
       ТекстЗапроса = ТекстЗапроса + "
       |Поле_Родитель5     = Справочник.Номенклатура.Родитель.Наименование;
       |Поле_Родитель4     = Справочник.Номенклатура.Родитель.Родитель.Наименование;
       |Поле_Родитель3     = Справочник.Номенклатура.Родитель.Родитель.Родитель.Наименование;
       |Поле_Родитель2     = Справочник.Номенклатура.Родитель.Родитель.Родитель.Родитель.Наименование;
       |Поле_Родитель1     = Справочник.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование;";
   КонецЕсли;
   Если ЕстьРеквизитПроизводитель Тогда
       ТекстЗапроса = ТекстЗапроса + "
       |Поле_Производитель = Справочник.Номенклатура.Производитель.Наименование;";
   КонецЕсли;
   ТекстЗапроса = ТекстЗапроса + "
   |Группировка ЭлементСсылка БЕЗ ГРУПП;
   |";          
   
   //Запрос = БазаОле.EvalExpr("СоздатьОбъект(""Запрос"")");
   Запрос = БазаОле.CreateObject("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Сообщить("Запрос не выполнен!");
       Возврат;
   КонецЕсли;
   
   ТаблицаЗапроса = БазаОле.CreateObject("ТаблицаЗначений");
   Запрос.Выгрузить(ТаблицаЗапроса,1,0);    
   
   ТаблицаЗапроса.ВыбратьСтроки();
   Пока ТаблицаЗапроса.ПолучитьСтроку() = 1 Цикл        
       ОбработкаПрерыванияПользователя();
       
       НоваяСтрока = Объект.ТабличнаяЧасть.Добавить();
       НоваяСтрока.Поле_Код          = ТаблицаЗапроса.Поле_Код;
       НоваяСтрока.Поле_Артикул      = ТаблицаЗапроса.Поле_Артикул;
       НоваяСтрока.Поле_Наименование = ТаблицаЗапроса.Поле_Наименование;
       НоваяСтрока.Поле_Производитель = ТаблицаЗапроса.Поле_Производитель;
       
       Если ПереноситьИерархию Тогда
           НоваяСтрока.Поле_Родитель1 = ТаблицаЗапроса.Поле_Родитель1;
           НоваяСтрока.Поле_Родитель2 = ТаблицаЗапроса.Поле_Родитель2;
           НоваяСтрока.Поле_Родитель3 = ТаблицаЗапроса.Поле_Родитель3;
           НоваяСтрока.Поле_Родитель4 = ТаблицаЗапроса.Поле_Родитель4;
           НоваяСтрока.Поле_Родитель5 = ТаблицаЗапроса.Поле_Родитель5;
       КонецЕсли;
   КонецЦикла;
114 ProProg
 
20.09.12
14:42
кто нить из вас с ПОЛНОЙ уверенностью может сказать что файл ДБФ с 300 000 строк будет считываться пару минут.
115 zladenuw
 
20.09.12
14:43
(111) сделай не 4 вызова ТаблицаЗапроса, а 1 и получи 4 параметра. это уже быстрее
116 ProProg
 
20.09.12
14:43
(112) про какой апдейт идет речь. если идет примиивное получение запроса, выгрузка в примитивную таблицы с примитивными же данными.
117 Serginio1
 
20.09.12
14:43
Книга знаний: v8: Охота на Com-ов
(110) Ну если бы ты был в теме, то свойства и методы в COM вызваются через два метода DispGetIDsOfNames и Invoke
118 VladZ
 
20.09.12
14:43
(114) Просто считыватья или при этом еще и в базу будет писаться инфа?
119 ProProg
 
20.09.12
14:44
(115) каким это образом возможно?
120 Serginio1
 
20.09.12
14:44
Через два метода интерфейса IDispatch GetIDsOfNames и Invoke
121 ProProg
 
20.09.12
14:46
(118) просто считывание.
122 Serginio1
 
20.09.12
14:46
(114) Считываться значительно быстрее.
123 zladenuw
 
20.09.12
14:46
(119) а что в запросе нельзя получить любое поле ? ужас
124 ProProg
 
20.09.12
14:46
то что будет потом уже ОЛЕ не касается.
Идет заполнение данных в ИЗ восьмерки. а сохздание уже никаким боком к оле не относится.
125 ProProg
 
20.09.12
14:47
тьфу. блин.
126 ProProg
 
20.09.12
14:47
(123) какой запрос? епать. таблица значений. ты говоришь сделай вызов один раз. бред какой то.
127 Злопчинский
 
20.09.12
14:49
(100) на каждый прайс своя загрузка или мегауниверсальная мегаобработка для всех прайсов?
128 Serginio1
 
20.09.12
14:50
(127) По параметрам прайсов генерится свой запрос
129 zladenuw
 
20.09.12
14:50
вот ты тут что получаешь и откуда..
НоваяСтрока.Поле_Код          = ТаблицаЗапроса.Поле_Код;
       НоваяСтрока.Поле_Артикул      = ТаблицаЗапроса.Поле_Артикул;
       НоваяСтрока.Поле_Наименование = ТаблицаЗапроса.Поле_Наименование;
       НоваяСтрока.Поле_Производитель = ТаблицаЗапроса.Поле_Производитель;
а теперь подумай о 50 постах.
130 ProProg
 
20.09.12
14:50
(127) универсальная. настраиваемая.
131 zladenuw
 
20.09.12
14:51
(129) и у тебя пример замера в 44. так что. а не буду грубым. промолчку
132 Злопчинский
 
20.09.12
14:51
(114) Женя, я блин удивлен...
прайс 15000 строк читается из ДБФа нескольо секунд.. 300 тыс будет чуть поболее...
133 ProProg
 
20.09.12
14:51
(129) из таблицы (которая является объектом ОЛЕ) получаю значения.
134 ProProg
 
20.09.12
14:53
(132) ситуация. чел взял конфу. хоте перетянть свой справочник. я не буду ему писать загрузки  и не буду говорить ему делать прайсы. никаких компонент. есть обработка которая подключется к любой семерке и вытягивает оттуда номенклатуру в УТ11. челу надо нажать две кнопки.
135 Злопчинский
 
20.09.12
14:53
(130) как примерно будет настроено типа такое
если в столбце значение формата "DVD x 9" - то получить надо "9"
а если другого формата - то пропустить, за исключением формата типа
"3MP3" - отсюда получить "3"... - т.е. количество дисков в комплекте..?
136 Злопчинский
 
20.09.12
14:55
(134) а при чем здесь ЧТЕНИЕ ИЗ ДБФ..? все тормоза в получении значений через ОЛЕ - это жутко тормозной вариант.
137 zladenuw
 
20.09.12
14:55
ну так напиши свой инстал. где все проставит и доставит. а в итоге запуск 1 обработки и о чудо все в 8.
138 ProProg
 
20.09.12
14:55
(135) не грузи меня сейчас. это к теме не относится.
139 VladZ
 
20.09.12
14:55
(121) Я к тому, что в (111) у тебя не просто считывание... А еще и запись (заполнение табличной части).
140 ProProg
 
20.09.12
14:56
(136)я уже написал 40 постов назад. что считывание в восьмерку заняло 30 минут. СОЗДАНИЕ в восьмерке! Уже из собственной таблицы - 50 минут.
141 Serginio1
 
20.09.12
14:56
(135) Для таких приходится отдельно писать предварительную обработку. Но это обычно мелкие прайсы причем в экселе. Большинство работают по определенным стандартам.
142 Злопчинский
 
20.09.12
14:57
(134) выполни в контексте ОЛЕ слив справоячника в ДБФ, в 8-ке прочитай ДБФ.
143 ProProg
 
20.09.12
14:57
итого час 20 на 300 тысяч номенклатуры. В принципе результат офигенный. учитывая нажатие двух кнопок и все.
КД - умерло бы сразу.
Подключение компонент и прочей уеты - мне больше выйдет чем вся эта долбанная загрузка.
144 zladenuw
 
20.09.12
14:58
(143) опять ты про то чего не знаешь. не фуфли тут
145 Злопчинский
 
20.09.12
14:58
(140) женя, ты блин определись, что тебе надо. чтение из ДБФ или чтение из ДБФ через прокладку ОЛЕ. основное время сожрет получение занченйи через прокладку ОЛЕ.
146 Serginio1
 
20.09.12
14:58
(136) Не через оле, а через внешний сервер ОЛЕ. Внктренний сервер будет работать быстро. Хотя вызов в 7 ке своих методов быстрее.
147 ProProg
 
20.09.12
14:59
(135) не парься. в определенных спецификах рынка (востребованных все проще). В автозапчастях - артикул и производитель. и все звиздец. наименования ваще нах не нужны.
148 Злопчинский
 
20.09.12
15:00
(146) угу.
женя хочет универсальный инструмент который работает быстро и эффективно. такого не бывает...
149 ProProg
 
20.09.12
15:01
(145) ладно попробую как нить сделать через файл. если интерес будет.
150 Злопчинский
 
20.09.12
15:01
(147) угу, как и предполагалось... херня хзерней грубо говоря. мне например, практически на каждый прайс по дискам приходится писать свой "плугин" разбора. универсальность - не канает.
151 zladenuw
 
20.09.12
15:01
(147) пиз.дите сер. приедет к вам проверка. вот тогда будете думать по другому.
152 Serginio1
 
20.09.12
15:01
(141) Ну и обработка для таких прайсов тоже универсальная. Просто прописывается код обработки для каждого прайса и через выполнить обрабатывается каждая строка.
153 ProProg
 
20.09.12
15:01
пока что создание номенклатуры занимает 2/3 всей обработки, так что получение на этом фоне незначительно много занимает.
На фоне других вариантов типа КД это самый быстрый и действенный вариант получился.
154 zladenuw
 
20.09.12
15:02
(151) антимонопольный комитет. за каждую букву даст под зад
155 ProProg
 
20.09.12
15:02
(150) мелкие донастройки фигня. как артикул разобрать и т.п. и т.д. я уже научился. фирма 10 лет на рынке.
156 Злопчинский
 
20.09.12
15:02
(149) сделай в 8-ке текст семерошной обработки по сливу справочника в ДБФ. запусти эту обработку в контексте семерошного ОЛЕ. полученный ДБФ прочитай в 8-ке. будет просто акуеть как быстро. это я как неспец говорю.
157 Serginio1
 
20.09.12
15:03
(150) А что там много писанины для обработки строки? Эта строка записывается в формат прайса.
158 ProProg
 
20.09.12
15:03
через номенклатуру поставщиков (справочник) тоже ничего сложного...
поиск соответствий (отложенный) тоже сделан. загрузка когда номенклатуры нет - тоже.
159 zladenuw
 
20.09.12
15:04
(156) так кричал об этом. не ТС до ж.... дальше не буду серить в его огород
160 ProProg
 
20.09.12
15:05
(156) я сильно НЕ уверен что это не займет в итоге ВСЕ теже 30 минут.
Если бы речь шла о 2-3 часах имел бы смысл искать такие пути. Когда 30 минут. что то мне подсказывает что 5 минут роли не сиграют.
161 Злопчинский
 
20.09.12
15:05
(155) угу.. вот эти мелкие донастройки - полное УГ. загрузка прайса - 95% универсальный код. оставшиеся 5% - специфика каждого прайса, которая не поддается унификации. я - не смог унифицировать... самый путь который выбрал - систем а плугинов. в ключевых точках - вызовы плугинов с возвратом нужного. плугины - практически под каждый прайс отдельные. свести к чему-то единообразному - не удается...
162 Злопчинский
 
20.09.12
15:06
(160) такой слив-чтение суммароно займут минут 10, не больше, а если это на нормальном компе - то воопще пипец будет
163 ProProg
 
20.09.12
15:06
(161) хорош уже) у тебя один опыт у меня другой. может я настока гениален что нашел те варианты которые ты не видел))))
164 ProProg
 
20.09.12
15:07
у меня больше 500 клиентов одной обработки. спорить будем кто больше повидал?
165 Злопчинский
 
20.09.12
15:07
я ж те грю - лет 6-7 назад ПОЛНАЯ ЗАГРУЗКА прайса на 15000 из ДБФа занимала секунд 20.
166 ProProg
 
20.09.12
15:08
(162) попробую. как бы не хотелось вспоминать семерку...
167 Serginio1
 
20.09.12
15:08
(163) Хе хе. Гений1С отдыхает.
168 Злопчинский
 
20.09.12
15:08
(164) мне спорить не надо ;-) я тебе 3-4 прайса выдам и посмотрю как ты их одной и той же обработкой загрузишь без допрограммирования. ;-)
169 ProProg
 
20.09.12
15:09
Есть еще понятие целесообразности. Я думал что я что то пропустил в ОЛЕ.
Выгрузка-загрузка такого справочника . дело разовое. выполняемое один раз.
И то это у меня столько)
У других и 30 тысяч не будет.
Производителей 1500 штук за пару минут загрузил и создал.
170 Злопчинский
 
20.09.12
15:10
структурированные прайсы грузит - хрен ли... а когда прайс типа вручную в экселе написан - тут начинается веселуха.. ;-)
171 Злопчинский
 
20.09.12
15:10
(169) согласен. если это разовые работы то бороться особо за скорость не надо...
172 ProProg
 
20.09.12
15:10
(168) давай) жду в скайпе.
173 Злопчинский
 
20.09.12
15:11
(172) ща попробую найти прасики...
174 zladenuw
 
20.09.12
15:16
и мне
175 ASU_Diamond
 
20.09.12
15:16
(88) проверял?
176 ProProg
 
20.09.12
15:18
(175) Каждый раз КД дохнет когда я из семерки в торговлю данные выгружаю за месяц) если за два то где то на 50000 объектах (часа три) вывалит нехватку памяти и досвидос.

Номенклатуру тоже пытался выгрузить всю в торговлю - тоже самое) даже не увидев строку сколько чего выгрузилось.))
177 ProProg
 
20.09.12
15:18
причем все порезано в правилах обмена по самое не балуйся.
178 Aprobator
 
20.09.12
15:19
(0) прикольный перенос. Типа знания одного верхнего родителя для переноса недостаточно?
179 Aprobator
 
20.09.12
15:20
а так там вообще кирдык. Родитель через наименование тащится. Начало пятницы зачтено.
180 ProProg
 
20.09.12
15:20
(178) в смысле? надо же все уровни. а не один.
181 ProProg
 
20.09.12
15:21
(179) ну и ? для ОЛЕ нужны строковые данные. получаю в запросе название родителя сразу. на ссылках вообще все умрет.
182 Vakhrin
 
20.09.12
15:21
можно еще быстрее, чем ДБФ семерочный... записываем в текст с разделителями, но опять же не через стандартный текст, а через vbs FSO
и полученный файл читаем через ADO ))

(180) каждый последующий уровень определит предыдущий
183 Злопчинский
 
20.09.12
15:21
(172) чтото в скайпе вы неактивны..
184 Злопчинский
 
20.09.12
15:21
взял наобум простенький прайсик...
185 ProProg
 
20.09.12
15:22
(182) чо чо.
186 Vakhrin
 
20.09.12
15:23
(185) to google ))
187 ASU_Diamond
 
20.09.12
15:27
(176) сейчас занимаюсь переводом ПУБ на УПП, только что выгружал справочник номеклатуры в УПП: материалов 70 тыс, номенклатуры 30 тыс и того 100 тыс, выгрузилось довольно быстро (и это все поля, ничего не порезано) и без всяких ошибок. ЧЯДНТ?
188 Aprobator
 
20.09.12
15:28
для быстрее я бы вообще через ОЛЕ не тащил. В одной базе выгрузил в файр, в другой из файла загрузил. Разовая операция то?
189 Aprobator
 
20.09.12
15:28
(187) ты небось не ОЛЕ юзаешь )
190 zladenuw
 
20.09.12
15:29
а что в оле нельзя запустить обработку ?
191 ASU_Diamond
 
20.09.12
15:30
(189) ну я про КД речь вел
192 Aprobator
 
20.09.12
15:30
(176) КД дохнет на 50000? Офигеть. Обработку порциями не прописать что ли? Прием известный, в типовых есть. (190) смотря какими руками.
193 zladenuw
 
20.09.12
15:32
(192) тс не читает такого. а можно так (190) ?
194 Aprobator
 
20.09.12
15:35
(193) да можно конечно. Но не так как ТС делает. Это же надо додумать такой объем данных одним запросом херакнуть.
195 zladenuw
 
20.09.12
16:08
(194) ну так прямой, на выхлопе дбф,хмл,тхт и т.д. и вуаля. или не . не фокус?
196 zladenuw
 
20.09.12
16:38
знатоки 7. можно ли в 8 о вызову кому 7. вызвать обработку и создать прямой запрос
197 zladenuw
 
20.09.12
16:41
(196) форму для это же. я с телефона тута. Ы
198 zladenuw
 
20.09.12
16:45
можно ли так. создаю ком к 7 ну или апли. вызываю обработку. она создает прямой запрос, выгружает в дбф. ком для 8 вернет дбф. так можно ?
199 zladenuw
 
20.09.12
16:46
(198) а можно программно создать обработку для 7 ? с 8 ? и запихнуть все что надо.
200 zladenuw
 
20.09.12
16:46
ушел в warcraft3 dota
201 Злопчинский
 
20.09.12
16:50
(199) можно
202 zladenuw
 
20.09.12
16:53
(201) но напрямую вызвать прямой запрос или мета 1с7. мы не можем или можем ?
203 zladenuw
 
20.09.12
16:53
(202) условие 1с7 объект подключения
204 zladenuw
 
20.09.12
16:54
(201) если аппи. то вроде как да. если ком то не ?
205 zladenuw
 
20.09.12
16:55
зашибетесь реклама

Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
206 zladenuw
 
20.09.12
16:58
надо учитцо!!!!!!!
«Когда мы встречались последний раз, я был всего лишь учеником; теперь я — мастер.»
— Дарт Вейдер — Оби-Вану Кеноби(источник)
207 zladenuw
 
20.09.12
16:59
можно ли это или нет ? вот в чем вопрос ! (202)
208 ILM
 
гуру
20.09.12
17:05
Вызвать можете, даже выборку можете вернуть, не может вставить, удалить и записать новые записи справочника, бл.еа.ть.
209 3Jl0
 
20.09.12
17:25
(208) а кто про это. вопрос чтения с 7. запись 8. судорь вы под чем !
210 ILM
 
гуру
20.09.12
17:47
(208) ответ на (207)
Никто не мешает выгрузить данные в текстовый файл из команд SQL, например вот такого вида
"Insert .... into ...." и передать его в ADO или native, как хотите.
Вот только не факт, что 1С будет с такими данными работать.
И я сударь, под чаем сижу))) А утром под кофе...
211 3Jl0
 
20.09.12
18:08
(210) кофеин это как бы наркотик
212 EvgeniuXP
 
20.09.12
18:33
(27) а зачем в дбф, сразу ТЗ в файл и считать из файла в ТЗ :)
213 ILM
 
гуру
20.09.12
19:11
(211) Ну да, "Арабика" свежесмолотая, в турке заваренная, сильно торкает))) А вот цейлонский чай листовой, нет.
А вы на чём сидите, сударь? Обмен опытом так сказать )))