Вход | Регистрация
    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  ?
   Garykom
 
1 - 27.06.16 - 13:50
>Но можно скачать код и с скомпилировать C# свою DLL


нафига нужна обертка от Serginio1?
   Кирпич
 
2 - 27.06.16 - 14:03
(1) видимо автор адепт секты мазохистов, возглавляемой Serginio1
   Serginio1
 
3 - 27.06.16 - 14:05
Там же есть в инструкции
_client = new EFacturaApiRef.ServiceClient(); _client.ClientCredentials.UserName.UserName = "supplier"; _client.ClientCredentials.UserName.Password = "supplier";
   Serginio1
 
4 - 27.06.16 - 14:07
(2) Ну да есть готовая библиотека которую можно использовать это мозахизм.
А переписывать на 1С совского Вэб сервис клиента это наше всё?
   Garykom
 
5 - 27.06.16 - 14:10
(4) Если есть исходники этой библиотеки то сделать нормальную ВК для 1С и не страдать
   Serginio1
 
6 - 27.06.16 - 14:11
Кстати 1С не поддерживает  <security mode="TransportWithMessageCredential" />
   Serginio1
 
7 - 27.06.16 - 14:12
(5) А зачем масло маслянное?
   Garykom
 
8 - 27.06.16 - 14:13
(7) Масло масляное это использовать спец код к универсальной ВК для работы с другой dll
   Garykom
 
9 - 27.06.16 - 14:14
(7) ваша ВК отличная штука, но для данного случая избыточно и затратна
   Кирпич
 
10 - 27.06.16 - 14:14
(4) зачем переписывать на 1с. можно скопипастить.
Автор, есть работающий пример на C#?
   Serginio1
 
11 - 27.06.16 - 14:15
(8) Это не ВК а нетовская DLL. А вот писать ВК с кучей объектов это как раз мозахизм.
(10) В шапке PDF
   Serginio1
 
12 - 27.06.16 - 14:17
3 + Тебе нужен либо 

1. Сделать файл 1с.exe.config куда скопировать
<bindings>             <basicHttpBinding>                 <binding name="BasicHttpBinding_IService">                     <security mode="TransportWithMessageCredential" />                 </binding>             </basicHttpBinding>         </bindings>         <client>             <endpoint address="https://api-test.fisc.md/Service.svc"; binding="basicHttpBinding"                 bindingConfiguration="BasicHttpBinding_IService" contract="E_FacturaService.IService"                 name="BasicHttpBinding_IService" />         </client>
   Serginio1
 
13 - 27.06.16 - 14:22
Либо положить этот файл рядом с DLL

Сборка=врап.загрузитьСборку(ИмяФайлаСборки);
    TChannel=Сборка.GetType("EFacturaApiRef.ServiceClient");
    ConfigFile=ИмяФайлаСборки+".config";
    endpointConfigurationName="E_FacturaService.IService";
    endpointAddress=Неопределено;
    Клиент=врап.СоздатьКлиентаWCFConfigFile(ConfigFile,TChannel,endpointConfigurationName,endpointAddress);
    endpointConfigurationName="MorpherSoap";
    endpointAddress=Неопределено;
    Клиент=врап.СоздатьКлиентаWCFConfigFile(ConfigFile,TChannel,endpointConfigurationName,endpointAddress);
   Serginio1
 
14 - 27.06.16 - 14:25
endpointConfigurationName="BasicHttpBinding_IService"
   Кирпич
 
15 - 27.06.16 - 14:25
(0) Автор, ты сначала напиши тестовую программу, которая будет работать 100%, а потом уже рисуй в 1с эту галиматью с врапами. А то ты так до пасхи будешь высоким дотнет программированием заниматься.
   Serginio1
 
16 - 27.06.16 - 14:27
   Serginio1
 
17 - 27.06.16 - 14:32
(9) Я как раз и писал изначально для таких случаев.
Когда куча классов. Либо вручную через COM оборачивать либо автоматически.
   Serginio1
 
18 - 27.06.16 - 14:38
Или так

BasicHttpBinding=Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll");
  binding = Врап.СоздатьОбъект(BasicHttpBinding,Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);
addres = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress","https://api-test.fisc.md/Service.svc";);

_client = new EFacturaApiRef.ServiceClient(binding,addres);
  _client.ClientCredentials.UserName.UserName = "supplier";
   _client.ClientCredentials.UserName.Password = "supplier";
   Garykom
 
19 - 27.06.16 - 14:38
(17) Есть готовый код на C#, не вижу проблем повторить его в в 1С встроенными средствами.
Или вызывать этот готовый код на C# из 1С любым из 10-ка способов/методов, в т.ч. самым простейшим через КомандаСистемы
   Serginio1
 
20 - 27.06.16 - 14:39
(19) Угу вот это как раз мозахизм. Да и не поддерживает 1С TransportWithMessageCredential
   Serginio1
 
21 - 27.06.16 - 14:41
(19) Сделай. Все для написания автор дал.
   Garykom
 
22 - 27.06.16 - 14:43
(21) не плотют
   Serginio1
 
23 - 27.06.16 - 14:44
_client= Врап.СоздатьТип("EFacturaApiRef.ServiceClient",binding,addres);
   Serginio1
 
24 - 27.06.16 - 14:45
(22) За советы тоже не плотют. Дело в том, что мои советы то рабочие.
А вот твои ...
   Serginio1
 
25 - 27.06.16 - 14:49
Кстати это уже делали к 7 ке
API IE из 1с 7.7
   Serginio1
 
26 - 27.06.16 - 14:52
Даже результат уже был получен
API IE из 1с 7.7
   DES
 
27 - 27.06.16 - 16:24
(26) и благополучно потерян. ;(
   DES
 
28 - 27.06.16 - 16:38
(18) ругается на _client = new EFacturaApiRef.ServiceClient(binding,addres);

хотелось бы обойтись без конфиг файлов...
можно ?
   Serginio1
 
29 - 27.06.16 - 16:39
18+ _client= Врап.СоздатьТип("EFacturaApiRef.ServiceClient",binding,addres);

Ну и пространства имен соответствующие
   DES
 
30 - 27.06.16 - 17:08
сделал
BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll");

binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);
addres = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc";);
_client = Врап.СоздатьТип("EFacturaApiRef.ServiceClient", binding, addres);

в отладчике binding & addres - нормально выглядят.

и получил
{Форма.Форма.Форма(55)}: Метод объекта не обнаружен (СоздатьТип)
    _client = Врап.СоздатьТип("EFacturaApiRef.ServiceClient", binding, addres);
 
 
   Serginio1
 
31 - 27.06.16 - 17:10
ПолучитьТип
   Serginio1
 
32 - 27.06.16 - 17:11
Но смотри какое у тебя пространство имен
   DES
 
33 - 27.06.16 - 17:11
а почему тип, а не оъбект ?
   Serginio1
 
34 - 27.06.16 - 17:12
Да СоздатьОбъект
   DES
 
35 - 27.06.16 - 17:25
да, взлетело так:
BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll");

binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);
addres = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc";);
_client = Врап.СоздатьОбъект(namespace + "ServiceClient", binding, addres);
_client.ClientCredentials.UserName.UserName = "DES";
_client.ClientCredentials.UserName.Password = "myPass";
а
response = _client.GetAcceptedInvoices(request);
пишет
{Форма.Форма.Форма(57)}: Ошибка при вызове метода контекста (GetAcceptedInvoices)
    response = _client.GetAcceptedInvoices(request);
по причине:
Неизвестная ошибка
   Serginio1
 
36 - 27.06.16 - 17:39
Попробуй для начала с Config файлом.
Покажи как заполняешь request
string newid = Guid.NewGuid().ToString();                 var request = new ActorBaseRequest                 {                     RequestId = newid                 };                 var response = _client.GetAcceptedInvoices(request);  
                foreach (var info in response.Results)                 {                     Console.WriteLine(info.Seria + " " + info.Number + " " + info.Xml + " Error Message: " + info.Message);                 }
   Serginio1
 
37 - 27.06.16 - 17:40
А что выводит при ошибке?
   Serginio1
 
38 - 27.06.16 - 17:41
Пришли мне на почту обработку и DLL. Посмотрю.
   DES
 
39 - 28.06.16 - 08:25
а туда ли я послал то?
   DES
 
40 - 28.06.16 - 09:03
откатился на 1с 7.7

дает ошибку
_client = врап.СоздатьКлиентаWCFConfigFile(ConfigFile, TChannel, endpointConfigurationName, , _UserName_, _Password_);
{Обработка.API_eFactutra.Форма.Модуль(27)}: System.Configuration:  В файле конфигурации ServiceEfactura.dll.config отсутствует корневой тег <configuration> (D:\LX\ServiceEfactura.dll.config line 1)

хотя там текст из документации
   DES
 
41 - 28.06.16 - 09:16
(40) не принимать к сведению (Прим. автор)
   Кирпич
 
42 - 28.06.16 - 09:21
(40) похоже, вы (15) так и не приняли к сведению :)
а эта матня (е фактура) только в Молдавии работает или еще где?
   Serginio1
 
43 - 28.06.16 - 09:42
(39)Туда сейчас посмотрю.
Конечно лучше тестить в VS а затем переносить в 1С.
   DES
 
44 - 28.06.16 - 09:55
в 7 взлетело, но похоже не проходит идентификация
http://prntscr.com/bm0dlo
   DES
 
45 - 28.06.16 - 09:56
(42) принял, но не выбрал.
   DES
 
46 - 28.06.16 - 09:59
(42) за "еще где" не знаю, но принципы работы явно не молдавского изобретения
   Кирпич
 
47 - 28.06.16 - 10:00
(45) ты чо! вон даже ваш пастор так делает (43)
   DES
 
48 - 28.06.16 - 10:06
Зафиксирую

Перем Врап, ИмяФайлаDLL, Сборка, типСервера, _client, response;
Перем namespace, _UserName_, _Password_, request;  

Процедура ПриОткрытии()

ИмяФайлаDLL = КаталогИБ() + "ServiceEfactura.dll";
namespace = "ServiceEfactura.ServiceReference.";
Врап = СоздатьОбъект("NetObjectToIDispatch45");
Врап.УстЭтоСемерка(); 
Врап.ЗаменитьConfigFile(ИмяФайлаDLL+".config");
Сборка = Врап.загрузитьСборку(ИмяФайлаDLL);
типСервера = Сборка.GetType(namespace + "ServiceClient");
    
КонецПроцедуры

Процедура ПослеСозданияФормы() 

ОчиститьОкноСообщений();

КонецПроцедуры

Функция ПолучитьКлиента()

TChannel = Сборка.GetType(namespace + "IService");
ConfigFile = ИмяФайлаDLL + ".config";
endpointConfigurationName = "BasicHttpBinding_IService";
_client = врап.СоздатьКлиентаWCFConfigFile(ConfigFile, TChannel, endpointConfigurationName, , _UserName_, _Password_);
Возврат _client

КонецФункции

Процедура ПолучитьДанные(_еЗапрос_// Возвращает в response


_client= ПолучитьКлиента();
//login = _client.ClientCredentials.UserName;

//login.UserName = _UserName_;
//login.Password = _Password_;  

Попытка
Если    _еЗапрос_ = "GetInvoicesBySeriaNumber" Тогда
            newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString();
            ТипRequest = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoicesRequest");
            ТипЛист = Врап.ПолучитьТип("System.Collections.Generic.List`1");
            ТипInvoiceIndentificator = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoiceIndentificator"); 
            ТипЛистОбъект = Врап.ТипКакОбъект(ТипЛист); 
            ТипизированныйЛист = ТипЛистОбъект.MakeGenericType(ТипInvoiceIndentificator);

            SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист);
            SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator);
            SeriaAndNumber.Number = "000962811";
            SeriaAndNumber.Seria = "EUG";
            SeriaAndNumbers.Add(SeriaAndNumber);
    
            request = Врап.СоздатьОбъект(ТипRequest); 
            request.RequestId = newid; 
            request.SeriaAndNumbers = SeriaAndNumbers.ToArray();;
        
            response = _client.GetInvoicesBySeriaNumber(request);        
        ИначеЕсли _еЗапрос_ = "GetAcceptedInvoices1" Тогда        
        ИначеЕсли _еЗапрос_ = "GetAcceptedInvoices2" Тогда
        ИначеЕсли _еЗапрос_ = "GetAcceptedInvoices3" Тогда
        КонецЕсли;
    Исключение
        response  = 0;
        Сообщить("."+_еЗапрос_+"() - ошибка получения информации.","!");
    КонецПопытки;
    _client.Close();    
КонецПроцедуры
//----------------------------------------------------------------------


Процедура eFactura_GetAcceptedInvoices()
    Перем newid, типActorBaseRequest;
    
    newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString();
    типActorBaseRequest = Врап.ПолучитьТип(namespace + "ActorBaseRequest"); 
    request = Врап.СоздатьОбъект(типActorBaseRequest);
    request.RequestId = newid;
    ПолучитьДанные("GetInvoicesBySeriaNumber");
КонецПроцедуры
//----------------------------------------------------------------------


Процедура Выполнить()

_UserName_ = "DES";
_Password_ = "MyPass";  
eFactura_GetAcceptedInvoices();
Если ПустоеЗначение(response)=1 Тогда
Сообщить("Нет результата.");
Иначе
Сообщить("Есть результат.");
КонецЕсли;    
    
КонецПроцедуры
   Serginio1
 
49 - 28.06.16 - 10:09
Ну молодец! Посрамил скептиков.
   Кирпич
 
50 - 28.06.16 - 10:16
(49) скептики по прежнему считают, что без врапов будет код в восемь раз короче и результат будет  в течение часа, а не недели.
   DES
 
51 - 28.06.16 - 10:20
(49) да , нет.  Похоже не создается канал с логином. Идет как аниномоус.
   DES
 
52 - 28.06.16 - 10:26
зафиксирую для v8


Врап = Новый COMОбъект("NetObjectToIDispatch45");
ИмяФайлаСборки =  "D:\FilesNetObjectToIDispatch2\" + "ServiceEfactura.dll";
Сборка = Врап.загрузитьСборку(ИмяФайлаСборки);
namespace = "ServiceEfactura.ServiceReference.";
типСервера = Сборка.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);  
TChannel = Сборка.GetType(namespace + "IService");
ConfigFile = ИмяФайлаСборки + ".config";
endpointConfigurationName = "BasicHttpBinding_IService";
UserName = "DES";
Password = "MyPass";  
Клиент = врап.СоздатьКлиентаWCFConfigFile(ConfigFile, TChannel, endpointConfigurationName,, UserName, Password);
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();;
response = Клиент.GetInvoicesBySeriaNumber(request);
        
но таже фигня, запускает как анонимуса, а для него там нет места.
   Serginio1
 
53 - 28.06.16 - 10:57
(50) Ну клава в руки и вперед.
Теоретики.
   Serginio1
 
54 - 28.06.16 - 10:58
(52) Сейчас нет времени потом посмотрю.
Обратись в поддержку.
Можешь фиддлером посмотреть запрос и им отправить
   Serginio1
 
55 - 28.06.16 - 11:02
(50) При работе с 1С вским клиентом кода будет даже больше.
   DES
 
56 - 28.06.16 - 11:06
(54) у них спросить невозможно, вероятно они не местные, а их каких-нибудь штатов...
   Кирпич
 
57 - 28.06.16 - 11:16
(53) так это ты теоретик. практики не станут два раза писать одно и то же - сначала на C#, потом это всё в 1С переделывать.
   Serginio1
 
58 - 28.06.16 - 12:00
(57) Угу а заполнять будешь как?
Теоретик.
 Кстати кода на C# даже будет больше


SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист);

SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator);

SeriaAndNumber.Number = "000962811";

SeriaAndNumber.Seria = "EUG";

SeriaAndNumbers.Add(SeriaAndNumber);

request.RequestId = newid; 

request.SeriaAndNumbers = SeriaAndNumbers.ToArray();
   Serginio1
 
59 - 28.06.16 - 12:01
(56) Есть в любом случае служба поддержки. Просто на англицком. А логин и пароль правильные?
   DES
 
60 - 28.06.16 - 12:02
(56) ну вроде бы логин и пароль сам создаешь, я еже 2 логина создал, ни один не подхватывается.
 
 
   DES
 
61 - 28.06.16 - 12:04
(58) как в 1С будет выглядеть типа

var request = new TaxpayersRequest {
FiscalCodes = new[]
  {
   "1003600106115", 
   "1002600046027"
  },
  RequestId = newid
 };
   DES
 
62 - 28.06.16 - 12:07
сделал клиента по 2-м вариантам

КаталогФайлов = "D:\FilesNetObjectToIDispatch2\";
ИмяФайлаСборки =  КаталогФайлов + "ServiceEfactura.dll";
ИмяФайлаКонфига = ИмяФайлаСборки + ".config";
NameSpace = "ServiceEfactura.ServiceReference.";
СсылкаHTTPS = "https://api-test.fisc.md/Service.svc target=""_blank"" rel=""nofollow"" class=""extralink"">https://api-test.fisc.md/Service.svc";;
endpointConfigurationName = "BasicHttpBinding_IService";
    
Врап = Новый COMОбъект("NetObjectToIDispatch45");
Сборка = Врап.ЗагрузитьСборку(ИмяФайлаСборки);
    
    #IF _ THEN
        ТипСервера = Сборка.GetType(NameSpace + "ServiceClient");
        привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
        remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri", СсылкаHTTPS));
        Сервер = Врап.СоздатьОбъект(типСервера, привязка, remoteAddress);  
        IService = Сборка.GetType(NameSpace + "IService");
        Клиент = врап.СоздатьКлиентаWCFConfigFile(ИмяФайлаКонфига, IService, endpointConfigurationName,, UserName, Password);
    #ELSE
        BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll");
        binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);
        address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc";);
        Клиент  = Врап.СоздатьОбъект(namespace + "ServiceClient", binding, address);
        Клиент.ClientCredentials.UserName.UserName = UserName;
        Клиент.ClientCredentials.UserName.Password = Password;
    #ENDIF
    
Все равно одинаковая реакция, пишет про анонимуса
   DES
 
63 - 28.06.16 - 12:09
во втором варианте, под отладчиком, можно посмотреть COM-объект,
видно что поля с логином заполнены правильно.
   Serginio1
 
64 - 28.06.16 - 12:25
Кстати попробуй
BasicHttpsBinding
и
System.ServiceModel.BasicHttpsSecurityMode

https://msdn.microsoft.com/ru-ru/library/system.servicemodel.basichttpsbinding(v=vs.110).aspx

У тебя соединение по HTPS
   Serginio1
 
65 - 28.06.16 - 12:31
64 к 35
   DES
 
66 - 28.06.16 - 12:32
{Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки)
        BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpsSecurityMode ","System.ServiceModel.dll");
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип System.ServiceModel.BasicHttpsSecurityMode  в сборке C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel\v4.0_4.0.0.0__b77a5c561934e089\System.ServiceModel.dll
   Serginio1
 
67 - 28.06.16 - 12:40
   DES
 
68 - 28.06.16 - 12:51
(67) ну вроде бы так и записано.

сделал еще так


BasicHttpsBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpsBinding","System.ServiceModel.dll");
binding = Врап.СоздатьОбъект(BasicHttpsBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpsSecurityMode").TransportWithMessageCredential);
address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc";);
Клиент  = Врап.СоздатьОбъект(namespace + "ServiceClient", binding, address);

ошибки нет, но опять анонимоус входит
   Serginio1
 
69 - 28.06.16 - 13:15
Ну значит проблема с логин пароль. Ладно. Все времени нет.
Позже как появится на C# проверю. Можешь кстати и сам проверить.
   DES
 
70 - 28.06.16 - 15:10
как в 1с массив строк объявить ?
FiscalCodes = new[] {"1003600106115","1002600046027"}
   Serginio1
 
71 - 28.06.16 - 15:24
Проще так.

List=Врап.СоздатьОбъект("System.Collections.Generic.List`1[System.String]");


Список.Add("1003600106115"); 
Список.Add("1002600046027"); 
FiscalCodes=Список.ToArray();

Можно через safeArray
врап.СоздатьМассив
   DES
 
72 - 29.06.16 - 18:37
Подскажите , где нужно проставить "https" в случае https ?

NameSpace = "ServiceEfactura.ServiceReference.";
BasicHttpBinding = wrap.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding", "System.ServiceModel.dll");
Binding = wrap.СоздатьОбъект(BasicHttpBinding,wrap.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);
Address = wrap.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc";);
Сlient = wrap.СоздатьОбъект(NameSpace + "ServiceClient", Binding, Address);    
Сlient.ClientCredentials.UserName.UserName = UserName;
Сlient.ClientCredentials.UserName.Password = Password;
   Serginio1
 
73 - 29.06.16 - 19:56
По идее одно и тоже, только по умолчаию
The basicHttpsBinding is similar to basicHttpBinding, only it has the following defaults:
•Security mode = Transport
•Client credential type = None

Ипользуй обычный, без s
   DES
 
74 - 29.06.16 - 20:09
да и так и так юзаю, бестолку...
техподдержке рассказываю где у них мануал по этому API лежит.
   Garykom
 
75 - 29.06.16 - 20:24
(74) Так понимаю сменить сервис на адекватный никак?
   Serginio1
 
76 - 29.06.16 - 20:35
(74) А логин пароль получил как по инструкции?
   Serginio1
 
77 - 29.06.16 - 20:38
Ты на сайте авторизируешься? https://servicii.fisc.md/
   Serginio1
 
78 - 29.06.16 - 20:39
Вернее есть и на русском https://servicii.fisc.md/default.aspx
   Serginio1
 
79 - 29.06.16 - 20:48
Попробуй еще
BasicHttpBinding .Security.Transport.ClientCredentialType = Врап.ПолучитьТип(" System.ServiceModel
.HttpClientCredentialType").Basic;
   Serginio1
 
80 - 29.06.16 - 20:50
   Serginio1
 
81 - 29.06.16 - 20:53
У тебя доступ к https://api-test.fisc.md/Service.svc?wsdl
Есть?
   DES
 
82 - 29.06.16 - 20:54
(77) ну ясный день, все там облазил и насоздавал API юзеров пачку.
Если не заполняю UserName - отвечает чтоб заполнил, а заполняю пишет что аноним
   DES
 
83 - 29.06.16 - 20:57
(81) Nu sunte?i autorizat s? accesa?i pagina dat?!
You are not allowed to see this page!
   DES
 
84 - 29.06.16 - 20:57
(81) хотя вроде я ж оттуда качал исходники ранее
   DES
 
85 - 29.06.16 - 21:24
но исходники сборки есть
   Serginio1
 
86 - 29.06.16 - 21:32
Видно это было давно. Узнай у них еще раз.
Тогда кстати работало?
   DES
 
87 - 29.06.16 - 21:34
VS оттуда же брал описание для DLL ?
   DES
 
88 - 29.06.16 - 21:41
(79) попробовал так
Binding = wrap.СоздатьОбъект(BasicHttpBinding, wrap.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);

Binding.Security.Transport.ClientCredentialType = wrap.ПолучитьТип(" System.ServiceModel.HttpClientCredentialType").Basic;
   Serginio1
 
89 - 29.06.16 - 21:55
Вот их новый адрес
https://api-efactura.fisc.md/Service.svc?wsdl
И соотвеиственно адрес
https://api-efactura.fisc.md/Service.svc"/
   Serginio1
 
90 - 29.06.16 - 21:57
   DES
 
91 - 30.06.16 - 07:47
(90) черт, ты прав!
   DES
 
92 - 30.06.16 - 07:50
всмысле, спасибо.
   DES
 
93 - 30.06.16 - 07:59
а как заюзать enumerator ?
Для Каждого Taxpayers Из response.Result Цикл
   DES
 
94 - 30.06.16 - 08:37
с енумератором решилось

вот еще бы расковырять цифроподпись, было бы совсем зашибись

<Signatures>
<SignatureContent>
<SignedDoc>
<hash Id="SignedContent">***</hash>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">;
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"; />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"; />
 <Reference URI="#SignedContent">

  <Transforms>
   <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"; />
  </Transforms>
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"; />
  <DigestValue>61AsgPxpXGRrz+52hs80BGbAgkg=</DigestValue>
 </Reference>
</SignedInfo>

Какой приблудой можно подписывать XMLs ?
   DES
 
95 - 30.06.16 - 10:24
а как COMSafeArray сохранить в файл ?
   Serginio1
 
96 - 30.06.16 - 10:35
Посмотри ЭЦП, Сертификат, Подпись. Продолжение.

Но и в инструкции должны быть примеры
   Serginio1
 
97 - 30.06.16 - 10:41
file = врап.ПолучитьТип("System.IO.File");
file.WriteAllBytes(path,ТвойCOMSafeArray);
   DES
 
98 - 30.06.16 - 10:55
или
StreamTypeEnum = Новый Структура("adTypeBinary, adTypeText", 1, 2);
ConnectModeEnum = Новый Структура("adModeRead, adModeReadWrite, adModeRecursive, adModeShareDenyNone,
|adModeShareDenyRead, adModeShareDenyWrite, adModeShareExclusive, 
|adModeUnknown, adModeWrite", 1, 3, 4194304, 16, 4, 8, 12, 0, 2);
SaveOptionsEnum = Новый Структура("adSaveCreateNotExist, adSaveCreateOverWrite", 1, 2);
StreamOut = Новый COMОбъект("ADODB.Stream");
StreamOut.Type = StreamTypeEnum.adTypeBinary;
StreamOut.Mode = ConnectModeEnum.adModeReadWrite;//Нужны и чтение и запись.

StreamOut.Open();//Открыли на чтение и запись

StreamOut.Write(Invoice.QRCode); 
StreamOut.SaveToFile(ИмяФайла, SaveOptionsEnum.adSaveCreateOverWrite);//"2" - перезапись файла

StreamOut.Close();
   Serginio1
 
99 - 30.06.16 - 10:58
Или
Convert=Врап.ПолучитьТип("System.Convert");
ДД=Base64Значение(Convert.ToBase64String(ТвойCOMSafeArray));

DES ты меня удивляешь. У тебя в руках вся мощь .Net а ты все смотришь на свой старый опыт.
   Serginio1
 
100 - 30.06.16 - 10:59
90+ Ты хоть возьмиь да и поизучай C#. Пригодится.
  1  2  3  4   

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