Ошибка при вызове конструктора чтениетекста

Обновлено: 14.05.2024

Целью данной статьи будет изучение алгоритмов работы с текстовыми файлами, TXT и CSV. Очень часто приходится использовать данные форматы для обмена данными между несколькими базами, в том числе и отличными от 1С.

Чтение текстового файла

В данной конструкции создается неинициализированный объект ЧтениеТекста, а для инициализации используется метод Открыть()

Если файл небольшой можно использовать объект ТекстовыйДокумент (пример чтения )

Текст = Новый ТекстовыйДокумент ;

ПолноеИмяФайла = «D:\1C\Пример.txt» ;
Текст . Прочитать ( ПолноеИмяФайла ) ;

КоличествоСтрок = Текст . КоличествоСтрок ( ) ;
Для Счетчик = 1 по КоличествоСтрок Цикл
ТекСтрока = Текст . ПолучитьСтроку ( Счетчик ) ;
Сообщить ( ТекСтрока ) ;
КонецЦикла ;

Запись текстового файла

Записать текст в документ можно при помощи функции ЗаписатьСтроку() — в данном случае после записанной строки автоматически добавится разделитель строк и следующая запись начнется с новой строки. Если же необходимо добавить в строку дополнительно текст, то можно воспользоваться функцией без переноса строки — Записать().

Запись через «ТекстовыйДокумент»

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

Чтение файла CSV

CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятая (,) или точка с запятой (;). (Википедия)

Такой формат часто используют для выгрузки данных из различных баз отличных от 1С. Ниже представлен алгоритм чтения данного формата на основе обычного чтения текстового файла с анализом строки и разбиением ее на поля.

Для типовых конфигураций для «парсинга» строки возможно использование функции общего назначения РазложитьСтрокуВМассивПодстрок(Текст, «.»), в которой можно задать произвольный разделитель..

Подведем итоги:

Для чтения и записи текстового файла в 1С существуют 3 объекта ЧтениеФайла, ЗаписьФайла, ТекстовыйДокумент.

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

Возможно использовать данные функции для чтения/записи HTML и log файлов.

Для работы с XML (хотя они тоже текстовые) рекомендуется использовать специализированные объекты ЧтениеXML, ЗаписьXML.

Реклама — это когда изо всех сил колотят палкой по днищу пустой кастрюли.

— Джордж Оруэлл

Добрый день. При обмене данными между 1с и битриксом, постоянно вываливается ошибка:

Конфигурация 11 (11.3.4.103), платформа 8.3.10.2505, модуль битрикса 7.0.1.6. От версии модуля битрикса не зависит. 1с клиент-сервер, сервер установлен на debian. В прочем, когда-то он был и на windows эта ошибка тоже присутствовала, но обмен проходил без ошибок 1 раз из 5 примерно. Сейчас же обмен валится постоянно. Может упасть через 5 минут, может через час, но падает в любом случае. В чём проблема может-быть?

(1) Решилась проблема?
С аналогичной столкнулся. На том же сервере резервная копия той же базы месячной давности работает нормально.
Всё проверил перепроверил, идей нет (

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

чтобы узнать - посмотрите как Битрикс отркрывает файл и какие устанавливает ограничения на файл для других процессов(например - LOCK_EX и тд)
но способ обмена данными - писать в файл когда с него считывают - идея плохая, это неправильное архитектурное решение.
посмотрите в сторону очередей в rabbit mq. никакие данные не будуть пропадать(нужен кластер очередей 2-3 сервера) и вы не будете привязаны к какому решению.
если решите перейти с Битрикса на что-то другое не нужно перерабатывать все обмены, только доработать приемник

(4)Битрикс вообще ничего не читает, он лишь отправляет запрос к 1с на инициализацию данных. 1с сама формирует эти файлы и отправляет битриксу, у битрикса к этим файлам нет доступа вообще

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

Нажимаем кнопку обмена в 1с > идёт запрос к сайту на авторизацию>приходит ответ от сайта к 1с, что всё ок и нужно начинать формировать файл для отправки на сайт. 1с запокавала в zip часть данных и отправила сайту, сайт обработал эту часть данных и послал к 1с запрос, чтобы она упокавала и отправила следующую часть и так, пока не пройдёт весь обмен.

Добрый день. При обмене данными между 1с и битриксом, постоянно вываливается ошибка:

: Ошибка при вызове конструктора (ЧтениеТекста)
ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаОтвета, лКодировка);
по причине:
Ошибка совместного доступа к файлу '/home/usr1cv8/tmp/v8_mWVbFi_10c8.tmp'

Конфигурация 11 (11.3.4.103), платформа 8.3.10.2505, модуль битрикса 7.0.1.6. От версии модуля битрикса не зависит. 1с клиент-сервер, сервер установлен на debian. В прочем, когда-то он был и на windows эта ошибка тоже присутствовала, но обмен проходил без ошибок 1 раз из 5 примерно. Сейчас проходит так же, 1 раз и 5. Может упасть через 5 минут, может через час, но падает в любом случае. В чём проблема может-быть?

Сервер 1c запускается от юзера usr1cv8, права на папку /opt/1C ему даны, он владелец, я даже дал ему права на tmp. Поменял umask на 0002. Я уже не знаю куда копать, помогите пожалуйста.

Во время падения обмена с этой ошибкой, в tmp файл этот, который указан в ошибке присутствует, там простой ответ сервера "success"

В последнее время заметил такое. Ребут сервера, делаю обмен - проходит нормально, повторный обмен и последующие уже падают в ошибку.

Не проще уже нанять специалиста, за денежку естественно.

упс Вопрос задан 06 июля 2018

В смысле периодичность обмена слишком малый интервал и стартует новое фоновое когда еще старое не закончило?

На тостере и лансере не я писал=)

Посмотрел я код модуля, там чёт таймаутов не нашёл. Почему же у других всё успевает?

Глянь какая у тебя настройка автообмена

Регламентные операции я тоже вырубил, касательные обмена. Обмен идёт, но в какой-то момент, совершенно рандомно он падает. И падает не на больших данных, а именно на ответах сервера в 1кб и единственной строчкой "success", при чём он может перед падением этот "success" обработать 10 раз, а на 11 упасть

Во время старта обмена, в сеансах 2 сеанса, один от сервера фоновое задание (сам обмен) второй от меня (клиента)

А ты разбирался как этот обмен то устроен?

Эту проблему решить можно но бесплатно вряд ли кто будет ковыряться, так что или тем кто продал в поддержку или нанимайте за денежку.

Да принцип простой. Начало обмена>аторизация на сайте>ответ от сайта>1с начинает выгружать данные и отправлять на сайт>сайт их принял и обработал>посылает 1ске ответ "success">1с переходит к следующему шагу и так по кругу

(18) "Ошибка совместного доступа к файлу была из-за прав на папку /tmp на debian сервере, где 1с. Нужно было не 777 права выставлять, а 1777"

"Сегодня sticky bit используется в основном для каталогов, чтобы защитить в них файлы. В такой каталог может писать ЛЮБОЙ пользователь. Из такой директории пользователь может удалить только те файлы, владельцем которых он является. Примером может служить директория /tmp, в которой запись открыта для всех пользователей, но нежелательно удаление чужих файлов."

У того похоже сторонний процесс папку /tmp чистил не вовремя

(21)+ Хотя если сама 1С и удаляет временный файл раньше времени то не поможет.

Еще глянуть если ли там распаковка zip архива например.

Или если все время тот же самый файл читает то у 1С глюки с не отпусканием файла.

Она эти темпы создаёт постоянно и всегда одинаковые, меняется лишь име временного файла и вот она нормально читает и отпускает их, но на каком-то вдруг падает, причём этот "какой-то" вообще ничем не отличается от пред идущих

Ну значит ошибка в этом "ОбщийМодуль.Б_ОбменССайтомСервер"

Эта хрень она типовая из УТ11 а от битрикса встраивается, вот трясите саппорт битрикса кто писал этот модуль.
Да проблема в 1С - но в модуле который предоставляется для интеграции битриксом, для встраивания в конфу.

Начал мониторить процессы, вопрос, почему на 1 файл 2 процесса, это нормально для 1ски?

(29) Это значит у тебя два фоновых сеанса одновременно обмен ведут.

Проверяй в чем проблема, может две базы 1С или еще что

(29) ут11 любит фоновые операции, а они могут под другим процессом работать.
надо чтобы запускающий фоновую операцию код отпускал файл на время работы фонового.

Вот кусок кода, где падает обмен, что тут необычного?

// Функция - получает информацию от сайта процесс загрузки файла
//
// Параметры:
// ПараметрыОбмена - Настройки узла обмена
// ПолноеИмяФайла - Полное имя к выгружаемому файлу
// Соединение - Http соединение к сайту
// ПараметрыЗапроса - Параметры http запроса
// Заголовки - Заголовки http запроса
// Возвращаемое значение:
// Ответ сайта
Функция ПолучитьРезультатОтправкиФайлаНаСервер(ПараметрыОбмена,ПолноеИмяФайла, Соединение, ПараметрыЗапроса="", Заголовки="")

ОтветСервера = Неопределено;
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();

СообщитьПодробно(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыОбмена, Истина, Истина);
КонецПопытки;

ФайлОтвета = Новый Файл(ИмяФайлаОтвета);

Если ФайлОтвета.Существует() Тогда

ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаОтвета, лКодировка);
ТекстОтвета = ЧтениеТекста.Прочитать();

Если НЕ ПустаяСтрока(ТекстОтвета) Тогда
ОтветСервера = ТекстОтвета;
Иначе
СообщитьПодробно("Получение данных с сервера: Получен пустой ответ сервера.", ПараметрыОбмена, Истина, Истина);

СообщитьПодробно("Отправка файла на сервер: Ответ сервера не получен.", ПараметрыОбмена, Истина, Истина);

Попытка
УдалитьФайлы(КаталогВременныхФайлов(), ИмяФайлаОтвета);
Исключение
КонецПопытки;

Использование COMOбъектов в 1С это прошлый век, сейчас уже ни кто так не пишет. Раньше с его помощью реализовали печать документов. Они выгружались в Open\Libre Office и от туда уже печатались.

Появиться такая ошибка может после

1 Обновления платформы

2 Переустановки ОС и 1С

3 Обновление конфигурации

4 Проблем с офисными пакетами

Это самые распространенные.

Три способа избавиться от ошибки «Ошибка при вызове конструктора…»

И так после каких либо манипуляций с 1С у вас стала появляться ошибка.

Первый способ

Самое простое это переустановить офисные пакеты Open\Libre, так же как вариант если у вас стоял Open поставить Libre и на оборот. Это нужно для того чтобы обновить специальный компонент.

Второй способ

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

regsvr32 «C:\Program Files (x86)\1cv8\8.3.16.18.14\comcntr.dll»

Кстати данную манипуляцию нужно проводить на сервере.

Третий способ

Установить 32 битную версию клиента 1С, можно даже поверх х64. В итоге у вас появиться два ярлычка для запуска, один для х32 второй х64.

Ошибка при вызове конструктора (COMOбъект)

Версию можно указать и в ярлыке запуска 1С.

Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.

Так же проблема может быть непосредственно в самом коде.

Ошибка (COMOбъект) : 1 комментарий

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

Как правило, ошибка возникает при фоновом обмене данными между базами 1С или запуске синхронизации вручную. Что делать при появлении этой ошибки и куда смотреть.

Текст: «Ошибка при вызове конструктора (COMObject) по причине: -2147221005(0x800401F3): Недопустимая строка с указанием класса».

Решение — в регистрации библиотеки comcntr.dll из каталога программы для корректного вызова COMConnector.

Подготовительные действия

  • отключите службу Агента сервера 1С:Предприятия и программы, возможно использующие регистрируемую DLL;
  • если ранее использовалась библиотека устаревшей версии, удалите регистрацию comcntr.dll, запустив команду вызова regsvr32 с ключом /u.

Подходы к решению

В командной строке с правами Администратора выполните команду:

2. Переустановка платформы с внесением исправлений

  • запускаем консоль «Службы компонентов»;
  • добавляем новый элемент, переходим «Компьютеры» — «Мой компьютер» — из списка выбираем «Приложения COM+»;
  • выбираем «Создать» — «Приложение»;
  • в Мастере установки выбираем второй вариант «Создать новое приложение», в поле «Введите имя нового приложения:» вводим «V83COMConnector», «Способ активации» устанавливаем «Серверное приложение», нажимаем «Далее»;
  • выбираем учетную запись под которой запускается приложение, по умолчанию — «Текущий (вошедший в систему) пользователь»;
  • на этапах «Добавление ролей приложения» и «Добавление пользователей для ролей» нажимаем «Далее», а затем «Готово».

В ветке только что созданного приложения переходим в подветку «Компоненты» и создаем компонент:

  • в контекстном меню выбираем «Создать» — «Компонент»;
  • кликаем по первому варианту «Установка новых компонентов»;
  • в открывшемся диалоге выбираем необходимый файл comcntr.dll и нажимаем «Открыть»;
  • нажимаем «Далее» и «Готово».

Обратите внимание: после установки измените свойства объекта. Для этого переходим к ветке V83COMConnector:

  • открываем свойства созданного компонента, переходим в ветку V83COMConnector — «Свойства»;
  • на вкладке «Безопасность», в «Авторизация» снимаем флаг «Принудительная проверка доступа для приложений»;
  • в «Политика программных ограничений» устанавливаем флаг «Применить политику программных ограничений» и выбираем «Уровень ограничений:» — «Неограниченный»;
  • нажимаем «Применить» — «ОК».

Полная версия со снимками экранов — в статье на Дзен-канале.

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