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

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

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

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

В каком случае имеет смысл прямая запись в 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" - сумма.

 

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

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

 

 

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

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

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

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

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

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

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

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

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

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

ЗЫ вроде что-то такое еще на ИТС есть.
И в "гроссбухе" на 1000 страниц (название не помню) также эта инфа должна быть
16. jan27 696 04.02.11 16:02 Сейчас в теме
(12) сейчас приемлемо отображается?
19. artbear 1174 04.02.11 16:07 Сейчас в теме
(16) Нет, неверное отображение, последнее,что видно
<!--[endif]--><!--[if !vml]--><!--[endif]-->
27. artbear 1174 04.02.11 16:24 Сейчас в теме
(16) Все также, теперь осталось
<!--[if !vml]--><!--[endif]-->
29. jan27 696 04.02.11 16:30 Сейчас в теме
(27) вроде победил <!--[if !vml]--><!--[endif]-->
33. artbear 1174 04.02.11 16:41 Сейчас в теме
(29) да, с отображением статьи все хорошо.
30. Ish_2 1048 04.02.11 16:30 Сейчас в теме
Сама же статья поучительна тем , что даёт предметный урок "новичкам":
прежде чем изобретать - изучи встроенные возможности платформы 1с.
32. jan27 696 04.02.11 16:41 Сейчас в теме
(30) а какое решение вы бы предложили в ситуации, описанной в статье?
34. Ish_2 1048 04.02.11 16:55 Сейчас в теме
(32) Использовать для хранения таких таблиц справочник с табличной частью.
Такой подход даёт максимально быструю запись , не требует ADO-соединения к внешней базе.
Что по само по себе является большим выигрышем , по сранению с Вашим подходом.
И цель моего выступления была именно в этом.
Конкретный же сценарий обработки таких данных - это отдельный разговор и требует отдельной статьи и со сравнительным анализом. В планах у меня нет такой статьи.
35. tango 485 04.02.11 19:51 Сейчас в теме
(0) Ведь платформа 1С 8.х оптимизирована для работы с SQL!
С этого места по-подробнее, пожалуйста.
cool.vlad4; +1 Ответить
36. jan27 696 07.02.11 09:21 Сейчас в теме
(35) речь о запросах
у вас есть иные данные? Хотелось бы ознакомиться
37. tango 485 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 1048 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 696 07.02.11 11:08 Сейчас в теме
42. tango 485 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 485 07.02.11 14:14 Сейчас в теме
вот еще, с чем и как сравнивать, например:
http://gilev.blogspot.com/search/label/axapta
44. romansun 191 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 696 09.02.11 23:39 Сейчас в теме
(44) хватит придираться ))))
забыл поменять V8_InfoReg1152_1.V8_Fld6853 на MyTable.ПолеСценСсылка )))))

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

http://infostart.ru/public/19821/ - вот эта очень нравится.
50. jan27 696 10.02.11 14:08 Сейчас в теме
(49) спасибо за ссылочку, простенько и со вкусом
51. speshuric 1149 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 696 14.02.11 05:19 Сейчас в теме
(51) 1.- посоветуйте, как было бы лучше?
3. можно узнать подробнее о connection pooling?
если вас не затруднит, хотелось бы раскрытия темы по всему 3 пункту
53. speshuric 1149 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 1149 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 1174 17.02.11 07:31 Сейчас в теме
(55) Прекрасный ответ и рекомендации.
57. cool.vlad4 45 17.02.11 16:13 Сейчас в теме
(56) Это да.
(0) Еще если интересно - почитайте(мне вот эта статья понравилась) Руководство по производительности загрузки данных Вообще блог Гилева рекомендую.
58. speshuric 1149 17.02.11 20:07 Сейчас в теме
(57) Это не Гилёвская статья. Ссылку на оригинал я дал. Но в целом руководство зачетнейшее.
59. cool.vlad4 45 17.02.11 21:10 Сейчас в теме
(58) Сорри, не заметил...вы прям мои мысли читаете :D ...но такие ссылки не стыдно баянить ;)
60. jan27 696 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 383 08.11.13 11:54 Сейчас в теме
INsert в цикле на больших объемах как ведет ?
Если в запросе разом писать по 10 строк в таблицу - будет ли прирост производительности ?
65. kiruha 383 08.11.13 11:56 Сейчас в теме
И вместо знаков вопроса можно именновые параметры ? Что то в 1С не взлетело (
66. jan27 696 06.12.13 16:37 Сейчас в теме
(65)что не взлетело в 1С со знаками вопроса? все взлетает
68. kiruha 383 06.12.13 17:59 Сейчас в теме
(66)
Со знаками да, конечно.
Вопрос был про именованные параметры.
69. jan27 696 09.12.13 10:42 Сейчас в теме
(68) я на знаках вопроса остановился
67. jan27 696 06.12.13 16:38 Сейчас в теме
Оставьте свое сообщение

См. также

Получение данных из Сигур

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

Получение данных из СКУД Сигур (без танцов с бубном)

25.12.2019    1412    skaoxy    5       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Интеграция решений на 1С и сервиса обмена данными RabbitMQ через Web REST API

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

Отправка "Hello world" из 1С на сервер RabbitMQ и обратно при помощи web REST API. Проще уже некуда! Совместимо с Linux и Windows! Реализация протестирована на 1С 8.3.14.1854 (x64).

21.10.2019    6883    Eret1k    12       

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

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

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

28.08.2019    5201    user1114182    4       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

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

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

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

02.07.2019    4163    EvgenSav    17       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

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

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

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

20.06.2019    5989    osipov_cvizi    16       

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

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

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

24.04.2019    12230    Eret1k    51       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

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

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

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

09.04.2019    20646    YPermitin    32       

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

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

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

21.03.2019    18433    barelpro    82       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

Выбирайте и голосуйте за самые интересные доклады! Лучшие из лучших попадут в окончательную программу казанского митапа. Оставить свой голос можно до 25 февраля 2020 года.

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

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

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

07.02.2019    4118    SatanClaws    4       

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

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

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

31.12.2018    24185    medangel    41       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

RabbitMQ, Python и Windows. Step By Step

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

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

13.12.2018    6652    w.r.    7       

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

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

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

12.09.2018    5967    oyti    7       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

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

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

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

01.06.2018    11752    oyti    13       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

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

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

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

16.04.2018    9491    Гексагон    17       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

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

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

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

06.03.2018    16419    Igorexa    30       

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

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

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

17.01.2018    7787    apxi    4       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

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

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

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

03.11.2017    29860    cdiamond    15       

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

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

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

10.09.2017    19001    pbazeliuk    28       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

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

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

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

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

06.02.2017    13354    user662672_explorer2000    2       

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

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

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

01.02.2017    25122    BraunAlex    34       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

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

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

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

09.01.2017    48255    user662672_explorer2000    111       

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

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

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

23.08.2016    30605    Патриот    28