Почему при вставке данных из Excel в 1С сдвигаются колонки и падает сеанс?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При активном использовании механизмов импорта табличных данных пользователи часто сталкиваются с типовым сценарием: данные выделяются и копируются из внешнего табличного редактора (Microsoft Excel, OpenOffice Calc или LibreOffice Calc), после чего вставляются через буфер обмена в табличное поле формы 1С (например, в обработку загрузки номенклатуры в документе заказа клиента). Однако после обновления платформы на релизы ветки 8.3.8 поведение программы может нарушиться: строка заголовков затирается, колонки смещаются, а затем сеанс аварийно завершается с ошибкой «Параметр сеанса отсутствует или удалён». Разберем по шагам, почему возникает эта неполадка и как её корректно устранить.

Выясним причину ошибки

Проанализируем ситуацию на стыке операционной системы и платформы 1С:Предприятие. В версиях 8.3.8 были обновлены механизмы работы с буфером обмена. При выполнении операции копирования офисные редакторы помещают в буфер обмена информацию сразу в нескольких форматах представления данных: обычный текст (CF_UNICODETEXT), форматированный HTML и специализированный XML Spreadsheet.

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

Следом возникает аварийное завершение работы с сообщением «Параметр сеанса отсутствует или удалён». Эта ошибка на управляемых формах генерируется внутренним диспетчером контекста сервера LogFormMngrSrv. Когда искаженные табличные данные отправляются POST-запросом к серверу, серверный обработчик не может сопоставить поврежденное состояние клиентской формы с сохраненным в памяти контекстом и аварийно прерывает сеанс.

Способ 1. Очистка структуры и группировок в исходном файле

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

  1. Откроем исходный файл в Excel или Calc.
  2. Полностью развернем все скрытые строки и столбцы.
  3. Снимем группировку данных. В Microsoft Excel перейдем на вкладку «Данные», найдем раздел «Структура» и выберем команду «Удалить структуру».
  4. Если требуется скопировать только отфильтрованные строки, используем выделение только видимых ячеек. В Excel для этого выделим диапазон и нажмем комбинацию клавиш Alt + ;, после чего скопируем диапазон через Ctrl + C.
  5. Выполним вставку в табличную часть формы 1С.

Способ 2. Вставка через промежуточный текстовый формат

Разберем вариант передачи данных в виде чистого текста с табуляцией (TSV), что исключит влияние тегов HTML и XML на разбор буфера обмена:

  1. Скопируем диапазон ячеек из редактора таблиц.
  2. Вставим скопированный фрагмент в простой текстовый редактор, не поддерживающий форматирование (например, стандартный «Блокнот»).
  3. Снова выделим весь текст в «Блокноте» с помощью Ctrl + A и скопируем его комбинацией Ctrl + C.
  4. Вставим данные в форму 1С. В этом случае в буфере останется исключительно простой текстовый формат, ячейки разделятся знаками табуляции, а строки — переводами строк, что исключит ошибку смещения колонок.

Способ 3. Очистка кэша контекста сеансов на сервере

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

  1. Остановим службу «Агент сервера 1С:Предприятия».
  2. Перейдем в каталог данных сервера srvinfo (по умолчанию расположен в системном профиле пользователя службы 1С).
  3. Найдем каталог нужного кластера и очистим внутри него подкаталог snccntx, в котором хранятся сериализованные контексты пользовательских сеансов.
  4. Запустим службу сервера 1С:Предприятия.

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

Если в конфигурации требуется функционал интерфейса «Такси» (например, режим независимых неперекрываемых окон, появившийся в 8.3.8), делать даунгрейд до версий ветки 8.3.6 нецелесообразно. Ошибки обработки сложных форматов буфера обмена были устранены фирмой «1С» в релизах ветки 8.3.9 и 8.3.10. Переход на более актуальный релиз платформы полностью устраняет сбой разбора разметки ячеек из Excel и Calc без необходимости ручной предобработки таблиц.

Способ 5. Переход на прямое чтение файлов в коде 1С

Рассмотрим программное решение, позволяющее полностью отказаться от использования буфера обмена операционной системы. Если в конфигурации дорабатывается механизм загрузки, заменим вставку через буфер на загрузку файла с диска с помощью встроенного метода Прочитать объекта ТабличныйДокумент:


&НаКлиенте
Процедура ЗагрузитьФайлНаКлиенте(ПутьКФайлу)
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ПутьКФайлу);
    ОбработатьТабличныйДокумент(ТабДок);
КонецПроцедуры

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

← На главную