При активном использовании механизмов импорта табличных данных пользователи часто сталкиваются с типовым сценарием: данные выделяются и копируются из внешнего табличного редактора (Microsoft Excel, OpenOffice Calc или LibreOffice Calc), после чего вставляются через буфер обмена в табличное поле формы 1С (например, в обработку загрузки номенклатуры в документе заказа клиента). Однако после обновления платформы на релизы ветки 8.3.8 поведение программы может нарушиться: строка заголовков затирается, колонки смещаются, а затем сеанс аварийно завершается с ошибкой «Параметр сеанса отсутствует или удалён». Разберем по шагам, почему возникает эта неполадка и как её корректно устранить.
Проанализируем ситуацию на стыке операционной системы и платформы 1С:Предприятие. В версиях 8.3.8 были обновлены механизмы работы с буфером обмена. При выполнении операции копирования офисные редакторы помещают в буфер обмена информацию сразу в нескольких форматах представления данных: обычный текст (CF_UNICODETEXT), форматированный HTML и специализированный XML Spreadsheet.
Платформа 1С при вставке в табличный документ пытается прочитать наиболее обогащенный формат разметки. Если в исходной таблице присутствовали сворачиваемые строки или группировки (структура), платформа некорректно обрабатывает скрытые метатеги и разделители группировок. Вместо того чтобы проигнорировать скрытые служебные блоки, алгоритм вставки интерпретирует их как новые ячейки и пустые строки перед началом полезных данных. Это вызывает физический сдвиг таблицы, затирание шапки и порчу структуры формы.
Следом возникает аварийное завершение работы с сообщением «Параметр сеанса отсутствует или удалён». Эта ошибка на управляемых формах генерируется внутренним диспетчером контекста сервера LogFormMngrSrv. Когда искаженные табличные данные отправляются POST-запросом к серверу, серверный обработчик не может сопоставить поврежденное состояние клиентской формы с сохраненным в памяти контекстом и аварийно прерывает сеанс.
Рассмотрим самый быстрый способ предотвратить сбой без доработки конфигурации или изменения версии платформы. Поскольку искажение вызывают скрытые группировки, необходимо очистить структуру перед операцией копирования:
Alt + ;, после чего скопируем диапазон через Ctrl + C.Разберем вариант передачи данных в виде чистого текста с табуляцией (TSV), что исключит влияние тегов HTML и XML на разбор буфера обмена:
Ctrl + A и скопируем его комбинацией Ctrl + C.Если после неудачной вставки и аварийного вылета сеанса база данных продолжает регулярно выдавать ошибку «Параметр сеанса отсутствует или удалён» даже при входе в документ или открытии обработки, проанализируем состояние серверного кэша. Для восстановления стабильной работы выполним сброс данных сеансов:
srvinfo (по умолчанию расположен в системном профиле пользователя службы 1С).snccntx, в котором хранятся сериализованные контексты пользовательских сеансов.Если в конфигурации требуется функционал интерфейса «Такси» (например, режим независимых неперекрываемых окон, появившийся в 8.3.8), делать даунгрейд до версий ветки 8.3.6 нецелесообразно. Ошибки обработки сложных форматов буфера обмена были устранены фирмой «1С» в релизах ветки 8.3.9 и 8.3.10. Переход на более актуальный релиз платформы полностью устраняет сбой разбора разметки ячеек из Excel и Calc без необходимости ручной предобработки таблиц.
Рассмотрим программное решение, позволяющее полностью отказаться от использования буфера обмена операционной системы. Если в конфигурации дорабатывается механизм загрузки, заменим вставку через буфер на загрузку файла с диска с помощью встроенного метода Прочитать объекта ТабличныйДокумент:
&НаКлиенте
Процедура ЗагрузитьФайлНаКлиенте(ПутьКФайлу)
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу);
ОбработатьТабличныйДокумент(ТабДок);
КонецПроцедуры
Платформенный метод чтения напрямую работает со спецификацией формата файла и корректно разбирает структуру документа, не завися от содержимого буфера обмена и скрытых группировок строк.