Ошибка перемещения файлов 1с

Обновлено: 06.07.2024

Доступ к файловой системе из кода конфигурации

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

1.1. Если доступ к файловой системе осуществляется из кода, выполняемого на клиенте, то он выполняется под правами пользователя, от имени которого запущено приложение (тонкий, толстый или веб-клиент). Как правило, это текущий пользователь операционной системы.

1.2. Если доступ к файловой системе осуществляется из кода, выполняемого на сервере, то:

  • при использовании клиент-серверной информационной базы, доступ ограничен правами пользователя, от имени которого запущен сервер 1С:Предприятия (*);
  • при использовании файловой базы, опубликованной на веб-сервере, доступ ограничен правами пользователя, от имени которого запущен веб-сервер.

* Рабочие процессы могут быть также запущены от имени другого пользователя, отличного от того, под которым запускается агент сервера. Подробнее см. руководство администратора клиент-серверного варианта, описание служебного файла swpuser.ini

Область применения (уточнение): управляемое приложение, обычное приложение.

2. Запрещается выполнять запись каких-либо файлов в каталог исполняемых файлов 1С:Предприятия, получаемого с помощью метода КаталогПрограммы . Использование метода КаталогПрограммы допустимо только для чтения или запуска файлов. Например, при работе в ОС Windows, для запуска копии тонкого клиента 1С:Предприятия текущей версии, допустимо использовать:

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

3.1. В именах файлов, автоматически формируемых из кода конфигурации, указывать только английские буквы, а также цифры, а в качестве кодировки текстовых файлов использовать только UTF-8 (именно этот формат предпочтителен, т.к. только с ним корректно работает операционная система macOS).

3.2. В тех случаях, когда имя файла не генерируется системой, а его явно вводит пользователь, разрешить ввод русскоязычных имен, но при этом дать возможность транслитерировать его в англоязычное имя. По умолчанию, если это технически возможно и не снижает удобство работы, рекомендуется предлагать англоязычное имя файла, а для текстовых файлов – сохранение в кодировке UTF-8.

Также эти рекомендации по выбору имени и кодировки файла следует разместить в справке к тем местам программы, где пользователь имеет возможность сохранять файлы и выбирать кодировку.

В конфигурациях на базе Библиотеки стандартных подсистем для транслитерации имен файлов рекомендуется использовать функцию СтроковыеФункцииКлиентСервер.СтрокаЛатиницей .

Работа с временными файлами и каталогами

При необходимости использования временных файлов и каталогов необходимо соблюдать следующие требования:

1. Для получения имени временного файла следует использовать метод ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). В противном случае возможна некорректная работа конфигурации в многопользовательском режиме, с включенными профилями безопасностями, возникновение проблем с правами доступа к файлам операционной системы, а также неконтролируемое увеличение количества ненужных временных файлов, которые не будут своевременно удалены.

ИмяПромежуточногоФайла = "C:\Временные файлы 1С\TempFile.xml";
Данные.Записать(ИмяПромежуточногоФайла);

У текущего пользователя может не быть прав на запись в указанный каталог. Кроме того, при одновременном выполнении этого кода из двух разных сеансов возникнет ошибка.

При использовании этой функции будет получено уникальное имя, гарантирован доступ к файлу.

Кроме того, при использовании метода ПолучитьИмяВременногоФайла платформа 1С:Предприятие сохраняет контроль над такими файлами и автоматически удаляет их

  • при перезапуске рабочего процесса (если файл был создан на стороне сервера) или клиентского приложения (если файл был создан на стороне клиента);
  • через 20 минут после серверного вызова или сеанса, в котором создан временный файл (при работе в клиент-серверном варианте на платформе 8.3.17 и больше).

Если же имя временного файла было сформировано каким-то другим способом, и прикладной код не удалил (либо по какой-то причине не смог удалить) ранее созданный временный файл, то платформа такой файл не контролирует, и он остается в файловой системе на неопределенное время. Накапливание «потерянных» временных файлов может представлять серьезную проблему, особенно для информационных баз с большим количеством активно работающих пользователей (например, при работе в режиме сервиса).

Таким образом, неправильно :

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Если по каким-то причинам прикладной код не удалит созданный файл (например, между блоками создания и удаления временного файла возникнет штатное или нештатное исключение), этот файл так и останется в каталоге временных файлов.

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

2. Для создания временного каталога рекомендуется также использовать имя, полученное при помощи метода ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). Это гарантирует уникальность имени создаваемого каталога при работе в многопользовательском режиме и гарантирует, что после перезапуска рабочего процесса или клиентского приложения временный каталог будет автоматически удален платформой 1С:Предприятие. После этого, внутри созданного каталога можно создавать другие каталоги и файлы без ограничений.

3.1. При выполнении кода веб-клиентом метод ПолучитьИмяВременногоФайла недоступен. Поэтому для формирования имен временных файлов и каталогов необходимо использовать функцию КаталогВременныхФайлов и объект УникальныйИдентификатор .

Каталог = КаталогВременныхФайлов();
ИмяФайла = "TempDataFile.xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

3.2. Если в конфигурацию встроена Библиотека стандартных подсистем , для создания временных каталогов на стороне клиента необходимо использовать процедуру ФайловаяСистемаКлиент.СоздатьВременныйКаталог .

4. После окончания работы с временным файлом или каталогом, его необходимо удалить самостоятельно. Нельзя рассчитывать на автоматическое удаление файлов и каталогов при следующем запуске платформы, это может привести к исчерпанию свободного места в каталоге временных файлов.

// Работа с файлом
.

// Удаляем временный файл
Попытка
УдалитьФайлы(ИмяПромежуточногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

5. При использовании временных файлов и каталогов на сервере, необходимо полностью завершать работу с ними в рамках одного серверного вызова. При работе конфигурации с использованием кластера серверов, при следующем вызове эти файлы могут стать недоступны, так как код начнет исполняться на другом компьютере. При необходимости сохранить данные между серверными вызовами в пределах одного сеанса следует использовать временное хранилище платформы (методы ПоместитьВоВременноеХранилище , ПолучитьИзВременногоХранилища ).

5.1. В редких случаях может возникнуть необходимость передачи данных во временных файлах между сеансами, например, при подготовке данных для фонового задания, при организации длительного процесса, обслуживающего несколько последовательных вызовов web-сервиса. Необходимо самостоятельно обеспечивать гарантировано общее место хранения, права для доступа к файлам из разных мест их обработки, удаление файлов по истечению сроков их обработки или аварийного завершения процесса обработки. Рекомендуется использовать следующий подход:

  • Для обеспечения доступа со всех возможных мест обработки заводится константа для хранения общего пути к файлам, доступного для доступа со всех серверов кластера;
  • При создании временных файлов их имена заносятся во вспомогательный регистр сведений с сохранением времени создания файла;
  • При штатном прохождении процесса, последняя операция, которой были нужны файлы, перед своим завершением удаляет как сам файл, так и записи о них во вспомогательном регистре;
  • Вспомогательное регламентное задание периодически проверяет наличие записей во вспомогательном регистре, время существования которых заведомо превышает время штатного завершения процесса. При обнаружении таких записей, задание удаляет временные файлы и записи о них.

Передача файлов между клиентом и сервером

1. При одновременной работе с файлом на клиенте и на сервере необходимо использовать передачу файла через временное хранилище (методы ПоместитьФайлы , ПолучитьФайл , ПолучитьФайлы , НачатьПомещениеФайла , ПоместитьВоВременноеХранилище , ПолучитьИзВременногоХранилища ). В общем случае клиент и серверы кластера - это разные компьютеры с разной файловой системой, причем доступ к файлам может происходить под разными пользователями ОС с различными правами.

&НаКлиенте
Процедура ОбработатьФайл()
.
ИмяФайла = "C:\Файлы для обработки\Загрузка.xml";
Результат = ПроизвестиОбработкуНаСервере(ИмяФайла);
.

Чтение = Новый ЧтениеТекста(ИмяФайла);
.

Результат = Чтение.Прочитать();
Возврат Результат;

ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

Данные = ПолучитьИзВременногоХранилища(Адрес);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
Данные.Записать(ИмяПромежуточногоФайла);

Чтение = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
.
Результат = Чтение.Прочитать();
.

2. Для сохранения данных во временном хранилище между несколькими серверными вызовами, при помещении его в хранилище необходимо использовать параметр УникальныйИдентификаторФормы метода ПоместитьФайл , передав в него идентификатор текущей формы. Такие значения будут удалены из временного хранилища только при закрытии указанной формы. При этом, при повторном помещении того же файла во временное хранилище, предыдущее значение необходимо удалять вручную. Например:

.
// Первый серверный вызов
ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.

.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.

// Третий серверный вызов с новой версией файла
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

При этом во временном хранилище формы останется две копии файлов. Адрес второй копии будет находиться в переменной Адрес , а адрес первой копии будет утерян. Это приводит к затрате дополнительных ресурсов приложения, замедлению работы.

.
// Первый серверный вызов
ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";

ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
.

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.

.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.

// Третий серверный вызов с новой версией файла
УдалитьИзВременногоХранилища(Адрес);

ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

&НаКлиенте
Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

3. Если в конфигурацию встроена Библиотека стандартных подсистем для помещения файлов во временное хранилище необходимо использовать процедуры ЗагрузитьФайл и ЗагрузитьФайлы общего модуля ФайловаяСистемаКлиент . Для сохранения данных файла между несколькими серверными вызовами необходимо использовать свойство ИдентификаторФормы параметра ПараметрыЗагрузки :

&НаКлиенте
Процедура ОбработатьФайл()
.
ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект);

ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыЗагрузки.Интерактивно = Ложь;

ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения,
ПараметрыЗагрузки, ИмяФайлаДляОбработки);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(ПомещенныйФайл, ДополнительныеПараметры)

База файл-серверная. Баз несколько, пользователей несколько, работают одновременно. После данной ошибки ни кто из пользователей подключится к базе не может из-за возникшей ошибки. Журнал платформы могу прислать по запросу.

Ну что, можно подводить итоги обсуждения?

Мой вариант: очередной сисадмин в очередной раз убедился в "полном дебилизме 1Сников".

3. user705522_constantin_h 35 02.10.18 14:12 Сейчас в теме (1)У вас этот файл остаётся, когда с программой никто не работает. Если да, удалите его.
при включенной директиве EXCP в ТЖ на момент падения событий нет, дополнительно включили SYSTEM и EXCPCNTX. Дампы тоже включены, но без исходных кодов от них нет никакого толка. (1) Бекап, только бекап
И переход на серверную версию + нормальный сервер :) Так а вопрос в чем? Сделайте востановление через chdbfl.exe Суть тут вот в чем. Работают к примеру 5 пользователей с утра, в течении дня у одного из пользователей происходит аварийное завершение процесса 1С( падает платформа) и все он обратно зайти не может но те 4 пользователя также продолжают работу, и чтобы ошибку устранить необходимо всех вывести из базы. Почему вообще происходит данная ситуация с падением платформы может кто-то сталкивался с ней уже. (5)Это файловая база. На ИТСе называют файл-серверная я думал тут также =)) Проблема в том что это временный файл , т.е. создаётся при работе с базой , если ошибка возникает только у одного определенного пользователя , то в принципе лечится очисткой кэша под данным пользователем . Если ошибка возникает под разными пользователями , то стоит задуматься - возможно рушится жесткий диск , и стоит задуматься о переносе базы на другой комп (7)Такая же ошибка сыпется на одном предприятии там уже кластера.
и не один кластер ) Раз база файловая, проверьте права на доступ в папке БД и всех вложенных в неё. Лучше всех выгнать и принудительно заново проставить права на каталог.

Почему? 100500 одновременно работающих пользователей в файловой базе? Не верю!

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

Попробуйте переустановить платформу, другой релиз, лучше - 64-битную версию.

(13)эти действия делали и не один раз, это так сказать "типовые" мысли) пока лезем дальше вскрываем поврежденный файл уже нашли там ошибку в таблице сессий. и причем сдесь 100500 работающих пользователей не понял этого) кстати фирма 1с говорит о 1024 одновременных соединений к файл-серверной базе!! =)) Ну, извините, что не угадали то, что вы не потрудились написать.
пока лезем дальше вскрываем поврежденный файл уже нашли там ошибку в таблице сессий причем сдесь 100500 работающих пользователей не понял этого

При том, что "всех выгнать" для вас - не вариант.

P.S. Впрочем, как я вижу - вы и сами абсолютно все знаете и сами все делаете, не вижу смысла вам помогать мешать.

(17)У Вас падала платформа? Банально по журналу событий видили что происходит в момент падения? У Вас падала платформа? Банально по журналу событий видили что происходит в момент падения? (15)переделали уже все. падает платформа ошибка в тмп все. пользователей не пускает дальше

(22)при включенной директиве EXCP в ТЖ на момент падения событий нет, дополнительно включили SYSTEM и EXCPCNTX. Дампы тоже включены, но без исходных кодов от них нет никакого толка.

(24) а толку от проверки этого файла он каждый раз будет создаваться новый - если очень уж надо можно его скопировать пока он есть в другое место (25)Да копировали поврежденный. и продолжаем копировать.

Ну что, можно подводить итоги обсуждения?

Мой вариант: очередной сисадмин в очередной раз убедился в "полном дебилизме 1Сников".

Как это коррелирует с процитированным выводом?

По-моему - никак: если замена платформы не поможет, то это неоспоримое доказательство, что 1Сники способны дать только бесполезные советы, т.к. абсолютно ничего не соображают.

А если поможет, то см. п.1 - только полные дебилы могут работать на таком глючном софте.

(35) А что именно помогло? обновление платформы? Такая же фигня - база на кластере. (36) это было давно, я даже и не вспомню, сорян(
Но у меня там не очень серьёзная проблема была - так бы может быть и запомнилась бы Была такая ошибка при подключении к файловой базе по сети.
Ввел вместо имени машины ее IP и все заработало.

Работа с файловой базой по терминалке, в среднем пользователей 5. Падения из-за ucrtbase.DLL. Начало проявляться после обновления с платформы 8.3.13.1644 ИТС-ником на 8.3.15.1830. Падения преимущественно утром, при чём у разных пользователей в разный момент, потом могут целый день без проблем работать. Есть подозрения, что это связанно с какими то процедурами, которые отрабатывают в начале рабочего дня. С ходу выловить не получилось, опыта мало, а процедур сотни. (

Анализ причин роста сеансовых данных

Платформа "1С:Предприятие" в своей работе постоянно использует механизм, называемый "сеансовые данные". В этих данных хранится служебная информация, необходимая для работы сеанса "1С:Предприятия". Например, все, что введено в поля ввода на форме, при серверных вызовах сбрасывается в сеансовые данные.

При вызове методов: ПоместитьВоВременноеХранилище, ПоместитьФайл, НачатьПомещениеФайла, значения указанные в параметрах, записываются в сеансовые данные.

При фоновом исполнении отчетов СКД, результат отчета помещается в сеансовые данные, а затем передается в клиентскую часть.

С точки зрения операционной системы, сеансовые данные представляют собой файлы в каталоге …\srvinfo\reg_<номер порта>\snccntx<GUID>.

С точки зрения внутренней структуры - это noSQL база данных (key-value storage).

Особенности работы платформы с сеансовыми данными

За работу с сеансовыми данными отвечает менеджер кластера – rmngr.exe Если в кластере несколько рабочих серверов, то сеансовые данные будут расположены в соответствии с требованиями назначения функциональности.

Если требования не заданы, то сеансовые данные распределятся равномерно по всем рабочим серверам.

Сеансовые данные растут блоками по 64 Мб. Когда заканчивается блок, то менеджер кластера выделяет следующий блок в 64Мб.Блоки большего объема возможны в результате помещения объемных данных во временные хранилища.

Для обеспечения скорости работы, платформа всегда пишет новые данные в конец, аналогично transaction log в СУБД. Таким образом, размер сеансовых данных постоянно растет. Во всем объеме сеансовых данных, существуют как актуальные, так и устаревшие данные. Актуальность данных определяется способом их помещения:

  • Если сеансовые данные помещены из формы и в качестве идентификатора передается идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные считаются актуальными, пока открыта форма.
  • Если в качестве идентификатора передан УникальныйИдентификатор, не являющийся уникальным идентификатором формы (Новый УникальныйИдентификатор), то значение перестанет быть актуальным после завершения сеанса пользователя.
  • Если ничего не передано, то значение перестанет быть актуальным при любом следующем серверном вызове.

Перед выделением следующего блока на диске, проверяется, прошло ли 5 секунд с момента выделения предыдущего блока. Если 5 секунд прошло, то запускается "сборщик мусора" (key value garbage collector). Сборщик оценивает процент актуальных сеансовых данных в общем объеме. Если актуальные данные занимают менее 25% от общего объема, то все актуальные данные копируются в новые файлы, а затем все старые файлы сеансовых данных удаляются.


Так как каждый сеанс (клиенты, фоновые задания, web-сервисы) в своей работе постоянно пишет информацию в сеансовые данные, то при большом количестве пользователей, скорость дисковой подсистемы, на которой расположены файлы сеансовых данных, играет очень важную роль. При большом количестве пользователей, рекомендуется располагать файлы сеансовых данных на максимально быстрых дисках. Желательно RAM-drive. Отказоустойчивость дисков не важна, т.к. при потере сеансовых данных, никакой важной информации утеряно не будет.

Следует отметить порядок размещения сеансовых данных. Если поместить во временное хранилище двоичные данные или файл, то эти данные пройдут в качестве потока байт через rphost, затем в rmngr, который сбросит этот поток на диск. Если же, в качестве помещаемого значения, будет выступать коллекция (таблица значений, результат запроса, массив…), то сначала вся эта коллекция разместиться в памяти rphost, а только затем преобразуется в поток байт и будет передана в rmngr.

Размещение сеансовых данных в памяти

При работе кластера "1С:Предприятия", файлы сеансовых данных отображаются в память (mapping). Подробнее см. статью.

За счет данного механизма, процесс работает с файлом как с оперативной памятью. Файл загружается в память не целиком, а только необходимая часть.

Однако, в операционной системе Windows, отображенные в память файлы, влияют на счетчик Memory\Available Mbytes. При сильном росте сеансовых данных можно увидеть следующую картину:


Свободное место на диске, где расположены сеансовые данные, уменьшается синхронно со свободной памятью сервера. На самом деле, если посмотреть данные RamMap то видно, что большая часть оперативной памяти выделена под Mapped File


Размер памяти, указанный в колонке Standby – это неиспользуемая память (фактически свободная). При запросе памяти любым процессом, ему будет выделена память из этой области.

Следует учитывать данную особенность счетчика Memory\Available Mbytes при построении систем мониторинга или приложений, которые опираются на объем доступной оперативной памяти.

Для косвенной оценки эффективности работы операционной системы с сеансовыми данными, можно использовать счетчик Memory\Page Faults/sec, который показывает на сколько часто процессы обращаются за страницами в память, но не находят их там и подгружают с диска.

Если значение данного счетчика велико, то это может свидетельствовать о нехватке оперативной памяти для кэширования в ней сеансовых данных. В этом случае, необходимо принять решение об увеличении оперативной памяти, либо об оптимизации работы приложения с сеансовыми данными.

Проблемы сеансовых данных

Ошибка совместного доступа к файлу snccntx.dat


При появлении данной ошибки необходимо действовать по алгоритму:

1. Проверить права на папку сеансовых данных для пользователя, от которого запущена служба сервера "1С:Предприятия". Должны быть полные права.

2. Открыть на рабочем сервере диспетчер задач, установить видимость колонки "Командная строка"


3. Необходимо найти процессы rmngr.exe с одинаковым значением параметра –pid.


4. Открыть консоль кластера. Развернуть ветку кластера, порт которого соответствует параметру –regport , найденных rmngr.exe с одинаковым значением параметра –pid


5. Сопоставить PID из диспетчера задач с PID в консоли кластера. Тот процесс rmngr.exe, которого нет в консоли – принудительно завершить.

Закончилось место на диске, где расположены сеансовые данные

Необходимо следить за наличием свободного места на диске, где расположены сеансовые данные.

Не следует размещать файлы технологических журналов на одном диске с сеансовыми данными.

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

Так же, необходимо следить за размером самих сеансовых данных. Если периодически их размер становится существенным, то необходимо обратить на это особое внимание. Следует помнить, что при срабатывании "сборки мусора" необходимо наличие свободного места на диске, в размере 25% от общего объема сеансовых данных. Если этих 25% не будет, то кластер завершит свою работу аварийно.

Изменить расположение сеансовых данных, можно указав параметр –d в строке запуска службы агента сервера.

В данном каталоге, также расположены: реестр кластера, индекс полнотекстового поиска и журнал регистрации.

Влияние циклических ссылок на рост сеансовых данных

Чаще всего при выполнении процедуры ПоместитьВоВременноеХранилище, указывается идентификатор формы (ЭтаФорма.УникальныйИдентификатор). Как написано в документации, при указании идентификатора формы данные перестают считаться актуальными после того как форма будет закрыта.

Однако, если форма содержит в себе циклические ссылки (см. статью), то после закрытия формы она не уничтожается. Это приводит следующим отрицательным эффектам:

  • данные формы остаются в памяти
  • сеансовые данные, выделенные для формы, считаются актуальными, пока не будет завершен сеанс

Чтобы избежать данной ситуации, необходимо исключить все циклические ссылки в форме (см. статью).

Необходимо стараться формировать отчеты СКД в фоновом режиме. Так как результат отчета помещается во временное хранилище фоновым заданием, то после завершения задания данный результат будет считаться неактуальным.

Методика анализа роста сеансовых данных

Сбор данных

Необходимо собрать технологический журнал:

Данный технологический журнал может занимать значительный объем. Поэтому необходимо располагать его на дисках имеющих достаточно свободного пространства, периодически переносить старые файлы журнала на другой диск и там архивировать (сохраняя структуру папок).

После того, как технологический журнал будет собран, необходимо провести "парсинг" и выгрузить его данные в файлы csv формата:

На основании данных, которые собраны в папках rmngr_*, необходимо сформировать csv файл вида:

  • <файл ТЖ> – имя файла технологического журнала,
  • <CallID> – значение свойства CallID,
  • <InBytes> - значение свойства InBytes.

В файле …/rmngr_7188/ 15063011. log есть строка:

Данная строка должна быть преобразована в строку:

Необходимо исключить из итогового файла строки с InBytes=0, т.к. они не представляют интереса, но занимают значительный объем.

На основании данных, которые собраны в папках rphost_*, необходимо сформировать csv файл вида:

  • <процесс>– имя папки рабочего процесса,
  • <файл ТЖ> – имя файла технологического журнала,
  • <t:clientID> – значение свойства t:clientID,
  • <CallID> – значение свойства CallID.

В файле …/ rphost_1352 / 15063011 .log есть строка:

Данная строка должна быть преобразована в строку:

На основании данных, которые собраны в папках rphost_*, необходимо сформировать csv файл вида:

  • <процесс> – имя папки рабочего процесса,
  • <t:clientID> – значение свойства t:clientID,
  • <Usr> – Имя пользователя из свойства Usr.

В файле …/ rphost_1352 /15063011.log есть строка:

Данная строка должна быть преобразована в строку:

В итоге должно получиться 3 файла: scall.csv, call.csv, conn.csv

Пример создания файлов csv, на основании данных технологического журнала, см. в обработке.

Создание базы данных для анализа

Необходимо создать пустую базу данных (MS SQL Server), в которую добавить таблицы:

Затем, в эти таблицы необходимо загрузить данные из соответствующих csv файлов. Сделать это можно с помощью SQL Server Integration Services


После того, как информация будет загружена в таблицы, можно проводить анализ.

Анализ работы с сеансовыми данными

TOP – 10 пользователей в разрезе процессов и времени

Запрос покажет топ-10 пользователей, которые поместили больше всего сеансовых данных в час. Затем необходимо разобраться с самым верхним (в текущем случае):

Т.е. в процессе rphost_1352 за час с 11-00 по 12-00 пользователь с идентификатором 518 записал в сеансовые данные 2 046 616 858 байт (2Гб).

Далее, необходимо найти все идентификаторы вызовов, которые записывал сеанс 518:

(1) vkozak, кто запускает агент сервера? Сколько версий платформ стоит? Удалить все и поставить последний.

Доступ к каталогу C:\1CBases\111\ есть.

Версия платформы одна.
агент сервера запускает USR1CV8 созданный автоматически.


а у него есть право на запись в каталог C:\1CBases\111\?

(4) vkozak, что-то похоже на ОЛЕ подключение. Поставь пользователя на админа, у которого эти базы будут забиты и он под ними заходил. Так сразу 2 зайцев убьешь. Скорее всего решит вопрос.

(6) Xershi, Что значит "Поставить пользователя на админа"?
Дать USR1CV8 права локального админа на сервере?
Команда которую я использовал- "Regsvr32" она регистрирует класс под конкретного пользователя или под всех?

(8) vkozak, значит зайти в службы и вместо этого юзера задать юзера админа, как он у вас обозван мне откуда знать, хоть вася пупкин.

Вот как раз отвечал на Ваш вопрос и понял в чем косяк в варианте обмена через файл. Спасибо.
Исправил.
Но хочется настроить прямое подключение.

(7) vkozak, базы ЗУП и БУХ на одном сервере? Платформу обновляли?

(9) alexx2510, базы на одном, платформу не обновлял, но до переноса зуп на сервер 1С обмен шел.
А Бух 3.0 от рождения была на сервере.

(11) alexx2510, Да это похоже нужное лекарство.
Сделал как написано, ночью перегружу физический сервер.
Странно что об этой напасти франчи ни чего не подсказали, стандартная вроде как ситуация.

значит зайти в службы и вместо этого юзера задать юзера админа

(13) alexx2510, это уже должен решать администратор сервера, а для обычного около админа, это быстрое решение.

(16) vkozak, так проблема была не в правах, а в отсутствии нужных инсталов?

(17) Xershi, в файловой базе только в правах, в SQLной и в правах и в инсталах.

Преподаватель 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Временный (на проект)

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