Foreversoft.ru

IT Справочник
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка при вызове метода контекста saveas

Word SaveAs 1c

Добрый день!
Подскажите как сохранить шаблон word. У меня ругается на SaveAs

25.06.2019, 11:26

Не работает SaveAs для Word 2013
Уважаемые, подскажите пожалуйста, с чем может быть связана проблема и как решить? При вызове.

Microsoft.Interop.Word.Document.SaveAs. Неверное сохранение
Создаю новый документ .docх и пытаюсь сохранить в папке. Но файл сохраняется в папке на один.

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

Ошибка на saveas
procedure TForm1.MenuItem6Click(Sender: TObject); begin if filework=» then Saveas else .

25.06.2019, 12:42225.06.2019, 14:39 [ТС]325.06.2019, 16:17425.06.2019, 16:18 [ТС]525.06.2019, 16:246

Ermak27, полностью процедуру всю переноси на клиент. А данные для заполнения вытаскивай через функции на сервере несли понадобится.

Перед процедурой у тебя написано &НаСервере, меняй это на &НаКлиенте. Повалятся ошибки, такие как обращение к константе например и начинай их исправлять потихоньку.

25.06.2019, 16:44 [ТС]725.06.2019, 16:52825.06.2019, 17:06 [ТС]9

Модуле формы. Процедура срабатывает при нажатии кнопки

25.06.2019, 18:1610

Попробуй так прописать

25.06.2019, 22:481126.06.2019, 08:40 [ТС]12

dggrom, выдаёт ошибку Поле объекта не обнаружено (Documents)
Докум.Documents.SaveAs(ИмяФайла);

Добавлено через 2 минуты
Yulunga, Я же писал что диск есть, права есть

26.06.2019, 10:0213

Yulunga, у него метод записи самой не видет.

Ermak27, что за конфигурация, какие формы, управляемые или нет ?

26.06.2019, 10:05 [ТС]1426.06.2019, 13:0115

по мне так проблема в этом:
Докум=Word.
Word=Докум;
Докум=Word.

запутал с какой-то целью. поэтому и нет там сейвас, что применяется не к тому к чему надо. чехарда. имена переменных закончились?

26.06.2019, 13:51 [ТС]1626.06.2019, 17:471727.06.2019, 11:22 [ТС]18

Yulunga, как мне мой код поправить?
Мне нужно чтобы два значение выводились на страницу.
Например: Страницу ворда я делю по пополам, получается при печати А5. Т.е есть в ТЗ 4 значение, то вордовский документ должен вывести две страницы, на каждой странице два значения. Приложил картинку.

Код который в самом начале, он так и выводит как надо, но встала задача сохранить эти вордовские документы по индексу, вот тут проблема и появилась у меня. Вчера я переделал немного код
Создал форму с типом ActiveDocument. Написал код который сохраняет мне вордовские документы но значение заносит в каждый лист, а мне нужно два значения на лист.

27.06.2019, 11:22
27.06.2019, 11:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Метод SaveAs в Excel
Всем доброго времени суток.Помогите разобраться с методом SaveAs Есть,ну назовем ее,небольшая.

Lazarus MsWord SaveAs Error
Всем Доброго вечера. Уже 2 дня мучаюсь непонимаю что не так, не получается в lazarus-е сохранить.

Сохранение XL.ActiveWorkBook.SaveAs(buf);
Почему файл не сохраняется в папке в которой находится exe файл? В папке в которой хранится exe.

SaveAS excel-файл на странице
привет всем на странице создаётся таблица с выбранными данными из базы данных, теперь требуется.

Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download

Итак, в чем суть моей статьи?

1. Есть сервер (x64), с установленным Office 2016 (x64), есть 1С 8.3.8 также x64 (имеется в виду сервер 1С). Пользователи подключаются как через тонкого клиента, так и через веб клиент.

2. Есть куча типовых договоров и накладных счет-фактур, оформленных (подготовленных) отделом продаж. Там шрифт, абзац и т.д., естественно, все оформлено в Word,Excel 2016 (x64), естественно, нет желания все это рисовать в 1С, а есть желание засунуть в макеты формата ActiveDocument

Решение банальное, вроде бы 🙂, не буду описывать весь механизм, как это делается, как заполняются данные из 1С в макет ActiveDocument — думаю, вы это знаете прекрасно и без меня. Но в ходе работы выяснилось, что не все так гладко в царстве COM объектов, а именно:

1. Как сохранить файл Word,Excel и передать этот файл клиенту (клиент тонкий и веб)?

2. Какой вариант лучше выбрать: ActiveDocument или ДвоичныеДанные? Хотя для меня это звучит примерно как, что выбрать Водку С Пивом или Пиво С Водкой 🙂. Один фиг, надо забить документы данными из 1С и передать их Клиенту.

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

1. Камень «первый«. Не работает метод SaveAs (как для MSWord, так и для MSExcel). При попытке записать ДвоичныеДанные 1С просто вылетает. Смотрим фрагмент листинга:

Ссылочка //expert.chistov.pro/public/407448/ (выдержка из статьи «Как передать документ Word (ActiveDocument или ДвоичныеДанные) с сервера на клиент»

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

На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто

Я пытался побороть эту ошибку, помещая во временное хранилище двоичные данные, переводя двоичные данные в Неопределено, но победить не удалось. Стоит заметить, что временный файл на сервере 1С-ка со временем сама удаляет корректно.

Возможная ошибка на сервере при вызове метода SaveAs:

Ошибка при вызове метода контекста (SaveAs)
Документ.SaveAs(ИмяВрем);
по причине:
Произошла исключительная ситуация (Microsoft Word): Ошибка команды

Мне поначалу эту ошибку не удалось победить, поэтому я стал использовать ДвоичныеДанные. Позже нашёл решение проблемы: необходимо по пути C:WindowsSysWOW64configsystemprofile и C:WindowsSystem32configsystemprofile создать папки Desktop. Туда никаких файлов никто не пишет, похоже, программе важен факт наличия этой папки. Решение нашёл по ссылке: http://devtrainingforum.v8.1c.ru/forum/thread.jsp? >

Создание папок
C:WindowsSysWOW64configsystemprofileDesktop
C:WindowsSystem32configsystemprofileDesktop
проблему решило. Тема закрыта.

В чем причина? Причина в том, что код

Всегда вызывает экземпляр объекта COM (x32) независимо от того какой разрядности Office установлен. Вы никогда не задумывались, почему в макет ActoveDocument нельзя вставить файлы с расширением docx,xlsx

это можно проверить и через ДиспетчерЗадач, но факт есть факт — макет ActiveDocument вызывает неявно экземпляр COM (x32) и поэтому все дальнейшие манипуляции нужно делать учитывая это особенность.

1. Либо сервер и все ПО должно быть x32. Тогда ничего делать (в смысле переписывать код) не надо

2. Либо переписать код, таким образом

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

Все то же самое, но только для Excel

ну вот «первый» камень я решил, на сервере x64 с Office x64, все работает точно как часы, без ошибок и не надо создавать никаких папок и все прочее.

Камень «второй«. фрагмент кода

есть не очень хорошо, потому как идет запись в папку: «c:Users че там. «, вообще эта папка всегда в черном списке всех фаерволов, антивирусов и прочее, прочее, хотя бы открыть центр управления безопасностью Word или Excel. Глянем и мы туда

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

1. Открываем Конфигуратор и добавляем новый РегистрСведений

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

Объект — Тип Документ.Ссылка

НазваниеМакета — Идентификатор макета

ДокументOffice — ХранилищеЗначений, здесь мы и держим наш готовый файл

2. Дописываем выше написанный код следующим образом:

Что мы делаем, мы записываем готовый файл в регистр сведений и затем удаляем сам временный файл, решаем проблему «Центра безопасности Word,Excel». Осталось только одно показать этот готовый файл Клиенту (клиент тонкий и веб)

3. Камень «третий» — передача файла клиенту, тут просто выложу весь код, что-то взял из БСП, что-то из Демонстрационная конфигурация «Управляемое приложение», что-то из Инета, но в общем вот код (целиком)

1. Во-первых, клиент у нас работает как через Тонкий, так и через Веб режимы, поэтому заранее в свойствах Конфигуратор ставим следующие значения:

Чтобы не было проблем при работе с браузером

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

3. И последнее, подключаем Расширение для работы с Файлами (помним что в режиме Тонкий клиент, это расширение включено всегда). И через код:

передаем файл Клиенту используя механизм НавигационнаяСсылка, получаем следующие сообщения в браузере (Тонкий само собой работает):

ну вот, кажется, все. Надеюсь, это поможет кому-нибудь.

По поводу Word, Excel файлы вставлять в виде ДвоичныхДанные? проблема-то в чем?

1. Мы либо должны вытащить из макета эти ДвоичныеДанные и заполнить данными из 1С и ВНИМАНИЕ снова записать в виде ДвоичныхДанных (Водка С Пивом или Пиво С Водкой)

2. Либо мы должно получить макет ДвоичныеДанные на стороне Клиента и там заполнить его, НО COM объект поддерживается только браузером IE и то с танцами с настройками ActiveX, другие браузеры давно отказались от использования ActiveX

Из 1С (AddIn) при Document.SaveAllContentZip(Путь) ошибка: Произошла исключительная ситуация (DocumentBase.SaveAllContentZip): Ошибка открытия файла #361

Comments

Copy link Quote reply

BPivo commented Sep 16, 2019 •

Из 1С пытаюсь сохранить архив, содержащий все файлы, относящиеся к документу. Возникает ошибка: «Ошибка открытия файла».
Если выполняю Document.SaveAllContent(Путь), то сохраняются файлы в указанный каталог без ошибок.
Почему возникает ошибка?
Работаю в 1С через AddIn

This comment has been minimized.

Copy link Quote reply

BPivo commented Sep 17, 2019

Разобрался.
Оказывается нужно в параметре SaveAllContentZip() прописать полный путь к уже имеющемуся zip-файлу (например, «c:testalldoc.zip»). Т.е. файл alldoc.zip уже должен быть по указанному пути к моменту вызова SaveAllContentZip().

This comment has been minimized.

Copy link Quote reply

azhipaigor commented Sep 20, 2019

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

This comment has been minimized.

Copy link Quote reply

BPivo commented Sep 20, 2019 •

Первоначально я так и делал: в качестве параметра указывал полный путь до файла (как и в методе «SaveAllContent()». Появлялась ошибка открытия файла. Файл zip не хотел создаваться.

Но когда я создал пустой zip файл и указал его в параметре, тогда все прошло успешно.
Upd: использую библиотеку AddIn «Diadoc_5_28_6_502_x64.dll»

This comment has been minimized.

Copy link Quote reply

azhipaigor commented Sep 20, 2019

Проверил на 5.28.6.502 — не воспроизводится. Скорее всего какая-то путаница в путях. Для SaveAllContent нужно указывать путь до директории в которую будут сохранены файлы, имена файлов компонента генерирует сама. Для SaveAllContentZip полный путь до файла.

This comment has been minimized.

Copy link Quote reply

BPivo commented Sep 20, 2019

у Вас 5.28.6.502 32-х или 64-х? Не знаю насчет путаницы. переменную, которую использую в качестве пути, использую одну. К переменной добавляется имя файла. Или не добавляется. Выдает вышеописанную ошибку. 1.5 дня мучился, искал причину. Но как только руками создал zip-файл, все получилось,
Могу Вам выслать пример моей обработки, Вы скажете где ошибка. Только скажите адрес.

This comment has been minimized.

Copy link Quote reply

GilimkhanovDenis commented Sep 23, 2019

Описанное вами поведение было в одном из предыдущих релизов. Проверьте, что у вас не осталась где-то зарегистрированна старая компонента

Разрегистрировать компоненту можно командой командной строки regsvr32.
После её выполнения в реестре не должно остаться зарегистрированных веток реестра с именами объектов компоненты.

This comment has been minimized.

Copy link Quote reply

BPivo commented Sep 23, 2019

Я работаю через AddIn. Вот код 1С:
ИмяФайла = «E:WRKDiadoc_5_28_6_502_x64.dll»;
ЗагрузитьВнешнююКомпоненту(ИмяФайла);
DiadocApi_ = Новый(«AddIn.DiadocInvoiceAPI»);
DiadocApi = DiadocApi_.CreateObject();
.
DiadocConnection = DiadocApi.CreateConnectionByLogin(Логин, Пароль);

This comment has been minimized.

Copy link Quote reply

kulakovskaya commented Sep 26, 2019

Добрый день! Рекомендуем обратиться в техподдержку для перерегистрации компоненты.
Телефон техподдержки: 8 800 500-10-18

This comment has been minimized.

Copy link Quote reply

BPivo commented Sep 26, 2019

В каком смысле «для перерегистрации компоненты»? Получается, что проблема в dll-ке?

This comment has been minimized.

Copy link Quote reply

kulakovskaya commented Sep 26, 2019

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

This comment has been minimized.

Copy link Quote reply

Dilise commented Dec 11, 2019

Боремся с подобной проблемой уже некоторое время.
Проблема скорее всего в том, что винда не поддерживает файлы с полным путем более 260 символов. Если сохранение происходит в папку темп, а она где нибудь закопана не в корне диска, то данная ошибка имеет место быть. Хотелось бы обратиться с просьбой об устранении данной проблемы к разработчикам компоненты. Версия компоненты 5.28.8.523

This comment has been minimized.

Copy link Quote reply

GilimkhanovDenis commented Dec 11, 2019

Windows API поддерживает работу с путями с длиной больше 260 символов (см. https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation)
Компонента использует длинные пути

This comment has been minimized.

Copy link Quote reply

Dilise commented Dec 11, 2019 •

Если я правильно понял, нужно в SaveAllContent передать путь начинающийся с «\?» и длинные пути на будут критовать. Спасибо, попробую завтра.

Ошибка при вызове метода контекста в 1С

Фиксированная стоимость и сроки. Оперативно. Оплата полезных фактических трудозатрат.

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

Исправляем ситуацию

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

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

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

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

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Читать еще:  Код ошибки tcp 10061
Ссылка на основную публикацию
Adblock
detector