Ошибка при вызове конструктора чтениеzipфайла некорректный формат файла

Обновлено: 14.05.2024

Использование 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С" для клиент серверных баз, скачивает с сайта ИТС нужное обновление, бекапит базу и обновляет.
На что-то новое не претендует, как рабочая заготовка для собственных "обновляторов" подойдет.
В текущем виде все работает. Надо только занести свои переменные.

: Ошибка при вызове конструктора (ЧтениеZipФайла)
ФайлZip = Новый ЧтениеZipФайла(ФайлСписокОбновленийZIP);
по причине:
Некорректный формат файла: . \1Cupdate\v8upd11.zip

(3) Seregio22, щас попробую потестить без паролей и с заблоченым сервером обновлений.
так то пишет что zip распокавать не выходит т.к. не скачался.

(4)
дописал строки ниже так:
//НЕ СКАЧИВАЕТСЯ. ЭТО АЛЬТЕРНАТИВА
СерверОбновлений = Новый HTTPСоединение("downloads.1c.ru");
ЗапросКСерверуОбновлений = Новый HTTPЗапрос("ipp/ITSREPV/V8Update/Configs/"+мТипКонфигурации+"/"+мВерсия ­Релиза+"/"+мВерсияПлатформы+"/v8upd11.zip");
СерверОбновлений.Получить(ЗапросКСерверуОбновлений,ФайлСписокОбновленийZIP);

вроде есть контакт :)

(5) Seregio22, спс, тоже отловил . в OneScript и с "/tmplts" работает, видать просто игнорирует.
а в 1с хоть в отладчике и игнорирует (видно сервер соединения только "downloads.1c.ru") ,а отрабатывает как будто с этим излишком.

СерверОбновлений = Новый HTTPСоединение("downloads.1c.ru",,мИтсЛогин,мИтсПароль,);
//было СерверОбновлений = Новый HTTPСоединение("downloads.1c.ru/tmplts",,мИтсЛогин,мИтсПароль,);

в тексте сейчас исправлю, благодарю.

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

Объединил текст из данной публикации со своим. Из основных отличий:
1. Загрузка списка обновлений 1 раз для семейства
2. Обновление через несколько релизов
3. Преимущественное обновление на уже скачанные релизы
4. Ну и по мелочи
Получилось вот что:

PS Если автор не против могу выложить отдельной темой

Объединил текст из данной публикации со своим. Из основных отличий:
1. Загрузка списка обновлений 1 раз для семейства
2. Обновление через несколько релизов
3. Преимущественное обновление на уже скачанные релизы
4. Ну и по мелочи
Получилось вот что:

PS Если автор не против могу выложить отдельной темой

1. гуд. но думаю пару кбайт погоды не сделают.
2. обновление идет на максимально возможный релиз в пределах одного скачка.
далее еще не посмотрел как у вас реализовано. следущей накаткой обновлений до "победного" или все таки с запуском обработчиков в режиме "предприятия"?
3. Аналогично "//качаем новую версию, если уже не скачено"

PS ни когда не против, т.к.
а) эта публикация и так копия батника, только на другом языке.
б) если бы был против, ничего бы не смог с этим поделать. "Мне остается только стонать от бессилия или отравиться газами через выхлопную трубу!" © Лжец Лжец.



Даже не знаю, насколько это актуально и востребовано.

Но, на всякий случай, для потомков.

Итак, внешний вид обработки:


В каталоге с внешней обработкой лежит файл картинки 2.jpg размер 763 кб. (можете заменить на свой)

Нужно его, например, добавить в прайс-лист.

4 варианта - решения данного вопроса.

  • 1 Вариант - штатное сохранение макета табличного документа в xls 192 кб.
  • 2 Вариант - штатное сохранение макета табличного документа в xlsx 173 кб.
  • 3 Вариант - штатный способ, но с хитрой подменой 27 кб.
    (при проведении лабораторных испытаний выяснилось, что файл формата *jpg 1С при сохранении в формат EXCEL для чего-то переконвертирует в формат png - неплохо, при таком подходе страдает качество картинки).
  • И вот вчера вечером в голову пришел 4 вариант. пока это тайна (для вас бесплатно).
    Для работы 4 варианта на данном этапе необходим установленный Microsoft Office Excel.

Интересно было бы услышать ваши предложения и комментарии (как еще лучше получить более сжатый файл).

На картинке показан результат от 192 кб (штатный способ) до 23 кб (можно и меньше, но уже начинает страдать качество)


Можно сделать экспортной функцией и сжимать файлы перед печатью;

Можно сжимать файлы (внешние или из хранилища) и сохранять отдельно;

Готовить например картинки по одному формату (размер, разрешение, объем);

и многое-многое другое.

Будут вопросы, пишите - всегда Ваш Tatitutu (c)

В архиве NOSIZE.zip - папка ПРИМЕР, в ней УмнаяКартинка.epf (сама обработка) и файл картинки для примера.

Запустите обработку: по очереди 4 варианта - оцените полученный результат.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Готовые переносы данных

Алкогольная декларация

54-ФЗ

Инструментарий разработчика

Маркетплейсы и 1С

Траектория обучения 1С-разработчика

Управление проектом на Инфостарте

Подсказка про Вариант3 (для тех кто не хочет лишний раз качать )

суть идеи ( может баян или велосипед ) можно меня ткнуть носом (правда это хлопотно)

При выводе на печать картинки есть строго заданный макет печатной форму и объекта картинка
пусть наша картинка будет размером 5 на 4 см.
Картинки могут храниться как на внешнем носители так и базе (хранилище) - но не всегда картинки "хорошего" размера
(был случай клиент купил новый фотоаппарат и добавлял в базу картинки весом около 20 мб - потом спрашивал что у меня за тормоза - смешной)
Платформа 1С 8 очень не плохо по сравнению с 7.7 версией научилась автоматически при сохранении сжимать картинки (зависит от формата EXCEL)
но все же иногда хочеться побольше да посильнее "сжать" выходной файл.
Для этого нам понадобиться дополнительный макет с объектом картинка - но меньшего размера например 2,5 на 2 см (-50%)
Далее
- создаем Табличную форму с одной маленькой картинкой
- сохраняем файл
- извлекаем нашу картинку
- подставляем ее вместо ПЕРВОЙ изначальной картинки в нужный например ПРАЙС- ЛИСТ (вместо файл 20 мб получить 2 мб - я думаю это очень не плохо)

Продолжение следуют. (про Вариант4 )

Столько народу спрашивало, спрашивало - все времени не было выложить. Выложил и не кому не нужно )))
Ну ничего не меняется. Нужно было назвать "Неуловимая обработка" - Почему неуловимая ? - да никому потому что не нужна :)

Выгружаем Файл (во вложении) из 1С Бухгалерия как через АПИ, так и штатными средствами 1С.
1С Бухгалтерия типовая, версия Бухгалтерия предприятия, редакция 3.0 (3.0.96.35)
Если файл выгружаем через АПИ
SendTask.AddDocumentFromFile("UniversalTransferDocument", "СЧФДОП", "utd820_05_01_01",ПутькФайлуXML)

Отсюда вопрос: Что именно не так в файле, почему все сведения через интрефес диадок парсятся но все допсведения помечены красненьким крестом?
Какая минимальная версия 1С БУхгалтерия совместима с текущим АПИ Диадок?

The text was updated successfully, but these errors were encountered:

AlexDevToDeath commented Sep 20, 2021 •

Добрый день

В файле неправильный контент:
Согласно формату в ИдФайл должны быть указаны идентификаторы участников ЭДО (см Organization.FnsParticipantId и Counteragent.FnsParticipantId), а не ИНН_КПП
Поле СвОЭДОтпр должно присутствовать

Про версию конфигурации не сможем подсказать.

Ответ немного странен и не полон, прошу прощения.

GilimkhanovDenis commented Sep 20, 2021

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

Если речь про красные крестики, то это кнопка для удаления строки. О каких ошибках на скриншоте речь?

Так задаётся ящик в который будет отправлен документ. Контент документа будет ровно тот, который загружаете методом
SendTask.AddDocumentFromFile("UniversalTransferDocument", "СЧФДОП", "utd820_05_01_01",ПутькФайлуXML)

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

Что касается "раньше отправлялось" - вероятно, раньше использовался PackageSendTask , а не PackageSendTask2. В нём метод с аналогичным названием сначала разбирал контент документа в объектную модель, а потом перегенерировал. Т.е. отправлялся не тот же контент, который был загружен

AlexDevToDeath commented Sep 20, 2021

Так задаётся ящик в который будет отправлен документ. Контент документа будет ровно тот, который загружаете методом
SendTask.AddDocumentFromFile("UniversalTransferDocument", "СЧФДОП", "utd820_05_01_01",ПутькФайлуXML)

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

Что касается "раньше отправлялось" - вероятно, раньше использовался PackageSendTask , а не PackageSendTask2. В нём метод с аналогичным названием сначала разбирал контент документа в объектную модель, а потом перегенерировал. Т.е. отправлялся не тот же контент, который был загружен

Нет, данный программный код не менялся последние два квартала. Использовали сразу PackageSendTask2. Более того, если я сейчас (только что проверил) пихаю в него хмл, сделанную до 01.07, то документ уходит и диадок принимает.

Особенности работы с ZIP- объектами

Платформа 1С:Предприятие предоставляет возможности работы с ZIP архивами. Для этого в системе существуют объекты Запись ZIP Файла , ответственный за запись, и Чтение ZIP Файла , соответственно ответственный за чтение архивов.

Создание ZIP- архивов

Для того чтобы записать файлы в ZIP -архив необходимо выполнить несколько простых действий:

  • Создать архив с необходимыми параметрами, в который будут помещаться файлы.
  • Поместить в архив необходимые файлы.
  • Записать архив.

Рассмотрим эти действия подробнее.

Создание объекта Запись ZIP Файла можно осуществить двумя путями - создать инициализированный объект или создав неинициализированный объект вызвать у него метод Открыть . В обоих случаях состав параметров является одинаковым. В самом простом случае требуется указать только имя файла, куда будет записан архив.

Для создания нового архива требуется указать:

  1. Имя файла, куда будет записан архив. Этот параметр является обязательным. Если такой файл уже существует на диске, он будет перезаписан!
  2. Пароль доступа к архиву. Если этот параметр пропущен или равен пустой строке, то шифрование производится не будет!
  3. Комментарий к архиву.
  4. Метод сжатия файлов в архиве. На выбор предоставляется возможность скопировать файлы в архив без сжатия или сжать их. По умолчанию файлы сжимаются.
  5. Уровень сжатия файлов в архиве. Можно выбирать между минимальным, оптимальным и максимальным сжатием. По умолчанию используется оптимальное сжатие
  6. Метод шифрования. Можно защитить архив методом шифрования ZIP 2.0 , совместимым с большинством программ, или с помощью шифрования на основе новейшего стандарта AES с различной длиной ключа (128, 192 и 256 бит). Однако следует помнить , что данный метод может быть не совместим с некоторыми программами архивирования, например WinRAR .

После создания объекта необходимо добавить в него необходимые файлы, воспользовавшись методом Добавить . Он принимает на вход 3 параметра:

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

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

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

Особенности упаковки файлов по маске

Остановимся подробнее на особенностях упаковки файлов по маске.

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

Пример 1

Мы хотим создать в архив с помощью нижеследующих команд:

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

Пример 2

Мы хотим создать в архив с помощью нижеследующих команд:

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

Пример 3

Мы хотим создать в архив с помощью нижеследующих команд:

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

Чтение ZIP- архивов

Для того чтобы прочитать файлы из ZIP -архива необходимо выполнить несколько простых действий:

  • Открыть необходимый архив
  • Распаковать файлы

Рассмотрим эти действия подробнее.

Создание объекта Чтение ZIP Файла можно осуществить двумя путями - создать инициализированный объект или создав неинициализированный объект вызвать у него метод Открыть() . В обоих случаях состав параметров является одинаковым. В самом простом случае требуется указать только имя архивного файла, с которым необходимо работать.

Для открытия архива требуется указать:

  1. Имя файла, который требуется открыть. Этот параметр является обязательным.
  2. Пароль доступа к архиву.

После того, как архив успешно открыт, можно получить информацию о файлах, хранящихся внутри него. Для этого у объекта Чтение ZIP Файла предусмотрено свойство Элементы , которое предоставляет доступ к коллекции элементов ZIP файла.

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

После получения информации о элементах их можно распаковать на диск. Это возможно сделать двумя методами:

  • Воспользоваться методом ИзвлечьВсе() .
  • Воспользоваться методом Извлечь() .

Метод ИзвлечьВсе() распаковывает все файлы в архиву по указанному пути. Второй параметр данного метода определяет возможность восстановления исходных путей файлов.

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

После того, как архив нам больше не нужен можно завершить работу с ним вызвав метод Закрыть() .

Дополнительные возможности

Для решения этих проблем можно использовать функции РазделитьФайл() и ОбъединитьФайлы() .

Функция РазделитьФайл() предназначена для разбиения файла на несколько частей указанного размера. Функция ОбъединитьФайлы() объединяет несколько файлов в один.

Более подробную информацию о этих функциях можно получить в документации.

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