Подбор и обработка объектов. Удалить через СУБД
|
|
yasnovidyashii | Дата: Понедельник, 04.03.2024, 15:37 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| Впервые пользуюсь удалением через СУБД. Но так как это копия базы, а записей в регистре сведений очень много (под 2 миллиона), решил попробовать.
Примерно через 5 минут после нажатия на кнопку "Удалить через СУБД" получаю ошибку:
Код Ошибка при вызове метода контекста (Open) {ОбщийМодуль.ирОбщий.Модуль(28473)}: РезультатЗапроса.Open(ТекстЗапроса, СоединениеADO, adOpenStatic, adLockOptimistic, adCmdText); {Обработка.ирПодборИОбработкаОбъектов.Форма.Удалить.Форма(378)}: КолонкиКандидатов = ирОбщий.ВыполнитьЗапросЭтойСУБДЛкс(ТекстПоискаИмениВТ,,,,,, мСоединениеСУБД); {Обработка.ирПодборИОбработкаОбъектов.Форма.Удалить.Форма(298)}: УдалитьОбъектыЧерезСУБД(Запрос, ИмяТаблицы,, ИмяТаблицыКлючей, ТекстСУБД, ОтключенныеИтоги); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания запроса истекло
Добавлено (04.03.2024, 15:43) --------------------------------------------- И еще. В каком случае доступен выбор количества потоков обработки объектов? При выполнении на сервере? Чекбокс "Выполнять на сервере" в моем случае недоступен, несмотря на то, что ИР установлены в режиме "Конфигурация", а в описании чекбокса написано, что функция недоступна в портативном варианте.
Сообщение отредактировал yasnovidyashii - Понедельник, 04.03.2024, 15:44 |
|
| |
tormozit | Дата: Понедельник, 04.03.2024, 16:00 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| Цитата Инструменты разработчика. Асинхронность запрещена: Да Либо сеанс запущен с параметром запрета асинхронности. Либо она автоматически отключена кодом ИР из-за проявления ошибки платформы. Тогда ИР выводит соответствующее сообщение.
|
|
| |
tormozit | Дата: Понедельник, 04.03.2024, 16:01 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| Обработка "Удалить через СУБД" выполняется через собственный механизм и не использует многопоточность.
|
|
| |
yasnovidyashii | Дата: Понедельник, 04.03.2024, 16:05 | Сообщение # 4 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| Цитата Обработка "Удалить через СУБД" выполняется через собственный механизм и не использует многопоточность. Вопрос про многопоточность звучал отдельно от "Удаления через СУБД". Оно в целом недоступно.
|
|
| |
tormozit | Дата: Понедельник, 04.03.2024, 19:53 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| В консоли запросов ИР в запросе ADO подключись к собственной базе 1С кнопкой "Эта БД". Выполни запросы 1. select count(*) from tempdb.sys.tables 2. select count(*) from tempdb.sys.columns Желательно делать это сразу после возникновения ошибки, если она не стабильно появляется.
|
|
| |
yasnovidyashii | Дата: Вторник, 05.03.2024, 08:31 | Сообщение # 6 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| Цитата Либо сеанс запущен с параметром запрета асинхронности. Либо она автоматически отключена кодом ИР из-за проявления ошибки платформы. Тогда ИР выводит соответствующее сообщени Вероятнее всего второе. Сообщение было, но только в первый раз. По ссылкам в сообщении не переходил, так что пока не очень в курсе, что именно за ошибка платформы. На данный момент возникает уже другая ошибка:
Код Ошибка при вызове метода контекста (Open) {ОбщийМодуль.ирОбщий.Модуль(28477)}: РезультатЗапроса.Open(ТекстЗапроса, СоединениеADO, adOpenStatic, adLockOptimistic, adCmdText); {Обработка.ирПодборИОбработкаОбъектов.Форма.Удалить.Форма(411)}: ирОбщий.ВыполнитьЗапросЭтойСУБДЛкс(ТекстСУБД,,,,,, мСоединениеСУБД); {Обработка.ирПодборИОбработкаОбъектов.Форма.Удалить.Форма(298)}: УдалитьОбъектыЧерезСУБД(Запрос, ИмяТаблицы,, ИмяТаблицыКлючей, ТекстСУБД, ОтключенныеИтоги); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Invalid column name '_Q_000_F_000_TYPE'.
Цитата 1. select count(*) from tempdb.sys.tables 2. select count(*) from tempdb.sys.columns 1. 5 636 2. 48 717
|
|
| |
tormozit | Дата: Вторник, 05.03.2024, 08:52 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| Покажи в консоли кластера серверов 1С сколько времени удерживается твое соединение СУБД
|
|
| |
yasnovidyashii | Дата: Вторник, 05.03.2024, 09:13 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| Цитата Покажи в консоли кластера серверов 1С сколько времени удерживается твое соединение СУБД Это который из многочисленных параметров соединения нужен? Не очень понял просьбу. Сегодняшняя ошибка, если что, возникает практически сразу после согласия со всеми предупреждениями. В пределах 10 секунд.
|
|
| |
tormozit | Дата: Среда, 06.03.2024, 23:02 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| По ошибке "Invalid column name '_Q_000_F_000_TYPE' нужен текст из переменной ТекстЗапроса, полное имя таблицы регистра и все колонки его таблицы с типами.
|
|
| |
tormozit | Дата: Среда, 06.03.2024, 23:08 | Сообщение # 10 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| Цитата yasnovidyashii ( ) который из многочисленных параметров соединения нужен? Захвачено СУБД
|
|
| |
yasnovidyashii | Дата: Четверг, 07.03.2024, 09:35 | Сообщение # 11 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| Цитата tormozit ( ) По ошибке "Invalid column name '_Q_000_F_000_TYPE' нужен текст из переменной ТекстЗапроса, полное имя таблицы регистра и все колонки его таблицы с типами. ТекстЗапроса =
Код CREATE TABLE #tt3( [_Q_001_F_000RRef] BINARY(16) NULL , [_Q_001_F_001RRef] BINARY(16) NULL , [_Q_001_F_002RRef] BINARY(16) NULL , [_Q_001_F_003RRef] BINARY(16) NULL ) ; exec sp_executesql N'INSERT INTO #tt3 WITH(TABLOCK) (_Q_000_F_000_TYPE, _Q_000_F_000_RTRef, _Q_000_F_000_RRRef, _Q_000_F_001) SELECT T1._Fld22345_TYPE, T1._Fld22345_RTRef, T1._Fld22345_RRRef, T1._Fld22346 FROM dbo._InfoRg22344 T1 WITH(NOLOCK) WHERE (T1._Fld22349 < @P1)',N'@P1 datetime2(3)','2024-02-01 00:00:00'
По поводу имени таблицы и его колонок, из инструмента "Структура хранения БД" (закладка Поля) вытащил вот такое. Но колонка с типами тут пустая.
Поэтому эту часть попробую решить вот так.
Цитата tormozit ( ) Захвачено СУБД Так понимаю, это будет актуально, если изначальная ошибка "время ожидания запроса истекло".
|
|
| |
yasnovidyashii | Дата: Четверг, 07.03.2024, 09:58 | Сообщение # 12 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| P.S. Самый "сложный" тип у измерения Объект. Из Конфигуратора он выглядит, как СправочникСсылка, ДокументСсылка.
|
|
| |
tormozit | Дата: Четверг, 07.03.2024, 22:20 | Сообщение # 13 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| Причину ошибки нашел https://www.hostedredmine.com/issues/981927
|
|
| |
tormozit | Дата: Понедельник, 11.03.2024, 00:07 | Сообщение # 14 |
Генералиссимус
Группа: Администраторы
Сообщений: 6188
Репутация: 159
Статус: Оффлайн
| Исправлено в 7.18
|
|
| |
yasnovidyashii | Дата: Понедельник, 11.03.2024, 11:30 | Сообщение # 15 |
Лейтенант
Группа: Пользователи
Сообщений: 67
Репутация: 84
Статус: Оффлайн
| Цитата tormozit ( ) Исправлено в 7.18 Теперь вот такая возникает:
Код Не удалось найти временную таблицу в СУБД {Обработка.ирПодборИОбработкаОбъектов.Форма.Удалить.Форма(403)}: ВызватьИсключение "Не удалось найти временную таблицу в СУБД"; {Обработка.ирПодборИОбработкаОбъектов.Форма.Удалить.Форма(298)}: УдалитьОбъектыЧерезСУБД(Запрос, ИмяТаблицы,, ИмяТаблицыКлючей, ТекстСУБД, ОтключенныеИтоги);
|
|
| |