1с 8 пересчет итогов средствами sql

Обновлено: 07.07.2024

Идея ускорения взята из публикации Зачем в 1С нужно периодически пересчитывать итоги по регистрам?. Смысл в том, что основное время при пересчете итогов тратится платформой на удаление итогов с помощью DELETE. Предварительная очистка итогов с помощью TRUNCATE TABLE существенно ускоряет пересчет итогов.

Подключение к MS-SQL реализовано через ADO. Код открыт.

Функционал

  • Настраиваемый список регистров для пересчета.
  • Работа в обычном и управляемом режиме.
  • В управляемом режиме подключение к MS-SQL может выполняться на клиенте и на сервере.
  • При использовании платформы 8.3.1 и выше есть возможность пересчитать итоги регистров сведений, для которых установлен признак "Разрешить итоги".

Требования

  • Платформа 8.2 и выше.
  • СУБД MS-SQL
  • Четкое понимание зачем пересчитывать итоги, и к каким последствиям это может привести.

Установка

Установка не требуется, обработка запускается как внешняя.

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

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

У стандартного метода есть неоспоримый плюс - пересчет идет транзакциями помесячно. И если срубить процесс в середине - ничего страшного не произойдет. И даже отчеты могут работать. А если предварительно делать транкейт, то работа встанет до конца пересчета, а если еще и ошибка произойдет. (1) нужен транкейт + * даты итогов на 010101. Тогда все будет быстро и корректно с запросами.
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)

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

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Привет всем
я Красотка!

а можно то же самое но через фркспрошный драйвер для DBF. не встречал. с дбф както не приходилось еще работать. Просто шедевр. Помогло неописуемо, запуск Тестирования и Исправления не представлялся возможным из-за пузатости базы, а выборочное исправление регистров - быстро и мощно. Спасибо!

PS:
Когда что-то не можешь найти, но знаешь у кого можно спросить .
. рано или поздно это приходится делать. ;)))))
вот ссылка, которую мне любезно предоставил Дмитрий Ощепков (dmitro-75@mail.ru):
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С или есть еще какие варианты?

+17 Пересчет средствами 1С завершился корректно. Заняло это 9 с половиной часов.
После запустил снова обработку и выдало эту же ошибку на этом регистре.
Подскажите, в чем может быть проблема? (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)

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

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Привет всем
я Красотка!

а можно то же самое но через фркспрошный драйвер для DBF. не встречал. с дбф както не приходилось еще работать. Просто шедевр. Помогло неописуемо, запуск Тестирования и Исправления не представлялся возможным из-за пузатости базы, а выборочное исправление регистров - быстро и мощно. Спасибо!

PS:
Когда что-то не можешь найти, но знаешь у кого можно спросить .
. рано или поздно это приходится делать. ;)))))
вот ссылка, которую мне любезно предоставил Дмитрий Ощепков (dmitro-75@mail.ru):
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С или есть еще какие варианты?

+17 Пересчет средствами 1С завершился корректно. Заняло это 9 с половиной часов.
После запустил снова обработку и выдало эту же ошибку на этом регистре.
Подскажите, в чем может быть проблема? (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).

Читайте также: