Очистка замеров времени 1С

Регистр сведений — это база данных конфигурации 1С, существующая в форме записей показателей измерений (разрезы) и соответствующих им ресурсов. Таким образом, сохраняются кросс-курсы национальных валют в разрезе валют, цены в разрезе номенклатуры цен. Функции регистратора выполняют документы, формирующие записи в регистре.

На рисунке образец: Начало «Регистр сведений», затем переход на «Курсы валют».

Список регистров сведений доступен в развернутом пункте «Регистры сведений» Конфигуратора.

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

Программная очистка регистра сведений

Если регистр сведений не подчинен регистратору, очистить его возможно с помощью программы. Осуществляется ввод пустого набора записей следующего содержания:

Нулевой набор записей отображается в начальной строчке кода (информация из регистра не прочитана, поэтому набор записей пустой), в следующей строке — начинается его запись, вместо существующего. Итог — пустой регистр.

Эта процедура занимает много времени и доступна только для регистров с независимым уровнем записи.

Обработка очистка регистра сведений в 1С 8.3

Разработан универсальный способ очистки регистра — обработка. Применяется для любого регистра сведений. Файл «Очистка регистра сведений 1С.epf» запускается в управляемых формах и в обычных. Для активации очистки нужно в режиме пользователя найти файл через пункт меню «Файл» — «Открыть».

Выбираем наименование регистра для очистки (точное название можно узнать в конфигураторе), и активируем работу кнопкой «Очистить регистр».

Выполнение операции занимает некоторое время. Таким методом очищается каждый регистр сведений оболочки.

Обработка – свертка независимого периодического регистра сведений

Существует альтернативный метод очистки регистра сведений. Он подходит для конфигурации 8.2 и 8.3, и работает как обычное приложение — «СверткаНезависимогоПериодическогоРегистраСведений.epf».

Запуск обработки производится в конфигурации управляемое приложение. Активируется режим «Толстый клиент (обычное приложение)» в программе 1С 8.3, путем изменения режима запуска в Конфигураторе (меню «Сервис» — «Параметры»).

Выбрав из предложенных вариантов «Толстый клиент (обычное приложение)», подтвердите действие нажатием кнопки «Ок».

Затем выбираем вкладку «Сервис» — «1С:Предприятие».

В итоге программа открылась как обычное приложение. Такая функция часто использовалась в более ранних версиях 1С. Изучаем вкладку «Открыть» и находим текущую обработку. Настроить ее очень просто — выбирайте дату и регистры для очистки. Затем подтверждаем запуск процесса очистки кнопкой «Выполнить».

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

Остались вопросы? Закажите бесплатную консультацию наших специалистов!

В продолжение статьи про наше использование 1С Fresh мы расскажем как учимся следить за производительностью и скоростью работы нашей инсталляции.

Введение

В любой компании, которая выпускает какой-нибудь продукт, существует отдел контроля качества. Обычно этот отдел проверяет продукцию на выходе, именно то, что попадает потребителю в руки. Если компания предоставляет услуги, то существуют специальные люди, которые обзванивают клиентов и узнают, все ли им понравилось. После этого, исходя из собранной статистики, вносятся какие-либо изменения в процесс и все повторяется по кругу. Хорошо, конечно, если такие отделы и люди существуют в компании. В нашем мире чаще всего либо ты пользуешься тем, что есть, либо ищешь другие компании и никто за это не переживает.
У нас в Кнопке пользователями продукта 1C Fresh в первую очередь являются наши бухгалтеры. Чем выше стабильность и скорость работы 1С, тем выше скорость работы бухгалтера. А это значит, что клиенты, которые обслуживаются в Кнопке будут быстрее получать расчеты по налогам, авансу, зарплате и т.д.
Существует много различных вариантов оценки производительности (или качества) IT — систем и софта. Для оценки производительности нашего 1С Fresh мы используем многим известную методику APDEX.

Apdex. Справка

Apdex (Application Performance Index) — индекс производительности приложений. Открытый международный стандарт, разработанный с целью формирования объективной оценки показателей производительности корпоративных информационных систем.
Apdex служит для измерения пользовательской удовлетворенности работой системы. Этот опыт может быть представлен по шкале от отлично до неудовлетворительно.
Методика состоит из следующих этапов:
— получение списка ключевых операций;
— определение приоритета каждой операции;
— определение целевого времени для каждой операции;
— сбор информации о времени выполнения каждой ключевой операции;
— получение оценки на основе собранной информации.
По завершению всех перечисленных этапов становится возможным интерпретировать полученный результат в терминах качественной оценки. Про Apdex есть информация на сайте 1С, откуда мы собственно и черпали знания.

Реализация. Теория

Первым этапом при замере производительности по методике Apdex, является выделение списка ключевых операций. Проведя некоторую аналитику совместно с нашими бухгалтерами, мы выделили ряд операций, которые чаще остальных используются в работе с 1С.
Второй этап — определение приоритета каждой операции. Чем выше приоритет, тем важнее производительность операции. Правильно расставленные приоритеты позволят в дальнейшем оценить серьезность проблем с производительностью в системе, и правильно определить приоритеты работ по оптимизации.
Следующий этап самый интересный: определение целевого времени для каждой операции. Т.е. необходимо подобрать такое время выполнения указанной операции в секундах (Т), которое удовлетворит клиента, т.е. нашего бухгалтера. По каждой операции мы субъективно выделили Т и записали в нашу таблицу.

Операция Приоритет Т
Проведение поступление товаров и услуг 3 1
Общее время запуска приложения 2 3
Формирование отчёта «карточка счёта» 6 4
Формирование ОСВ 4 3
Формирование ОСВ по счёту 5 3
Проведение реализация товаров и услуг 1 3

Следующий этап, это сбор информации о времени выполнения каждой операции. 1С позаботились об этом и учли такой функционал в своих продуктах. Замеры мы снимали с конфигурации Бухгалтерия Предприятия 3.0. Для того, чтобы 1с начала замерять время выполнения операций, необходимо установить константу «Выполнять замеры производительности». Проделать это нужно для каждой ИБ, работающей в модели сервиса.
После этого все замеры времени выполнения пользовательских операций будут записываться в регистр сведений «Замеры времени», откуда эту информацию можно получать различными способами.

И, наконец, пятый этап, получение оценки APDEX на основании собранных результатов.
Формула для вычисления APDEX: APDEX = (NS + NT/2)/N
где:
N — общее количество выполнений данной операции;
NS — количество выполнений с временем отклика от 0 до Т;
NT — количество выполнений с временем отклика от T до 4T.
Результаты расчетов добавим в таблицу:

Операция Приоритет Т N NS NT APDEX
Проведение поступление товаров и услуг 3 3 387 320 34 0,67
Общее время запуска
приложения
2 5 357 185 164 0,68
Формирование отчёта
«карточка счёта»
6 4 99 94 5 0,84
Формирование ОСВ 4 4 224 190 31 0,95
Формирование ОСВ
по счёту
5 4 732 559 158 0,88
Проведение реализация товаров и услуг 1 4 387 353 34 0,67

Методика APDEX позволяет интерпретировать полученные числовые значения коэффициента в терминах качественных оценок. Для этого предусмотрена Шкала APDEX, которая содержит следующие диапазоны значений:

  • От 0.00 до 0.50 — неприемлемо
  • От 0.50 до 0.70 — неудовлетворительно
  • От 0.70 до 0.85 — удовлетворительно
  • От 0.85 до 0.94 — хорошо
  • От 0.94 до 1.00 — отлично

Интерпретировав значения, получим следующую таблицу:

Операция Apdex
Проведение реализация товаров и услуг неудовлетворительно
Общее время запуска приложения неудовлетворительно
Формирование отчёта «карточка счёта» удовлетворительно
Формирование осв отлично
Формирование осв по счёту хорошо
Проведение реализация товаров и услуг неудовлетворительно

Реализация. Практика

Для мониторинга производительности и доступности сервисов, мы используем Zabbix и надстройку Grafana. Для всех наших сервисов, в том числе 1C Fresh, мониторятся следующие показатели: нагрузка на CPU каждого сервера, количество свободной оперативной памяти, глубина очереди дисковой подсистемы (нагрузка операциями дискового ввода/вывода), количество свободного места на дисках, количество операций INSERT, UPDATE, DELETE в секунду на сервере СУБД.


Для отслеживания оценки Apdex мы не стали придумывать ничего нового и добавили отображение оценки в Zabbix. Для того, чтобы Zabbix получал данные по времени выполнения операций из 1с, их нужно сначала куда-то выгрузить. Для этого мы используем промежуточную базу PostgreSQL. Выгружать данные из 1С в базу можно несколькими способами. Мы реализовали этот механизм через регламентные задания.

Каждое регламентное задание можно запускать по расписанию:

В процессе запуска регламентное задание порождает фоновое задание, которое и выполняет реальную обработку. Регламентное задание может выполняться от имени заданного пользователя и имеет возможность перезапуска (например, в случае непредвиденного завершения работы).

Для выгрузки мы будем использовать следующие значения регистра:
1. Наименование базы прикладной конфигурации. Поскольку в технологии 1C Fresh предполагается использование большого количества баз и прикладных решений, нам необходимо различать замеры для каждой из них
2. Наименование операции.
3. Время начала операции
4. Время выполнения операции
5. Область данных, в которой выполнялась операция
6. Пользователь, выполнивший операцию
Фоновое задание представляет собой процедуру:
Процедура ПриОткрытииНаСервере() ДатаВремя = ТекущаяДата() — 1800 — 18000; ИмяСервера = «server»; ИмяБазы = «apdex»; ИмяПользователя = «username»; Пароль = «pswd»; ИмяТаблицы = «perfomance»; СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); ПозицияРеф = СтрНайти(СтрокаСоединения, «Ref=»); СтрокаБазы = Сред(СтрокаСоединения, ПозицияРеф + 4); СтрокаБазы = СтрЗаменить(СтрокаБазы, «»»», «»); СтрокаБазы = Стрзаменить(СтрокаБазы, «;», «»); Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | ЗамерыВремени.КлючеваяОперация КАК Операция, | ЗамерыВремени.ДатаНачалаЗамера КАК ДатаНачала, | ЗамерыВремени.ВремяВыполнения КАК ВремяВыполнения, | ЗамерыВремени.Пользователь КАК Пользователь |ИЗ | РегистрСведений.ЗамерыВремени КАК ЗамерыВремени |ГДЕ | ЗамерыВремени.ДатаЗаписи >= &Дата»; Запрос.Параметры.Вставить(«Дата», ДатаВремя); ВыборкаЗамеров = Запрос.Выполнить().Выбрать(); Сообщить(ВыборкаЗамеров.Количество()); стрПодключения = «Driver={PostgreSQL Unicode}; |data source=PostgreSQL35W; |Server=» + ИмяСервера + «; |Port=5433; |Database=» + ИмяБазы + «; |Uid=»+ИмяПользователя+»; |Pwd=»+Пароль+»; |STMT=utf8″; АДОДБКоннект = Новый COMОбъект(«ADODB.Connection»); АДОДБКоннект.Provider = «MSDASQL.1»; АДОДБКоннект.ConnectionString = стрПодключения; АДОДБКоннект.Open(); Пока ВыборкаЗамеров.Следующий() Цикл АДОНаборЗаписей = Новый COMОбъект(«ADODB.RecordSet»); АДОКоманда = Новый COMОбъект(«ADODB.Command»); АДОКоманда.ActiveConnection = АДОДБКоннект; Операция = ВыборкаЗамеров.Операция; ДатаНачала = ВыборкаЗамеров.ДатаНачала; ДатаНачала = Дата(1,1,1,0,0,0) + ЦЕЛ(ДатаНачала/1000); ВремяВыполнения = СтрЗаменить(ВыборкаЗамеров.ВремяВыполнения, «,», «.»); ВремяВыполнения = СтрЗаменить(СтрЗаменить(ВремяВыполнения,Символы.НПП,»»),» «,»»); Пользователь = ВыборкаЗамеров.Пользователь; Буфер = стрЗаменить(Пользователь,»;»,Символы.ПС); Пользователь = стрПолучитьСтроку(Буфер,1); ФИО = стрПолучитьСтроку(Буфер,2); АДОКоманда.CommandText = «Insert into » + ИмяТаблицы + » (basename,operation,startdate,operationtime,username, name) values («+»‘» + СтрокаБазы + «‘,'» + Операция + «‘,'» + ДатаНачала + «‘,'» + ВремяВыполнения + «‘,'» + Пользователь + «‘,'» + ФИО + «‘»+»)»; АДОНаборЗаписей = АДОКоманда.Execute(); КонецЦикла; АДОДБКоннект.Close(); КонецПроцедуры
Выгружая таким образом данные из 1С, нам теперь не составит труда обрабатывать это в Zabbix’e. На примере операции «Общее время запуска приложения” в ИБ ea_01 сформируем sql-запрос к базе:
select ( ( ( select count(*) as cnt from perfomance where operation=’Общее время запуска приложения’ and basename = ‘ea_01′ and startdate > (NOW() — INTERVAL 2 hour ) and operationtime < 3 ) + ( select count(*) as cnt from perfomance where operation=’Общее время запуска приложения’ and basename = ‘ea_01′ and startdate >= (NOW() — INTERVAL 2 hour ) and operationtime > 3 and operationtime < 4*3)/2)::real / Nullif ( ( select count(*) from perfomance where operation=’Общее время запуска приложения’ and basename = ‘ea_01’ and startdate >= (NOW() — INTERVAL 2 hour ) ),0)::real)

На первом шаге создадим конфигурационный файл для агента, который будет выполняться на сервере СУБД где хранятся данные замеров.
UserParameter=apdex.operation.openapp,psql -U postgres -p 5433 -d apdex -t -c «select (((select count(*) as cnt from perfomance where operation=’$3′ and basename = ‘$1’ and startdate > (NOW() — INTERVAL ‘$2 hour’ ) and operationtime < $4) + (select count(*) as cnt from perfomance where operation=’$3′ and basename = ‘$1’ and startdate >= (NOW() — INTERVAL ‘$2 hour’ ) and operationtime > $4 and operationtime < 4*$4)/2)::real / nullif((select count(*) from perfomance where operation=’$3′ and basename = ‘$1’ and startdate >= (NOW() — INTERVAL ‘$2 hour’ )),0)::real)
Использование параметров даст нам возможность использовать этот конфигурационный файл для различных информационных баз и замеряемых операций.
На втором шаге мы создадим шаблон в Zabbix, где будем описывать необходимые нам макросы:

Затем привязываем этот шаблон к нужному узлу сети и переопределяем индивидуальные параметры для макросов.

Повторяя эти действия для каждого измеряемого параметра, мы получим постоянный мониторинг производительности по методике APDEX.
Теперь, почти в режиме реального времени, мы видим оценку Apdex по нашим базам 1cFresh. Но мы пошли дальше.

Настройка реакции на падение производительности

Кроме автоматического мониторинга показателей мы настроили также автоматическую реакцию на падение производительности по какому-либо параметру. Zabbix предоставляет большой простор для реализации различных реакций через скриптовые инструменты.
Мы будем реагировать на падение производительности включением технологического журнала «1С: Предприятие».
Сценарий достаточно прост:
Производительность операции падает → срабатывает триггер на падение → запускается действие, которое редактирует файл настроек технологического журнала.
После разбора проблемы, либо восстановления производительности, проводятся обратные действия.
Производительность выходит на нормальный уровень → срабатывает триггер → удаляется блок настроек технического журнала.
Создадим триггер, в котором прописываем условия срабатывания. В нашем случае это падение оценки Apdex ниже 0.6
Затем создаем действие, на срабатывание триггера
В этом действии задаем команду
По собранному ТЖ можно анализировать, что послужило падению производительности, какие были ошибки, что делал пользователь в данный момент, какой пользователь и т.д. Сопоставляя данные ТЖ и мониторинга Zabbix можно делать выводы и разрабатывать планы по устранению проблем, оптимизации железа, оптимизации работы пользователя.
Благодаря мониторингу и оценке производительности, мы смогли выйти на показатель 99% доступности нашей инсталляции 1C Fresh. Наши показатели оценки Apdex пока еще не достигли 1.0, но мы уже над этим работаем 🙂

Я скачал обработку с сайта и она не работает. оглавление Как установить внешнюю форму декларации об экологии

Как очистить регистр сведений «Данные первичных документов»

2017-02-15T15:14:08+00:00

Есть такой проблемный для пользователей регистр сведений «Данные первичных документов». Проблемный он, потому что на него часто ссылаются помеченные на удаление документы, несмотря на то, что они не проведены и никаких движений по регистрам делать не должны!

И в результате не получается корректно удалить такие документы из базы, так как запрещено удалять объекты из базы, если на них кто-нибудь ссылается (а ссылаются в данном случае записи из регистра «Данные первичных документов»).

А почистить ненужные записи из этого регистра ведь очень легко — я, когда столкнулся с этой задачей, за 1 минуту набросал следующий код:

Процедура КнопкаВыполнитьНажатие(Кнопка) Выборка = РегистрыСведений.ДанныеПервичныхДокументов.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Документ.ПометкаУдаления Тогда Сообщить(Выборка.Документ); МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи(); МенеджерЗаписи.Удалить(); КонецЕсли; КонецЦикла; КонецПроцедуры

Таким образом мы чистим только те записи, которые ссылаются на помеченные на удаление документы. Операция абсолютно безопасна и не может привести к каким-либо побочным эффектам. После такой чистки — повторите удаление помеченных документов и оно пройдёт без сучка и без задоринки.

Обработка ниже проверялась в 1С:Бухгалтерии 2.0 и 3.0.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

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

Нажмите одну из кнопок, чтобы поделиться:

Я скачал обработку с сайта и она не работает. оглавление Как установить внешнюю форму декларации об экологии

Код 1C v 8.х //Удаление записей из регистра, подчиненного регистратору
Запрос = Новый Запрос;
Запрос.Текст = «
|ВЫБРАТЬ
| ЦеныНоменклатурыКонтрагентов.Регистратор
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов»;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать();
КонецЦикла;
Сначала запросом получаем выборку всех документов, являющихся регистраторами для нужного регистра.
Далее создаем набор записей по данному регистру.
В цикле перебора выборки из результата запроса устанавливаем отборы для набора записей по нужным регистраторам и записываем пустые наборы записей в регистр с замещением старых наборов.
Код 1C v 8.х НачатьТранзакцию();
НаборЗаписей = РегистрыСведений.МестонахожденияОС.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(); //обязательно для подчиненных регистров
НаборЗаписей.Прочитать();
сзУдаляемыеЗаписи = Новый СписокЗначений;
Для Каждого Запись Из НаборЗаписей
Если Тогда
сзУдаляемыеЗаписи.Добавить(Запись);
КонецЕсли; //
КонецЦикла;
Для каждого ЭлтСз Из сзУдаляемыеЗаписи
НаборЗаписей.Удалить(ЭлтСз.Значение);
КонецЦикла;
НаборЗаписей.Записать();
ЗафиксироватьТранзакцию();