Com sun star servicemanager 1с ошибка
Добрый день, дорогие друзья, я в своей работе часто сталкивался с рядом ошибок связанных с com объектами. Когда я только начинал работать в сфере ИТ, то подобные ошибки о которых пойдет речь ниже, вызывали у меня недоумение и я отправлял пользователей к программистам, но потом шло время и опыт мой рос, такие проблемы начал решать самостоятельно, теперь хочу поделиться решениями с вами.
Рассмотрим первый пример - ошибка связана с внешней обработкой EDI
Данная ошибка устраняется очень просто, вам нужно зарегистрировать excon.dll. Для этого открываем cmd от имени администратора и прописываем следующие команды
Решается не сложно, но для решения есть несколько методов и в разных ситуациях спасает тот или иной метод решения. Ниже рассмотрим примеры данной ошибки и решения.
Первое что нужно попробовать сделать на машине пользователя - это зарегистрировать comcntr.dll
Для этого открываем cmd от имени администратора и прописываем следующие команды
regsvr32 "C:\Program Files (x86)\1cv8\ 8.3.15.1778 \bin\comcntr.dll" - Все что выделено жирным шрифтом, в вашем случае может отличаться
cd c:\Windows\SysWOW64 regsvr32 "C:\Program Files\1cv8\ 8.3.15.1778 \bin\comcntr.dll" - Все что выделено жирным шрифтом, в вашем случае может отличаться
Если данное решение не помогает, то нужно проверить на сервере 1С возникает такая же ошибка или нет, если возникает при тех же действиях, то сделать следующие действия в cmd от имени администратора
"C:\Program Files (x86)\1cv8\ 8.3.15.1778 \bin\1cv8.exe" /regserver - Все что выделено жирным шрифтом, в вашем случае может отличаться
"C:\Program Files\1cv8\ 8.3.15.1778 \bin\1cv8.exe" /regserver " - Все что выделено жирным шрифтом, в вашем случае может отличаться
Можно создать данное com соединение с помощью "Службы Компонентов Windows" , об этом рассказывать не буду в данной статье, если вам нужна информация, пишите комменты, я свяжусь с вами и все расскажу. Если будет много пожеланий, сделаю отдельную статью на эту тему.
Третья ошибка связана с компонентой MSScript
Данные ошибки возникают обычно при печати из 1С. Две разные базы часто бывают связаны между собой средствами различных компонент. В моем случае это торговля и сертификация. И при печати комплектов документов иногда возникает данная ошибка.
Решение не сложное и данное решение можно автоматизировать если проблема массовая (массовая может быть из-за обновления релиза 1С)
Давайте начнем по порядку и зайдем в "Службы Компонентов Windows" от имени администратора на пользовательской машине где возникает данная ошибка и найдем там " Приложения COM+ "
Теперь нужно нажать правой клавишей мыши по " Приложения COM+ " и выбрать " Создать-->Приложение "
Откроется мастер установки в котором нужно проделать все что показано на скринах ниже
У вас в основном окне появится только что созданное приложение и его нужно настроить, для этого щелкаем по нему правой кнопкой мыши и выбираем " Свойства " и переходим во вкладку " Безопасность " в которой настраиваем все один в один как на скрине ниже
Теперь необходимо для него создать компоненту и запустить ее в работу, снова предлагаю наглядно посмотреть на скрины ниже.
Осталось только запустить компоненту и ошибку в 1С вы устранили. Для запуска вам нужно перейти в " Приложения COM+ ", в центральном окне найти Msscript и нажать правой кнопкой мыши, затем нажать " Пуск " и ваша компонента начнет работать.
Теперь пару слов об автоматизации данного процесса т.к. бывают массовые случаи когда слетает данная компонента. Наша задача сделать msi файл и затем его разлить с помощью групповых политик или с помощью kaspersky security center (если конечно вы им пользуетесь - в моем случае удобнее было воспользоваться именно касперским)
Для создания файла msi необходимо выполнить все рекомендации со скринов ниже
Первое что нужно сделать, это запустить командную строку от имени администратора.
В командной строке Windows набираете cmd , в писке выбора появится программа с таким названием, устанавливаете курсор на эту программу и выбираете из контекстного меню «Запуск под администратором» (см. картинку ниже).
Затем ввести команду (можно двумя способами):
1. regsvr32 "C:\Program Files (x86)\1cv8[ версия платформы ]\bin\comcntr.dll"
2. C:\Program Files (x86)\1cv8[ версия платформы ]\bin>regsvr32 comcntr.dll
Прежде чем ввести эти команды нужно переместиться по каталогам. Допустим, при запуске командной строки появляется совсем другой каталог, пример можно увидеть на картинке ниже.
Для смены каталога нужно написать cd , после которого установить пробел, а затем указать тот путь, который нам нужен, например C :\ Program Files ( x 86)\1 cv 8[версия платформы]\ bin , затем после указания пути к каталогу нажимаете Enter . Смотрите пример смены каталога на картинке ниже.
Вот теперь рядом с каталогом можно ввести regsvr 32 comcntr . dll , нажать Enter и зарегистрировать компоненту (смотрите пример на картинке ниже).
Если компоненту не удалось зарегистрировать, проверьте как вы запустили командную строку, возможно, что забыли запустить от имени администратора. Если все в порядке, то нужно отключить службу агента сервера 1С:Предприятия и все программы, использующие эту DLL.
Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 1С-ник. И сколько бы обработок такого плана не появлялось, эта остается классикой. Даже претензии можно предъявлять если вы в ней что-то не понимаете к самой 1С. Хотя какие претензии, исходный код открыть - изучай, не хочу.
Еще чем мне нравится эта обработка - тем что вы читаете данные из внешнего источника, показываете их с помощью объекта табличное поле и только затем выбираете алгоритм загрузки в 1С. При чем загрузка у Вас происходит в среде 1С без привлечения дополнительных компонентов. Без всяких выпадов в неизвестный объект OLE, полей которые не прочитались в обработке загрузки. Если вы видете данные в табличном поле, то они и будут грузиться по вашему алгоритму.
Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format и между прочим ГОСТ Р ИСО/МЭК 26300-2010). Как говаривал мой начальник - есть чем себя занять. Из всех внешних загрузок, которые сейчас есть к сожалению самыми распостраненными являются OLE(Com+) технологии. Возможно что-то еще появиться, но пока примемся за них.
Залезаем в код и видим несколько однотипных функуций
Функция мПрочитатьТабличныйДокументИзExcel ( ТабличныйДокумент , ИмяФайла , НомерЛистаExcel = 1 ) Экспорт
Функция мПрочитатьТабличныйДокументИзТекста ( ТабличныйДокумент , ИмяФайла , НомерЛистаExcel = 1 ) Экспорт
Пора добавить свою:
// Функция считывает в табличный документ данные из файла в формате ODF Calc(ods)
//
// Параметры:
// ТабличныйДокумент - ТабличныйДокумент, в который необходимо прочитать данные
// ИмяФайла - имя файла в формате ODF, из которого необходимо прочитать данные
// НомерЛистаCalc - номер листа книги Calc, из которого необходимо прочитать данные
//
// Возвращаемое значение:
// Истина, если файл прочитан, Ложь - иначе
//
Функция мПрочитатьТабличныйДокументИзCalc ( ТабличныйДокумент , ИмяФайла , НомерЛистаCalc = 1 ) Экспорт
ВыбФайл = Новый Файл ( ИмяФайла );
Если НЕ ВыбФайл . Существует () Тогда
Сообщить ( "Файл не существует!" );
Возврат Ложь;
КонецЕсли;
Попытка
ServiceManager = Новый COMОбъект ( "com.sun.star.ServiceManager" );
Desktop = ServiceManager . CreateInstance ( "com.sun.star.frame.Desktop" );
Desktop . getCurrentFrame (). getContainerWindow (). setVisible (Ложь); //невидимым основное окно.
//установим параметры - не показывать таблицу Calc
Параметры = Новый COMSafeArray ( "VT_DISPATCH" , 1 );
Свойство = ServiceManager . Bridge_GetStruct ( "com.sun.star.beans.PropertyValue" );
Свойство . Name = "Hidden" ;
Свойство . Value = true;
Параметры . SetValue ( 0 , Свойство );
Document = Desktop . LoadComponentFromURL ( "file:///" + ИмяФайла , "_blank" , 0 , Параметры );
Состояние ( "Обработка файла Office Calc . " );
Листы = Document . getSheets ();
Лист = Листы . getByIndex ( НомерЛистаCalc - 1 );
Исключение
Сообщить ( "Ошибка загрузки данных. Возможно неверно указан номер листа книги Calc." );
Возврат ложь;
КонецПопытки;
//Определение максимум ячейки с данными.
НульЯчейка = Лист . GetCellbyPosition ( 0 , 0 );
НульКурсор = Лист . createCursorByRange ( НульЯчейка );
НульКурсор . GotoEndOfUsedArea ( 1 );
НульАдрес = НульКурсор . RangeAddress ;
ПослСтрока = НульАдрес . EndRow ;
ПослКолонка = НульАдрес . EndColumn ;
Для Row = 1 По ПослСтрока + 1 Цикл
Если Лист . getCellByPosition ( Column - 1 , Row - 1 ). getType () = 0 Или Лист . getCellByPosition ( Column - 1 , Row - 1 ). getType () = 1 Тогда
ТабличныйДокумент . Область ( "R" + Формат ( Row , "ЧГ color: red;">) + "C" + Формат ( Column , "ЧГ color: red;">)). Текст = Лист . getCellByPosition ( Column - 1 , Row - 1 ). value ;
ИначеЕсли Лист . getCellByPosition ( Column - 1 , Row - 1 ). getType () = 2 Тогда
ТабличныйДокумент . Область ( "R" + Формат ( Row , "ЧГ color: red;">) + "C" + Формат ( Column , "ЧГ color: red;">)). Текст = Лист . getCellByPosition ( Column - 1 , Row - 1 ). string ;
//ServiceManager.quit();
Document . Dispose ();
Document = 0 ;
Параметры = 0 ;
Desktop = 0 ;
ServiceManager = 0 ;
И добавим в форму выбора файла ods по тексту.
ДиалогВыбораФайла . Фильтр = "Табличный документ (*.mxl)|*.mxl|Лист Calc (*.ods)|*.ods|Лист Excel (*.xls)|*.xls|Текстовый документ (*.txt)|*.txt|dBase III (*.dbf)|*.dbf|" ;
И выбор функции для ods
ИначеЕсли нРег ( ФайлНаДиске . Расширение ) = ".ods" Тогда
мПрочитатьТабличныйДокументИзCalc ( ТабличныйДокумент , ДиалогВыбораФайла . ПолноеИмяФайла );
Читайте также: