1с 8 пересчет итогов средствами sql
Идея ускорения взята из публикации Зачем в 1С нужно периодически пересчитывать итоги по регистрам?. Смысл в том, что основное время при пересчете итогов тратится платформой на удаление итогов с помощью DELETE. Предварительная очистка итогов с помощью TRUNCATE TABLE существенно ускоряет пересчет итогов.
Подключение к MS-SQL реализовано через ADO. Код открыт.
Функционал
- Настраиваемый список регистров для пересчета.
- Работа в обычном и управляемом режиме.
- В управляемом режиме подключение к MS-SQL может выполняться на клиенте и на сервере.
- При использовании платформы 8.3.1 и выше есть возможность пересчитать итоги регистров сведений, для которых установлен признак "Разрешить итоги".
Требования
- Платформа 8.2 и выше.
- СУБД MS-SQL
- Четкое понимание зачем пересчитывать итоги, и к каким последствиям это может привести.
Установка
Установка не требуется, обработка запускается как внешняя.
Специальные предложения
PS: пойду напишу статью про оператор truncate, чтобы таких обработок не создавали. ((( Неужели гугл и ssms более страшен, чем чужие обработки?? (1) Стал юзать эту обработку именно из-за "неоспоримых плюсов" стандартного метода. Дело в том, что для стандартного пересчета надо именно наглухо остановить работу, так как он делается монопольно, а у нас весовая работает круглосуточно. А если срубить этот процесс в середине - наступит полная и беспросветная жопа. Оборотки просто перестают работать. Наглухо зависают и все. Банда юзеров кричит караул. (8) я имею ввиду не стандартный диалог из "все функции", а выполнение метода РегистрНакопленияМенеджер.<Имя регистра накопления>.ПересчитатьИтогиЗаПериод() и
.ПересчитатьТекущиеИтоги() которые выполняются относительно быстро (если делать в цикле по месяцам), не требуют монопольного доступа и не блокируют базу (если не трогать итоги за обновляемый период, т.е. оперативную работу вообще никак не затрагивает). Только последний этап - пересчет текущих итогов может сделать небольшую паузу в работе, но как правило эта пауза измеряется максимум в минутах.
Задумка хорошая, но зачем пересчитывать итоги за весь период? Я не думаю, что в предыдущие периоды кто-то активно вносит изменения.Честно, говоря, я вообще сейчас склоняюсь к тому, что в большинстве случаев для регистрв остатков нужны только Актуальные итоги для регистрв остатков нужны только Актуальные итоги
SQL 2014. Аутентификация SQL. Запуская на сервере. В SQL спокойно захожу, а обработка пишет недоступен.
: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
Хотя я разобрался. Из имени сервера надо удалить номер порта 1С.
Колбасит, профайлер циклично показывает begin, select, insert, truncate, commit. Все ок, при этом проц нагружает порядочно. Даже параллельно работать можно в базе. Чего не хватает обработке - так это прогресс бар прикрутить бы.
Обработкой пришлось воспользоваться, так как стандартный метод расчета итогов через предприятие зависал намертво и висел в таком виде до 8 часов, потом я просто убивал это дело. В конфигураторе тестирование-исправление-пересчет вел себя точно так же.
Возможности обработки:
1. Пересчет таблицы итогов как для регистров "Остатки", так и для регистров "Обороты".
2. Переиндексирование таблиц движений и итогов.
Отрабатыет в разы быстрее, чем штатными средствами 1С.
После пересчета таблица итогов не содержит нулевых значений.
Пользоваться рекомендую в монопольном режиме.
- Исправлена ошибка. Не верно обрабатывалась ситуация при переполнении ресурса в меньшую сторону с установленной галочкой "Учитывать итог предыдущего периода".
- После переиндексации таблиц итогов или движений добавленно обновление статистики (спасибо maxpiter)
Специальные предложения
Привет всем
я Красотка!
PS:
Когда что-то не можешь найти, но знаешь у кого можно спросить .
. рано или поздно это приходится делать. ;)))))
вот ссылка, которую мне любезно предоставил Дмитрий Ощепков ([email protected]):
http://www.dev.citykirov.ru/
там кроме УстановкаТА.ert масса всего полезного для баз SQL:
1CQA.ert, КОП "Общие.Форма.Привязки" и др.
Процитировал вашу публикацию в своей статье:
Консоль1CQA (консоль прямых запросов 1C++)
А можно уточнить, какие именно?
(11) не верно обрабатывалась ситуация при переполнении ресурса в меньшую сторону. например длина ресурса 2 знака, а при пересчете итогов для ресурса получается 100, то тут всё норм, будет записано 99 в итоги по ресурсу, а если результат будет -100, то такая ситуация не обрабатывалась. ситуация редкая, но имеет место быть. Отлично. При каком-то глюке в базе стали неправильно считаться итоги по регистру, эта обработка выручила, правильно пересчитав итоги. Огромное спасибо автору. (14) к сожалению или к счастью, но на dbf "пузатые" базы мне еще не попадались, да и с 1с++ для dbf запросы писать не было необходимости. Посему из-за отсутствия навыков в данной плоскости не вижу возможности в реализации данного функционала для dbf. Хотя всё зависит от времени и желания, даже, что скорее всего, наверное только от желания.00:25:35 Не корректно выполнен пересчет итогов по регистру: Продажи
====> Пересчет итогов завершен не корректно <====
Повторный пересчет дал то же самое.
Сделать Тестирование и исправление средствами 1С или есть еще какие варианты?
После запустил снова обработку и выдало эту же ошибку на этом регистре.
Подскажите, в чем может быть проблема? (18) maxpiter,
Давайте разбираться, никогда не сталкивался с такой ситуацией (в том плане что всё работало как часы). Удобно будет в скайпе (vitaliy.ermolenko) продолжить общение? Не верно обрабатывалась ситуация при переполнении ресурса в меньшую сторону с установленной галочкой "Учитывать итог предыдущего периода".
Добавлено обновление статистики после переиндексации таблиц итогов или движений.
Изменения доступны в обновленной версии v5. Виталий, спасибо! Обработка очень помогла. Регистр не закрывался по одному из измерений. Логику проведения документов переписал, старые записи в таблице движений обновил SQL запросом.
Таблица итогов на сервере до обработки: 9 801 263 строк (826 Мб)
После обработки: 201 568 строк (11,3 Мб).
Всевозможные отчеты затрагивающие этот регистр формируются правильно и заметно быстрее.
Ни на почту ни с сайта обработку не получил. SM в топку
(23) даже не знаю чем помочь ;)напиши свой емейл - я скину обработку (23) обработку скинул на почту (подсмотрел емейл в ветке одной из ваших публикаций) Повторно скачал обработку. Отличная вещь. Очень выручает, когда ломаются таблицы итогов на большой базе. А также когда надо без перепроводок при помощи прямых запросов заполнить движения регистров - этой обработкой затем пересчитываю итоги.
Одно замечание: желательно добавить в обработку код ЗагрузитьВнешнююКомпоненту("1сpp");
А то из-за мелочи портится впечатление от дейтсвительно хорошей и полезной разработки. Спасибо. Добрый день.
Подскажите пожалуйста, при запуске обработки, не отображается список регистров. в учетной системе они есть.
Просмотры 33541
Загрузки 911
Рейтинг 33
Создание 24.07.06 00:00
Обновление 29.12.19 03:29
№ Публикации 14216
Конфигурация Конфигурации 1cv7
Операционная система Windows
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
1 стартмани
28.11.2013 93774 295 Serginio 74
Маркировка: обмен с ГИС МДЛП из 1С 7.7
Конфигурация, демонстрирующая обмен с системой "Маркировка МДЛП".
10 стартмани
31.10.2019 18924 65 vovaapril 85
Разработка игр на языке 1С с использованием Active-X компоненты (собственная разработка)
Написанная Active-X компонента встраивается на форму обработки 1С (тестировалось на 1С 8.0, 8.1, 8.2, 8.3 не управляемые формы, 1С 7.7.). Компонента предназначена для моделирования игрового поля (вывод, движение спрайтов - фреймов, обработка коллизий, управление спрайтами-фреймами и т.д.) при разработки логики игры на встроенном языке 1С. Приложен пример обработки в которой реализована игра "Бита".
5 стартмани
04.01.2018 19120 2 protexprotex 34
Оболочка для работы с последними драйверами ККМ АТОЛ для 1С 7.7, 8.1
Внешняя компонента - оболочка для работы в среде 1С 7.7 или 1С 8.1 с последними версиями драйверов ККМ от АТОЛ. Поддерживаются драйвера x32 начиная с версии 9.11. Присутствует внешняя обработка для полноценной работы с данными драйверами (поддержка ревизий 2.0, 2.1, 2.2, поддержка протокола ОФД 1.0, 1.0.5, 1.1).
Дисклеймер! Политика 1С не разрешает никакие манипуляции с данными напрямую средствами СУБД, только средствами платформы! Поэтому качать, смотреть, думать, а уж тем более запускать эту обработку категорически нельзя. (или можно, но только ночью, обязательно завесив окна, выключив свет и закрывшись на семь замков). Шутка, конечно же. Просто в случае безвозвратной потери данных виноваты будете Вы и только Вы. Минздрав предупредил.
Цель написания обработки единственная: создание БД для разработчика в максимально короткие сроки путем обрезки базы до минимума, необходимого для работы. Никакая целостность не проверяется и не гарантируется. Возможно, кто-то уже сталкивался с проблемой в больших компаниях, когда база 1С весит сотни гигов (по несколько млн документов в год), и развернуть каждому программисту в отделе по отдельной копии просто физически невозможно. И не рентабельно. Лучшее решение - обрезать базу, оставив в ней данные лишь за небольшой период. Но удаление большого числа объектов средствами 1С занимает очень много времени.
В качестве статистики приведу пример. 1С у меня удаляет данные со скоростью
25 000 объектов/час, Обработка -
2 000 000 объектов за 20 минут. Разница налицо, как говорится.
Как пользоваться обработкой?
Аутенфикация
Некоторые данные для аутенфикации подтягиваются автоматически из строки соединения с ИБ, но они совсем не всегда совпадают. Поэтому необходимо ввести имя именно своего сервера SQL.
Для проверки корректности данных есть кнопочка "Проверить подключение".
Тайм-ауты можно оставить как есть. 30 сек для подключения, 1ч на выполнение запроса в СУБД. Если в процессе удаления появится ошибка "(Microsoft OLE DB Provider for SQL Server): Query timeout expired", значит, необходимо увеличить тайм-аут выполнения запроса, т.к. слишком много данных, и СУБД не успела их почистить.
Удаление
Удаление возможно частичное или полное.
Обработка позволяет очищать следующие объекты:
- Документы,
- Журналы документов,
- Регистры сведений,
- Регистры накопления,
- Регистры бухгалтерии.
Полное удаление выполняется быстро через команду TRUNCATE TABLE.
Частичное удаление производится путем выбора периода удаляемых данных (отбор по полю _Period в БД).
Для Документов также автоматически очищаются таблицы, содержащие данные табличных частей документов.
Для Регистров накопления и бухгалтерии есть возможность выбора действия обработки виртуальных таблиц (Итоги, Обороты. ). По хорошему, в идеале лучше всего виртуальные таблицы очищать полностью, после чего из Конфигуратора запускать Тестирование и исправление с галкой "Пересчет итогов".
Для Регистров сведений есть возможность выбора Подчиненных или Независимых. Для Подчиненных возможен отбор по периоду регистратора.
Команда "Очистить всё" последовательно проходит по всем страницам обработки и выполняет действия в зависимости от выбранных параметров.
Возможности обработки:
1. Пересчет таблицы итогов как для регистров "Остатки", так и для регистров "Обороты".
2. Переиндексирование таблиц движений и итогов.
Отрабатыет в разы быстрее, чем штатными средствами 1С.
После пересчета таблица итогов не содержит нулевых значений.
Пользоваться рекомендую в монопольном режиме.
- Исправлена ошибка. Не верно обрабатывалась ситуация при переполнении ресурса в меньшую сторону с установленной галочкой "Учитывать итог предыдущего периода".
- После переиндексации таблиц итогов или движений добавленно обновление статистики (спасибо maxpiter)
Специальные предложения
Привет всем
я Красотка!
PS:
Когда что-то не можешь найти, но знаешь у кого можно спросить .
. рано или поздно это приходится делать. ;)))))
вот ссылка, которую мне любезно предоставил Дмитрий Ощепков ([email protected]):
http://www.dev.citykirov.ru/
там кроме УстановкаТА.ert масса всего полезного для баз SQL:
1CQA.ert, КОП "Общие.Форма.Привязки" и др.
Процитировал вашу публикацию в своей статье:
Консоль1CQA (консоль прямых запросов 1C++)
А можно уточнить, какие именно?
(11) не верно обрабатывалась ситуация при переполнении ресурса в меньшую сторону. например длина ресурса 2 знака, а при пересчете итогов для ресурса получается 100, то тут всё норм, будет записано 99 в итоги по ресурсу, а если результат будет -100, то такая ситуация не обрабатывалась. ситуация редкая, но имеет место быть. Отлично. При каком-то глюке в базе стали неправильно считаться итоги по регистру, эта обработка выручила, правильно пересчитав итоги. Огромное спасибо автору. (14) к сожалению или к счастью, но на dbf "пузатые" базы мне еще не попадались, да и с 1с++ для dbf запросы писать не было необходимости. Посему из-за отсутствия навыков в данной плоскости не вижу возможности в реализации данного функционала для dbf. Хотя всё зависит от времени и желания, даже, что скорее всего, наверное только от желания.00:25:35 Не корректно выполнен пересчет итогов по регистру: Продажи
====> Пересчет итогов завершен не корректно <====
Повторный пересчет дал то же самое.
Сделать Тестирование и исправление средствами 1С или есть еще какие варианты?
После запустил снова обработку и выдало эту же ошибку на этом регистре.
Подскажите, в чем может быть проблема? (18) maxpiter,
Давайте разбираться, никогда не сталкивался с такой ситуацией (в том плане что всё работало как часы). Удобно будет в скайпе (vitaliy.ermolenko) продолжить общение? Не верно обрабатывалась ситуация при переполнении ресурса в меньшую сторону с установленной галочкой "Учитывать итог предыдущего периода".
Добавлено обновление статистики после переиндексации таблиц итогов или движений.
Изменения доступны в обновленной версии v5. Виталий, спасибо! Обработка очень помогла. Регистр не закрывался по одному из измерений. Логику проведения документов переписал, старые записи в таблице движений обновил SQL запросом.
Таблица итогов на сервере до обработки: 9 801 263 строк (826 Мб)
После обработки: 201 568 строк (11,3 Мб).
Всевозможные отчеты затрагивающие этот регистр формируются правильно и заметно быстрее.
Ни на почту ни с сайта обработку не получил. SM в топку
(23) даже не знаю чем помочь ;)напиши свой емейл - я скину обработку (23) обработку скинул на почту (подсмотрел емейл в ветке одной из ваших публикаций) Повторно скачал обработку. Отличная вещь. Очень выручает, когда ломаются таблицы итогов на большой базе. А также когда надо без перепроводок при помощи прямых запросов заполнить движения регистров - этой обработкой затем пересчитываю итоги.
Одно замечание: желательно добавить в обработку код ЗагрузитьВнешнююКомпоненту("1сpp");
А то из-за мелочи портится впечатление от дейтсвительно хорошей и полезной разработки. Спасибо. Добрый день.
Подскажите пожалуйста, при запуске обработки, не отображается список регистров. в учетной системе они есть.
Просмотры 33541
Загрузки 911
Рейтинг 33
Создание 24.07.06 00:00
Обновление 29.12.19 03:29
№ Публикации 14216
Конфигурация Конфигурации 1cv7
Операционная система Windows
Доступ к файлу Абонемент ($m)
Код открыт Да
"Словом можно убить, словом можно спасти, словом можно полки за собой повести" Онлайн-тренажер "Боевая риторика. Ложь и давление в переговорах" с 29 ноября по 27 декабря.См. также
1 стартмани
28.11.2013 93774 295 Serginio 74
Маркировка: обмен с ГИС МДЛП из 1С 7.7
Конфигурация, демонстрирующая обмен с системой "Маркировка МДЛП".
10 стартмани
31.10.2019 18924 65 vovaapril 85
Разработка игр на языке 1С с использованием Active-X компоненты (собственная разработка)
Написанная Active-X компонента встраивается на форму обработки 1С (тестировалось на 1С 8.0, 8.1, 8.2, 8.3 не управляемые формы, 1С 7.7.). Компонента предназначена для моделирования игрового поля (вывод, движение спрайтов - фреймов, обработка коллизий, управление спрайтами-фреймами и т.д.) при разработки логики игры на встроенном языке 1С. Приложен пример обработки в которой реализована игра "Бита".
5 стартмани
04.01.2018 19120 2 protexprotex 34
Оболочка для работы с последними драйверами ККМ АТОЛ для 1С 7.7, 8.1
Внешняя компонента - оболочка для работы в среде 1С 7.7 или 1С 8.1 с последними версиями драйверов ККМ от АТОЛ. Поддерживаются драйвера x32 начиная с версии 9.11. Присутствует внешняя обработка для полноценной работы с данными драйверами (поддержка ревизий 2.0, 2.1, 2.2, поддержка протокола ОФД 1.0, 1.0.5, 1.1).
Читайте также: