Оптимизация

noobs
Дата: 29.01.2016 06:38:50
Добрый день всем.
Подскажите пожалуйста как ускорить выполнению данного кода?
+
For i = 1 To rs.RecordCount 'цикл по записям рекордсета из excel
 If DCount("[kod_upr]", "[NCI_UPR_1214]", "[NCI_UPR_1214].[kod_upr]='" & rs.Fields(6) & "'") > 0 
 And DCount("[nStrEd]", "[NCI_StrEd_18]", "[NCI_StrEd_18].[nStrEd]=" & rs.Fields(3)) > 0 Then
rs2.AddNew
rs2.Fields("kod_kurator") = rs.Fields("Код Кураторов") '0
rs2.Fields("kod_manager") = rs.Fields("Код Менеджера") '1
rs2.Fields("type_activ") = rs.Fields("Вид деятельности ОД/ИД/Прибыль/Возмещаемые") '2
rs2.Fields("kod_18") = rs.Fields("Код Контрагента (18 справочник)") '3
rs2.Fields("NumDogKurator") = rs.Fields("№ договора от Куратора") '4
rs2.Fields("kod_25") = rs.Fields("№ договора САП (25 справочник)") '5
rs2.Fields("nameUslugi") = rs.Fields("Наименование услуги") '6
rs2.Fields("kod_upr") = rs.Fields("Код управления") '7
rs2.Fields("kod_12") = rs.Fields("Код Центров затрат (12 справочник)") '8
rs2.Fields("kod_52") = rs.Fields("Код Вида услуг (52 справочник)") '9
rs2.Fields("kod_33") = rs.Fields("Код Целевой программы (33 справочник)") '10
rs2.Fields("kod_39") = rs.Fields("Код Месторождения (39 справочник)") '11
rs2.Fields("kod_47") = rs.Fields("Код элементов затрат (47 справочник)") '12
rs2.Fields("kod_13") = rs.Fields("Код прочих доходов и расходов (кроме прочих р-ций,13 справочник)") '13
rs2.Fields("kod_103") = rs.Fields("Код Вида производств (103 справочник)") '14
rs2.Fields("kod_24") = rs.Fields("Код Вида деятельности (24 справочник)") '15
rs2.Fields("kod_AFE") = rs.Fields("Код AFE (справочник АФЕ)") '16
rs2.Fields("recoverable") = rs.Fields("Возмещаемые (если агентский договор прописывать № договора )") '17
rs2.Fields("kod_Cdelka") = rs.Fields("Код типа сделки (справочник сделок)") '18
rs2.Fields("kod_StatBud") = rs.Fields("Код статьи бюджета (справочник Статей бюджета)") '19
rs2.Fields("numberLot") = rs.Fields("Номер лота") '20
rs2.Fields("ZKprotocol") = rs.Fields("Протокол ЗК") '21
rs2.Fields("kod_edizm") = rs.Fields("Единица измерения") '22
rs2.Fields("kod_urovuslug") = rs.Fields("Уровень обслуживания(Эконом/Стандарт/Премиум)") '23
rs2.Fields("cost") = rs.Fields("Тариф за единицу в месяц (без НДС, руб)") '24
rs2.Fields("valuta") = rs.Fields("Валюта договора") '25
rs2.Fields("procNDS") = rs.Fields("Процент НДС") '26
rs2.Fields("coefficient") = rs.Fields("Целевой коэффициент") '27
rs2.Fields("volume01") = rs.Fields("Объем обслуживаемых единиц (1)") '28
rs2.Fields("sum01") = rs.Fields("Сумма в месяц, рублей, без НДС (1)") '29
rs2.Fields("volume02") = rs.Fields("Объем обслуживаемых единиц (2)") '30
rs2.Fields("sum02") = rs.Fields("Сумма в месяц, рублей, без НДС (2)") '31
rs2.Fields("volume03") = rs.Fields("Объем обслуживаемых единиц (3)") '32
rs2.Fields("sum03") = rs.Fields("Сумма в месяц, рублей, без НДС (3)") '33
rs2.Fields("volume04") = rs.Fields("Объем обслуживаемых единиц (4)") '34
rs2.Fields("sum04") = rs.Fields("Сумма в месяц, рублей, без НДС (4)") '35
rs2.Fields("volume05") = rs.Fields("Объем обслуживаемых единиц (5)") '36
rs2.Fields("sum05") = rs.Fields("Сумма в месяц, рублей, без НДС (5)") '37
rs2.Fields("volume06") = rs.Fields("Объем обслуживаемых единиц (6)") '38
rs2.Fields("sum06") = rs.Fields("Сумма в месяц, рублей, без НДС (6)") '39
rs2.Fields("volume07") = rs.Fields("Объем обслуживаемых единиц (7)") '40
rs2.Fields("sum07") = rs.Fields("Сумма в месяц, рублей, без НДС (7)") '41
rs2.Fields("volume08") = rs.Fields("Объем обслуживаемых единиц (8)") '42
rs2.Fields("sum08") = rs.Fields("Сумма в месяц, рублей, без НДС (8)") '43
rs2.Fields("volume09") = rs.Fields("Объем обслуживаемых единиц (9)") '44
rs2.Fields("sum09") = rs.Fields("Сумма в месяц, рублей, без НДС (9)") '45
rs2.Fields("volume10") = rs.Fields("Объем обслуживаемых единиц (10)") '46
rs2.Fields("sum10") = rs.Fields("Сумма в месяц, рублей, без НДС (10)") '47
rs2.Fields("volume11") = rs.Fields("Объем обслуживаемых единиц (11)") '48
rs2.Fields("sum11") = rs.Fields("Сумма в месяц, рублей, без НДС (11)") '49
rs2.Fields("volume12") = rs.Fields("Объем обслуживаемых единиц (12)") '50
rs2.Fields("sum12") = rs.Fields("Сумма в месяц, рублей, без НДС (12)") '51
rs2.Fields("totalVolume") = rs.Fields("Объем обслуживаемых единиц") '52
rs2.Fields("totalSum") = rs.Fields("Сумма, в рублях, без НДС") '53
rs2.Update
End If
If i < rs.RecordCount Then rs.MoveNext 'если переменная цикла не добралась до конца то двигаем рекордсет eXcel на следующую запись
Next i
End If

ПЕНСИОНЕРКА
Дата: 29.01.2016 07:46:16
noobs,

 If DCount("[kod_upr]", "[NCI_UPR_1214]", "[NCI_UPR_1214].[kod_upr]='" & rs.Fields(6) & "'") > 0 
 And DCount("[nStrEd]", "[NCI_StrEd_18]", "[NCI_StrEd_18].[nStrEd]=" & rs.Fields(3)) > 0 Then
rs2.AddNew
''''''''
rs2.Fields("kod_18") = rs.Fields("Код Контрагента (18 справочник)") '3
'''''''''''''''''''
rs2.Fields("nameUslugi") = rs.Fields("Наименование услуги") '6


по правде говоря, не поняла ваше действо
--отбор по контрагенту/услуге
--без накопления
--зачем нужен dcount
noobs
Дата: 29.01.2016 07:48:21
Dcount проверяет есть ли текущая запись из Excel в справочнике на сервере, если есть то делаем вставку из Excel на сервер.
ПЕНСИОНЕРКА
Дата: 29.01.2016 07:51:49
noobs,

без базы сложно понять, но может сначала стыковать основную таблицу с "[NCI_UPR_1214]/ "[NCI_StrEd_18]" для отсекания лишних и по RS читать только нужные, а не считать количество записей в неких подтаблицах, не используя результаты подсчета

а может и запросом insert все можно сделать
noobs
Дата: 29.01.2016 07:52:00
Примерно такой алгоритм
1. Создал запрос к серверу к табле управлений
2. Создал запрос к серверу к табле контрагентов
3.Создал подключение к файлу EXcel
4.Получил значение управления
5. Получил данные контрагента
6. Проверил наличие номера управления в табле управлений через рекордсет
7. Проверил наличие данных контрагента в табле контрагентов через рекордсет
8. Совпало делаю вставку, иначе следующее значение
ПЕНСИОНЕРКА
Дата: 29.01.2016 07:58:16
noobs
Dcount проверяет есть ли текущая запись из Excel в справочнике на сервере, если есть то делаем вставку из Excel на сервер.

это я поняла(кроме ссылки на ексель)

не поняла почему не применяется

select * from tab1
 inner join [NCI_UPR_1214]
   on [NCI_UPR_1214].[kod_upr]=tab1.[Код Контрагента (18 справочник)]
 inner join [NCI_StrEd_18] 
 on [NCI_StrEd_18].[nStrEd]=[Наименование услуги]


пишу без конструктора и таблиц --могут быть ошибки
ПЕНСИОНЕРКА
Дата: 29.01.2016 08:02:28
noobs,

насколько велики таблицы "[NCI_UPR_1214]/ "[NCI_StrEd_18]"
порядок записей в них

rs.Fields("Код Контрагента (18 справочник)") '3 ---это код--число или текст
'''''''''''''''''''
rs.Fields("Наименование услуги") '6------------------это похоже текст
noobs
Дата: 29.01.2016 08:07:17
в NCI_UPR_1214 -1000 записей
в NCI_StrEd_18 - 35000 записей
ПЕНСИОНЕРКА
Дата: 29.01.2016 08:08:34
noobs,

не ответили на
автор
rs.Fields("Код Контрагента (18 справочник)") '3 ---это код--число или текст
'''''''''''''''''''
rs.Fields("Наименование услуги") '6------------------это похоже текст
noobs
Дата: 29.01.2016 08:10:09
rs.Fields("Код Контрагента (18 справочник)") '3 ---это число