Запуск процедуры из 1С в Delphi
Здравствуйте!
Столкнулся с проблемой. Перенесли 1С: Больничная аптека на SQL сервер и перестала работать процедура, вызываемая через COM соединение. Вылетает ошибка: Method <имя процедуры> not supported by automation object. Соединение через v83.COMConnector. Может кто-нибудь сталкивался с такой проблемой?
Столкнулся с проблемой. Перенесли 1С: Больничная аптека на SQL сервер и перестала работать процедура, вызываемая через COM соединение. Вылетает ошибка: Method <имя процедуры> not supported by automation object. Соединение через v83.COMConnector. Может кто-нибудь сталкивался с такой проблемой?
По теме из базы знаний
- Практическое применение механизма WEB-сервисов в системе 1С:Предприятие
- Пишем игру 21 (очко). Пример использования 1С и ActiveX
- Внешняя компонента для копирования изображения в буфер обмена
- Пишем внешнюю компоненту для 1С, NativeAPI на С++, для ОС Linux, с использованием Qt Creator
- Описание формата контейнера 1С (CF, EPF, ERF, CFE) с помощью БНФ. Предлагается внешняя компонента на С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вы перенесли базу на другой компьютер. Компьютер, исполняющий серверный код 1С, сменился.
Проверьте:
а) Какая операционная система на сервере? OLE существует только в Windows.
б) На сервере как установлена платформа? Работает ли там OLE с тем объектом?
в) Как написана процедура, она вообще на сервере будет работать?
Проверьте:
а) Какая операционная система на сервере? OLE существует только в Windows.
б) На сервере как установлена платформа? Работает ли там OLE с тем объектом?
в) Как написана процедура, она вообще на сервере будет работать?
(3)Вот код
&НаСервере
Процедура CreateDocToServer(Знач Ответственный, Знач Подразделение, Знач КодИзРеестра, Знач Колво) Экспорт
КодОстатка = Новый Запрос;
КодОстатка.Текст = "ВЫБРАТЬ Список.ЭлементКАТ.Код КАК КодИзРеестра,
| Список.Код, Список.Наименование,
| ОстаткиТоваров.Количество
| ИЗ Справочник.Номенклатура КАК Список
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ОстаткиТоваров
| ПО ОстаткиТоваров.Номенклатура = Список.Ссылка
| ГДЕ Список.ЭлементКАТ.Код =&КодИзРеестра";
КодОстатка.УстановитьПараметр("КодИзРеестра",КодИзРеестра);
КодОстатка = КодОстатка.Выполнить();
РезультатЗапроса = КодОстатка.Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
КодИзНоменклатуры = РезультатЗапроса.Код;
КонецЦикла;
КП = "000000000"+Подразделение;
КодПодразделения = Новый Запрос;
КодПодразделения.Текст = "ВЫБРАТЬ Код, Наименование
|ИЗ Справочник.ПодразделенияОрганизаций
|ГДЕ Код = &КП";
КодПодразделения.УстановитьПараметр("КП",КП);
КодПодразделения = КодПодразделения.Выполнить();
РезультатЗапроса = КодПодразделения.Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
Подразделение = РезультатЗапроса.Наименование;
КонецЦикла;
Поступление = Документы.ВнутреннееПотреблениеТоваров.СоздатьДокумент();
Поступление.Дата = ТекущаяДата();
Поступление.Организация = Справочники.Организации.НайтиПоНаименованию("ФГБУ ДОС Пионерск Минздрава России");
Поступление.ПодразделениеОрганизации = Подразделение;
Поступление.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Расходы");
Поступление.Склад = Справочники.Склады.НайтиПоНаименованию("Склад медикаментов");
Поступление.Ответственный = Справочники.Пользователи.НайтиПоНаименованию(Ответственный);
НоваяСтрока = Поступление.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(КодИзНоменклатуры);
НоваяСтрока.КоличествоВЕдиницахИзмерения = CalcOst(КодИзРеестра,Колво);
Поступление.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
&НаСервере
Функция CalcOst(Знач КодИзРеестра,Знач КолВо) Экспорт
КоличествоОстатка = Новый Запрос;
КоличествоОстатка.Текст = "ВЫБРАТЬ
| Список.ЭлементКАТ.Код КАК КодИзРеестра,
| Список.Код,
| Список.Наименование,
| Список.ЭлементКАТ.Коэффициент01,
| Список.ЭлементКАТ.МассаУпаковки1,
| Список.ЭлементКАТ.ОбъемУпаковки1,
| Список.ЭлементКАТ.Коэффициент12,
| Список.ЭлементКАТ.Коэффициент23,
| ОстаткиТоваров.Количество КАК Кол_во
| ИЗ Справочник.Номенклатура КАК Список
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ОстаткиТоваров
| ПО ОстаткиТоваров.Номенклатура = Список.Ссылка
| ГДЕ Список.ЭлементКАТ.Код =&КодИзРеестра";
КоличествоОстатка.УстановитьПараметр("КодИзРеестра",КодИзРеестра);
КоличествоОстатка = КоличествоОстатка.Выполнить();
РезультатЗапроса = КоличествоОстатка.Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
Коэффициент01 = РезультатЗапроса.ЭлементКАТКоэффициент01;
МассаУпаковки1 = РезультатЗапроса.ЭлементКАТМассаУпаковки1;
ОбъемУпаковки1 = РезультатЗапроса.ЭлементКАТОбъемУпаковки1;
Коэффициент12 = РезультатЗапроса.ЭлементКАТКоэффициент12;
Коэффициент23 = РезультатЗапроса.ЭлементКАТКоэффициент23;
КонецЦикла;
Если Коэффициент01 >0 Тогда
Res = КолВо/(Коэффициент01*Коэффициент12);
КонецЕсли;
Если МассаУпаковки1 >0 Тогда
Res = КолВо/(МассаУпаковки1*Коэффициент12);
КонецЕсли;
Если ОбъемУпаковки1 >0 Тогда
Если Коэффициент23 > 0 Тогда
Res = КолВо/(ОбъемУпаковки1*Коэффициент12*Коэффициент23);
Иначе
Res = КолВо/(ОбъемУпаковки1*Коэффициент12);
КонецЕсли;
КонецЕсли;
Если Коэффициент12 = null Тогда
Res = КолВо/Коэффициент01;
КонецЕсли;
Возврат Res
КонецФункции
Показать
(7)Запуск идет из Delphi
Meta_ole:=s1Connect.spLib_OLE.CreateDocToServer(Trim(ls1s_user),pdr,Trim(sKod),StrToFloat(sKol));
А вот непосредственно сам коннект
ls1s_connector:='v83.COMConnector';
COMStr:='Srvr='+ls1s_srv+';Ref='+ls1s_db+';Usr='+ls1s_user+';Pwd='+ls1s_pass;
s1Connect:=UnAssigned;
s1Connect:=ConnectTo1C8_COM(ls1s_connector, COMStr);
Meta_ole:=s1Connect.spLib_OLE.CreateDocToServer(Trim(ls1s_user),pdr,Trim(sKod),StrToFloat(sKol));
А вот непосредственно сам коннект
ls1s_connector:='v83.COMConnector';
COMStr:='Srvr='+ls1s_srv+';Ref='+ls1s_db+';Usr='+ls1s_user+';Pwd='+ls1s_pass;
s1Connect:=UnAssigned;
s1Connect:=ConnectTo1C8_COM(ls1s_connector, COMStr);
(8)
Вот тут попробуйте, сначала стандартное решение, потом и то, что автор там накопал...
https://infostart.ru/public/400951/
Вот тут попробуйте, сначала стандартное решение, потом и то, что автор там накопал...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот