Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Прямые запросы на изменение данных внутри 1С.

Прямые запросы на изменение данных внутри 1С.
Я
   Креатив
 
18.05.21 - 08:50
Есть необходимость почистить несколько таблиц полностью или выборочно.
База большая SQL. Средствами 1С чистится очень долго. Средствами SQL чистить не очень удобно, так как приходится удалять базу из сервера 1С(иначе 1С делает роллбэк). Плюс ещё названия таблиц приходится в копии подглядывать.
Есть ли внешние компоненты или обработки, которые подключаются к базе внутри сеанса 1с?
 
 Партнерская программа EFSOL Oblako
   Галахад
 
1 - 18.05.21 - 08:57
Пальцами код написать.
   shuhard
 
2 - 18.05.21 - 09:01
(0)[иначе 1С делает роллбэк]
что за конфа и регистры себя так ведут ?
   Креатив
 
3 - 18.05.21 - 09:04
(2) Платформа 8.2 и дело, как я понимаю, не в регистрах. Просто сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами. Мне так один человек сказал. Я проверил. Почистил с помощью truncate table один регистр. Через секунду все данные уже были на месте.
   arsik
 
4 - 18.05.21 - 09:07
(3) Ну не знаю. Я чистил так в своей разработочной базе. Ничего вроде не вернулось. Но у меня postgre.
   shuhard
 
5 - 18.05.21 - 09:09
(3) [сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами]
лажа
   fisher
 
6 - 18.05.21 - 09:10
(3) > Просто сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами. Мне так один человек сказал. Я проверил. Почистил с помощью truncate table один регистр. Через секунду все данные уже были на месте.
С таким уровнем знаний лучше действительно прямыми запросами не заниматься.
   Bigbro
 
7 - 18.05.21 - 09:10
(3) ну а если отцепить базу от сервера 1с на время изменений в SQL
не "на горячую" же чистить данные?
   acht
 
8 - 18.05.21 - 09:11
(3) >  сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами
Время ох*ительных историй...
   ДенисЧ
 
9 - 18.05.21 - 09:13
Какой бред... Вроде не пятница, а уже такие глюки...
Погода, что-ли?
   Креатив
 
10 - 18.05.21 - 09:14
(6)(8)(9)Поведайте, как на самом деле происходит?
   Креатив
 
11 - 18.05.21 - 09:15
(7)Я так и делаю, когда полностью таблицу почистить надо.
   ДенисЧ
 
12 - 18.05.21 - 09:15
(10) Как-как... Каком к верху.
   Sammo
 
13 - 18.05.21 - 09:16
(3) Имхо, бред. Проверь - в какой базе транкейтнул.
1. Смотря что чистить. Если движения - не очень хорошо, т.к. надо помимо основной таблицы чистить еще скульные таблицы оборотов и остатков и решать еще вопрос пересчета итогов. Если справочники, регистры сведений или документы без движений - без проблем.
2. Смотри ПолучитьСтруктуруХраненияБазыДанных
3. Помнится в инете было множество подобных обработок.

Но на мой взгляд - это должны быть очень существенные аргументы, чтобы залазить руками в таблицы. Т.е. удаление сутками, при этом невозможность запуска в фоновом режиме или выделения регламентного окна (работа в режиме 24/7)
   mistеr
 
14 - 18.05.21 - 09:17
(3) Ты наверное commit забыл сделать. :)
   fisher
 
15 - 18.05.21 - 09:18
(10) "Один человек" гонит пургу. А у тебя глюк был. Запрос либо не выполнился либо откатился в результате сбоя. TRUNCATE быстро чистит таблицу, но для этого ему нужно ее всю залочить. Вероятно, это не удалось. Попробуй DELETE.
   mistеr
 
16 - 18.05.21 - 09:21
(0) >Средствами 1С чистится очень долго.

Насколько долго? За ночь справится?
   Креатив
 
17 - 18.05.21 - 09:22
(14)А что MS SQL перестал автоматически комитить запросы? Это же не оракл.
(16)Трое суток. Там в регистре версии объектов 11 миллионов записей.
   Sammo
 
18 - 18.05.21 - 09:25
(17) Если регистр сведений и надо грохнуть целиком - транкейт подойдет. Причем можно из самого 1с. Было.
Но не вижу проблемы запускать удаление в фоновом режиме
   Garykom
 
19 - 18.05.21 - 09:34
(17) В 1С есть регламентные/фоновые и да можно в кучу потоков запускать
   Креатив
 
20 - 18.05.21 - 09:34
(17)+ в смысле за трое суток удалилось два миллиона записей из 11-ти.
   Garykom
 
21 - 18.05.21 - 09:35
(20) В 1 поток? Попробуй в 50 ))
   rsv
 
22 - 18.05.21 - 09:42
(0) …. В 100 потоков и через парсинг json или xml
   rsv
 
23 - 18.05.21 - 09:42
Не открыли еще доя себя менеджмент студио скулевый ?
   mistеr
 
24 - 18.05.21 - 09:42
(17) MS SQL и не начинал. Автоматический коммит может делать клиент, в зависимости от настроек. Например SSMS по умолчанию не делает.

Oracle, кстати, как раз автоматически коммитит truncate.
   mistеr
 
25 - 18.05.21 - 09:43
(20) Ну допустим. А куда ты спешишь, со старыми-то версиями объектов?
   Йохохо
 
26 - 18.05.21 - 09:44
(24) еще про выделение части расскажи)
   вым
 
27 - 18.05.21 - 09:46
фикасе)) в начале какие были перлы)) 1с стала умнее sql )) хранит у себя все данные для восстановления))
   mistеr
 
28 - 18.05.21 - 09:48
(26) Какой части?
   вым
 
29 - 18.05.21 - 10:00
а по делу есть обработки и просто просмотра структуры внутренних полей БД. например
https://1c-predpriyatie-qlik.ivan-shamaev.ru/kak-prosmotret-strukturu-bazy-dannyh-1s-predpriyatie-1cv8-1cd/#______1_83
https://infostart.ru/public/340311/
https://start1c.blogspot.com/2016/01/blog-post_31.html
https://itdemka.ru/pubs/1124.html
так и обработки для непосредственного редактирования БД
   Йохохо
 
30 - 18.05.21 - 10:05
(28) если есть выделение то будет выполнено только оно из всего скрипта
 
 
   Креатив
 
31 - 18.05.21 - 10:06
Ситуация с роллбэком не воспроизвелась.
(29)Благодарю. Посмотрю.
   fisher
 
32 - 18.05.21 - 10:09
(24) > MS SQL и не начинал. Автоматический коммит может делать клиент
Это не совсем корректное утверждение.
Это можно настроить в рамках сессии. То есть настраивается клиентом, но делает сиквел.
И ЕМНИП с 2000 сиквела по дефолту - автокоммит. То есть если клиент не делает специальных телодвижений, то будет автокоммит.
   Aleksey
 
33 - 18.05.21 - 10:19
(17) как удаляешь? через чтения порциями?

Буквально на прошлой недели удалял 6 млн записи из этого регистра. Не мгновенно, но за минуту точно справилось

Набор = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
Набор.Записать(Истина);
   mistеr
 
34 - 18.05.21 - 10:20
(32) Спасибо за поправку.
   Aleksey
 
35 - 18.05.21 - 10:21
   Йохохо
 
36 - 18.05.21 - 10:24
(32) нету, в ссмс IMPLICIT_TRANSACTIONS OFF
   Креатив
 
37 - 18.05.21 - 10:25
(33)Через ТИИ. И этих двух строк достаточно?
   fisher
 
38 - 18.05.21 - 10:27
(36) Я вроде бы обратного не утверждал.
(37) Мда
   fisher
 
39 - 18.05.21 - 10:29
The SQL Server Native Client OLE DB Provider for SQL Server, and the SQL Server Native Client ODBC driver, automatically set IMPLICIT_TRANSACTIONS to OFF when connecting. SET IMPLICIT_TRANSACTIONS defaults to OFF for connections with the SQLClient managed provider, and for SOAP requests received through HTTP endpoints
   Aleksey
 
40 - 18.05.21 - 10:29
(37) ну если нужна полная очистка, без условий - то да. Эти 2 строчки просто записывают пустой набор замещая существующие записи
   Креатив
 
41 - 18.05.21 - 10:30
(40)Благодарю, запомню на будущее.
   вым
 
42 - 18.05.21 - 10:31
(37) (41) главное архив БД не делай, на живой базе быстрее результат получается )) и запоминается лучше)
   Креатив
 
43 - 18.05.21 - 10:34
(42)Это измученные копии живой базы.
   fisher
 
44 - 18.05.21 - 10:35
(36) А! Или ты с названиями попутал? Это режим НЕЯВНЫХ транзакций OFF. В результате чего как раз автокоммит. Автокоммит, неверное, сбивает с толку названием, потому что это не отдельный режим а нативное поведение системы. И можно включить режим неявных транзакций, который как раз является отдельным режимом при котором неявно втыкается начало транзакции если делается запрос на изменение, а активных транзакций в это время нет.
   Йохохо
 
45 - 18.05.21 - 10:42
(44) угу "Если задано значение OFF, каждая из предыдущих инструкций T-SQL ограничена невидимыми инструкциями BEGIN TRANSACTION и COMMIT TRANSACTION. При значении OFF транзакция выполняется в режиме автофиксации. "
   brainguard
 
46 - 18.05.21 - 10:53
(3) А ты DELETом
   Sammo
 
47 - 18.05.21 - 10:56
(37) Эммм. Вопрос снят. И эти люди лезут напрямую в БД...
   вым
 
48 - 18.05.21 - 11:04
(47) вот вам жалко что-ли? - а пожалуйста (с)
https://www.youtube.com/watch?v=5s5yJLOEXMo
   Sammo
 
49 - 18.05.21 - 12:40
(48) Да не жалко. Интересно, будет тема от топикстартера - случайно удалил весь регистр сведений - что делать...
   Креатив
 
50 - 18.05.21 - 16:28
(49)Не дождётесь!(с)
   Креатив
 
51 - 18.05.21 - 17:51
А выборочно как удалять? Есть ещё объекты доступа документов. Его надо только от битых избавить. Как в SQL отобрать битые ссылки?
   Garykom
 
52 - 18.05.21 - 17:53
(51) Битые это уже переписывание платформы 1С какое то
   Креатив
 
53 - 18.05.21 - 18:16
Хотел средствами 1с почистить. Сервер клиента упал.
   mistеr
 
54 - 18.05.21 - 19:29
Между (50) и (53) не прошло и двух часов. :D
   Креатив
 
55 - 18.05.21 - 20:32
(54)Хороший запрос кладёт базу вместе с сервером.
   PR
 
56 - 18.05.21 - 20:36
Автору с его одинесными роллбэками пятницы бы дождаться
   Креатив
 
57 - 18.05.21 - 21:01
(56)Слишком долго. А роллбэк предположительно случился в результате коллизии.
   Serginio1
 
58 - 18.05.21 - 21:28
   Serginio1
 
59 - 18.05.21 - 21:30
58+ Можно пришпондорить и для Linq2DB
https://github.com/linq2db/linq2db
   mistеr
 
60 - 18.05.21 - 23:23
(55) Хороший сервер одним запросом не положишь. :) Тем более "средствами 1С".
 
 


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.