Вход | Регистрация
    1  2  3  4   
1С:Предприятие :: 1С:Предприятие 8 общая

Практическое применение NET в 1С8 с помощью Serginio1

Практическое применение NET в 1С8 с помощью Serginio1
Я
   DES
 
27.06.16 - 13:42
Есть https://api-test.fisc.md/Service.svc
Инструкция https://efactura.fisc.md/Help/eFactura_Integration_Guide.pdf
Напрямую с 1с8 не функциклирует.
Но можно скачать код и с скомпилировать C# свою DLL, которую можно задействовать с помощью "обертки" от Serginio1 Использование классов .Net в 1С для новичков
зарегистрировав её на сервере и с помощью нее получить доступ к DLL.

Код DLL (частично)
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetAcceptedInvoices";, ReplyAction="http://tempuri.org/IService/GetAcceptedInvoicesResponse";)]
        ServiceEfactura.ServiceReference.InvoicesResponse GetAcceptedInvoices(ServiceEfactura.ServiceReference.ActorBaseRequest request);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetAcceptedInvoices";, ReplyAction="http://tempuri.org/IService/GetAcceptedInvoicesResponse";)]
        System.Threading.Tasks.Task<ServiceEfactura.ServiceReference.InvoicesResponse> GetAcceptedInvoicesAsync(ServiceEfactura.ServiceReference.ActorBaseRequest request);
        


начинаем в 1с8

    Врап = Новый COMОбъект("NetObjectToIDispatch45");
    //Врап.ЗаменитьConfigFile(ИмяФайлаDLL + ".config");
    ИмяФайлаDLL =  "D:\FilesNetObjectToIDispatch2\" + "ServiceEfactura.dll";
    Сборка = Врап.загрузитьСборку(ИмяФайлаDLL);
    namespace = "ServiceEfactura.ServiceReference.";
    Сборка = Врап.загрузитьСборку(ИмяФайлаDLL);
    типСервера = Сборка.GetType(namespace + "ServiceClient");
    привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    СсылкаHTTPS = "https://api-test.fisc.md/Service.svc target=""_blank"" rel=""nofollow"" class=""extralink"">https://api-test.fisc.md/Service.svc";;
    remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS));
    сервер = Врап.СоздатьОбъект(типСервера,привязка,remoteAddress);  
    UserName1 = сервер.ClientCredentials.UserName;
    UserName1.UserName = "DES";
    UserName1.Password = "MyPass";  
    
    newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString();
    ТипRequest = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoicesRequest");
    ТипЛист = Врап.ПолучитьТип("System.Collections.Generic.List`1");
    ТипInvoiceIndentificator = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoiceIndentificator");
    
    Request = Врап.СоздатьОбъект(ТипRequest);
    ТипЛистОбъект = Врап.ТипКакОбъект(ТипЛист);
    ТипизированныйЛист = ТипЛистОбъект.MakeGenericType(ТипInvoiceIndentificator);
    SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист);
    SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator);
    SeriaAndNumber.Number = "000962811";
    SeriaAndNumber.Seria = "EUG";
    SeriaAndNumbers.Add(SeriaAndNumber);
    
    request.RequestId = newid;
    request.SeriaAndNumbers = SeriaAndNumbers.ToArray();;
//
    _client = ??????????????????????     тут вопрос как ПолучитьКлиента();
//    
    response = _client.GetAcceptedInvoices(request);
    

вопрос как получить _client  ?
   DES
 
101 - 30.06.16 - 11:05
(100) я не против изучать, но забываю уже капитально. Забыл как в 7 отладчик включать уже.
   Serginio1
 
102 - 30.06.16 - 11:11
Запускаешь отладчик отдельно. Устанавливаешь точки останова.
Устанавливаешь в табло переменны
   DES
 
103 - 30.06.16 - 12:27
Если я хочу запускать все это на сервере, где
делать 
wrap = Новый COMОбъект("NetObjectToIDispatch45");
Сборка = wrap.ЗагрузитьСборку(ИмяФайлаСборки);

перем Сборка  потом нигде не используется ?
   Serginio1
 
104 - 30.06.16 - 13:12
Сборка загружается в домен и ты можешь использовать Врап.СоздатьОбъект
   DES
 
105 - 30.06.16 - 13:42
В 1С8.3.8 грузится https://api-efactura.fisc.md/Service.svc?wsdl
а в 1C8.3.7 не грузится
   DES
 
106 - 30.06.16 - 14:35
Пробую через WSDL

Прокси = WSСсылки.eFactura.СоздатьWSПрокси(HTTP, "Service", "BasicHttpBinding_IService");
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(HTTP).Получить("GetTaxpayersInfo");
WSПараметр       = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);

У WSПараметр - есть свой параметр http://prntscr.com/bn02yr , как получить его тип ?
   Serginio1
 
107 - 30.06.16 - 15:00
   DES
 
108 - 30.06.16 - 15:52
(107) Да. Спс. Зачитал. Кое как сварганил запрос по WS-ссылке.
Ругается на логин. Не пойму куда его втулить.
   Serginio1
 
109 - 30.06.16 - 15:57
(108) А 1С поддерживае авторизацию в отличии от Basic?
B и поддерживает протокол TransportWithMessageCredential?
Удачи тебе в изысканиях. Пиши в поддержку 1С.
   DES
 
110 - 30.06.16 - 16:05
(109) ну вроде как
Прокси = WSСсылки.eFactura.СоздатьWSПрокси(HTTP, "Service", "BasicHttpBinding_IService");
Прокси.Пользователь = "DES";
Прокси.Пароль = "MyPass";

должно же...
   Serginio1
 
111 - 30.06.16 - 16:27
Создай отдельную ветку без упоминания .Net Многие пугаются этого слова.
   DES
 
112 - 30.06.16 - 16:35
(111) гы...
   DES
 
113 - 30.06.16 - 22:01
НЕ взлетело по WS-ссылке.
   DES
 
114 - 30.06.16 - 22:49
что означает @ ?
InvoicesXml = @"<Documents>
   Serginio1
 
115 - 30.06.16 - 23:27
(114) Это фича C# можно строку писать без экранирования \\ и можно переносить строки без дополнительных кавычек.
   DES
 
116 - 01.07.16 - 07:58
а как размер буфера увеличить , а то не влазит ответ сервера
http://prntscr.com/bncdug
   Serginio1
 
117 - 01.07.16 - 10:26
httpBinding.MaxReceivedMessageSize = 2147483647;
httpBinding.MaxBufferSize = 2147483647;
   Serginio1
 
118 - 01.07.16 - 10:28
httpBinding замени на то, что используешь привязка
   DES
 
119 - 01.07.16 - 12:57
а как загружать сборку, чтобы с сервера.
(ну чтобы на клиентов не закидывать)
   DES
 
120 - 01.07.16 - 19:24
Чтобы сделать на клиенте
API_eFactura = Новый COMОбъект("NetObjectToIDispatch45");
Сборка_API_eFactura = API_eFactura.ЗагрузитьСборку(ИмяФайлаСборки);

загнал DLL Сборки в Хранилище
НоваяЗапись = РегистрыСведений.DLLs.СоздатьМенеджерЗаписи();
НоваяЗапись.Name = Файл.Имя;
НоваяЗапись.Code = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Файл.ПолноеИмя));
НоваяЗапись.Записать();

а на клиенте делаю
НаборЗаписей = РегистрыСведений.DLLs.СоздатьНаборЗаписей(); 
Хранилище_API_eFactura = Запись.Code.Получить();
Хранилище_API_eFactura.Записать(Файл.ПолноеИмя);

т.е. вытаскиваю файл из базы и записываю его в КаталогВременныхФайлов()
потом оттуда уже
Сборка_API_eFactura = API_eFactura.ЗагрузитьСборку(ИмяФайлаСборки);

А можно сразу, минуя запись на диск, API_eFactura.ЗагрузитьСборку(Хранилище_API_eFactura) ?
используя всю мощь .NET , или придется звать на помощь Fortran IV ?
   Serginio1
 
121 - 01.07.16 - 20:23
Минуя можно.
https://msdn.microsoft.com/ru-ru/library/h538bck7(v=vs.110).aspx

стр=Base64Строка(ДвоичныеДанные);

Assembly=Врап.ПолучитьТип("System.Reflection.Assembly");
Convert=Врап.ПолучитьТип("System.Convert"); 
массив=Convert.FromBase64String(стр); 

сборка=Assembly.Load(массив);
   DES
 
122 - 01.07.16 - 20:46
так это ж не быстрее записи на диск ?
   DES
 
123 - 01.07.16 - 20:47
а зачем конвертить ?
   Serginio1
 
124 - 01.07.16 - 21:41
Что чем конвертить?
Хранилище_API_eFactura это и есть двоичные данные
   Serginio1
 
125 - 01.07.16 - 21:43
Затем, что бы получить массив байтов. Можно перевести Двоичные даннык в строку Base64, а из неё массив байтов и из них получить сборку
   DES
 
126 - 01.07.16 - 22:38
а можно загнать в Хранилище массив, чтобы избежать конвертаций ?
   Serginio1
 
127 - 02.07.16 - 00:16
(126) Можешь. массив это SafeArray.
Массив1 = Новый Массив;
// заполнение массива Массив1 значениями

// ...
Массив2 = Новый COMSafeArray(Массив1, "VT_UI1",5);

Ну и выгрузить
МассивЗначений = Массив.Выгрузить();

 Про получить массив из файла
File= врап.ПолучитьТип("System.IO.File");
массив=File.ReadAllBytes(path);

А чего тебя так конвертации смущают?
   DES
 
128 - 02.07.16 - 00:31
ну так долго же
   Serginio1
 
129 - 02.07.16 - 00:34
А ты замерял?
   DES
 
130 - 02.07.16 - 09:55
Нет, но ЖП чую.
Запись на диск может быть быстрее, потому что просто сбрасывается в кеш буферов драйвера диска, и тут же читается из кеша, и это может быть быстрее чем побайтное преобразование того же объема инфы.
 
 
   Serginio1
 
131 - 02.07.16 - 10:09
Ты для начала попробуй. У тебя все для этого есть.
Ты так говоришь, как будто у тебя гигабайтный файл. Даже для мегабайтов, ты не заметишь разницы.
Запись файла на дискв любом случае более затратная операция.

Скорость побайтного преобразования помню еще на компьютерах 14 летней давности составляла сотни мегабай в секунду.
   Serginio1
 
132 - 02.07.16 - 15:59
Кстати для сервера нужно подавить Вывод диалоговых окон при ошибке
 врап=новый COMОбъект("NetObjectToIDispatch45");
     врап.ВыводитьСообщениеОбОшибке=ложь;
           
       попытка
      Врап.ВызватьКакойтоМетод();
       Исключение
        Ошибка=врап.ПоследняяОшибка;
    СшибкаСтр=Врап.ВСтроку(Ошибка);
// Записать в журнал регистрации, вернуть на клиента итд


       конецпопытки;
   DES
 
133 - 03.07.16 - 11:12
если создать _client - сколько он может висеть в бездействии?
   Serginio1
 
134 - 03.07.16 - 11:32
А, что с ним будет? Главное, что бы ссылка на него была
   DES
 
135 - 03.07.16 - 11:39
ну он может по тайм-ауту от сервера отваливаться
   Serginio1
 
136 - 03.07.16 - 12:16
(135) Проверь. Посмотри свойства и методы ClientBase
https://msdn.microsoft.com/ru-ru/library/ms576141(v=vs.110).aspx
   Serginio1
 
137 - 03.07.16 - 12:23
Но обычная практика создавать клиента на каждый вызов.
Соединение кэшируется.
Правда после вызова не забыть закрыть клиента.
Например Close() или
Врап.ЗакрытьРесурс(_client);
   DES
 
138 - 03.07.16 - 13:37
а по каким параметрам _client можно определить что его сделали Врап.ЗакрытьРесурс(_client) только что?
   DES
 
139 - 03.07.16 - 13:39
_сlient.State - не читается из-под 1С
   DES
 
140 - 03.07.16 - 16:40
а если нужно каждый раз создавать клиентаHTTP при каждом обращении через сервер, то нужно каждый раз делать

&насервере
процедура гет()
врап = Новый COMОбъект("NetObjectToIDispatch45");
загрузку сборки;
создание клиентаHTTP;
обращение;
закрытие клиента;
конецпроцедуры

так ?
   Serginio1
 
141 - 03.07.16 - 17:05
Да
   DES
 
142 - 03.07.16 - 17:11
а как лучше возвращать с сервера структуру результата?
переделывать ее в Структуру 1с8 ?
   Serginio1
 
143 - 03.07.16 - 17:12
Но вот сборку лучше грузить из файла. При загрузке через Load создается новая ассембли
   Serginio1
 
144 - 03.07.16 - 17:14
(142) Разумеется. СОМ объекты не сериализуются. Вернее сожно самому сериализовать в JSON или XML но проще в 1С структуру
   DES
 
145 - 03.07.16 - 17:37
а если возвращает массив ?
   Serginio1
 
146 - 03.07.16 - 17:45
Масиив чего? Еще раз все масивы из .Net  это минимум ComSafeArray или как COM обертка AutoWrap
   Serginio1
 
147 - 03.07.16 - 17:48
Если алгоритм заполнения на клиенте, так и вызывай с клиента _сlient.
Если с сервера тогда заполняй данные на сервере.
   DES
 
148 - 03.07.16 - 18:00
(146) ну если врап вернул ComSafeArray двумерный , как его преобразовать в структуру чтобы вернуть клиенту? Делать структуру структур ?
   Serginio1
 
149 - 03.07.16 - 18:21
Читай преобразование SafeArray в массив
   Serginio1
 
150 - 03.07.16 - 18:48
Да и лучше использовать
Врап.ПолучитьТипИзСборки(string type, string путь);
 Сначала ищется тип в загруженных сборках. Если нет то загружается сборка и из неё уже получается тип
   DES
 
151 - 03.07.16 - 20:41
Переделал все под сервер
Загнал в Общий модуль, дал флаги Вызов сервера и Сервер
Вызываю из обработки не как серверную, все нормально
пишу перед процедурой
&НаСервере
в обработке пишет метод не обнаружен.
{Обработка.API_eFactura.Форма.Форма.Форма(218)}: Метод объекта не обнаружен (GGGAPIeFactura)
Рез = EFactura.GGGAPIeFactura("Test", Мессага);

что не так то ?
   DES
 
152 - 03.07.16 - 21:19
привелигированный - тоже нужно ставить
   Serginio1
 
153 - 03.07.16 - 21:47
А EFactura где определяешь?
   DES
 
154 - 03.07.16 - 22:32
ОбщиеМодули
   DES
 
155 - 04.07.16 - 20:20
с помощью врап создавать примитивные типы переменных ? ну там int или string ?
   Serginio1
 
156 - 04.07.16 - 22:47
Зачем. Единственно, что ингда нужно создать тип, неподдерживаемый 1С. Для этого можно исползовать
Врап.ChangeType(string type, object valueOrig)
   Serginio1
 
157 - 04.07.16 - 22:50
int и string  прекрасно передаются. Другое дело всякие byte, float, UInt32,UInt64.
Дело в том, что из-за перегрузок для поиска метода нужно точное соответсвие передаваемых типов
   Serginio1
 
158 - 04.07.16 - 23:10
Вот простые типы которые не нужно оборачивать
 var list = new List<object>();
            list.Add("System.String");
            list.Add(AutoWrap.ОбернутьОбъект(DateTime.Now));
            list.Add(AutoWrap.ОбернутьОбъект(true));
            list.Add(AutoWrap.ОбернутьОбъект((System.Byte)45));
            list.Add(AutoWrap.ОбернутьОбъект((System.Decimal)48.789));
            list.Add(AutoWrap.ОбернутьОбъект((System.Double)51.51));
            list.Add(AutoWrap.ОбернутьОбъект((System.Single)11.11));
            list.Add(AutoWrap.ОбернутьОбъект((System.Int32)11));
            list.Add(AutoWrap.ОбернутьОбъект((System.Int64)789988778899));
            list.Add(AutoWrap.ОбернутьОбъект((System.SByte)45));
            list.Add(AutoWrap.ОбернутьОбъект((System.Int16)66));
            list.Add(AutoWrap.ОбернутьОбъект((System.UInt32)77));
            list.Add(AutoWrap.ОбернутьОбъект((System.UInt64)88888888888888));
            list.Add(AutoWrap.ОбернутьОбъект((System.UInt16)102));
   DES
 
159 - 05.07.16 - 00:30
кажется они перестроили код с переходом на рабочую версию.
напомни плиз, какой класс(или что) добавлять в проект на VS,
чтобы вытянуть их новый код DLL ?
   Serginio1
 
160 - 05.07.16 - 12:09
Надо зайти в VS, создать DLL и добавить ссылку на службу указать https://api-efactura.fisc.md/Service.svc?wsdl
 
 
   Serginio1
 
161 - 05.07.16 - 12:11
Начни с API IE из 1с 7.7
   DES
 
162 - 05.07.16 - 19:16
А можно как то получить список доступных функций в DDL и их параметры с типами ?
   Serginio1
 
163 - 05.07.16 - 19:33
Ну вопервых в VS у тебя классы с методами. Если только DLL то смотри http://ilspy.net/
   DES
 
164 - 05.07.16 - 21:06
если создать новую длл и прост заменить файл. взлетит?
   Serginio1
 
165 - 05.07.16 - 22:37
Да. Но лучше сначала протестировать на шарпе
   DES
 
166 - 06.07.16 - 09:25
а как выгрузить сборку ?
чтобы была возможность заменить длл
   Serginio1
 
167 - 06.07.16 - 09:41
Никак. Она не выгружается. Нужно перед тем как загружать сборку, заменить на нужныю
   DES
 
168 - 06.07.16 - 09:52
я гружу сборку на сервере. т.е. каждое обращение к ней предваряется загрузкой сборки. Иначе никак. (потому что ссылка на врап мутабельна и не возвращается). Происходит ли сжирание памяти если грузить сборку каждый раз в процедуре  которая &насервере?
   Serginio1
 
169 - 06.07.16 - 10:14
(168) Ты 150 читал? Лучше использовать этот вариант, что бы не было сомнений
   DES
 
170 - 06.07.16 - 10:26
не понял, причем (150)?
мне нужно обращаться к сервису, я гружу сборку.
так как обращение идет с сервера, то приходится грузить сборку каждое обращение.
Причем тут типы ?
   Serginio1
 
171 - 06.07.16 - 10:30
А из сборки ты получаешь тип?
   Serginio1
 
172 - 06.07.16 - 10:31
Почитай повнимательнее тему Использование классов .Net в 1С для новичков
И поверь я знаю о чем говорю
   DES
 
173 - 06.07.16 - 10:34
я не сомневаюсь, просто ответь - жрет память если грузить в цикле в процедуре с локальными переменными ?
   Serginio1
 
174 - 06.07.16 - 10:48
Еще раз при использовании 
Врап.ПолучитьТипИзСборки(string type, string путь); 

Сначала ищется тип в загруженных сборках. Если не находит, то загружает сборку.

После этого, для получения типов и объектов, не нужно указывать тип.
   Serginio1
 
175 - 06.07.16 - 10:50
Вместо

 Сборка = Врап.загрузитьСборку(ИмяФайлаDLL);

  типСервера = Сборка.GetType(namespace + "ServiceClient");

ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient"), ИмяФайлаDLL);
   Serginio1
 
176 - 06.07.16 - 10:51
Вместо используй
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL);
   Serginio1
 
177 - 06.07.16 - 10:52
Понятно?
   DES
 
178 - 06.07.16 - 10:53
у меня одна сборка, нужные типы только в ней

&atclient
для ш=1 по 1000000 цикл
 вызватьпроц()
конеццикла

&atserver
процедура вызватьпроц()
 Сборка = Врап.загрузитьСборку(ИмяФайлаDLL);
конецпроцедуры

я про эту ситуацию, спрашиваю. память закончится быстро?
   DES
 
179 - 06.07.16 - 10:56
на клиенте - все понятно.
 я про сервер спрашиваю
   DES
 
180 - 06.07.16 - 11:06
&atserver
процедура вызватьпроц()
 врап = Новый .....
 Сборка = Врап.загрузитьСборку(ИмяФайлаDLL);
конецпроцедуры

имеется ли смысл переделывать

&atserver
процедура вызватьпроц()
 врап = Новый .....
 ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL);
конецпроцедуры
   Serginio1
 
181 - 06.07.16 - 11:09
Еще раз зачем ты грузишь сборку на сервере?
Почему не используешь 
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL);

(180) Имеет.

https://msdn.microsoft.com/ru-ru/library/1009fa28(v=vs.110).aspx


Если сборка с тем же идентификатором уже загружен, LoadFrom возвращает загруженную сборку, даже если был указан другой путь.


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


•Если сборка загружается с LoadFrom, и путь поиска сборок содержит сборки с тем же идентификатором, но другое расположение, InvalidCastException, MissingMethodException, или другие непредвиденные ситуации может произойти.
   DES
 
182 - 06.07.16 - 11:16
гружу на сервере, потому что она мне нужна на сервере.
гружу в процедуре обращения к сервису, т.к. думаю что после завершения процедуры сборка не активна.
   Serginio1
 
183 - 06.07.16 - 11:20
(182) Она загружена в процессы. Поэтому еще раз лучше использовать
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL);
   DES
 
184 - 06.07.16 - 16:01
в dll-ке есть описание
    [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.SeriaNumberRequest))]
    [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.InvoicesRequest))]
    [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.InvoicesContentRequest))]
 
пишу код
запрос =  _Врап.СоздатьОбъект(_Врап.ПолучитьТип("ServiceEfactura.ServiceReference." + "InvoicesRequest")); 
нормально завершается
а пишу 
запрос =  _Врап.СоздатьОбъект(_Врап.ПолучитьТип("ServiceEfactura.ServiceReference." + "InvoicesContentRequest")); 
дает ошибку
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип ServiceEfactura.ServiceReference.InvoicesContentRequest
как понимать ?
   Serginio1
 
185 - 06.07.16 - 18:11
Скинь DLL посмотрю
   Serginio1
 
186 - 06.07.16 - 18:12
Достаточно тип указать строкой
запрос =  _Врап.СоздатьОбъект("ServiceEfactura.ServiceReference." + "InvoicesContentRequest");
   DES
 
187 - 06.07.16 - 18:49
{ОбщийМодуль.EFactura.Модуль(121)}: Ошибка при вызове метода контекста (СоздатьОбъект)
                    Request =  Врап.СоздатьОбъект(NameSpace + "InvoicesContentRequest");
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип ServiceEfactura.ServiceReference.InvoicesContentRequest
   Serginio1
 
188 - 06.07.16 - 19:52
Значит его нет, или он в другой сборке
   DES
 
189 - 06.07.16 - 20:32
100 раз проверил - есть.

[System.Diagnostics.DebuggerStepThroughAttribute()]

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="InvoicesRequest", Namespace="http://schemas.datacontract.org/2004/07/AX.EFactura.Model.ApiModel";)]
    [System.SerializableAttribute()]
    [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.InvoicesContentRequest))]
    [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.AcceptedRequest))]
    public partial class InvoicesRequest : ServiceEfactura.ServiceReference.BaseRequest {
   DES
 
190 - 06.07.16 - 20:35
   Serginio1
 
191 - 06.07.16 - 21:59
А в VS проверял? Может не та DLL или тпи приватный?

KnownTypeAttribute говорит, что класс InvoicesRequest  имеет метод с параметром object[] и одним из типов InvoicesContentRequest.

Зачем ты его создаешь?
   Serginio1
 
192 - 06.07.16 - 22:01
Заходишь в VS и смотришь где и как определен InvoicesContentRequest

А вообще сначала тестишь в приложении .Net, а затем переносишь на 1С.
   DES
 
193 - 06.07.16 - 22:37
это это же скачанная служба.
Другие, иные методы работают. В них тоже используется типы из этой же сборки.
Один раз и этот метод сработал, под отладчиком, я посмотрел в отладчике его структуру даже. А потом стало глючить
   Serginio1
 
194 - 06.07.16 - 23:21
В отладчике под 1С? Бери в руки VS.
   Serginio1
 
195 - 06.07.16 - 23:23
Кроме того для сервера смотри (132)
   Serginio1
 
196 - 07.07.16 - 07:05
Попробуй использовать вместо ссылки на службу, сделать веб ссылку использующую технологию веб служб .Net FrameWork 2.0

Аналогично помогло здесь Помощь с Web сервисом

Да и вэб ссылка надежнее.
Добавление веб-ссылки
https://msdn.microsoft.com/ru-ru/library/ms169816(v=sql.120).aspx
   Serginio1
 
197 - 07.07.16 - 09:41
Не знаю, что у тебя не получается. Специально создал сборку
врап=новый COMОбъект("NetObjectToIDispatch45");
    врап.ВыводитьСообщениеОбОшибке=ложь;
    ПространствоИмен="efactura.ServiceReference1.";
    ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll";
    InvoicesContentRequest=Врап.ПолучитьТипИзСборки(ПространствоИмен+"InvoicesContentRequest",ПутьКФайлу);
    
    Док=Врап.СоздатьОбъект(InvoicesContentRequest);
    Док.ActorRole=1;
    Сообщить(Док.ActorRole);

Все прекрасно работает
   DES
 
198 - 07.07.16 - 09:44
перестроил dll, http://prntscr.com/bptjy8
пишу новый адрес при создании, а получается тестовый адрес.
И не могу создать клиента


myCredentials = Врап.СоздатьОбъект("System.Net.NetworkCredential",_UserName,_Password);
// Create a webrequest with the specified URL.
url = "https://api-efactura.fisc.md";;
СlientEFactura = Врап.СоздатьОбъект(Врап.ПолучитьТипИзСборки(NameSpace + "ServiceClient", ФайлСборки.ПолноеИмя));
СlientEFactura.ClientCredentials = myCredentials.GetCredential(Врап.СоздатьОбъект("System.Uri",url), "Basic");

пишет
{ОбщийМодуль.EFactura.Модуль(73)}: Поле объекта недоступно для записи (ClientCredentials)
СlientEFactura.ClientCredentials = myCredentials.GetCredential(Врап.СоздатьОбъект("System.Uri",url), "Basic");
   Serginio1
 
199 - 07.07.16 - 10:14
(198) А ты ему подсовывал https://api-efactura.fisc.md/Service.svc?wsdl

И где прописываешь адрес.

Еще раз я 197 сделал сборку и добавил ссылку на службу  https://api-efactura.fisc.md/Service.svc?wsdl

СlientEFactura.ClientCredentials это для веб ссылку.

Покажи весь код я у себя проверю
   Serginio1
 
200 - 07.07.16 - 10:19
Вот код привязки


врап=новый COMОбъект("NetObjectToIDispatch45");
    врап.ВыводитьСообщениеОбОшибке=ложь;
    ПространствоИмен="efactura.ServiceReference1.";
    ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll";
    привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc";;
    ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу);

    remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS));

    сервер = Врап.СоздатьОбъект(ServiceClient,привязка,remoteAddress);  

    UserName1 = сервер.ClientCredentials.UserName;

    UserName1.UserName = Логин

    UserName1.Password = пароль;
  1  2  3  4   

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.