ADODB: Прямая запись и другие операции с SQL - таблицами (MS SQL server 2000)

Публикация № 81209

Разработка - Системная интеграция - Внешние источники данных

SQL ADODB прямая запись insert

58
В каком случае имеет смысл прямая запись в SQL – таблицу?
Как ускорить процесс записи в SQL - таблицу?
Запись данных
Архивирование
Статья для новичков (обновленная версия от 23.03.2011)

В каком случае имеет смысл прямая запись в SQL-таблицу?

Когда может понадобиться прямая запись в SQL-таблицу на платформе 1С 8.1?

В нашем случае таблица регистра 1С8.1 использовалась как источник для перекачки данных в другую учетную базу. Некоторое время все работало средствами 1С. Но настал момент, когда процесс записи регистра стал занимать неприлично много времени. При этом все данные в регистре «остро необходимы».

Как ускорить процесс записи в SQL-таблицу

После некоторых мытарств (превзойти 1С в плане оптимизации работы с SQL мне не удалось), встал вопрос об индексации таблицы. В итоге было решено скопировать таблицу регистра в отдельную таблицу и убить все индексы, что в разы ускорило процесс прямой записи.

Далее описана реализация процесса записи в SQL-таблицу без индексов.

Пример ТЗ

Разберем на конкретном примере.

Допустим, что перед нами стоят задачи:

  • Собирать по определенным счетам проводки за период в разрезе организаций (Орг) и сценариев (Сцен), обрабатывать эти данные по известным правилам и записывать данные в таблицу отдельной базы
  • Записи за период по организациям и сценариям должны перезаписываться
  • Необходимо архивировать таблицу в виде копий на дату

 

Полезная литература:

  1. Using Connection Pooling with SQL server
  2. Understanding ADO Transactions with MS SQL Server
  3. Использование библиотеки ADO
  4. Руководство по производительности загрузки данных (SQL server 2005 и SQL server 2008)
  5. Справочник по Transact-SQL (компонент Database Engine)
  6. ADO CreateParameter Metod

 

Реализация

Создание базы

Для создания базы нам потребуется "Enterprise Manager" (рис.1)

Рис 1.

Открыв "Enterprise Manager". позиционируемся на папке "Databases" и щелчком правой кнопки мыши создаем новую базу (рис.2).

Рис 2.

Создаем базу (рис.3).

Рис 3.

Настройка базы изображена на рис.4 и 5

Рис 4.

Рис 5.

(T-SQL:
Create DataBase MyBase
Alter DataBase MyBase SET Recovery Simple
Alter DataBase MyBase SET Auto_Shrink ON)

 

Создание таблицы

Откроем нашу базу, спозициониремся на "Tables" и правой кнопкой мыши - создать новую таблицу (рис. 6)

Рис 6.

Следуя ТЗ, мы имеем "ключевые" поля:

 

  • Период
  • Организация (Орг)
  • Сценарий (Сцен)

 

Остальные поля представим в виде основных типов данных (рис. 7). Типы значений и их длина взяты на примере регистра 1С.

Рис 7.

Таким образом, мы имеем таблицу "MyTable" (рис. 8):

Рис 8.

Для корректной работы пишем Организацию и Сценарий в виде ссылок (рис. 8). Это нам понадобиться в дальнейшем.

(T-SQL:
Create Table MyBase.dbo.MyTable (ПолеПериод DateTime, ПолеОргСсылка binary(16), ПолеСценСсылка binary(16), ПолеСтрока nvarchar(100), ПолеБулево binary(1), ПолеСумма decimal(15,2))

)

 

Форма обработки

Рис 9.

Не претендую на то, что обработка должна выглядеть именно так. Хотелось бы отметить, что процессы обработки данных и их запись в регистр разделены.

 

Сбор и обработка данных

В данном случае этот процесс не представляет интереса. В конечном итоге имеем таблицу значений "таблицаДанных"

 

Очистка таблицы, запись в регистр

Будем использовать следующую схему:

--> НачатьТранзакцию

----> ОчиститьРегистр

----> ЗаписатьРегистр

--> ЗафиксироватьТранзакцию

 

Не буду приводить весь код обработки, остановлюсь лишь на основных моментах.

 

СтрокаКоннекта = "Provider=SQLOLEDB;Password=sdR$543Qr;Persist Security Info=True;User ID= userSQL;Initial Catalog=MyBase;Data Source=serverSQL";

 

 

//Источник получения GUID: Mista.ru

// конец источника

Далее собственные изыскания:


 

Фрагмент кода очистки и записи в регистр:

Необходимо отметить, что в приведенном выше фрагменте кода "FIRM" - Организация, "BASE" - Сценарий, "Entity_Name" - пример строкового значения, "InRep" - булево и "SUMM" - сумма.

 

Архивирование таблиц

Сразу хочу оговориться, что архивирование происходит путем копирования таблицы на определенную дату.

 

 

58

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. djd.sf 04.02.11 14:14 Сейчас в теме
Советую сделать ввиде статьи, нафига это качать потому, как непонятно, ничего там такого эзотерического нет...одним словом - для новичков.
artbear; jan27; +2 Ответить
2. jan27 684 04.02.11 14:17 Сейчас в теме
(1) учел ваше замечание, сделал пометку в анонсе
3. Ivon 638 04.02.11 14:33 Сейчас в теме
(2). Совет был не в том, чтобы добавить пометку "для новичков", а в том, чтобы переделать обработку в статью.
Добавлено
Да и статья как-то не очень. Куча текста, а зачем - непонятно.
4. jan27 684 04.02.11 14:41 Сейчас в теме
(3) я так полагаю, всем не угодишь одним текста мало, другим много
файл решил оставить на загрузке, добавив пометку в анонсе
5. Ivon 638 04.02.11 14:52 Сейчас в теме
(4). Да всем годить не надо. Если у тебя текст - оформляй как статью. Если конфа, база, компонента, обработка или отчет, тогда прикрепляй соответствующий файл.
6. jan27 684 04.02.11 15:03 Сейчас в теме
(5) спасибо, учту на будущее
Можно я, в виде исключения как тутошний новичек, эту статью оставлю в виде файла? Или таки надо переделать?
7. Ivon 638 04.02.11 15:09 Сейчас в теме
(6). Дело твое, конечно, я же не модератор. Только учитывай то, что те, кому может понадобиться эта информация, по каким-то причинам просто не скачают файл, а значит не узнают что в файле, а это в свою очередь значит, что они не будут иметь возможности понять, что именно это им и нужно.
artbear; jan27; +2 Ответить
8. jan27 684 04.02.11 15:12 Сейчас в теме
(7)Да..., с этой точки зрения я не рассматривал. Тут же ограничение на количество скачиваний. В ближайшее время переделаю.
Styvi; artbear; +2 Ответить
9. Alraune 1457 04.02.11 15:16 Сейчас в теме
Как вариант, можно просто здесь изложить кратко основные положения, а полный текст в файле, если много иллюстраций и сложно все оформлять статьей.
18. jan27 684 04.02.11 16:05 Сейчас в теме
(9) эх вот ведь, так и было изначально...
15. artbear 1156 04.02.11 16:00 Сейчас в теме
(13) Не путай людей - лицензия 1С расходится со статьями соответствующего закона.
ЗЫ КАК МОДЕРАТОР предупреждаю - говорим только по теме этой статьи, считаю разговоры о лицензии для сабжа оффтопиком и буду удалять посты о лицензии.
23. w-divin 04.02.11 16:12 Сейчас в теме
(15) ваше право, но ИМХО когда учите людей (особенно новичков, которым адресована данная статья) стоит предупреждать их о возможных последствиях использования полученных навыков
31. jan27 684 04.02.11 16:31 Сейчас в теме
(23) на мой взгляд в статье четко указано в каких случаях можно это использовать
12. Ish_2 1038 04.02.11 15:39 Сейчас в теме
Лучше переделать. Потренироваться в редактировании и расположении рисунков прямо в тексте .
Сейчас тема не открывается в IE8.

Подход , описанный в статье :
Откажемся от регистра для хранения информации из-за медленной записи
И будем использовать SQl-таблицы.

- представляется глубоко ошибочным.

Для решения таких задач нужно использовать справочник с табличной частью.
Табличная часть справочника - это обычная таблица SQL без индексов.

На всякий случай (про запись в табличную часть справочника) :

"Если менялись только отдельные строки табличной части или добавлялись новые строки, то будут записаны только измененные или добавленные строки." (с) Радченко с.42. "Профессиональная разработка в системе 1сПредприятие8"
Другими словами запись в табличную часть уже оптимизирована.
14. artbear 1156 04.02.11 15:57 Сейчас в теме
(12) Цитата "Табличная часть справочника - это обычная таблица SQL без индексов." неверна.
Цитата из почти официальной статьи на kb.1c.ru
Табличная частьДля всех таблиц, которые предоставляют доступ к табличным частям объектов.

Индекс Условие
Ссылка + Ключ (Кластерный) Всегда.
Реквизит Объект конфигурации включен в критерий отбора через реквизит "Реквизит" табличной части или для реквизита табличной части установлено свойство "Индексировать".
17. Ish_2 1038 04.02.11 16:05 Сейчас в теме
(14) Ты приведи связный текст цитаты (сейчас набор символов), приведи точную ссылку.
Я же подразумеваю прежде всего , что таблиная часть не содержит тех обязательных индексов на измерения в регистре и запись в табличную часть осуществляется значительно быстрее , чем в регистр.
20. artbear 1156 04.02.11 16:09 Сейчас в теме
(17) Вот и писал бы точную фразу, а не подразумевал что-то, что путает :)
С (17) согласен, с (12) нет
22. Ish_2 1038 04.02.11 16:11 Сейчас в теме
(20) Постой я, правда , не знаю какие индексы на табличную часть будут , если ни на один реквизит табличной части не поставлено "Индексировать". Тебе трудно что ли ссылку дать ?
28. Ish_2 1038 04.02.11 16:26 Сейчас в теме
(26) Ага , прочитал.
Для справочника с табличной частью и отсутсвием реквизитов в табличной части с признаком Индексировать
индекс будет только один "Ссылка + Ключ (Кластерный)" . Спасибо.
21. artbear 1156 04.02.11 16:11 Сейчас в теме
(17) У меня нет сейчас доступа к этой закрытой части сайта :)
Вот начало статьи (думаю, что этого достаточно)
«« Рубрикатор / Просмотр статьи (ID: 20)

Разделы рубрикатора:
/ Техническая информация / 1С:Предприятие 8.1

Индексы таблиц базы данных
Автор: Рупасов Константин (1С, Москва)

ЗЫ вроде что-то такое еще на ИТС есть.
И в "гроссбухе" на 1000 страниц (название не помню) также эта инфа должна быть
16. jan27 684 04.02.11 16:02 Сейчас в теме
(12) сейчас приемлемо отображается?
19. artbear 1156 04.02.11 16:07 Сейчас в теме
(16) Нет, неверное отображение, последнее,что видно
<!--[endif]--><!--[if !vml]--><!--[endif]-->
27. artbear 1156 04.02.11 16:24 Сейчас в теме
(16) Все также, теперь осталось
<!--[if !vml]--><!--[endif]-->
29. jan27 684 04.02.11 16:30 Сейчас в теме
(27) вроде победил <!--[if !vml]--><!--[endif]-->
33. artbear 1156 04.02.11 16:41 Сейчас в теме
(29) да, с отображением статьи все хорошо.
30. Ish_2 1038 04.02.11 16:30 Сейчас в теме
Сама же статья поучительна тем , что даёт предметный урок "новичкам":
прежде чем изобретать - изучи встроенные возможности платформы 1с.
32. jan27 684 04.02.11 16:41 Сейчас в теме
(30) а какое решение вы бы предложили в ситуации, описанной в статье?
34. Ish_2 1038 04.02.11 16:55 Сейчас в теме
(32) Использовать для хранения таких таблиц справочник с табличной частью.
Такой подход даёт максимально быструю запись , не требует ADO-соединения к внешней базе.
Что по само по себе является большим выигрышем , по сранению с Вашим подходом.
И цель моего выступления была именно в этом.
Конкретный же сценарий обработки таких данных - это отдельный разговор и требует отдельной статьи и со сравнительным анализом. В планах у меня нет такой статьи.
35. tango 484 04.02.11 19:51 Сейчас в теме
(0) Ведь платформа 1С 8.х оптимизирована для работы с SQL!
С этого места по-подробнее, пожалуйста.
cool.vlad4; +1 Ответить
36. jan27 684 07.02.11 09:21 Сейчас в теме
(35) речь о запросах
у вас есть иные данные? Хотелось бы ознакомиться
37. tango 484 07.02.11 09:35 Сейчас в теме
(36) хм... о запросах, да?
ок, что есть "оптимизация" по-вашему и что, соответственно вашему определению "оптимизации", оптимизировано в 8 для работы с запросами?

что касается моего ИМХО, то 1ска просто делает запросы к скл как может :)
в скльном "диалекте" 1С есть некоторые "примочки" типа "через" точку, но назвать это "оптимизацией для скл" я бы не риснул
39. cool.vlad4 45 07.02.11 11:55 Сейчас в теме
Присоединяюсь к (35) . Это, что значит? Если оптимизирована с SQL запросами, по вашеиу тогда зачем люди напрямую обращаются к sql и тогда о чем ваша статья? Ведь бывает что - пусть уж лучше в некоторых случаях связка com-ado, чем 1С запросы. По мне 1С как переводчик, а переводчики не всегда точны. И потом 1С запросы работают с сущностями, с объектами в отличие от SQL, который ни в пень ногой, что там за справочник и какие у него свойства. Потому сравнение запросов 1С и sql, и то что они там как-то оптимизированы весьма и весьма вопрос темный. ...."
PS Что в черном ящике?"(игра что?где?когда?)
40. Ish_2 1038 07.02.11 12:12 Сейчас в теме
(39) Не спеши присоединяться к (35). Этот пост ни о чём , т.е. пальцем в небо.
Лучше думать своей головой.

Первая задача 1с-ника изучить встроенные возможности платформы и эффективно их использовать.
Если кто-то крикнул , что ему не хватает встроенных возможностей платформы в типовых учетных задачах -
в 99.99% случаях он просто не умеет решать задачи.
41. cool.vlad4 45 07.02.11 12:51 Сейчас в теме
(40) Я вообще не о том...я про странные высказывания - то, что 1С 8 оптимизирована с SQL - что это значит? Как, по сравнению с чем и откуда такие сведения.
ЗЫ А первая задача 1С-ника - это руководствоватся первой задачей программиста - быстрый, качественный результат за минимум необходимых средств и действий. Вряд ли 1С-ник, если потребуется один раз сравнить таблицы из базы 1С и из другой базы(тоже на SQL) будет использовать 1С.
38. jan27 684 07.02.11 11:08 Сейчас в теме
42. tango 484 07.02.11 13:17 Сейчас в теме
(38) а попу с пальцем? то же самое. имхо, сравнивать 77 и 8 - некорректно
http://michael.com.ru/article.aspx?id=6
http://michael.com.ru/article.aspx?id=8
43. tango 484 07.02.11 14:14 Сейчас в теме
вот еще, с чем и как сравнивать, например:
http://gilev.blogspot.com/search/label/axapta
44. romansun 189 09.02.11 19:04 Сейчас в теме
|AND V8_InfoReg1152_1.V8_Fld6853 =


Для новичков всё-таки это круто очень. Не отквоченный кусок в смысле, а вообще прямой доступ к sql. Можно ведь сломать базу с концами..
Если б я увидел новичка, ковыряющего в 1С-ной sql таблице, отправил бы его на галеры :).


По статье - не нашел как новичку определить, что поле "V8_InfoReg1152_1.V8_Fld6853" это именно нужный ему реквизит из нужного ему регистра. Кроме того, если планируется частое обращение к sql, лучше сразу создать view с названиями таблиц и полей по образу и подобию 1С метаданных и не попадать в ситуацию, когда становится мучительно больно от одной перепутанной цифры во всех этих "reg", "fld" и пр.

Наверное, есть уже удобные и простые обработки автоматически создающие view по метаданным 1С?
45. cool.vlad4 45 09.02.11 21:53 Сейчас в теме
(44) Доступ к SQL проходят на втором, третьем курсе института. Те же, кто не учил это в институте - сталкиваются с доступом sql, когда работают с базами даннами. А 1С здесь частный случай.
ЗЫ Обработок создающих view куча
46. cool.vlad4 45 09.02.11 22:07 Сейчас в теме
(44) Чего-то найти не могу...проще самому наверное написать скрипт - CREATE VIEW DBO.Справочник_Траляля
ЗЫ на работе у меня точно такая штука есть
47. jan27 684 09.02.11 23:39 Сейчас в теме
(44) хватит придираться ))))
забыл поменять V8_InfoReg1152_1.V8_Fld6853 на MyTable.ПолеСценСсылка )))))

так на всякий случай, это таблица не 1с, а всего-лишь её копия: V8_ и _1 должны вам что-то говорить
48. jan27 684 10.02.11 09:40 Сейчас в теме
(44) Для определения поля и самой таблицы http://infostart.ru/public/14635/ в помощь
49. romansun 189 10.02.11 11:33 Сейчас в теме
(48)
Я искренне восхищен интергратором и объемом проделанной работы,.. но стараюсь по возможности обходится программами с меньшим количеством кнопок и окон :).

http://infostart.ru/public/19821/ - вот эта очень нравится.
50. jan27 684 10.02.11 14:08 Сейчас в теме
(49) спасибо за ссылочку, простенько и со вкусом
51. speshuric 1120 13.02.11 11:50 Сейчас в теме
1. А почему Вопрос() в транзакции? Да, я понимаю, что нет ни repeatable read, ни holdlock, ни serializable, но всё равно как-то криво.
2. CONVERT(DateTime,'"+Формат(НачалоДня(ДатаНач), "ДФ = ""YYYY.MM.dd HH:mm:ss""")+"' ) не совсем правильно. В соответствии с http://msdn.microsoft.com/en-us/library/ms190234%28SQL.90%29.aspx лучше исльзовать формат { ts '1998-05-02 01:23:56.123' } или { ts '1998-05-02 01:23:56' }
3. Много мелких неаккуратностей: использование "Conn.Execute("BEGIN TRANSACTION");" (а вдруг используется connection pooling?), нигде явно не указаны блокировки (то ли есть уверенность, что режимы по умолчнию подходят, то ли нет понимания темы), не указываются режимы исполнения ADO (т.е. зачем-то получаются рекордсеты при операциях DML), не используются параметры запросов (возможно, запросы бы ускорились) и многое другое
52. jan27 684 14.02.11 05:19 Сейчас в теме
(51) 1.- посоветуйте, как было бы лучше?
3. можно узнать подробнее о connection pooling?
если вас не затруднит, хотелось бы раскрытия темы по всему 3 пункту
53. speshuric 1120 14.02.11 21:28 Сейчас в теме
по первому пункту отвечу сегодня, по третьему завтра или чуть позже.
Тут момент такой, что управлять транзакциями с клиента - суть зло. Иногда необходимое зло, но всё равно возникает лишний момент, который надо постоянно учитывать. В данном случае - какая разница где начата транзакция в 1С или в АДО, если внутри транзакции работа сервера приостанавливается чтобы спросить у пользователя: "уверен?". Пользователь может несколько секунд думать, а если выполнение транзакции предполагает какую-то блокировку, то все будут ждать. Плюс автоматом манипулирование транзакциями на клиенте означает, что транзакцию нужно обеспечить в 2 системах (иначе прощай целостность данных). Плюс есть интересная специфика, если используется уровень изоляции readcommited snapshot. В данном-то случае всё относительно гладко - по умолчанию используется уровень изоляции readcommited и блокировка снимается сразу после завершения чтения запроса (тем более, что sysobjects в MS SQL 2005 и выше лишь представление над системными таблицами, и его использование, кстати, желательно исключать, заменяя на INFORMATION_SCHEMA.TABLES).
Еще сразу можно добить, что вообще говоря есть случаи (connection pooling), когда каждая из последовательных команд не гарантирует, что выполнится в одном и том же соединении, но опять же в данном случае, это к счастью не так.

Завтра допишу про остальное.

PS: ой, не заметил, что там в цикле с транзакцией и вопросом "drop table". Тогда вопросу() нет оправдания - блокировки будут накладываться Sch-M и до конца транзакции.
54. cool.vlad4 45 15.02.11 00:02 Сейчас в теме
Зачем надо знать, что таблица есть или нет. Поставте галку - перезаписывать или нет заранее. Затем есть такая вещь как NamedParameters. Ну и в качестве примера произвольный текст
|;
|SET ANSI_WARNINGS ON
|;
|SET NOCOUNT ON
|;
|SET ANSI_NULLS ON
|;
|if exists (select * from sysobjects where Чего там надо ) drop table какую надо
И здесь же сразу можно создать table.
Рекордсеты в этом случае излишне. Серверу, чтобы выполнять операции dml действительно не нужны.
locktype же - ну все зависит от ситуации. Если применительно к данной статье, то не думаю что стоит заморачиватся с connection pooling.
55. speshuric 1120 16.02.11 23:36 Сейчас в теме
Я не потерялся, просто немного загружен.
Итак. Про мелочи.
Про моё (не только моё) отношение к управлению транзакциями с клиента я основное сказал. Но есть еще момент. Посылая "BEGIN TRANSACTION" впрямую на сервер мы не учитываем, что некоторые провайдеры (ну и MS SQL тоже, но не в ADO, а в ADO.NET) могут работать в режиме пула соединений. Это прекрасно, что клиент быстро поднимает соединение из пула, вместо "долгого" ожидания создания соединения, но этот механизм сложнее. И глючнее. Т.е. "BEGIN TRANSACTION" гипотетически может уйти не в том соединении, что остальные запросы и "COMMIT", хоть и не в таком тривиальном случае. Нет, конечно, это обычно фиксится (разарботчиком драйвера), но зачем искать грабли, когда у соединения есть методы BeginTrans, CommitTrans и RollbackTrans?

Совсем не понятна конструкция
Conn.Open();
Conn.Execute("BEGIN TRANSACTION");
Conn.Execute(СтрокаЗапроса);
CONN.EXECUTE("COMMIT TRANSACTION");
Зачем такие пляски с транзакциями? Нужна транзакция - впихни в запрос. Только если использовать несколько команд в одном запросе, то стоит вначале вставлять "SET NOCOUNT ON;". На самом деле от транзакции тут только лишнее прыгание от 1С в ADO, поэтому проще убрать.

Странное замечание "Следует упомянуть, что для записи в таблицу SQL должны быть права владельца таблицы.". Я могу догадываться, что имелось ввиду (например то, что данному логину предлагается сопоставить пользователя БД со схемой dbo по умолчанию), но право же - неочевидно. Лучше приведите скрипты создания таблиц и логинов - это будет однозначно.

Неаккуратная работа со скобками в куске:
|CONVERT(DateTime,'"+Формат(стр.Период), "ДФ = ""YYYY.MM.dd HH:mm:ss""")+"' ), // и кошерно и работает
|"+ ПолучитьGUIDПоУникальномуИдентификатору( стр.Орг.УникальныйИдентификатор()+",
|"+ ПолучитьGUIDПоУникальномуИдентификатору( стр.Сцен.УникальныйИдентификатор()+",
Если вам пофигу, что пишете, то как "новичок" сможет разобраться в ваших черновиках?

За что вы СокрЛП на строку натравили? Он же её пообкусает. Ладно справа покусает (там многие кусают и не видно), но ведь и слева покусает!

Странно, что транзакции используются, но при перезаписи (как бы единая операция) удаление происходит в одной транзакции, а вставка в другой. Нипанятна.

Drop table в транзакции в цикле с вопросом, как я писал выше - это ваще жесть. По сути - совершенно однопользовательское решение.

Нужность "архивирования" на этих объёмах тоже вызывает большие сомнения. На таблицах объёмом до 100 ГБ в год кластерного индекса по дате зачастую хватает по уши. А дальше можно использовать секционирование.

Запрос к sysobjects идёт без ограничения типов объектов. А вдруг будет процедура с таким именем?

Если уж коннекты закрываете в конце, то почему рекордсеты не закрывать после использования?

Дальше. У метода Execute соединения и команды вообще-то есть параметры, которые являются битовой маской CommandTypeEnum и ExecuteOptionEnum. В частности есть параметр "adExecuteNoRecords", который рекомендуется для выполнения запросов от которых не ожидается результат. Кстати, для читабельности рекомендую использовать конструкции типа
ExecuteOptionEnum = Новый Структура ("adAsyncExecute, adAsyncFetch, adAsyncFetchNonBlocking, adExecuteNoRecords, adExecuteStream, adOptionUnspecified", 16, 32, 64, 128, 1024, -1);
так можно сделать код очень читаемым и переносимым с VBS.

Пример работы с параметрами можно найти тут. Вкратце, плюсы: принципиальная невозможность SQL injection, не нужно думать о представлении констант (чисел, дат), однократная компиляция запроса сервером, экономия сетевого трафика. Минус мне известен один: для некоторых типов для очень простых запросов (в частности инсерт узкую в таблицу без индексов) из-за медленной работы на стыке 1С и COM быстрее в 1С собрать нужный скрипт (но тоже надо уметь) и отправить его на сервер.

Блокировочные хинты. По умолчанию MS SQL использует уровень изоляции READ COMMITTED и блокировку по записям (по возможности) с дальнейшей эскалацией по количеству блокировок. Это в целом удобно, но не в случае массовой загрузки. В случае массовой загрузки для экономии памяти лучше заблокировать таблицу целиком до конца транзакции.

Ну а вообще, если интересует производительная загрузка данных, то лучше чутка подтянуть теорию, чтоб воплотить её в практике. А если хочется сделать пример для новичков, а не суперперегрузки то этот пример должен быть безукоризненно красив в своей простоте: он должен быть в едином стиле написания (а не то Conn, то CONN), он должен быть целостным и выполняемым, он должен быть правильным не только с точки зрения новичка, но и с точки зрения нормального программера.
nick_krsk; KatyariK; Belomor; jan27; romansun; artbear; cool.vlad4; +7 Ответить
56. artbear 1156 17.02.11 07:31 Сейчас в теме
(55) Прекрасный ответ и рекомендации.
57. cool.vlad4 45 17.02.11 16:13 Сейчас в теме
(56) Это да.
(0) Еще если интересно - почитайте(мне вот эта статья понравилась) Руководство по производительности загрузки данных Вообще блог Гилева рекомендую.
58. speshuric 1120 17.02.11 20:07 Сейчас в теме
(57) Это не Гилёвская статья. Ссылку на оригинал я дал. Но в целом руководство зачетнейшее.
59. cool.vlad4 45 17.02.11 21:10 Сейчас в теме
(58) Сорри, не заметил...вы прям мои мысли читаете :D ...но такие ссылки не стыдно баянить ;)
60. jan27 684 15.03.11 12:40 Сейчас в теме
61. Ёпрст 1036 24.03.11 10:01 Сейчас в теме
Лучше всё же пример для 2005/2008 скуля написать, там и инсерт в табличке поприятнее слеплен, да и еще много вкусностей
62. integragirl 20.02.13 15:16 Сейчас в теме
Полезная статья, как раз начинаю ковырять эту тему, пригодилось Ваши функции ;)
Респект автору!
63. Styvi 6 19.08.13 10:48 Сейчас в теме
И статья полезная, и обсуждение полезнейшее... Всем спасибо, зачёт автору, благодарности продвинутым комментаторам...
64. kiruha 380 08.11.13 11:54 Сейчас в теме
INsert в цикле на больших объемах как ведет ?
Если в запросе разом писать по 10 строк в таблицу - будет ли прирост производительности ?
65. kiruha 380 08.11.13 11:56 Сейчас в теме
И вместо знаков вопроса можно именновые параметры ? Что то в 1С не взлетело (
66. jan27 684 06.12.13 16:37 Сейчас в теме
(65)что не взлетело в 1С со знаками вопроса? все взлетает
68. kiruha 380 06.12.13 17:59 Сейчас в теме
(66)
Со знаками да, конечно.
Вопрос был про именованные параметры.
69. jan27 684 09.12.13 10:42 Сейчас в теме
(68) я на знаках вопроса остановился
67. jan27 684 06.12.13 16:38 Сейчас в теме
Оставьте свое сообщение

См. также

Выгрузка из 1С номенклатуры со штрихкодами без программирования 3

Статья Программист Пользователь Стажер Нет файла v8 УТ11 Россия Бесплатно (free) Загрузка и выгрузка в Excel Внешние источники данных

Я так и не смог найти простой инструкции или обработки, чтобы выгрузить из 1С: Управление торговлей 11 номенклатуру вместе со штрихкодами, поэтому решил написать собственную инструкцию.

28.08.2019    1491    user1114182    4       

Выгрузка данных в таблицу MS SQL SERVER 14

Статья Программист Нет файла v8 MS SQL Бесплатно (free) Внешние источники данных

Процедура по выгрузке данных из 1C (таблица значений) в таблицу MS SQL SERVER через COM.

02.07.2019    1690    EvgenSav    6       

1С и компьютерное зрение: новый подход к контролю за ассортиментом магазина 23

Статья Бизнес-аналитик Нет файла v8 1С:Франчайзи, автоматизация бизнеса УУ Розничная торговля Бесплатно (free) Внешние источники данных

Машинное зрение в магазинах и 1С. Как поднять эффективность торгового предприятия (магазин. кафе, шоурум и т.д.) с совершенно неожиданной стороны? Как получить реальные демографические данные покупателей и, самое главное, как это использовать в повседневной работе магазина? Как можно расширить привычные ABC и XYZ анализ, добавив в них пласт данных о трафике и демографии покупателей? Что необходимо для 1С, чтобы использовать данные видеоанализа людского трафика?

20.06.2019    3457    osipov_cvizi    16       

Интеграция решений на 1С и сервиса обмена данными RabbitMQ 100

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

"Hello world" из 1С на сервер RabbitMQ и обратно. Полностью открытый код 1С! Реализация протестирована на 1С 8.3.12.1714 (x64).

24.04.2019    8179    Eret1k    44       

MS Access и 1С. Что, когда и зачем? 70

Статья Программист Бизнес-аналитик Нет файла v8 Бесплатно (free) Практика программирования Разработка Внешние источники данных

Об использовании MS Access в связке с 1С. Можно ли использовать продукты Office на сервере. Когда Access может быть полезен. Примеры работы и другое.

09.04.2019    14653    YPermitin    31       

RabbitMQ + Конвертация Данных 3.0 177

Статья Системный администратор Программист Бизнес-аналитик Руководитель проекта Нет файла v8 КД Бесплатно (free) Внешние источники данных Обмен через XML Интеграция Перенос данных из 1C8 в 1C8

Предлагаем ознакомиться с хронологией проекта, проследить ход мыслей от снятия потребностей до реализации, и решить, удалось ли проектной команде найти оптимальное архитектурное решение под конкретный кейс заказчика путем совмещения двух известных, но до сих пор не пересекавшихся технологий, и получилось ли сложить плюсы и устранить минусы каждой из них.

21.03.2019    13626    barelpro    81       

Загрузка ЭЛН (электронных листов нетрудоспособности) из файлов 7

Статья Системный администратор Программист Нет файла v8 УПП1 Россия БУ Зарплата ФОМС, ПФ, ФСС Бесплатно (free) Внешние источники данных

Что делать, если по каким-то причинам нет возможности разместить 1С и Крипто-Про на одном рабочем месте? Правильно - открывать конфигуратор и пилить. Благо, там не сложно. Непосредственно решение для УПП 1.3. Для ЗиК 2.5 и Комплексной автоматизации должно быть аналогично.

07.02.2019    2539    SatanClaws    4       

Работа с кассой Atol через веб-сервер ДТО-10 54

Статья Программист Нет файла v8 Россия Кассовые операции НДС Бесплатно (free) Внешние источники данных ККМ Фискальный регистратор

Поддержка многопользовательской печати на одном устройстве ККТ. Поддержка изменений в законодательстве (Переход на ФФД 1.05 и НДС 20%).

31.12.2018    16498    medangel    36       

RabbitMQ, Python и Windows. Step By Step 36

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Внешние источники данных

Работа с шиной RabbitMQ, используя Python на Windows. Пошаговый быстрый старт.

13.12.2018    5083    w.r.    7       

Из 1С в IIKO: Передаем перемещения УТ в приходные накладные 4

Статья Программист Нет файла v8 УТ11 Рестораны, кафе и фаст-фуд УУ Оптовая торговля Бесплатно (free) Внешние источники данных

Рассмотрение вариантов передачи документа "Перемещение товаров" из Управление торговлей 11 в документ "Приходная накладная" IIKO.

12.09.2018    4084    oyti    7       

IIKO (Айко). Обмениваемся накладными с 1С 6

Статья Программист Нет файла v8 БП3.0 Рестораны, кафе и фаст-фуд БУ УУ Бесплатно (free) Внешние источники данных

Типовое решение от компании Айко по передаче данных в 1С Бухгалтерию не всегда удовлетворяет реалиям бизнес-процессов организации. Попробуем поразмышлять о том, как реализовать двунаправленный обмен с Айко в фоне.

01.06.2018    9246    oyti    13       

Интеграция Zimbra и 1С 22

Статья Программист Нет файла v8 Россия УУ Управление взаимоотношениями с клиентами (СRM) Бесплатно (free) Внешние источники данных

В публикации описывается способ интеграции 1С с почтовым сервером Zimbra, используя SOAP сервис. Рассматривать вопрос интеграции будем на примере бизнес задачи, из блока CRM. Реализации общей адресной книги(GAL-Global Address List) между сотрудниками. Сотрудники(компания) ведет весь учет в 1С, в том числе и элементы CRM, а Zimbra выступает лишь в роли почтового сервиса. Сделать данную публикация побудило отсутствие в интернете готовых примеров совместной работы 1С и Zimbra. Надеюсь, она поможет кому-либо сократить время на реализацию похожей задачи.

16.04.2018    7230    Гексагон    17       

Обмен сведениями о пособиях с ФСС для Зарплата и Управление персоналом 2.5.129.3 11

Статья Программист Нет файла v8 v8::СПР ЗУП2.5 Россия БУ Зарплата ФОМС, ПФ, ФСС Бесплатно (free) Внешние источники данных

Ошибка отправки файла при обмене сведениями о пособиях с ФСС. Зарплата и Управление Персоналом, редакция 2.5 (2.5.129.3).

06.03.2018    14689    Igorexa    30       

Загрузка данных из DocsVision 4

Статья Программист Нет файла v8 Бесплатно (free) Внешние источники данных

Необходимо было реализовать загрузку данных из программы документооборота "DocsVision 5" в "1С:Документооборот 8". Данное описание оставляю больше для себя, чтобы не забыть, ну и, может, еще кому поможет, т.к. не нашел нигде нормального описания.

17.01.2018    6357    apxi    0       

Создание мобильного клиента 1С на Android с использованием HTTP-сервисов 144

Статья Программист Нет файла v8 v8::Mobile Android Бесплатно (free) Внешние источники данных Мобильная разработка

Краткий курс по созданию мобильного приложения на Android, который связывается с сервером 1С через HTTP-сервис. Публикация рассчитана на тех, кто хорошо знаком с программированием на платформе 1С и владеет основами программирования на платформе Android (умеет создавать Activity и знает, как устроена структура проекта).

03.11.2017    26159    cdiamond    15       

Как сделать конфигурацию «1С:Предприятие 8» приложением QuickBooks. Проходим авторизацию OAuth 1.0a+OpenID 2.0 52

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Внешние источники данных

Пришло время, когда интеграция со сторонними организациями и их приложениями стала необходимостью для успешного ведения бизнеса. В этой статье будет рассмотрено прохождение авторизации OAuth 1.0a+OpenID 2.0 и превращение конфигурации «1С:Предприятие 8» в приложение QuickBooks.

10.09.2017    17247    pbazeliuk    28       

Редактирование пользовательских полей в Битрикс24 через REST API 7

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Внешние источники данных

Меняем значения пользовательских полей в Битрикс24 через REST API на примере редактирования контактов

06.02.2017    11535    user662672_explorer2000    2       

Нагрузочное тестирование сервера 1С при использовании WEB сервисов 51

Статья Системный администратор Программист Нет файла v8 ИТ-компания Бесплатно (free) Производительность и оптимизация (HighLoad) Внешние источники данных WEB

Проведение нагрузочного тестирования WEB-сервисов, развернутых на платформе 1С. Целью тестирования является ознакомление с возможностями платформы 1С при работе с большим количеством запросов через опубликованные WEB сервисы на IIS 7.5

01.02.2017    22932    BraunAlex    34       

Передаем контакты из 1С в Битрикс24 через REST API 117

Статья Программист Нет файла v8 УТ11 Россия Бесплатно (free) Внешние источники данных

Хочу поделиться опытом использования Битрикс24 REST API для экспорта контактов из 1С УТ 11

09.01.2017    42494    user662672_explorer2000    96       

Используем механизмы обмена данными БСП для произвольного обмена 147

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем)

Механизм БСП заточен на обмен XML по правилам обмена. Чтобы использовать его для любого другого обмена, коих в мире немало, требуются доработки. В статье описан вариант, как из положения выйти.

23.08.2016    27609    Патриот    22       

Технология проведения миграции данных в крупных проектах 43

Статья Программист Нет файла v8 Windows Бесплатно (free) Внешние источники данных Перенос данных из 1C8 в 1C8

В статье систематизируется проектный опыт проведения миграции данных в крупных проектах, связанных с переходом Заказчиков на работу в конфигурациях «1С:Предприятие 8».

17.05.2016    26764    cinimex    26       

7 причин, почему интеграцию необходимо строить на очередях. Практика RabbitMQ. Отказ от Zato ESB и OData в 1С 164

Статья Программист Нет файла v8 Windows Бесплатно (free) Внешние источники данных

Этот набросок является продолжение предыдущей статьи "7 причин, почему интеграция стала приятной. Не упускайте ряд потрясающих возможностей". В большей части это описание боли, через которую пришлось пройти на практике, используя сервисную шину данных Zato ESB и OData протокол совместно с «1С:Предприятие 8».

18.03.2016    55192    pbazeliuk    125       

1C + ЭДО Мегафон 3

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Внешние источники данных

Тестируем модуль обмена 1С с ЭДО Мегафон (модуль прилагается пользователям ресурса ЭДО Мегафон бесплатно).

1 стартмани

21.12.2015    11912    JetBrain    5       

Linq to ODATA 34

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

1С сейчас совершенствует REST интерфейс приложения, автоматически генерируемый платформой, и протокол обмена ODATA версии 3. С недавнего времени появилась возможность обмениваться, используя JSON. На просторах интернета мало информации по использованию Linq для ODATA для 1С. Поэтому решил поделиться опытом. Это продолжение статей https://infostart.ru/public/402433/

29.09.2015    27791    Serginio    11       

1С Предприятие 8.2: Обмен данными между базами на основе инструментов SQL 18

Статья Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Внешние источники данных

Обмен данными (сотрудники организаций) между базами (1С Предприятие 8.2: Бухгалтерия и 1С Предприятие 8.2: Зарплата и управление персоналом) на основе триггера SQL, отслеживающего изменения таблицы

06.11.2013    19755    jan27    25       

Алгоритм выгрузки из 1С в Access 5

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) Практика программирования Внешние источники данных

Работающий алгоритм выгрузки из 1С в Access. Понадобилось выгрузить отчет в ACCESS, пришлось разбираться.

31.10.2013    27991    dimens    10       

Организация обмена с прочими программами через XML. Имитация двухстороннего обмена без именения конфигурации 20

Статья Программист Нет файла v8 Windows Бесплатно (free) Внешние источники данных Обмен через XML

Настраиваем обмен типовой конфигурации со сторонними базами данных, с функционалом двустороннего обмена

24.04.2013    13109    Stim213    6       

Подсистема "COMExchange": прямой доступ к EXCEL через ADO 8

Статья Системный администратор Программист Нет файла v8 1cv8.cf УТ10 УПП1 Россия Windows Бесплатно (free) Файловые протоколы обмена, FTP Загрузка и выгрузка в Excel Внешние источники данных

На примере этой, очень популярной, темы наглядно продемонстрированы нетривиальные возможности консоли запросов в составе подсистемы: 1. использование событий выполнения запроса (в том числе для запуска на выполнение других запросов) 2. запуск на выполнение запроса в цикле с подстановкой значений параметров из таблицы значений.

20.01.2013    21151    yuraos    7       

Простой TCP сервер с обработкой событий на стороне 1С 67

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Внешние источники данных

В моей работе все чаще и чаще встречаются задачи связи 1С и стороннего оборудования / промышленного софта. В большинстве случаев есть некая внешняя компонента для связи с этим всем. Но эта компонента стоит денег. Плюс не каждого устроит «черный ящик», который что то крутит в себе, и выдает готовый результат. Данная статья в «картинках» покажет как можно реализовать TCP сервер для связи с чем либо «своими руками».

05.12.2012    26776    VoDo    8       

Работа с PerCo своими силами 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Windows Учет рабочего времени Бесплатно (free) Внешние источники данных

Сейчас предлагаются различные готовые модули для работы PerCo с 1С. Но не всегда решение простых задач требует установки дополнительного модуля. Рассмотрим подключение для создания и изменения карт сотрудников.

03.10.2012    27606    Nas'ka    24       

1С Конвертация, использование внешнего источника данных 305

Статья Системный администратор Программист Нет файла v8 КД Windows Бесплатно (free) Внешние источники данных

Загрузка информации в базу данных платформы 1С 8.2 из внешних источников с помощью "Конвертации данных"

26.09.2012    45561    SergeMalikov    30       

Инструкция по подключению 1С к IBM DB2 с помощью внешнего источника данных. 5

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

Краткая инструкция по работе с внешними источниками данных - подключение 1C к IBM DB2 с помощью внешнего источника данных через ODBC драйвер.

17.09.2012    10054    RomaLut    4       

Загрузка материалов из программы Командор Дизайнер в 1С: Бухгалтерия 8. 4

Статья Системный администратор Программист Нет файла v8 БП2.0 Россия БУ Windows Учет ТМЦ Бесплатно (free) Пользователю системы Загрузка и выгрузка в Excel Внешние источники данных

Komandor Designer - программа для проектирования шкафов купе. Ее используют многие предприятия, которые производят мебель. Также они используют для учета программу 1С. Поэтому возникает проблема обмена данными между этими программами. Что важно для плодотворного общения двух людей — правильно — они должны понимать друг друга, разговаривать на одном языке. То же правило и в нашем случае, программы должны одинаково правильно понимать, какой материал находится в заказе, расходе сырья по заказу.

22.08.2012    9267    knigula    1       

Загрузка из Lotus или OLE-подключение из других (не 1С) программ 2

Статья Системный администратор Программист Нет файла v8 БП2.0 Россия БУ НУ Windows НДС Бесплатно (free) Обработка документов Внешние источники данных

Как-то давно писала настройку в 7.7. Теперь пришлось переделать на 8.2. Суть в том, что в программе Lotus заводятся счета, накладные, счет-фактуры. Как уж там прописана кнопка "Экспорт" - не знаю, но эта кнопка передает в 1С8 через функцию Import2 перечень реквизитов (ИНН, Наименование, Сумма, СуммаНДС , НомерСчета, ДатаСчета, ПН, Группа). А 1С8 их подхватывает в модуле внешнего соединения и "загружает" реализацию и счета-фактуры.

12.06.2012    13139    nvl    2       

Сканируем без сканера или MXL to JPG 137

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Печатные формы документов Внешние источники данных Универсальные функции

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    29779    shakmaev    47       

Вызов операций WS-сервисов SAP из 1С (передача в параметрах Объектов XDTO) 38

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Внешние источники данных WEB

Довелось столкнуться в своей работе с вызовом из 1С веб-сервисов SAP. Если с передачей простых типов (в терминах XDTO - значений XDTO) в параметрах операции веб-сервиса, не возникло никаких проблем, то с передачей объекта XDTO пришлось повозиться. Несмотря на то, что в 1С я его заполнял, в SAP он воспринимался как пустой. В интернет особо много полезной информации не нашел, поэтому выкладываю свои наработки по теме.

18.04.2012    33546    adva    12       

Загрузка остатков из 1С6 в 1С8 2

Статья Системный администратор Программист Нет файла v8 БП2.0 БУ Бесплатно (free) Перенос данных из 1С7.7 в 1C8.X Внешние источники данных

Часто при организации обмена данными с 1С6 требуется наладить перенос проводок из 1С6 за период. Но тут же возникает вопрос и о переносе начальных остатков. Так вот, если разработан механизм загрузки движений из 1с6 из файла проводок 1sboper.dbf, то можно просто сэмулировать файл 1sboper.dbf, но в нем оставить только проводки с нулевым счетом и загрузить этот файл на дату загрузки остатков. Таким образом не придется делать дополнительный механизм. Единственное - нужно свернуть остатки в 1sboper.dbf. Как это сделать - эта статья.

27.03.2012    14867    fixin    3       

1C + jabber 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Внешние источники данных

Использование протокола xmpp для информационных сообщений из 1С без подключения внешних dll.

17.03.2012    20227    X.Leshiy    31       

Внешние источники данных: Синхронизация с внешними мастер-данными 29

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

Пример использования . Использование Запросов к таблицам внешнего источника, использование полученных данных для синхронизации справочников.

11.01.2012    11393    xzorkiix    7       

Чтение и запись данных по COM для Lotus Notes из 1С 8.х 11

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

Чтение и запись данных по COM для Lotus Notes программно из кода 1С 8.х

25.11.2011    9615    Rovan    2       

"Сделай сам" свою самую быструю перегрузку (видео). Использование технологии SQL Server IS для быстрых перегрузок данных. 30

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

Видео, демонстрирующее использование SSIS для нужд 1С. Пример очень простой, но поможет сделать "первый шаг", а потом вы сами поймете, какие возможности перед вами открывает этот механизм, и будете им пользоваться. SSIS это службы, поставляемые MS SQL Server для различных перегрузок данными. Существует достаточно простой и удобный визуальный конструктор, взаимодействие с различными ODBC и даже не ODBC источниками данных, кроме того технология использует bulk insert что обеспечивает даже для SQL Server очень высокую скорость перегрузки

29.10.2011    18348    comol    31       

Внешние источники данных в 1С 8.2.14.533 167

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Внешние источники данных

Читая анонсы обновлений 1С, задумывались, какая это замечательная возможность? Хотите использовать в своих решениях? В статье изложен опыт практического использования внешних источников данных, возможно, это "совсем не то, чего мы все так хотели".

02.10.2011    103409    comol    60       

Настройка связи между mysql и 1С через ODBC в версии 8.2.14 (Внешние источники) 175

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Математика и алгоритмы Внешние источники данных WEB

В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8

17.09.2011    108351    jorikfon    66       

Особенности работы 1С+ADO+MSSQL и Oracle. 69

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Внешние источники данных

В моей работе пришлось столкнуться с задачей обмена данными XML через Шину (MDM), используя ADO. При построении такого обмена есть некоторые особенности, о которых я попытаюсь рассказать в данной статье.

12.09.2011    30966    provova    9