|
загрузка с 1С в SQl
#37402942
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
У меня без проблем выгрузка на SQL2000 работает по такой схеме
При большом объеме выгружаемых данных лучше использовать метод Выбрать()
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234.
Перем АДОДБКоннект, стрПодключения, ИмяСервера, ОшибкаSQL, ТаблицаSQL, ЗапросВ, ВыполнитьЗапрос, Результат;
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = истина;
СтартД = ТекущаяДата();
ИмяСервера = "NASA.EKSMO-SALE.RU";
ИмяБазы = "infanalit";
ИмяПользователя = "sa";
Пароль = "";
Сообщить(Символы.ПС + Символы.ПС + "* * * В Ы Г Р У З К А НОМЕНКЛАТУРЫ НА SQL-СЕРВЕР '" + ИмяСервера + "' * * *");
стрПодключения = "Provider=SQLOLEDB.1;
|Pwd="+Пароль+";
|User ID="+ИмяПользователя+";
|Data Source=" + ИмяСервера + ";
|Initial Catalog=" + ИмяБазы + "";
АДОДБКоннект = Новый COMОбъект("ADODB.Connection");
АДОДБКоннект.ConnectionTimeOut = 300 ;
//АДОДБКоннект.CursorLocation = 3 ; //adUseClient
АДОДБКоннект.CursorLocation = 2 ; //adUseServer
ЗапросВ = Новый Запрос;
Попытка
ВыгрузитьЦеныНоменклатуры();
ЗапуститьJob("+ manual _v8_ЦеныНоменклатуры");
РазностьСек = ТекущаяДата() - СтартД;
ПрошлоЧасМинСек = РазностьСек / 3600 ;
ПрошлоЧас = Цел(ПрошлоЧасМинСек);
ПрошлоМинСек = ((ПрошлоЧасМинСек - ПрошлоЧас)* 3600 )/ 60 ;
ПрошлоМин = Цел(ПрошлоМинСек);
ПрошлоСек = Цел((ПрошлоМинСек - ПрошлоМин)* 60 );
ВыполненоЗа = "Выполнено за " + ПрошлоЧас + "час. " + ПрошлоМин + "мин. " + ПрошлоСек + "сек.";
Сообщить(ВыполненоЗа);
СообщитьНаПочту("OK! _ Выгрузка на SQL v8_ЦеныНоменклатуры.epf", "Обработка завершена успешно" + Символы.ПС + ВыполненоЗа + Символы.ПС + "Ждите подтверждения на Почту от SQL-Сервера");
ЗавершитьРаботуСистемы(Ложь);
Исключение
Сообщить(Символы.ПС + ОписаниеОшибки() + Символы.ПС + "Место останова: " + ОшибкаSQL);
СообщитьНаПочту("1C Ошибка Выполнения Обработки _ Выгрузка на SQL v8_ЦеныНоменклатуры.epf", ОшибкаSQL +":"+ Символы.ПС + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура ВыгрузитьЦеныНоменклатуры()
ТаблицаSQL = "v8_ЦеныНоменклатуры";
ОшибкаSQL="ВыгрузитьЦеныНоменклатуры";
Товары = Новый СписокЗначений;
Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("000000000000000001")); // Книги
Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("000000000000000002")); // Канцы
Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("000000000000000003")); // Аудио.
//Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("ITD000000000138804")); // Новая Продукция Дети Земли. Книга третья. Охотники на мамонтов
//Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("ITD000000000134590")); // Новая Продукция Заготовки на зиму. Большая книга рецептов
//Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("ITD000000000139428")); // Новая Продукция Консервированные грибы
//Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("000000000000000003")); // Аудио. Перенесли под Книги
//Товары.Добавить(Справочники.Номенклатура.НайтиПоКоду("000000000000000004")); // Журналы. Перенесли под Книги
ЗапросВ.УстановитьПараметр("Товары",Товары);
//ЗапросВ.УстановитьПараметр("ТипЦены",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001")); //Оптовая
ЗапросВ.УстановитьПараметр("Валюта",Справочники.Валюты.НайтиПоКоду("810")); //руб
ЗапросВ.Текст = "ВЫБРАТЬ
| началопериода(Цены.Период, день) КАК Дата,
| Цены.Номенклатура.Код КАК Код,
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК Цены
|ГДЕ
| Цены.Регистратор ССЫЛКА Документ.УстановкаЦенНоменклатуры
| И Цены.Номенклатура В ИЕРАРХИИ (&Товары)
//| И Цены.ТипЦен = &ТипЦены
| И Цены.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.Оптовая)
| И Цены.Валюта = &Валюта";
Сообщить(Формат(ТекущаяДата(), "ДЛФ=В") + ": Запрашиваем Историю Цен");
ВыполнитьЗапрос = ЗапросВ.Выполнить();
Сообщить(Формат(ТекущаяДата(), "ДЛФ=В") + ": Запрос выполнен ...");
Сообщить(Формат(ТекущаяДата(), "ДЛФ=В") + ": Инициализация Сервера ...");
Попытка
АДОДБКоннект.Open(стрПодключения);
Исключение
АДОДБКоннект.Close();
Сообщить("Невозможно установить соединение с SQL-сервером " + ИмяСервера);
ОшибкаSQL=ТаблицаSQL;
ВызватьИсключение;
КонецПопытки;
Попытка
// АДОДБКоннект.Execute("IF OBJECT_ID(N'" + ТаблицаSQL + "','U') IS not NULL drop table " + ТаблицаSQL );
АДОДБКоннект.Execute("IF OBJECT_ID(N'" + ТаблицаSQL + "','U') IS not NULL truncate table " + ТаблицаSQL
+ " else CREATE TABLE " + ТаблицаSQL + " (
|НомеклатураКод varchar(18) COLLATE Cyrillic_General_CI_AS null,
|Дата datetime null,
|ЦенаПрайс money null)"
);
АДОДБКоннект.Execute("BEGIN TRANSACTION");
АДОДБКоннект.Execute("set implicit_transactions off");
Исключение
АДОДБКоннект.Close();
Сообщить("Невозможно Create/Drop/BEGIN TRANSACTION table на SQL-сервере " + ИмяСервера);
ОшибкаSQL=ТаблицаSQL;
ВызватьИсключение;
КонецПопытки;
СтрокаРез = ВыполнитьЗапрос.Выбрать();
Сообщить(Формат(ТекущаяДата(), "ДЛФ=В") + ": Выгружаем " + СтрокаРез.Количество() + " записей ...");
Пока СтрокаРез.Следующий() Цикл
Попытка
АДОДБКоннект.Execute("Insert INTO " + ТаблицаSQL + " values ("
+ "'" + СокрП(СтрокаРез.Код) + "',"
+ ?(СтрокаРез.Дата='00010101',"null,","'" + СтрокаРез.Дата + "',")
+ "" + Формат(СтрокаРез.Цена,"ЧГ=0; ЧРД='.'; ЦДЧ=2; ЧН=0") + ")"
);
Исключение
Сообщить("Ошибка вставки данных в SQL: " + ОписаниеОшибки());
АДОДБКоннект.Execute("Commit");
АДОДБКоннект.Execute("set implicit_transactions on");
АДОДБКоннект.Close();
ОшибкаSQL=ТаблицаSQL;
ВызватьИсключение;
КонецПопытки;
ОбработкаПрерыванияПользователя();
КонецЦикла;
Попытка
АДОДБКоннект.Execute("update _v8_Актуальность set Актуальность='" + ТекущаяДата() + "', DTS = null where Таблица='" + ТаблицаSQL +"'");
Исключение
Сообщить("Невозможно Update на SQL-сервере " + ИмяСервера);
АДОДБКоннект.Execute("Commit");
АДОДБКоннект.Execute("set implicit_transactions on");
АДОДБКоннект.Close();
ОшибкаSQL=ТаблицаSQL;
ВызватьИсключение;
КонецПопытки;
Попытка
АДОДБКоннект.Execute("Commit");
АДОДБКоннект.Execute("set implicit_transactions on");
Исключение
Сообщить("Невозможно Commit на SQL-сервере " + ИмяСервера);
АДОДБКоннект.Close();
ОшибкаSQL=ТаблицаSQL;
ВызватьИсключение;
КонецПопытки;
АДОДБКоннект.Close();
Сообщить(Формат(ТекущаяДата(), "ДЛФ=В") + ": -->> Выгружено в табл. SQL " + ТаблицаSQL + Символы.ПС);
КонецПроцедуры
Процедура ЗапуститьJob(Job)
Попытка
АДОДБКоннект.Open(стрПодключения);
АДОДБКоннект.Execute("EXEC msdb.dbo.sp_start_job N'" + Job + "'");
АДОДБКоннект.Close();
Сообщить(Символы.ПС + Формат(ТекущаяДата(), "ДЛФ=В") + ": Запущена Задача Финальной обработки на SQL-сервере - " + ИмяСервера + Символы.ПС + Job + Символы.ПС + "Ждите Подтверждения по E-Mail" + Символы.ПС);
Исключение
Сообщить(ОписаниеОшибки());
Сообщить(Символы.ПС + "Запуск Задачи Финальной обработки на SQL-сервере " + ИмяСервера + " не произошел");
АДОДБКоннект.Close();
ОшибкаSQL=Job;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура СообщитьНаПочту(Заголовок,Сообщение)
Попытка
objNotesSession = Новый COMОбъект("Notes.NotesSession");
objNotesMailFile = objNotesSession.GETDATABASE(objNotesSession.getenvironmentstring("MailServer", True), objNotesSession.getenvironmentstring("Mailfile", True));
Открыто = objNotesMailFile.IsOpen;
Если НЕ Открыто Тогда Открываем=objNotesMailFile.OpenMail КонецЕсли;
objNotesDocument = objNotesMailFile.CREATEDOCUMENT;
objNotesDocument.Form = "Memo";
objNotesDocument.Importance = "1";
objNotesDocument.SendTo = "shhitova.nm@eksmo-sale.ru";
objNotesDocument.CopyTo = "Romanovskiy.DA@eksmo-sale.ru";
objNotesDocument.Subject = Заголовок;
objRichStyle = objNotesSession.CreateRichTextStyle;
objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body");
objNotesField.APPENDTEXT (Сообщение);
objNotesDocument.PostedDate = ТекущаяДата();
objNotesDocument.Send (False);
objNotesSession.Close();
Исключение
Сообщить(ОписаниеОшибки());
Сообщить(Символы.ПС + "Отправка Почты не удалась");
ОшибкаSQL="СообщитьНаПочту";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
|
|
|