1с изменить точку актуальности зависает
Методика расследования причин медленной работы операции на примере открытия управляемой формы
Для начала необходимо убедиться, что проблема стабильно воспроизводится (в одинаковых условиях) и что все пункты с описанием применения методики выполнены. Для этого можно сделать следующее:
Сбор и анализ стандартных данных
Разберем пример для операции открытия формы документа "Табель учёта рабочего времени".
Мы организовали тестовый стенд, на котором наша проблема воспроизводится под пользователем с полными правами. К этому стенду мы можем подключаться как напрямую с удаленной рабочей станции в режиме тонкого клиента, так и в режиме веб-клиента через публикацию на веб-сервере.
Настройка технологического журнала на клиенте может быть такой:
Фильтр по имени процесса для нашей задачи избыточен и нужен для того, чтобы в случае ошибочной настройки такого лога на сервере не получить сбор всех событий для серверных процессов, что может занять значительный объем. С другой стороны, при осознанном включении такой настройки на сервере (если клиентские приложения запускаются там же, где может быть развернут и сервер приложений 1С:Предприятие) мы в отдельном каталоге Client_Full увидим данные только клиентских приложений (хотя при этом подкаталоги других процессов тоже будут созданы, но они буду пустыми). Свойство Interface не собираем, так как оно дублируется более "человек читаемым" свойством IName (хотя даже последнее нам в данном примере не обязательно нужно).
После настройки технологических журналов и проверки корректности замера времени ОценкиПроизводительности БСП выполняем повторение операции с включенной отладкой.
Замеры времени средствами БСП будут выглядеть следующим образом:
Везде далее будем рассматривать верхний в этом списке замер от последнего повторения, его длительность 13,022 секунды.
Замер отладчиком конфигуратора изображен на следующем рисунке:
Как видно, сумма длительности всех строк, связанных с открытием формы составила всего 1,523 секунды.
'00010101' + ТекущаяУниверсальнаяДатаВМиллисекундах() / 1000
а для миллисекунд взять остаток от деления на 1000 (то есть просто последние три цифры, обратите внимание на "779" на следующей картинке).
Точное время начала замера (минут:секунд.миллисекунд): 25:10.779
Точное время окончания замера (минут:секунд.миллисекунд): 25:23.801
Найдем теперь записи технологического журнала, соответствующие данному замеру, они будут примерно следующими:
Здесь видно, что соответствующий нашему замеру серверный вызов SCALL завершился примерно за 10,1 секунды, это соответствует интервалу между запросом VRSREQUEST и ответом VRSRESPONSE.
Причем время начала замера почти совпадает с началом вызова, то есть событием VRSREQUEST, что собственно ожидаемо, так как замер БСП начинается на клиенте и должен быть непосредственно перед командой открытия формы. А вот окончание вызова сервера случилось раньше, чем окончание замера, что значит, что эта разница во времени пришлась на часть работы клиентского приложения.
Итак, промежуточный итог по длительностям замеров разными способами показывает соответствие нашей ситуации ограничениям и выполнение неравенства: 1,5 < 10,1 < 13.
Стандартными инструментами не удается увидеть причину проблем низкой производительности работы (открытия) управляемой формы, поэтому воспользуемся следующими помощниками:
- Отладчик операционной системы: Windows Performance Recorder для сбора метрик и Windows Performance Analyzer для их визуализации и анализа;
- Анализатор сетевых протоколов Wireshark или прокси-сервер Fiddler Web Debugger.
Установим и запустим Windows Performance Recorder ("C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\WPRUI.exe"), укажем настройки:
После того, как их подготовили, перейдем в тонкий клиент 1С, откроем форму списка документов и непосредственно перед воспроизведением проблемной операции запустим сбор данных WPR (кнопка Start).
После открытия формы в тонком клиенте запись можно остановить и открыть ее для анализа. В открывшемся окне найдем по PID 5508 (его можно определить в диспетчере задач ОС или по логам ТЖ) наш тонкий клиент 1С и должны получить примерно следующую картинку:
По данным Windows Performance Analyzer видим, что у нас нет серьезной нагрузки по дискам, а поток тонкого клиента потребляет 100% ЦП на протяжении длительного времени вплоть до завершения замера.
Запомним этот результат и проанализируем траффик.
Запустим Wireshark и повторим проблемную операцию в тонком клиенте 1С:Предприятие с прямым подключением к серверу приложений 1С.
При сборе данных с помощью Wireshark (и отбору по пакетам с сервером-источником равным серверу приложений 1С:Предприятие) запуск открытия формы документа будет выглядеть примерно так:
Здесь каждая такая строка – это пакет (или если точнее, то "кадр", frame), который в свою очередь является частью общего большого пакета поверх протокола TCP (PDU – Protocol Data Unit). Если их сложить, получим пакет около 70 Кб. Стоит обратить внимание, что это будет размер с учётом сжатия, а если без него – то должны получить что-то около 2500 – 3500 Кб данных.
Устанавливаем и запускаем Fiddler, на панели инструментов ищем "Browse", выбираем любимый браузер и запускаем в нем необходимое нам приложение (информационную базу 1С:Предприятие). После запуска переходим в форму списка документов (готовимся воспроизвести сценарий), возвращаемся в Fiddler и включаем сбор траффика (кнопка F12), переходим в браузер и открываем форму документа. После её открытия сбор траффика можно отключить и заняться его анализом. Мы должны получить примерно следующее:
В данном дампе достаточно быстро находится относительно большой пакет искомого размера, выбираем его в списке слева, а в правой части окна переключаемся на страницу Inspectors, выбираем там просмотр заголовков (Headers), и так как у нас пакет является сериализованным json (Content-Type: application/json), то попросим Fiddler десериализовать его для нас.
После этого в окне предпросмотра отобразится древовидная структура ответа (response), которая передается с сервера на клиент и содержит так много данных. Далее нам необходимо проанализировать её и найти наиболее проблемные места. Может помочь кнопка Expand All, которая развернёт все элементы дерева, но это может занять некоторое время. Чтобы его сократить, сначала поймем, что именно нужно искать.
Подведем промежуточный итог:
- Проблем с медленной работой прикладного кода 1С или запросов нет.
- Большая часть времени открытия формы состоит из сетевого взаимодействия.
- Размер пакета с формой подозрительно велик.
- После получения пакетов имеем высокую утилизацию ЦП тонким клиентом 1С (или веб-клиентом).
- Потерянное время находится где-то между окончанием/началом работы прикладного кода 1С и сетевой передачей.
Из всех этих пунктов для нас наиболее полезным и требующим дополнительного анализа является тезис "Размер пакета с формой подозрительно велик".
Какие могут быть причины для такой ситуации? В общем случае их несколько:
- Сама по себе большая и сложная форма с большим количеством экранных элементов и реквизитов. Наверное, редкий и точно не очень правильный случай, лучше такого избегать на этапе проектирования систем.
- Простая форма, но много данных в реквизитах формы (включая данные объекта), в особенности:
- Хранилище значения, Строка(0);
- Большие коллекции (Таблица, Дерево, Список);
- Произвольный тип (концентрация проблем).
Так как наша проблема (у вас может быть по-другому) воспроизводится даже при очень небольшом количестве данных в ТЧ, и реквизитов у документа (т.е. объекта формы) совсем не много, то их мы не рассматриваем. Остаются реквизиты формы, не равные основному реквизиту "Объект".
Среди них находится несколько реквизитов, имеющих произвольный тип. Могут выглядеть так:
Сопоставляем эти данные с уже собранным ранее замером с помощью конфигуратора, и видим заполнение этих структур достаточно большим количеством элементов (например, можно 5059 в реквизите "СвойстваИзмерений").
Снова вернемся к дампу траффика в Fiddler и найдем там элемент, отвечающий за параметры формы (response/props). Увидим там примерно следующее:И если развернем далее эти элементы, убедимся, что их там несколько тысяч, каждый из которых представляет собой вложенную структуру вида:
Найдем прикладной код, заполняющий эти параметры, и убедимся, что данных там действительно достаточно много (2-3 Мб), и они представляют собой большое количество сложных вложенных структур.
Отключив заполнение данных реквизитов, убеждаемся, что проблема с производительностью формы исчезает, что значит, что причина была найдена правильно.
Выводы и рекомендации
Длительная работа открытия формы обусловлена сериализацией и десериализацией больших коллекций значений при передаче их между клиентом и сервером.
Для того чтобы оценить степень влияния всех факторов, которые имеют значения в этом процессе, можно сделать несколько тестов (замеров), изменяя эти факторы и оценивая корреляцию их значений и длительности. В нашем случае причиной проблем были структуры, хранящие данные справочников территорий и условий труда, поэтому изменяли количество этих элементов и пробовали замерять передачу с клиента на сервер этих данных (процедура ДанныеДляРедактированияВХранилище).
В следующей таблице приведены результаты таких замеров в нашем примере. Сразу следует оговориться, что не стоит никаким образом рассматривать в ней абсолютные значения, так как это будет зависеть еще и от конфигурации компьютера, сети, версии платформы и многого другого, связанного именно с нашим примером. Для нас же важны зависимости и их характер (линейная, экспоненциальная и т.д.). Предлагаем вам проанализировать их самостоятельно (или даже повторить замеры на актуальной версии платформы в вашей среде).
Принимая во внимание полученные таким образом данные, можно предложить следующие возможные пути решения:
Во время проведения документа в «1С» бухгалтеру может встретиться запись «Существует ранее проведенный документ». Это связано с тем, что точка актуальности переместилась на некий период назад. И пока она не вернется на время текущего документа, бухгалтер не сможет провести ни один документ. Для этого нужно изменить точку актуальности.
- Как перенести точку актуальности
- Как в 1C открыть период
- Как изменить точку актуальности
- — программа «1С»;
- — права на вход в монопольный режим.
Откройте общий журнал документов, который показывает все введенные документы в программе. В этом журнале можно посмотреть абсолютно все виды документов по заданному критерию, установленному бухгалтером и изменить некоторые параметры записей
Установите в параметрах общего журнала документов «быстрый отбор» в положение «отсутствует». В этом случае журнал документов будет показывать абсолютно все документы, занесенные в программу «1С».
Установите курсор на последний документ, который был проведен, а в контекстном меню выберите «Установить точку актуальности на документ». Это позволит перенести точку актуальности на необходимую дату.
Программа задаст вопрос: «Изменить точку актуальности?». Ответьте — да. И в новом открывшемся окне нажмите «Выполнить». Точка актуальности изменена.
Если в системе находится слишком много пользователей, изменение точки актуальности в монопольном режиме займет слишком много времени. Запустите специальную утилиту, которая при открытии показывает список баз, подключенных на данном компьютере. Выберите нужную базу, в утилите отобразятся параметры точки актуальности.
Утилиту для изменения точки актуальности можно использовать только для оперативных изменений ТА. Если на предприятии ведутся регламентные работы, то для изменения ТА нужно использовать штатный метод.
Перед проведением нового документа бухгалтер должен проверять расположение точки актуальности, и если она не на дате проводимого документа, то её необходимо изменить. А если вносить документ без изменения точки актуальности, он не будет проведен в программе, его данные не будут занесены и в учете появятся ошибки.
Точка актуальности представляет собой дату и время последнего проведенного документа в бухгалтерскую базу. Сдвигать точку актуальности можно вручную или автоматически. Переносить точку актуальности можно как вперед, так и назад, главное — знать порядок выполнения этой процедуры и четко следовать правилам.
- Как изменить точку актуальности
- Как изменить сводку о файле
- Как редактировать формы в 1с
Сделайте в программе 1С архив базы, после чего сформируйте и сохраните по остаткам контрольные отчеты, оборотно-сальдовую ведомость, в которой учтены забалансовые счета и валюты, прайс-лист и другие важные отчеты.
Обязательно сделайте копию базы. В дальнейшем она может быть использована в качестве резервной копии.
Сформируйте в программе 1С операцию, которая должна перенести остатки бухгалтерских счетов. Это можно сделать с помощью процедуры wrap.ert, указав дату закрытия базы и убрав отметку о запрете удаления документов.
Создайте документ под названием «Движение регистра». Эту операцию необходимо провести по всем регистрам с помощью обработки или вручную. Записывать документ необходимо на дату закрытия базы данных. Внесите остатки, но не проводите документ.
Сформируйте документ под названием «Фиксация периодических» для каждого справочника, который содержит реквизиты документов. Запишите этот документ на последнюю дату закрываемой базы и внесите значения всех реквизитов. После чего не проводите его.
Установите точку актуальности на день позже, чем дата закрытия базы данных и проведите документы под названиями «Движение регистра» и «Фиксация периодических».
Сформируйте контрольные отчеты в закрытой базе и сравните их с отчетами в исходной базе, если все остатки совпадают, то закрытие периода завершено. Если же не совпадают, то необходимо зайти в режим «Управление итогами» и вручную сдвинуть точку актуальности итогов, однако при этом необходимо вручную пересчитать все итоги.
Механизм смены точки актуальности итогов позволяет получать итоговую информацию на любую дату и время. Смена точки актуальности может выполняться двумя способами – автоматически и вручную.
Автоматическая смена точки актуальности итогов
Автоматическая смена точки актуальности итогов происходит при проведении документа. При этом должны соблюдаться следующие условия:
- документ и точка актуальности итогов находятся в одном периоде хранения итогов (остатков);
- документ имеет более поздние дату и время, чем точка актуальности итогов;
- между проводимым документом и точкой актуальности итогов нет других проведенных документов.
Очевидно, что, если документы вводятся в хронологическом порядке и их проведение выполняется сразу после ввода, то перечисленные условия выполняются как бы сами собой. В этом случае подобный порядок смены точки актуальности позволяет поддерживать итоги в актуальном состоянии сразу после проведения каждого документа.
Смена точки актуальности итогов "вручную"
Режим "Управление оперативными итогами" позволяет "вручную" сдвигать точку актуальности итогов как вперед, так и назад во времени. Каждое "направление" движения имеет свои особенности и по-разному влияет на пересчет итогов.
При смещении точки актуальности итогов назад, из итогов исключаются проведенные документы, имеющие более поздние дату и время, чем новая точка актуальности итогов. Записи о движениях регистров, порожденные такими документами, сохраняются.
При смещении точки актуальности итогов вперед, при пересчете регистров будут учтены все проведенные документы, расположенные до точки актуальности итогов.
Кроме этого, существует возможность автоматического проведения документов, при этом могут повторно проводиться ранее проведенные документы.
Основное преимущество проведения документов в процессе смены точки актуальности итогов заключается в том, что итоги будут актуальны на момент проведения каждого документа. Если алгоритм движения регистров должен использовать итоги для выполнения каких-либо вычислений, то пересчет документов при смене точки актуальности итогов позволяет исключить уже упоминавшиеся ошибки, связанные с проведением документов "задним числом" – когда точка актуальности итогов имеет более поздние дату и время, чем дата и время у проводимого документа.
Изменение точки актуальности итогов выполняется следующим образом. Следует иметь в виду, что изменение точки актуальности итогов в многопользовательской версии системы 1С:Предприятие выполняется только при запуске в монопольном режиме:
- закройте все редактируемые документы, если таковые имеются;
- вызовите диалог "Управление итогами". Это можно сделать, выбрав пункт "Управление оперативными итогами" в меню "Операции" главного меню программы;
Дата указывается в формате ДД.ММ.ГГ или ДД.ММ.ГГГГ в зависимости от параметра системы "Число", при этом разделительные точки вводить не надо – они уже присутствуют в поле ввода даты. Нажатием на кнопку можно вызвать встроенный календарь и выбрать нужную дату, щелкнув на ней мышью в окне календаря.
При работе с конфигурациями, использующими механизм оперативного учета, в основном ТА двигается вперед в ходе проведения документов в реальном времени. При проведении документа в реальном времени ТА устанавливается на документ. Таким образом, в ходе обычной работы ТА двигается вперед и в каждый момент времени соответствует позиции последнего проведенного оперативного документа.
Заметим, что сама позиция ТА не обязательно должна совпадать с позицией какого-либо документа. Например, если документ, на котором установлена ТА, удален, то позиция ТА не меняется. Таким образом, ТА отмечает позицию в хронологической последовательности документов, до которой включительно документы соответствуют уже отраженным в учете событиям, а после которой являются введенными, но не отраженными в учете.Существует возможность принудительно перенести точку актуальности (ТА). Однако, эта возможность не предназначена для повседневной работы, а является скорее вспомогательным технологическим режимом.
Сам перенос ТА может выполняться из журнала документов (меню "Действия": пункт - "Установить ТА на документ"), или с помощью режима управления оперативными итогами (меню "Операции": пункт - "Управление оперативными итогами"). Перенос ТА может выполняться только в монопольном режиме.Перенос ТА может выполняться вперед и назад.
При переносе ТА назад проведенные документы стоящие после ТА отмечаются в журналах специальной галочкой темного цвета. Перенос ТА назад выполняется только в отдельных случаях. В основном для того, чтобы потом переставить ТА вперед с перепроведением документов. Для реальной работы рекомендуется, чтобы ТА соответствовала или была позже последнего проведенного оперативного документа. Проведенные оперативные документы отмечаются в журнале документов красной галочкой. Проведенные неоперативные документы отмечаются розовой галочкой.
В некоторых случаях перенос ТА назад может быть использован для того, что получить отчеты о наличии средств на определенный момент времени (документ). Однако чаще выполняется получение данных на определенную дату с помощью установки соответствующего периода в диалоге настройки отчета.При переносе ТА вперед предоставляется возможность проведения документов. Отдельно отмечаются виды проведенных и непроведенных документов, которые нужно проводить. Эта возможность может применяться для перепроведения документов, однако в версии 7.7 для проведения документов, а также для восстановления последовательности проведения документов рекомендуется использовать специальный режим "Проведение документов" (меню "Операции": пункт - "Проведение документов"). Этот режим не требует предварительного переноса ТА назад.
Фактически единственным случаем, когда перенос ТА необходим при нормальной работе 1С:Предприятия - это открытие периода. Для этого удобнее всего использовать кнопку "Открыть" в диалоге управления оперативными итогами или, если документ следующего периода уже введен, можно в журнале документов установить ТА на первый документ следующего периода. Эту операцию нужно делать периодически в соответствии с установленной в диалоге управления оперативными итогами периодичностью сохранения остатков.
Обычно периодичность имеет значение "месяц" и ее не рекомендуется переставлять без участия специалиста. Сама по себе смена периодичности не приведет к изменению работы системы, однако участие специалиста необходимо для определения целесообразности изменения данного параметра. Заметим, что на практике этот параметр меняется достаточно редко.При установленной периодичности "месяц" открытие периода будет необходимо делать 1-го числа каждого месяца перед началом работы пользователей. Это удобнее всего выполнять администратору системы, если таковой имеется, или ответственному пользователю .
Читайте также: