1с нарушение целостности чтения объекта
Сегодня 01.02.2021 года наблюдается массовое нарушение работы программных продуктов от фирмы 1С. Пользователи программы стали наблюдать на своих мониторах окно со следующим текстом ошибки: «Обнаружено нарушение целостности системы». Служба технической поддержки 1С засыпана вопросами по поводу этой ошибки, пользователи пытаются всеми силами найти решение возникшей проблемы, так как простой бизнеса недопустим. В данном окне ошибки Вам предоставляется возможность завершить работу или попытаться перезапустить программу. Стоит заметить, что перезапуск помогает избавиться от злосчастной ошибки, но это счастье длится буквально несколько минут, после чего ошибка появляется вновь. В результате работоспособность программы 1С полностью заблокирована.
Причиной темы сегодняшней публикации послужил массовый запуск работы механизма лицензионной защиты программных продуктов фирмы 1С.
Ошибка «Обнаружено нарушение целостности системы 1С 8.3» - это следствие нелегального использования платформы 1С:Предприятие 8.3 путем наличия на рабочей машине (ПК, сервере) эмулятора аппаратного ключа защиты HASP или же оставшиеся следы его прошлых установок. Платформы 1С:Предприятие 8.3 редакции ПРОФ и КОРП оснащены модулем защиты от пиратского использования. Следовательно, возникшая проблема может быть вызвана по одной из двух причин:
1. На текущий момент на Вашем сетевом сервере или локальном компьютере, находящимся в корпоративной сети осуществлен «взлом» (полностью отключена или изменена) система проверки целостности файлов платформы. Также это отражается в случаях, например, когда не приобретены клиентские лицензии на основные рабочие места, где работают с программой 1С, нет серверных лицензий, но при этом база работает в серверном режиме, также эмулируется превышенное количество лицензий 1С, чем фактически купленое для версии ПРОФ или КОРП.
2. Второй причиной появления ошибки является остаточные следы ранее установленного эмулятора защиты, который в свое время осуществлял взлом защитного модуля 1С:Предприятие. При этом сейчас Вы уже перешли на легальную платформу и используете программу совместно с приобретенными аппаратными или программными лицензиями. Однако защита все равно может отслеживать остатки эмулятора и блокировать работу программы ошибкой «обнаружено нарушение целостности системы 1С».
Описанные выше действия являются полностью нелегальными и осуществляются пользователями как сознательно, так и по причине получения неквалифицированных услуг по обслуживанию программ 1С. Например, Ваша организация пользуются услугами не сертифицированного специалиста, выдающего себя за представителя франчайзинга 1С. Это достаточно распространенная ситуация, которой не стоит удивляться.
Быстрое и краткосрочное решение проблемы
Как сообщается представителями фирмы 1С, компания готова пойти на уступки и позаботиться о своих клиентах, попавших (не по своей воле) в ловушку нелегального ПО. Поэтому, чтобы не произошло массовых сбоев в бесперебойной работе различных организаций и учреждений, принято решение предоставить бесплатные, но временные лицензии на право использовать программы 1С.
Установка временных лицензий 1С
Внимание!
Далее после установки последней версии технологической платформы необходимо следовать следующим действиям:
Рабочее решение ошибки «Обнаружено нарушение целостности системы»
Стоит сразу осознавать тот факт, что сегодня на просторах сети интернет предоставляются всевозможные отличные друг от друга системы взлома программ, которые также относятся и к эмуляторам ключей защиты 1С. Поэтому и способов удаления эмулятора с рабочего компьютера или сервера может быть столько же. Однако в данной публикации рассмотрим самые эффективные способы полной очистки эмулятора, которые рекомендованы фирмой 1С.
- Первый и самый простой способ, заключается в удалении двух файлов VUsb.sys и vusbbus.sys. Данные файлы должны располагаться в каталоге файлов, расположенном в директории: C:\Windows\System32\drivers.
- Второй способ. Необходимо открыть командную строку (cmd) от имени администратора и поочередно выполнить следующие команды:
Loaddrv.exe –stop haspflt (останавливаем работу утилиты эмулятора hasp);
Loaddrv.exe –remove haspflt (удаляем установленную утилиту эмулятора hasp).
Примечание. Если выполнение команд в командной строке завершилось с ошибками, тогда необходимо вручную найти работающую службу утилиты loaddrv, остановить ее и полностью удалить вместе со службой haspflt. Утилита и служба должны быть расположены в директории C:\Windows\System32\drivers\loaddrv.exe и C:\Windows\System32\drivers\haspflt.sys. Чтобы удалить данные файлы, нужно обладать правами администратора.
После этого нелишним проверить редактор реестра на наличие следов удаленной утилиты эмулятора. Если остатки будут найдены в реестре их также необходимо удалить. Запускаем редактор реестра с правами администратора и первым делом осуществляем поиск в следующих ветках реестра:
Если данные ветки будут отсутствовать, тогда пройдитесь по реестру поиском по значениям hasp, haspflt, vusbbus, loaddrv и VUsb. Также рекомендовал бы в рамках данного способа очистки, пройтись по этим же значениям в глобальном поиске каталогов Windows. При нахождении любого файла с указанными выше названиями, безвозвратно удалить.
Заключение
Как можно заметить вариантов решения достаточно, но как отмечалось ранее сколько эмуляторов, столько и решений по их удалению. Можно сказать, с уверенностью, следуя описанным в данной публикации инструкциям, у Вас получится решить проблему аварийного завершения работы 1С по причине: «Обнаружено нарушение целостности системы». От себя хочется добавить, что использование нелегального программного обеспечения никогда не доводило до хорошего, поэтому рекомендую Вам использовать для ведения бизнеса только легальные лицензионные программы фирмы 1С, которые можно приобрести на нашем сайте. Желаю удачи и успехов в работе!
Решение проблемы "Обнаружено нарушение целостности системы 1С"
Если программа 1С:Предприятие 8 обнаружит на компьютере эмуляторы защитных ключей, подмену системных файлов программы или даже следы подобных манипуляций в прошлом, пользователь увидит эту ошибку.
Часто устранение этой ошибки сводится к удалению неправомерно используемых программных средств – эмуляторов ключей 1С (в том числе сведений о них, которые могут остаться в системе) и модифицированных библиотек DLL. После того, как система будет очищена от всех воспоминаний «о тёмном прошлом», настоятельно рекомендуется использовать только лицензионное программное обеспечение.
Если ошибка возникает при обнаружении программой 1С:Предприятие 8 модифицированных версий системных библиотек приложения (backbas.dll, frntend.dll, mngcln.dll, config.dll, perform.dll)) при использовании цифровой подписи
Чтобы проверить действительна или недействительна цифровая подпись у указанных библиотек, можно:
· в директории с установленной платформой (например, C:\Program Files (x86)\1cv8\8.3.17.1496\bin) выбрать проверяемый DLL-файл и открыть его свойства.
· во вкладке «Цифровые подписи» выбрать подпись из «Списка подписей» и нажать на «Сведения». В открывшимся окне в виде подписи под заголовком «Сведения о цифровой подписи» будет написано «Эта цифровая подпись действительна» в случае действительной цифровой подписи, или «Эта цифровая подпись недействительна» в обратном случае (рис.2).
Рис. 2 Использование цифровой подписи – сведения о действительности
В случае неаутентичности файлов библиотек DLL может помочь удаление платформы с последующей перезагрузкой и её переустановкой заново.
Чтобы работоспособность программы 1С:Предприятие 8 была восстановлена, рекомендуется удалить сторонний эмулятор ключа 1С и подчистить все оставшиеся в системе «хвосты» от его установки.
Сперва необходимо выгрузить из памяти следующие процессы: Агент сервера 1С:Предприятие, HASP Loader, и Sentinel LDK License Manager («Пуск → Средства администрирования → Службы»).
Так как эмулятор ключа 1С представляет в операционной системе некое виртуальное устройство, это виртуальное устройство следует удалить: необходимо открыть «Диспетчер устройств», найти в нём и удалить Virtual Usb Bus Enumerator.
Далее, предлагаются следующие действия:
· Удалить файл haspflt.sys и сведения о нём в системном реестре.
Сам файл haspflt.sys может находиться в директории: %windir%\system32\drivers. Находим и удаляем его. Также можно набрать в командной строке от имени администратора следующие команды:
- loaddrv.exe -stop haspflt
- loaddrv.exe -remove haspflt
Рис. 3 Запуск редактора реестра в программе 1С Предприятие 8
Запустим редактор реестра Windows (<Win>+<R>, затем команда regedit, рис. 3) и удалим упоминания об этом драйвере из ветки:
и записи о состоянии памяти (дамп) драйвера:
· Удалить файл драйвера Virtual Usb Bus Enumerator – vusbbus.sys – и сведения о нём из реестра.
Заметим, что вместе с указанным файлом также следует удалить VUsb.sys при его наличии.
Возможное расположение файла:
Аналогично описанному выше, необходимо запустить редактор реестра и удалить записи о драйвере vusbbus.sys из системного реестра. Нас интересуют ключи реестра, расположенные в следующих ветвях:
· В случае, если был установлен какой-либо другой эмулятор защитного ключа, рекомендуется проверить содержимое ветвей реестра:
В них также может остаться ненужная информация. Следует очистить содержимое этих ветвей.
Также можно попробовать удалить не только ключи реестра в указанных ветках, но и сами ветки с этими ключами.
Этот вопрос возник у нас на проекте по внедрению ЗУП2.5 с численностью 20000 и средним количеством одновременных пользовательских сессий 200.
Стали разбираться. Оказалось, мы столкнулись с эффектом «Избыточной блокировки». Обычно этот эффект появляется при параллельном проведении документов, во время него самым первым документом блокируется большой объем записей регистров на все время проведения документа. Эта блокировка задерживает проведение остальных документов, мешает параллельной работе пользователей и замедляет рабочий процесс. Вообще блокировка данных при проведении документов вещь полезная, она сохраняет целостность данных и гарантирует правильность выполнения расчетных алгоритмов. Но бывает так, что либо объем заблокированных данных чрезмерен, либо время блокировки слишком велико. В результате мы имеем многопользовательскую систему, которая по сути является однопользовательской: вместо параллельного проведения документов - последовательное.
Ошибки в 1С из-за блокировок
Пример необходимой блокировки в 1С
Представим такую ситуацию – есть два документа «Начисление зарплаты сотрудникам организаций», в которых указан одинаковый налоговый период, а на закладке НДФЛ указаны одинаковые сотрудники. Рассмотрим случай, когда блокировка вообще отсутствует. Если последовательно запускать расчет этих документов, то в первом сумма НДФЛ посчитается правильно, а во втором будет равна нулю, т.к. рассчитанный и фактически начисленный НДФЛ на момент проведения второго документа будут совпадать.
Но если запустить эти документы параллельно, то они одновременно начислят НДФЛ, не подозревая о существовании друг друга, и в результате налог удвоится. Если блокировка настроена верно, то первый документ, запущенный на долю секунды раньше второго, успеет первым прочитать и заблокировать данные о фактически исчисленном налоге в регистре «НДФЛ расчеты с бюджетом» по сотруднику Пушкину А.С. Из этого запроса будет видно, что фактический налог за январь пока не начислялся и значит надо выполнить движение по регистру. Блокировка будет отпущена только после завершения записи в регистр. Второй документ, дойдя до запроса чтения фактически начисленного налога будет поставлен системой на ожидание до тех пор, пока первый документ не закончит транзакцию проведения, после чего он прочитает в запросе, что налог уже начислен и движение по регистру выполнять не надо. Это необходимая блокировка.
Пример избыточной блокировки в 1С
А теперь представим другую ситуацию. При проведении документа выполняется запрос, который должен отобрать документы, в которых присутствует сотрудник из этого документа. Но запрос написан так, что сервер SQL вынужден находить нужные документы методом перебора. Для технических специалистов это означает, что вместо CLUSTERED INDEX SCAN выполняется TABLE SCAN, т.е. вместо сканирования таблицы индексов происходит сканирование самой таблицы. Причем в процессе перебора блокируются все записи, к которым прикоснулся запрос, даже те, в которых не присутствуют искомые сотрудники. И эта блокировка будет действовать до конца завершения проведения документа, что будет препятствовать параллельному проведению документов с другими сотрудниками. Это избыточная блокировка.
Как избавиться от избыточных блокировок в 1С
Лечение избыточных блокировок может идти двумя путями. Первый - это оптимизация запросов, выполняемых внутри транзакций и добавление необходимых табличных индексов в конфигураторе. Второй - это перевод выполнения SQL-запросов на более низкий уровень изоляции, когда при выполнении запросов записи в таблицах блокируются только на момент выполнения самого запроса, либо не блокируются вовсе. А необходимые блокировки устанавливаются средствами объекта «БлокировкаДанных» и выполняются на стороне сервера 1С.
Теперь немного теории про уровни изоляции на SQL сервере:
1. В автоматическом режиме в транзакциях используется уровень изоляции SERIALIZABLE. Этот уровень накладывает блокировки типа X (запрещает чтение и запись) до конца транзакции на все данные, которых коснулись запросы или произошла запись данных.
2. В управляемом режиме в транзакциях используется уровень изоляции ReadCommitted. Этот уровень на записанные данные также устанавливает блокировки типа X до конца транзакции. Но при выполнении запросов на данные накладывает блокировки типа S (запрещает запись и проверяет нет ли в этот момент параллельных записей), при завершении запроса блокировки снимаются не дожидаясь завершения транзакции.
3. Если база данных переведена в режим ReadCommitted SNAPSHOT, то в управляемом режиме при чтении данных не накладывается блокировка типа S, есть только блокировка типа X при записи.
Тоже самое чуть более подробно в таблице:
Обычно лечение начинают с понижения уровня изоляции, т.к. это не особо трудозатратно и дает быстрый результат. Достаточно перевести конфигурацию из «Автоматического» режима управления блокировкой данных в «Управляемый», и транзакции начнут выполняться на уровне изоляции типа ReadCommitted, вместо SERIALIZABLE или Repeatable Read.
Чтобы переключить базу данных в режим READ COMMITTED SNAPSHOT (RCSI) необходимо в «SQL Server Management Studio» в свойствах базы данных установить параметр "Is Read Committed Snapshot On" в значение "True":
В некоторых источниках предлагают установить параметр "Allow Snapshot Isolation" в значение "True", но в этом нет необходимости, т.к. это приведет к включению другого режима изоляции SNAPSHOT, который не поддерживается платформой 1С (На момент написания статьи релиз платформы 8.3.9).
Режим управления блокировкой данных задается для неявных транзакций, которые выполняются при записи или при проведении документов, т.е. внутри предопределенных процедур типа ПриЗаписи() или ОбработкаПроведения(). Но большинство «тяжелых» вычислений в типовой конфигурации ЗУП2.5 происходит при выполнении команды «Рассчитать». При этом в модуле объекта запускается процедура РассчитатьВсе(), внутри которой неоднократно повторяется конструкция НачатьТранзакцию() …ЗафиксироватьТранзакцию(). Это явно указанные транзакции, внутри которых происходит запись и очистка регистров и выполняются запросы. Нам необходимо убедиться, что при переключении конфигурации в управляемый режим в процедуре «РассчитатьВсе()» транзакции также начинают выполняться на уровне ReadCommitted.
Для этого проведем небольшой эксперимент:
• Запустим SQL Server Profiler.
• Запустим «NEW TRACE».
• Выполним подключение к серверу SQL.
• В окне «Trace Properties» на закладке «General» выберем «Use the template» = «Blank», а на закладке «Events Selections» раскроем группу «Stored Procedures» и выберем «RPC:Complited». По кнопке «Column Filters» укажем имя базы и длительность выполнения запросов более 1.
• Кнопку RUN пока нажимать не будем, т.к. нам надо сначала запустить базу данных в режиме отладки и остановить выполнение расчета документа «Начисление зарплаты сотрудникам организаций» перед выполнением самого массивного запроса. Например, это будет команда
«Результат = Запрос.ВыполнитьПакет();» в функции «ПолучитьДанныеНДФЛПоРегистратору» в общем модуле «ПроведениеРасчетов». Здесь происходит выполнение основного запроса для расчета НДФЛ. Поставим на ней точку останова отладчика и запустим расчет в документе.
· После того как отладчик остановится, нажмем кнопку RUN в Профайлере.
· Теперь сделаем один шаг в отладчике кнопкой F11. Когда запрос будет выполнен и отладчик перейдет на следующий шаг, остановим чтение Профайлера кнопкой «Pause Selected Trace».
· Теперь найдем самый длительный запрос по колонке Duration и внимательно изучим текст запроса. Если при обращении к реальной (а не временной) таблице после слова WITH стоит SERIALIZABLE, то мы имеем дело с автоматическим режимом блокировки. Если ничего не стоит – то с управляемым.
Если в хинте запроса (Hint – это параметр после слова WITH, позволяющий влиять на план выполнения запроса) не указан уровень изоляции, то выполняется уровень изоляции, установленный по умолчанию для текущей SQL-сессии. Определить уровень изоляции, действующий по умолчанию для текущих сессий можно в «SQL Server Management Studio» с помощью команды
SEL ECT CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'SERIALIZABLE'
WHEN 5 THEN 'SNAPSHOT' END AS TRANSACTION_ISOLATION_LEVEL
FR OM sys.dm_exec_sessions
В управляемом режиме для всех сессий будет указан режим ReadCommitted.
После того, как включили управляемый режим блокировки мы должны убедиться, что избавившись от избыточных блокировок, мы не ушли в другую крайность и не потеряли необходимые блокировки, которые защищают систему от нарушения целостности данных при активной параллельной работе пользователей.
Настройка управляемых блокировок – это тема для отдельной статьи. Вкратце скажу, что программно управляемые блокировки устанавливаются с помощью объекта «БлокировкаДанных». Сами управляемые блокировки работают уже не на уровне SQL сервера, как в случае с автоматическими блокировками, а на уровне сервера 1С. Для определения необходимых и достаточных управляемых блокировок надо понимать логику программы одновременно на уровне бизнес-процессов и на уровне архитектуры таблиц СУБД.
Так же на этом проекте мы столкнулись с эффектом «Эскалация блокировок», когда SQL сервер сам принимает решение, что надо укрупнить область наложения блокировок вплоть до блокировки целиком всей таблицы. В результате работа пользователей останавливается, и все ждут завершения проведения одного документа – виновника эскалации, либо когда по таймауту снимутся взаимные блокировки, либо произойдет перезагрузка сервера. В каких случаях возникает эскалация и как с этим бороться тоже тема для отдельной статьи.
Пиратство стало известно миру с давних времен, когда в принципе и зародилось ремесло мореплавателей. Безмятежная жизнь и легкая нажива привлекала моряков присягнуть к "Темной стороне силы". Спустя тысячелетия слово - пиратство осталось на слуху у каждого. С одной стороны, это заслуга литературы и кинематографа, а с другой стремительное развитие компьютерных технологий. Вследствие чего в интернете появилось огромное сообщество "Робин Гудов" нашего времени, которые готовы грабить богачей и раздавать награбленное бедным.
Сегодня каждая вторая лицензионная программа, которая пользуется спросом на рынке имеет "пиратскую" копию. Это касается и программных решений от фирмы 1С. Пиратскому копированию программных продуктов подвергается, как платформа 1С:Предприятие, так и конфигурации, разработанные на этой платформе. Поэтому компания 1С начала серьезно бороться с нелегальным использованием своего ПО, выпустив два релиза платформы: 8.3.10.2699 и 8.3.11.2899. В платформах предусмотрена система, которая производит анализ лицензионного использования. Благодаря этому нововведению анализируется конечное наличие файлов платформы, а также происходит проверка установленного на персональном компьютере эмулятора HASP. В таком случае, когда на ПК будет обнаружена пиратская копия платформы или конфигурации, то при запуске программного продукта будет выскакивать ошибка с текстом "Обнаружено нарушение целостности системы". При этом не будет указано никакой подробной информации по поводу этой ошибки. Столкнувшись с подобной проблемой, многие сразу начинают думать, что проблема заключается в информационной базе и пытаются использовать механизм "Тестирование и исправление". Однако это не поможет, так как проблема заключается как выяснилось в другом.
Ошибка связана с использованием не лицензионной копии конфигурации. Необходимо приобрести лицензионные ключи и начать легально пользоваться программой. Однако стоит учесть, что перед установкой приобретенной лицензии нужно произвести полную очистку компьютера от вспомогательных средств взлома продуктов 1С. Иначе ошибка никуда не денется. Первым с чего стоит начать, это сделать полную переустановку платформы 1С. После чего переходим к следующему шагу. Находим и удаляем службу vusbbus, и прилагающейся к ней файл, который находится в директории (\drivers\vusbbus.sys). "Пиратская" платформа 1С содержит эмулятор физического ключа HASP, который имитирует фактическое наличие лицензии. Для удаления эмулятора перейдем в "Диспетчер устройств" и удалим Virtual Usb Bus Enumerator, а также драйверы, установленные вместе с ним. После проделанных действий, устанавливаем лицензионную платформу 1С и без проблем пользуемся программой.
Ошибка, сообщающая о нарушении целостности системы, не имеет другого варианта решения. Именно поэтому единственный и правильный выход, это приобретение лицензионной платформы.
После чего, подобного рода ошибки не будут мешать работе. Надеюсь, статья оказалась информативной и полезной в решении. Удачи и успехов!
Читайте также: