TGViewer
Е.БУДНИ программиста 1С | Роман Чумадин Е.БУДНИ программиста 1С | Роман Чумадин @e_budni_programmer · 6.25K subscribers
Post #120 2.74K
Выбираем меньшее из зол в вопросе оптимизации

Автор - Евгения

В этой заметке я предлагаю поразмышлять над выбором решения, которое предотвратит звонок разъярённого админа с фразой «Какая … опять положила сервак?!».

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

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

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

🔸1 – решение в лоб (и наиболее часто встречаемое) – запрос в цикле. Для каждой строки файла мы делаем запрос к базе, получаем данные из базы, формируем запись, пишем.

Особенности:

➖ 1. DDoS-атака на сервер. Если объём данных мал – ничего страшного. Если много – ждите звонка админа.

➖ 2. Долго..

Попробуем избежать исключения с экзамена.. И сделать так:

🔸2 – Считываем файл в таблицу значений, индексируем колонку артикул. Нужные данные из БД получаем запросом, с отбором по артикулу(массив, выгруженный из первой таблицы). Далее, используя метод найти, формируем запись, соединяя данные двух таблиц, пишем.

Особенности: Долго. Мы теряем время на создание индекса. Потом поиск. Потом запись. Кушаем оперативку. Но в целом вариант уже лучше, чем первый.

🔸3- Как и в варианте 2, считываем данные из файла в таблицу значений. Рисуем запрос к БД для получения дополнительной информации, используя первую таблицу как временную таблицу и уже к ней соединением крепим данные из БД. На выходе у нас выборка, по мере обхода которой, формируем запись и пишем.

Особенности метода: Кушаем оперативную память. Временная таблица не всегда является оптимальным решением. Сервер по собственному разумению может сбросить нашу временную таблицу на диск, и мы теряем скорость. Опасность неконтролируемого разрастания TempDB (это в целом про временные таблицы. Маловероятно, что конкретно наша задача будет виновником данной ситуации). Но в большинстве случаев вариант отработает быстрее чем вариант 2.

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

----------------------

Пост написан по программе "Напиши пост сам".

У Евгении есть свой канал по тематике ИТ и 1С: 1024B

Поддержите лайками и подпиской!
  • 👍 32
  • 🔥 1
More from @e_budni_programmer
  1. Oct 1, 2026Post #612
  2. Sep 30, 2026Работу техподдержки 1С обычно редко обсуждают, пока все работает в штатном режиме. Но когд…
  3. Sep 24, 2026РУБРИКА «ЧёПоСтандартам» Оформление текстов запросов Хотел выбрать самые важные моменты из…
  4. Sep 22, 2026Всем привет! И снова про конференции) Прошла Жёлтая конфа, Кунг-Фу Митап в питере, на этот…
  5. Sep 17, 2026Post #607
  6. Sep 12, 2026Больше постов про ИИ?) Сейчас всё активнее пробую применять ИИ непосредственно в разработк…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →