Имя: Пароль:
 
1C
1С v8
Практическое применение NET в 1С8 с помощью Serginio1
0 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  ?
1 Garykom
 
27.06.16
13:50
>Но можно скачать код и с скомпилировать C# свою DLL

нафига нужна обертка от Serginio1?
2 Кирпич
 
27.06.16
14:03
(1) видимо автор адепт секты мазохистов, возглавляемой Serginio1
3 Serginio1
 
27.06.16
14:05
Там же есть в инструкции
_client = new EFacturaApiRef.ServiceClient(); _client.ClientCredentials.UserName.UserName = "supplier"; _client.ClientCredentials.UserName.Password = "supplier";
4 Serginio1
 
27.06.16
14:07
(2) Ну да есть готовая библиотека которую можно использовать это мозахизм.
А переписывать на 1С совского Вэб сервис клиента это наше всё?
5 Garykom
 
27.06.16
14:10
(4) Если есть исходники этой библиотеки то сделать нормальную ВК для 1С и не страдать
6 Serginio1
 
27.06.16
14:11
Кстати 1С не поддерживает  <security mode="TransportWithMessageCredential" />
7 Serginio1
 
27.06.16
14:12
(5) А зачем масло маслянное?
8 Garykom
 
27.06.16
14:13
(7) Масло масляное это использовать спец код к универсальной ВК для работы с другой dll
9 Garykom
 
27.06.16
14:14
(7) ваша ВК отличная штука, но для данного случая избыточно и затратна
10 Кирпич
 
27.06.16
14:14
(4) зачем переписывать на 1с. можно скопипастить.
Автор, есть работающий пример на C#?
11 Serginio1
 
27.06.16
14:15
(8) Это не ВК а нетовская DLL. А вот писать ВК с кучей объектов это как раз мозахизм.
(10) В шапке PDF
12 Serginio1
 
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>
13 Serginio1
 
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);
14 Serginio1
 
27.06.16
14:25
endpointConfigurationName="BasicHttpBinding_IService"
15 Кирпич
 
27.06.16
14:25
(0) Автор, ты сначала напиши тестовую программу, которая будет работать 100%, а потом уже рисуй в 1с эту галиматью с врапами. А то ты так до пасхи будешь высоким дотнет программированием заниматься.
16 Serginio1
 
27.06.16
14:27
17 Serginio1
 
27.06.16
14:32
(9) Я как раз и писал изначально для таких случаев.
Когда куча классов. Либо вручную через COM оборачивать либо автоматически.
18 Serginio1
 
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";
19 Garykom
 
27.06.16
14:38
(17) Есть готовый код на C#, не вижу проблем повторить его в в 1С встроенными средствами.
Или вызывать этот готовый код на C# из 1С любым из 10-ка способов/методов, в т.ч. самым простейшим через КомандаСистемы
20 Serginio1
 
27.06.16
14:39
(19) Угу вот это как раз мозахизм. Да и не поддерживает 1С TransportWithMessageCredential
21 Serginio1
 
27.06.16
14:41
(19) Сделай. Все для написания автор дал.
22 Garykom
 
27.06.16
14:43
(21) не плотют
23 Serginio1
 
27.06.16
14:44
_client= Врап.СоздатьТип("EFacturaApiRef.ServiceClient",binding,addres);
24 Serginio1
 
27.06.16
14:45
(22) За советы тоже не плотют. Дело в том, что мои советы то рабочие.
А вот твои ...
25 Serginio1
 
27.06.16
14:49
Кстати это уже делали к 7 ке
API IE из 1с 7.7
26 Serginio1
 
27.06.16
14:52
Даже результат уже был получен
API IE из 1с 7.7
27 DES
 
27.06.16
16:24
(26) и благополучно потерян. ;(
28 DES
 
27.06.16
16:38
(18) ругается на _client = new EFacturaApiRef.ServiceClient(binding,addres);

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

Ну и пространства имен соответствующие
30 DES
 
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);
31 Serginio1
 
27.06.16
17:10
ПолучитьТип
32 Serginio1
 
27.06.16
17:11
Но смотри какое у тебя пространство имен
33 DES
 
27.06.16
17:11
а почему тип, а не оъбект ?
34 Serginio1
 
27.06.16
17:12
Да СоздатьОбъект
35 DES
 
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);
по причине:
Неизвестная ошибка
36 Serginio1
 
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);                 }
37 Serginio1
 
27.06.16
17:40
А что выводит при ошибке?
38 Serginio1
 
27.06.16
17:41
Пришли мне на почту обработку и DLL. Посмотрю.
39 DES
 
28.06.16
08:25
а туда ли я послал то?
40 DES
 
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)

хотя там текст из документации
41 DES
 
28.06.16
09:16
(40) не принимать к сведению (Прим. автор)
42 Кирпич
 
28.06.16
09:21
(40) похоже, вы (15) так и не приняли к сведению :)
а эта матня (е фактура) только в Молдавии работает или еще где?
43 Serginio1
 
28.06.16
09:42
(39)Туда сейчас посмотрю.
Конечно лучше тестить в VS а затем переносить в 1С.
44 DES
 
28.06.16
09:55
в 7 взлетело, но похоже не проходит идентификация
http://prntscr.com/bm0dlo
45 DES
 
28.06.16
09:56
(42) принял, но не выбрал.
46 DES
 
28.06.16
09:59
(42) за "еще где" не знаю, но принципы работы явно не молдавского изобретения
47 Кирпич
 
28.06.16
10:00
(45) ты чо! вон даже ваш пастор так делает (43)
48 DES
 
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 Тогда
Сообщить("Нет результата.");
Иначе
Сообщить("Есть результат.");
КонецЕсли;    
    
КонецПроцедуры
49 Serginio1
 
28.06.16
10:09
Ну молодец! Посрамил скептиков.
50 Кирпич
 
28.06.16
10:16
(49) скептики по прежнему считают, что без врапов будет код в восемь раз короче и результат будет  в течение часа, а не недели.
51 DES
 
28.06.16
10:20
(49) да , нет.  Похоже не создается канал с логином. Идет как аниномоус.
52 DES
 
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);
        
но таже фигня, запускает как анонимуса, а для него там нет места.
53 Serginio1
 
28.06.16
10:57
(50) Ну клава в руки и вперед.
Теоретики.
54 Serginio1
 
28.06.16
10:58
(52) Сейчас нет времени потом посмотрю.
Обратись в поддержку.
Можешь фиддлером посмотреть запрос и им отправить
55 Serginio1
 
28.06.16
11:02
(50) При работе с 1С вским клиентом кода будет даже больше.
56 DES
 
28.06.16
11:06
(54) у них спросить невозможно, вероятно они не местные, а их каких-нибудь штатов...
57 Кирпич
 
28.06.16
11:16
(53) так это ты теоретик. практики не станут два раза писать одно и то же - сначала на C#, потом это всё в 1С переделывать.
58 Serginio1
 
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();
59 Serginio1
 
28.06.16
12:01
(56) Есть в любом случае служба поддержки. Просто на англицком. А логин и пароль правильные?
60 DES
 
28.06.16
12:02
(56) ну вроде бы логин и пароль сам создаешь, я еже 2 логина создал, ни один не подхватывается.
61 DES
 
28.06.16
12:04
(58) как в 1С будет выглядеть типа

var request = new TaxpayersRequest {
FiscalCodes = new[]
  {
   "1003600106115",
   "1002600046027"
  },
  RequestId = newid
};
62 DES
 
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
    
Все равно одинаковая реакция, пишет про анонимуса
63 DES
 
28.06.16
12:09
во втором варианте, под отладчиком, можно посмотреть COM-объект,
видно что поля с логином заполнены правильно.
64 Serginio1
 
28.06.16
12:25
Кстати попробуй
BasicHttpsBinding
и
System.ServiceModel.BasicHttpsSecurityMode

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

У тебя соединение по HTPS
65 Serginio1
 
28.06.16
12:31
64 к 35
66 DES
 
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
67 Serginio1
 
28.06.16
12:40
68 DES
 
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);

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

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


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

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

Binding = wrap.СоздатьОбъект(BasicHttpBinding, wrap.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);

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

Для Каждого Taxpayers Из response.Result Цикл
94 DES
 
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 ?
95 DES
 
30.06.16
10:24
а как COMSafeArray сохранить в файл ?
96 Serginio1
 
30.06.16
10:35
Посмотри ЭЦП, Сертификат, Подпись. Продолжение.

Но и в инструкции должны быть примеры
97 Serginio1
 
30.06.16
10:41
file = врап.ПолучитьТип("System.IO.File");
file.WriteAllBytes(path,ТвойCOMSafeArray);
98 DES
 
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();
99 Serginio1
 
30.06.16
10:58
Или
Convert=Врап.ПолучитьТип("System.Convert");
ДД=Base64Значение(Convert.ToBase64String(ТвойCOMSafeArray));

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

перем Сборка  потом нигде не используется ?
104 Serginio1
 
30.06.16
13:12
Сборка загружается в домен и ты можешь использовать Врап.СоздатьОбъект
105 DES
 
30.06.16
13:42
В 1С8.3.8 грузится https://api-efactura.fisc.md/Service.svc?wsdl
а в 1C8.3.7 не грузится
106 DES
 
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 , как получить его тип ?
107 Serginio1
 
30.06.16
15:00
108 DES
 
30.06.16
15:52
(107) Да. Спс. Зачитал. Кое как сварганил запрос по WS-ссылке.
Ругается на логин. Не пойму куда его втулить.
109 Serginio1
 
30.06.16
15:57
(108) А 1С поддерживае авторизацию в отличии от Basic?
B и поддерживает протокол TransportWithMessageCredential?
Удачи тебе в изысканиях. Пиши в поддержку 1С.
110 DES
 
30.06.16
16:05
(109) ну вроде как

Прокси = WSСсылки.eFactura.СоздатьWSПрокси(HTTP, "Service", "BasicHttpBinding_IService");
Прокси.Пользователь = "DES";
Прокси.Пароль = "MyPass";

должно же...
111 Serginio1
 
30.06.16
16:27
Создай отдельную ветку без упоминания .Net Многие пугаются этого слова.
112 DES
 
30.06.16
16:35
(111) гы...
113 DES
 
30.06.16
22:01
НЕ взлетело по WS-ссылке.
114 DES
 
30.06.16
22:49
что означает @ ?

InvoicesXml = @"<Documents>
115 Serginio1
 
30.06.16
23:27
(114) Это фича C# можно строку писать без экранирования \\ и можно переносить строки без дополнительных кавычек.
116 DES
 
01.07.16
07:58
а как размер буфера увеличить , а то не влазит ответ сервера
http://prntscr.com/bncdug
117 Serginio1
 
01.07.16
10:26
httpBinding.MaxReceivedMessageSize = 2147483647;
httpBinding.MaxBufferSize = 2147483647;
118 Serginio1
 
01.07.16
10:28
httpBinding замени на то, что используешь привязка
119 DES
 
01.07.16
12:57
а как загружать сборку, чтобы с сервера.
(ну чтобы на клиентов не закидывать)
120 DES
 
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 ?
121 Serginio1
 
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(массив);
122 DES
 
01.07.16
20:46
так это ж не быстрее записи на диск ?
123 DES
 
01.07.16
20:47
а зачем конвертить ?
124 Serginio1
 
01.07.16
21:41
Что чем конвертить?
Хранилище_API_eFactura это и есть двоичные данные
125 Serginio1
 
01.07.16
21:43
Затем, что бы получить массив байтов. Можно перевести Двоичные даннык в строку Base64, а из неё массив байтов и из них получить сборку
126 DES
 
01.07.16
22:38
а можно загнать в Хранилище массив, чтобы избежать конвертаций ?
127 Serginio1
 
02.07.16
00:16
(126) Можешь. массив это SafeArray.
Массив1 = Новый Массив;
// заполнение массива Массив1 значениями
// ...
Массив2 = Новый COMSafeArray(Массив1, "VT_UI1",5);

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

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

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

Скорость побайтного преобразования помню еще на компьютерах 14 летней давности составляла сотни мегабай в секунду.
132 Serginio1
 
02.07.16
15:59
Кстати для сервера нужно подавить Вывод диалоговых окон при ошибке

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

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

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

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

что не так то ?
152 DES
 
03.07.16
21:19
привелигированный - тоже нужно ставить
153 Serginio1
 
03.07.16
21:47
А EFactura где определяешь?
154 DES
 
03.07.16
22:32
ОбщиеМодули
155 DES
 
04.07.16
20:20
с помощью врап создавать примитивные типы переменных ? ну там int или string ?
156 Serginio1
 
04.07.16
22:47
Зачем. Единственно, что ингда нужно создать тип, неподдерживаемый 1С. Для этого можно исползовать
Врап.ChangeType(string type, object valueOrig)
157 Serginio1
 
04.07.16
22:50
int и string  прекрасно передаются. Другое дело всякие byte, float, UInt32,UInt64.
Дело в том, что из-за перегрузок для поиска метода нужно точное соответсвие передаваемых типов
158 Serginio1
 
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));
159 DES
 
05.07.16
00:30
кажется они перестроили код с переходом на рабочую версию.
напомни плиз, какой класс(или что) добавлять в проект на VS,
чтобы вытянуть их новый код DLL ?
160 Serginio1
 
05.07.16
12:09
Надо зайти в VS, создать DLL и добавить ссылку на службу указать https://api-efactura.fisc.md/Service.svc?wsdl
161 Serginio1
 
05.07.16
12:11
Начни с API IE из 1с 7.7
162 DES
 
05.07.16
19:16
А можно как то получить список доступных функций в DDL и их параметры с типами ?
163 Serginio1
 
05.07.16
19:33
Ну вопервых в VS у тебя классы с методами. Если только DLL то смотри http://ilspy.net/
164 DES
 
05.07.16
21:06
если создать новую длл и прост заменить файл. взлетит?
165 Serginio1
 
05.07.16
22:37
Да. Но лучше сначала протестировать на шарпе
166 DES
 
06.07.16
09:25
а как выгрузить сборку ?
чтобы была возможность заменить длл
167 Serginio1
 
06.07.16
09:41
Никак. Она не выгружается. Нужно перед тем как загружать сборку, заменить на нужныю
168 DES
 
06.07.16
09:52
я гружу сборку на сервере. т.е. каждое обращение к ней предваряется загрузкой сборки. Иначе никак. (потому что ссылка на врап мутабельна и не возвращается). Происходит ли сжирание памяти если грузить сборку каждый раз в процедуре  которая &насервере?
169 Serginio1
 
06.07.16
10:14
(168) Ты 150 читал? Лучше использовать этот вариант, что бы не было сомнений
170 DES
 
06.07.16
10:26
не понял, причем (150)?
мне нужно обращаться к сервису, я гружу сборку.
так как обращение идет с сервера, то приходится грузить сборку каждое обращение.
Причем тут типы ?
171 Serginio1
 
06.07.16
10:30
А из сборки ты получаешь тип?
172 Serginio1
 
06.07.16
10:31
Почитай повнимательнее тему Использование классов .Net в 1С для новичков
И поверь я знаю о чем говорю
173 DES
 
06.07.16
10:34
я не сомневаюсь, просто ответь - жрет память если грузить в цикле в процедуре с локальными переменными ?
174 Serginio1
 
06.07.16
10:48
Еще раз при использовании
Врап.ПолучитьТипИзСборки(string type, string путь);

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

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

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

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

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

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

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

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

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

&atserver
процедура вызватьпроц()
врап = Новый .....
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL);
конецпроцедуры
181 Serginio1
 
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, или другие непредвиденные ситуации может произойти.
182 DES
 
06.07.16
11:16
гружу на сервере, потому что она мне нужна на сервере.
гружу в процедуре обращения к сервису, т.к. думаю что после завершения процедуры сборка не активна.
183 Serginio1
 
06.07.16
11:20
(182) Она загружена в процессы. Поэтому еще раз лучше использовать
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL);
184 DES
 
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
как понимать ?
185 Serginio1
 
06.07.16
18:11
Скинь DLL посмотрю
186 Serginio1
 
06.07.16
18:12
Достаточно тип указать строкой
запрос =  _Врап.СоздатьОбъект("ServiceEfactura.ServiceReference." + "InvoicesContentRequest");
187 DES
 
06.07.16
18:49
{ОбщийМодуль.EFactura.Модуль(121)}: Ошибка при вызове метода контекста (СоздатьОбъект)
                    Request =  Врап.СоздатьОбъект(NameSpace + "InvoicesContentRequest");
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип ServiceEfactura.ServiceReference.InvoicesContentRequest
188 Serginio1
 
06.07.16
19:52
Значит его нет, или он в другой сборке
189 DES
 
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 {
190 DES
 
06.07.16
20:35
191 Serginio1
 
06.07.16
21:59
А в VS проверял? Может не та DLL или тпи приватный?

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

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

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

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

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

Все прекрасно работает
198 DES
 
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");
199 Serginio1
 
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 это для веб ссылку.

Покажи весь код я у себя проверю
200 Serginio1
 
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 = пароль;
201 DES
 
07.07.16
10:32
(199) ну так я перестроил для web-ссылки.
202 Serginio1
 
07.07.16
10:39
Что то ты не сделал. У меня работает и по ссылке на службу.
Покажи код который не работает. Я из-за тебя не выспался.
203 Serginio1
 
07.07.16
10:40
И времени у меня мало.
204 DES
 
07.07.16
10:49
Функция API_eFactura(_ИмяФункции, _ПараметрыФункции, _UserName="", _PassWord="") Экспорт // GetLogs from SIA E-Factura
    Перем ПутьКФайлуСборки, ИмяФайлаСборки, ФайлСборки, врап, Сборка_API_eFactura, DLLs;
    Перем Http, NameSpace, BasicHttpsBinding, Binding, Address;
    Перем UserName, PassWord;
    Перем Request, Ответ, Результат;
    
    Результат = Неопределено;
    ИмяФайлаСборки = "ServiceEfactura.dll";
    ПутьКФайлуСборки = КаталогВременныхФайлов() + ИмяФайлаСборки;
    ФайлСборки = Новый Файл(ПутьКФайлуСборки);
    Если ФайлСборки.Существует() Тогда
        Врап = Новый COMОбъект("NetObjectToIDispatch45");
        NameSpace = "ServiceEfactura.ServiceReference.";
        Попытка
            Сборка_API_eFactura = Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ФайлСборки.ПолноеИмя);
        Исключение
            Сборка_API_eFactura = Неопределено;
        КонецПопытки;
    КонецЕсли;
    
    Если Сборка_API_eFactura=Неопределено Тогда //    Сообщить("Сервис API eFactura недоступен. Инструкция https://efactura.fisc.md/Help/eFactura_Integration_Guide.pdf";);
        Возврат Неопределено;
    Иначе
        UserName = "DES";
        PassWord = "MyPass";  
        Http = "Https";
        BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.Basic" + Http + "Binding", "System.ServiceModel.dll");
        Binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.Basic" + Http + "SecurityMode").TransportWithMessageCredential);
        Binding.MaxBufferSize = 2147483647;
        Binding.MaxReceivedMessageSize = 2147483647;
        Address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-efactura.fisc.md";);
        Попытка
            СlientEFactura = Врап.СоздатьОбъект(NameSpace + "ServiceClient", Binding, Address);    
            СlientEFactura.ClientCredentials.UserName.UserName = ?(ПустаяСтрока(_UserName), UserName, _UserName);
            СlientEFactura.ClientCredentials.UserName.Password =  ?(ПустаяСтрока(_Password), PassWord, _Password);
        Исключение
            EFactura.ОбработкаОшибкиСlientEFactura(СlientEFactura.ПоследняяОшибка);
            СlientEFactura = Неопределено;
        КонецПопытки;
        Если НЕ СlientEFactura=Неопределено Тогда
            Если      _ИмяФункции="Test" Тогда
                #Область Test                                    
                Request = "TEST";
                Ответ = СlientEFactura.Test(Request);
                Результат = Новый Структура("RequestId,Status,TimeStamp", Ответ.RequestId, Ответ.Status, Ответ.TimeStamp);
                #КонецОбласти    
            ИначеЕсли _ИмяФункции="GetInvoicesContentForPrint" Тогда
                #Область GetInvoicesContentForPrint                    
                Request =  Врап.СоздатьОбъект(NameSpace + "InvoicesContentRequest");
                SeriaAndNumbers = Врап.СоздатьОбъект(Врап.ТипКакОбъект(Врап.ПолучитьТип("System.Collections.Generic.List`1")).MakeGenericType(Врап.ПолучитьТип(NameSpace + "InvoiceIndentificator")));
                SeriaAndNumber = врапОбъект(Врап, "InvoiceIndentificator");
                SeriaAndNumber.Seria = _ПараметрыФункции.Seria;
                SeriaAndNumber.Number = _ПараметрыФункции.Number;
                SeriaAndNumbers.Add(SeriaAndNumber);     
                Request.SeriaAndNumbers = SeriaAndNumbers.ToArray();
                Request.ActorRole = _ПараметрыФункции.ActorRole;
                Request.Orientation = _ПараметрыФункции.Orientation;
                Request.RequestId = Строка(Новый УникальныйИдентификатор());
                Попытка                    
                    Ответ = СlientEFactura.GetInvoicesContentForPrint(Request);
                Исключение
                    Ответ = Неопределено;
                КонецПопытки;                    
                Если Ответ=Неопределено Тогда
                    Возврат Неопределено;
                Иначе
                    //                        Результат = Новый Структура("Address,ExistInTaxRegistry,IDNO,IsEFacturaActor,Name,TaxpayerType",Taxpayer.Address,Taxpayer.ExistInTaxRegistry,Taxpayer.IDNO,Taxpayer.IsEFacturaActor,Taxpayer.Name,Taxpayer.TaxpayerType);
                КонецЕсли;
                #КонецОбласти                
            ИначеЕсли _ИмяФункции="GetTaxpayersInfo" Тогда
                #Область GetTaxpayersInfo                    
                Request = врапОбъект(Врап, "TaxpayersRequest");
                FiscalCodes = Врап.СоздатьОбъект("System.Collections.Generic.List`1[System.String]");
                FiscalCodes.Add(_ПараметрыФункции.IDNO);     
                Request.FiscalCodes = FiscalCodes.ToArray();
                Request.RequestId = Строка(Новый УникальныйИдентификатор());
                Попытка                    
                    Ответ = СlientEFactura.GetTaxpayersInfo(Request);
                Исключение
                    Ответ = Неопределено;
                КонецПопытки;                    
                Если НЕ Ответ=Неопределено Тогда
                    Для Каждого Taxpayer Из Ответ.Results Цикл  
                        Результат = Новый Структура("Address,ExistInTaxRegistry,IDNO,IsEFacturaActor,Name,TaxpayerType",Taxpayer.Address,Taxpayer.ExistInTaxRegistry,Taxpayer.IDNO,Taxpayer.IsEFacturaActor,Taxpayer.Name,Taxpayer.TaxpayerType);
                    КонецЦикла;
                КонецЕсли;
                #КонецОбласти    
            ИначеЕсли _ИмяФункции="GetSeriaAndNumbers" Тогда
                #Область GetSeriaAndNumbers
                //                    Request = врапОбъект(Врап, "SeriaNumberRequest");
                Request = Врап.СоздатьОбъект("ServiceEfactura.ServiceReference." + "SeriaNumberRequest");
                Request.Count = _ПараметрыФункции.Count;
                Request.InvoiceType = _ПараметрыФункции.InvoiceType;
                Request.RequestId = Строка(Новый УникальныйИдентификатор());
                Попытка                    
                    Ответ = СlientEFactura.GetSeriaAndNumbers(Request);
                Исключение
                    Ответ = Неопределено;
                КонецПопытки;                    
                Если НЕ Ответ=Неопределено Тогда
                    Для Каждого Taxpayer Из Ответ.Results Цикл  
                        //                            Результат = Новый Структура("Address,ExistInTaxRegistry,IDNO,IsEFacturaActor,Name,TaxpayerType",Taxpayer.Address,Taxpayer.ExistInTaxRegistry,Taxpayer.IDNO,Taxpayer.IsEFacturaActor,Taxpayer.Name,Taxpayer.TaxpayerType);
                    КонецЦикла;
                КонецЕсли;
                
                #КонецОбласти
            ИначеЕсли _ИмяФункции="GetInvoicesQRcodes" Тогда
                #Область GetInvoicesQRcodes
                
                Request = врапОбъект(Врап, "InvoicesRequest");
                SeriaAndNumbers = Врап.СоздатьОбъект(Врап.ТипКакОбъект(Врап.ПолучитьТип("System.Collections.Generic.List`1")).MakeGenericType(Врап.ПолучитьТип(NameSpace + "InvoiceIndentificator")));
                SeriaAndNumber = врапОбъект(Врап, "InvoiceIndentificator");
                SeriaAndNumber.Seria = _ПараметрыФункции.Seria;
                SeriaAndNumber.Number = _ПараметрыФункции.Number;
                SeriaAndNumbers.Add(SeriaAndNumber);     
                Request.SeriaAndNumbers = SeriaAndNumbers.ToArray();
                Request.RequestId = Строка(Новый УникальныйИдентификатор());
                Попытка                    
                    Ответ = СlientEFactura.GetInvoicesQRcodes(Request);
                Исключение
                    Ответ = Неопределено;
                КонецПопытки;                    
                Если Ответ=Неопределено Тогда
                    Результат = Неопределено
                Иначе
                    Результат = Ответ;
                КонецЕсли;    
                
                #КонецОбласти
            ИначеЕсли _ИмяФункции="GetInvoicesBySeriaNumber" Тогда
                #Область GetInvoicesBySeriaNumber
                Request = врапОбъект(Врап, "InvoicesRequest");
                SeriaAndNumbers = Врап.СоздатьОбъект(Врап.ТипКакОбъект(Врап.ПолучитьТип("System.Collections.Generic.List`1")).MakeGenericType(Врап.ПолучитьТип(NameSpace + "InvoiceIndentificator")));
                SeriaAndNumber = врапОбъект(Врап, "InvoiceIndentificator");
                SeriaAndNumber.Seria = _ПараметрыФункции.Seria;
                SeriaAndNumber.Number = _ПараметрыФункции.Number;
                SeriaAndNumbers.Add(SeriaAndNumber);     
                Request.SeriaAndNumbers = SeriaAndNumbers.ToArray();
                Request.RequestId = Строка(Новый УникальныйИдентификатор());
                Попытка                    
                    Ответ = СlientEFactura.GetInvoicesBySeriaNumber(Request);
                Исключение
                    Ответ = Неопределено;
                КонецПопытки;                    
                Если Ответ=Неопределено Тогда
                    Результат = Неопределено
                Иначе
                    Для Каждого Invoice Из Ответ.Results Цикл
                        InvoiceStatus = Invoice.InvoiceStatus;
                        Xml = Invoice.Xml;
                        Прервать;
                    КонецЦикла;
                    Результат = Новый Структура("InvoiceStatus,Xml", InvoiceStatus, Xml);
                КонецЕсли;
                #КонецОбласти
            ИначеЕсли _ИмяФункции="GetInvoicesForSigning" Тогда
                #Область GetInvoicesForSigning
                #КонецОбласти
            ИначеЕсли _ИмяФункции="GetAcceptedInvoices" Тогда
                #Область GetAcceptedInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="GetRejectedInvoices" Тогда
                #Область GetRejectedInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="PostRejectedInvoices" Тогда
                #Область PostRejectedInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="PostAcceptedInvoices" Тогда
                #Область PostAcceptedInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="PostCanceledInvoices" Тогда
                #Область PostCanceledInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="PostInvoices" Тогда
                #Область PostInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="SearchInvoices" Тогда
                #Область SearchInvoices
                #КонецОбласти
            ИначеЕсли _ИмяФункции="GetLogs" Тогда
                #Область GetLogs                                        
                Request = врапОбъект(Врап, "LogsRequest");
                Request.From = _ПараметрыФункции.From;
                Request.To = _ПараметрыФункции.To;
                Request.RequestId = Строка(Новый УникальныйИдентификатор());
                Попытка                    
                    Ответ = СlientEFactura.GetLogs(Request);
                Исключение
                    Ответ = Неопределено;
                КонецПопытки;
                Если НЕ Ответ=Неопределено Тогда
                    Если Ответ.Results.Length>0 Тогда  
                        Результат = Новый Массив(Ответ.Results.Length, 6);
                        й = 0;
                        Для Каждого Стр Из Ответ.Results Цикл  
                            Результат[й][0] = Стр.Method;
                            Результат[й][1] = Стр.Username;
                            Результат[й][2] = Стр.StartDateTime;
                            Результат[й][3] = Стр.Status;
                            Результат[й][4] = Стр.Response;
                            Результат[й][5] = Стр.Error;
                            й = й + 1;
                        КонецЦикла;
                    Иначе
                        Результат = Неопределено;
                    КонецЕсли;
                КонецЕсли;
                #КонецОбласти    
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Врап.ЗакрытьРесурс(СlientEFactura);
    Возврат Результат;
    
КонецФункции
205 Serginio1
 
07.07.16
11:07
Давай по порядку

врап=новый COMОбъект("NetObjectToIDispatch45");
    врап.ВыводитьСообщениеОбОшибке=ложь;
    ПространствоИмен="efactura.ServiceReference1.";
    ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll";
    
    BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding", "System.ServiceModel.dll");
    Binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential);
    Binding.MaxBufferSize = 2147483647;
    Binding.MaxReceivedMessageSize = 2147483647;

    СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc";;
    ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу);

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

    СlientEFactura = Врап.СоздатьОбъект(ServiceClient,Binding,remoteAddress);  

    UserName1 = СlientEFactura.ClientCredentials.UserName;

    UserName1.UserName = UserName;

    UserName1.Password = PassWord;  
    
    
    Попытка
     Request = "TEST";
     Ответ = СlientEFactura.Test(Request);

     результат = Новый Структура("RequestId,Status,TimeStamp", Ответ.RequestId, Ответ.Status, Ответ.TimeStamp);
    исключение
     сообщить(Врап.Встроку(Врап.ПоследняяОшибка));
   КонецПопытки;
206 Serginio1
 
07.07.16
11:08
СlientEFactura.Test такого метода нет.
Какой еще метод не работает?
207 DES
 
07.07.16
11:11
ЕСТЬ.
Не работает потому что не залогинился, я не могу дать пароли
208 DES
 
07.07.16
11:12
метод TEST возвращает логин при любом входящем параметре.
209 DES
 
07.07.16
11:16
а скинь твою DLL мне, плиз
210 DES
 
07.07.16
11:16
в смысле: efactura.dll
211 Serginio1
 
07.07.16
11:18
Да есть. Тогда ничем помочь не могу.
А что это за народное творчество
EFactura.ОбработкаОшибкиСlientEFactura(СlientEFactura.ПоследняяОшибка);


Ты возвращай ошибки а не скрывай их
212 DES
 
07.07.16
11:19
(211) - это обработка ошибки, а что ?

набрал твой код

    врап = новый COMОбъект("NetObjectToIDispatch45");
    врап.ВыводитьСообщениеОбОшибке = ложь;
    ПространствоИмен = "efactura.ServiceReference1.";
    ПутьКФайлу = "D:\ServiceEfactura\ClassLibrary2\ClassLibrary2\bin\Release\ServiceEfactura.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 = UserName;
    UserName1.Password = PassWord;
дает

{ОбщийМодуль.EFactura.Модуль(554)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки)
    ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу);
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип efactura.ServiceReference1.ServiceClient в сборке C:\Program Files\FilesNetObjectToIDispatch2\ServiceEfactura.dll

похоже dll-ки разные.
213 Serginio1
 
07.07.16
11:21
Правильно у тебя другое пространство имен
214 Serginio1
 
07.07.16
11:25
То есть у тебя общий модуль
EFactura.

С методом ОбработкаОшибкиСlientEFactura

Только у СlientEFactura нет свойства ПоследняяОшибка
(СlientEFactura.ПоследняяОшибка);

Есть
Врап.ПоследняяОшибка
215 Serginio1
 
07.07.16
11:27
Да кстати отправил
216 DES
 
07.07.16
11:30
взял твою сборку и твой код и мой путь к файлу сборки

врап = новый COMОбъект("NetObjectToIDispatch45");
//    врап.ВыводитьСообщениеОбОшибке = ложь;
ПространствоИмен = "efactura.ServiceReference1.";
ПутьКФайлу = "D:\FilesNetObjectToIDispatch2\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 = UserName;
UserName1.Password = PassWord;

дает
{ОбщийМодуль.EFactura.Модуль(554)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки)
    ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу);
по причине:
Произошла исключительная ситуация (mscorlib): Не удалось загрузить файл или сборку "file:///D:\FilesNetObjectToIDispatch2\efactura.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)
217 DES
 
07.07.16
11:36
у тебя FW 4,6,1 - у меня 4,5,1 - может в этом дело ?
218 Serginio1
 
07.07.16
11:37
У тебя какая версия NetObjectToIDispatch

возьми последнюю отсюда
http://files.rsdn.ru/19608/%d0%a4%d0%b0%d0%b9%d0%bb%d1%8bNetObjectToIDispatch.zip

И .Net 4.6.1
219 DES
 
07.07.16
11:38
так ты скинул dll c ссылкой на web-службу ?
220 Serginio1
 
07.07.16
11:41
Я загрузил данные по https://api-efactura.fisc.md/Service.svc?wsdl

Можешь посмотреть в VS через настроить ссылку на службу
221 DES
 
07.07.16
11:42
так на службу или на веб-службу ?
222 Serginio1
 
07.07.16
12:19
На службу. Все типы видны.
223 DES
 
07.07.16
13:09
... может я *.config файлы недобрасываю.
(я надеюсь что они не используются.)
224 Serginio1
 
07.07.16
13:37
Они не используются.
Все задается здесь
привязка = Врап.СоздатьОбъект("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);
225 DES
 
07.07.16
15:28
упорно говорит что твой проект 4,6,1, который не установлен на данном компе
, хотя, http://prntscr.com/bpx7sb
и я снес FW4.5
обновил комп до невозможности и FW4.5.2 и FW4.6.1 установились и обновились, что не пойму, что еще надо.
VS2013 тоже обновил
226 Serginio1
 
07.07.16
16:39
У меня VS2015 Update 3
227 Serginio1
 
07.07.16
16:42
Кстати ты на сервере при завершении метода
делай
сервер.Close();
Или
Врап.ЗакрытьРесурс(сервер);

То же самое ПриЗакрытии в обработке
228 DES
 
07.07.16
17:12
поставил 4.6.2, всеодно VS не дает выбрать более 4.5.1
ну и не пойму, один метод срабатывает , а другой нет.
а твоя dll даже не загружается.
229 Serginio1
 
07.07.16
17:21
Еще раз ставь VS2015 Update 3

Пятьнадцать
230 Beretta
 
07.07.16
17:23
(229) Через пару недель, когда ТС наконец-то, надеюсь, решит задачу, надо будет пройтись по этой теме и собрать все прямые и косвенные требования к супер-технологии практического применения NET в 1С8 с помощью Serginio1.

Интересный список получится, я думаю.
231 Serginio1
 
07.07.16
17:29
(230) Требования внимательно прочитать http://catalog.mista.ru/public/448668/

Ну и желательно сначала тестить в VS. В справке есть подробное описание, что и как делать. Например
https://msdn.microsoft.com/ru-ru/library/dd673931(v=vs.110).aspx

Более сложные задачи могу я подсказать или получить информацию на http://ru.stackoverflow.com/
232 Serginio1
 
07.07.16
17:34
233 Serginio1
 
07.07.16
17:40
232 Не посмотрел это ссылка web службу. В некоторых случаях предпочтительнее использовать её с разного рода кривыми сервисами.
Желательно работать со ссылками на службу
https://msdn.microsoft.com/ru-ru/library/bb628652.aspx
234 DES
 
07.07.16
18:05
Вот как понять, если делаю в VS добавить ссылку на службу - то виду метод Test. Если делаю добавить службу, то метода не видно. (Ты и сам сказал что нет такого метода.)
235 Serginio1
 
07.07.16
18:06
Есть. Я неправильно посмотрел
236 Serginio1
 
07.07.16
18:06
А что такое Если делаю добавить службу
237 Serginio1
 
07.07.16
18:08
Посмотри у ServiceClient есть Test
238 DES
 
07.07.16
18:13
да есть, я знаю. Его и в 1с WS-ссылки видно
239 DES
 
07.07.16
18:14
создание клиента при одинаков для web и просто службы?
я и то и то запилил в dll http://prntscr.com/bpzfhs
240 DES
 
07.07.16
18:15
а пункт Class1.cs можно удалить ?
241 Serginio1
 
07.07.16
18:15
Вот посмотри в картинках как нужно тестировать в VS
https://msdn.microsoft.com/ru-ru/library/bb386386.aspx
242 Serginio1
 
07.07.16
18:17
(240) Да. Пока не нужна тебе ссылка на web службу.  Но она и не мешает
243 DES
 
07.07.16
18:18
ну я же не должен ничего менять в коде C#
зачем мне тестировать не в 1С ?
244 Serginio1
 
07.07.16
18:20
А там ты больше информации получишь. Подсказку через точку итд. У тебя проблема началась, что не видно было тип

InvoicesContentRequest=Врап.ПолучитьТипИзСборки(ПространствоИмен+"InvoicesContentRequest",ПутьКФайлу);
    
    Док=Врап.СоздатьОбъект(InvoicesContentRequest);
    Док.ActorRole=1;
    Сообщить(Док.ActorRole);
245 DES
 
07.07.16
18:23
да я до этой инфо могу достучаться запросто.
Создаю тип и в отладчике смотрю структуру.
Одни типы создаются, а другие - нет. (Причем они однотипные).
Как мне поможет отладка не под 1с ?
246 Serginio1
 
07.07.16
18:25
Под 1С есть косяки. Короче ты ради интереса попробуй и все сразу поймешь. А то рассказывать какая вкусная икра, человеку ни разу её не пробовавшему ооочень сложно
247 Serginio1
 
07.07.16
18:26
При этом у меня этот тип создался.
248 Serginio1
 
07.07.16
18:26
Значит все таки ты другую DLL использовал.
249 DES
 
07.07.16
18:30
твоя не взлетела, а можешь её в FW 4.5.1 сделать ?
250 DES
 
07.07.16
18:37
вот сделал минимальный код
    ИмяФайлаСборки = "ServiceEfactura.dll";
    ПространствоИмен = "ServiceEfactura.ServiceReference.";
    КаталогФайлаСборки = "%CommonProgramFiles%";
    ПутьКФайлуСборки = ПолучитьКаталог(КаталогФайлаСборки) + "\NetObjectToIDispatch.1C\" + ИмяФайлаСборки;
    ФайлСборки = Новый Файл(ПутьКФайлуСборки);
    ПутьКФайлу = ФайлСборки.ПолноеИмя;
    врап = Новый COMОбъект("NetObjectToIDispatch45");

    InvoicesContentRequest1 = врап.ПолучитьТипИзСборки(ПространствоИмен + "SeriaNumberRequest", ПутьКФайлу);

    InvoicesContentRequest2 = врап.ПолучитьТипИзСборки(ПространствоИмен + "InvoicesContentRequest", ПутьКФайлу);

InvoicesContentRequest1  - создается
InvoicesContentRequest2  - нет.
как порыться в dll и узнать есть там такой тип ?
251 DES
 
07.07.16
18:39
так есть же http://prntscr.com/bpzr50
252 DES
 
07.07.16
18:40
но этот тип не правильный. Один раз случайно он создался и я видел правильную структуру
дам должно быть номер и серия  - это для получения печатной формы по номеру накладной.
А этот тип (на картинке) левый какой то.
253 DES
 
07.07.16
18:43
прошу суд (252) во внимание не принимать
254 DES
 
07.07.16
18:51
кстати     врап.ВыводитьСообщениеОбОшибке = ложь
не работает - все равно выбрасывает окно с мессагой
255 DES
 
07.07.16
20:51
сделал тестирование типов

ИмяФайлаСборки = "ServiceEfactura.dll";
ПространствоИмен = "ServiceEfactura.ServiceReference.";
КаталогФайлаСборки = "%CommonProgramFiles%";
ПутьКФайлуСборки = ПолучитьКаталог(КаталогФайлаСборки) + "\NetObjectToIDispatch.1C\" + ИмяФайлаСборки;
ФайлСборки = Новый Файл(ПутьКФайлуСборки);
ПутьКФайлу = ФайлСборки.ПолноеИмя;
врап = Новый COMОбъект("NetObjectToIDispatch45");
врап.ВыводитьСообщениеОбОшибке = 0;

СписокТипов = Новый СписокЗначений();
СписокТипов.Очистить();
    СписокТипов.Добавить("TaxpayersRequest");
    СписокТипов.Добавить("BankAccountRequest");
    СписокТипов.Добавить("SeriaNumberRequest");
    СписокТипов.Добавить("InvoicesRequest");
    СписокТипов.Добавить("SignRequest");
    СписокТипов.Добавить("InvoicesContentRequest");
    СписокТипов.Добавить("ActorBaseRequest");
    СписокТипов.Добавить("RejectRequest");
    СписокТипов.Добавить("AcceptedRequest");
    СписокТипов.Добавить("CanceledRequest");
    СписокТипов.Добавить("PostInvocesRequest");
    СписокТипов.Добавить("SearchRequest");
    СписокТипов.Добавить("LogsRequest");
    СписокТипов.Добавить("string");
Для Каждого Стр Из СписокТипов Цикл
    ТестТипа(Стр.Значение, Врап, ПутьКФайлу);
КонецЦикла;
        
КонецПроцедуры

Функция ТестТипа(НаименованиеТипа, Врап, ПутьКФайлу)
    
    ПространствоИмен = "ServiceEfactura.ServiceReference.";
    Request = Неопределено;
    Попытка
        Request = Врап.ПолучитьТипИзСборки(ПространствоИмен + НаименованиеТипа, ПутьКФайлу);
        Сообщить(НаименованиеТипа + " протестирован. " + Request);
    Исключение
        Сообщить(НаименованиеТипа + " сбой.");
    КонецПопытки;
    
КонецФункции

получил результат:

TaxpayersRequest протестирован. COMОбъект
BankAccountRequest сбой.
SeriaNumberRequest протестирован. COMОбъект
InvoicesRequest протестирован. COMОбъект
SignRequest протестирован. COMОбъект
InvoicesContentRequest сбой.
ActorBaseRequest протестирован. COMОбъект
RejectRequest протестирован. COMОбъект
AcceptedRequest протестирован. COMОбъект
CanceledRequest протестирован. COMОбъект
PostInvocesRequest протестирован. COMОбъект
SearchRequest протестирован. COMОбъект
LogsRequest протестирован. COMОбъект
string сбой.

может такое быть из-за кода 1С8 ?
256 DES
 
07.07.16
21:05
и
TaxpayersResponse протестирован. c69f27fc-bb7f-4db5-9689-a5b1e32c9d74
BankAccountResponse сбой.
SeriaNumberResponse протестирован. c03e7bd1-cc5c-4cc8-8115-eda7b0cd7f39
QRCodesResponse протестирован. b4cf5db0-dbc3-4cf0-9df5-28dc848dbe69
InvoicesXmlResponse протестирован. a5914550-8132-47cd-94e6-2f6e8a0e9734
InvoicesXmlResponse протестирован. b2e75b03-7dad-4b7b-958a-770dd2ce1946
InvoiceContentResponse сбой.
InvoicesResponse протестирован. ceff6b7a-9876-4fe5-8a8e-3c7ab3b57fd5
InvoicesResponse протестирован. 19cbb218-7a59-47fe-8a02-ee2ff47f2cf4
RejectedResponse протестирован. ca39bd45-6da0-4e8e-8374-5971fb5cc313
AcceptedResponse протестирован. 2a82ae02-6b49-473a-bef8-a8ce09c708e8
CanceledResponse протестирован. 0b342e41-7e52-4c76-8492-e612eea3268f
PostInvocesResponse протестирован. 8a6b942f-4ff6-408d-adff-516cf228a7f4
InvoicesResponse протестирован. 2cecfbc5-f428-41de-b58a-14c9b179e2e8
LogsResponse протестирован. 0c9b5acf-64ae-4f15-8c09-f50328e1cbb6
BaseResponse протестирован. 17724b4f-6bf2-40d2-88c7-1cbe041b2104
257 DES
 
07.07.16
21:06
чего то 2 функции - ни входящие типы , ни исходящие - не создаются
258 Serginio1
 
07.07.16
21:58
(257) У меня 244 Все прекрасно создается
А VS создается?
259 Serginio1
 
07.07.16
22:01
Поставь последнюю из 218
260 DES
 
08.07.16
07:05
(218) у меня послеlняя, кстати в них можно уже и версионность вести ;)
261 Serginio1
 
08.07.16
08:08
(260) Если последняя, тогда 244 у тебя должна работать с моей DLL
262 Serginio1
 
08.07.16
08:09
Хотя у меня 10 ка. Но таких проблем у меня никогда не было.
263 Serginio1
 
08.07.16
08:29
И проверить в VS ты не можешь?
264 DES
 
08.07.16
08:52
пересобрал сборку под FW 4.6.1
никаких различий, те же проблемы

TaxpayersRequest протестирован. 19fc03b4-fd53-4dfe-908d-0bd9638c4ce9
BankAccountRequest сбой.
SeriaNumberRequest протестирован. 5771c993-3569-43b0-9cc6-059d5abc6ba9
InvoicesRequest протестирован. 746098ee-493e-458d-89cb-7761d72cb0e4
SignRequest протестирован. 6498763e-ed63-454f-a621-a1adcd6384d5
InvoicesContentRequest сбой.
ActorBaseRequest протестирован. 1dc66503-3bc8-4cda-847e-42061df0ceca
RejectRequest протестирован. f0874496-ef4f-4e93-bf7d-568617dc40a5
AcceptedRequest протестирован. 97030ab6-4a01-47b3-afd6-d7aabf284e48
CanceledRequest протестирован. 514f0508-6e24-4a48-b3b3-0f3c149780fc
PostInvocesRequest протестирован. 14f277ee-bc62-4d79-8e30-8fa844dafd6d
SearchRequest протестирован. 331e5b7b-dfd7-4a02-80b4-c8ce3e8544d5
LogsRequest протестирован. dfda48ac-af4a-41ea-b4d7-08bd0366bfa3
string сбой.
TaxpayersResponse протестирован. 70a84d3c-25ad-491c-bab9-a27df6b44303
BankAccountResponse сбой.
SeriaNumberResponse протестирован. 6126a146-a50b-483c-afc0-afb4ee17d921
QRCodesResponse протестирован. 7a2b6b9a-3eef-400e-b0b6-a75798bb2487
InvoicesXmlResponse протестирован. 21ddb6a1-ddc2-44e4-a4a2-1c5b738aa6ae
InvoicesXmlResponse протестирован. 4f89912c-5a54-424c-8ab9-607af69ae89e
InvoiceContentResponse сбой.
InvoicesResponse протестирован. 10419ac5-04f0-43ed-8d12-1c4de7340363
InvoicesResponse протестирован. 63d2b4ba-3fb7-4ad4-9b81-4e3740fdc5b7
RejectedResponse протестирован. ddad0252-9d7f-4368-90a7-458ae6651d9b
AcceptedResponse протестирован. 1d810003-52c4-4f86-ab4e-751425488adb
CanceledResponse протестирован. 68d8c572-234e-474f-8987-d9f55fb20cd0
PostInvocesResponse протестирован. 9f4f518f-338f-44a2-887a-e5cae82642b1
InvoicesResponse протестирован. 1dd9d9c7-9d1b-4264-8025-9437b9b4c6ce
LogsResponse протестирован. 36775a9e-07ab-4240-bbe4-59a6ae9ee8c2
BaseResponse протестирован. c1cf4f25-0a88-45e7-806e-1da739be54d1
265 Serginio1
 
08.07.16
10:18
string На самом деле System.String

У меня
врап=новый COMОбъект("NetObjectToIDispatch45");
    врап.ВыводитьСообщениеОбОшибке=ложь;
    ПространствоИмен="efactura.ServiceReference1.";
    ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll";

    СписокТипов = Новый СписокЗначений();
СписокТипов.Очистить();
    СписокТипов.Добавить("TaxpayersRequest");
    СписокТипов.Добавить("BankAccountRequest");
    СписокТипов.Добавить("SeriaNumberRequest");
    СписокТипов.Добавить("InvoicesRequest");
    СписокТипов.Добавить("SignRequest");
    СписокТипов.Добавить("InvoicesContentRequest");
    СписокТипов.Добавить("ActorBaseRequest");
    СписокТипов.Добавить("RejectRequest");
    СписокТипов.Добавить("AcceptedRequest");
    СписокТипов.Добавить("CanceledRequest");
    СписокТипов.Добавить("PostInvocesRequest");
    СписокТипов.Добавить("SearchRequest");
    СписокТипов.Добавить("LogsRequest");
    Для Каждого Стр Из СписокТипов Цикл
        попытка

    Тип=Врап.ПолучитьТипИзСборки(ПространствоИмен+Стр.Значение,ПутьКФайлу)
исключение
    Сообщить("Ошибка получения типа "+Стр.Значение);
     сообщить(Врап.Встроку(Врап.ПоследняяОшибка));

    конецпопытки;
КонецЦикла;

Все проходит.
266 Новиков
 
08.07.16
10:31
Мда. Вот ипота-то сказочная.

Не вникая даже в суть творящегося, понаблюдаю за тем, в итоге ТС удовлетворится или нет.
267 Serginio1
 
08.07.16
10:43
Отпаравил на почту DLL с которой у меня все работает NetObjetToIDispatch45.dll

Проверь путь загруженной сборки

тип = врап.ПолучитьТип("NetObjectToIDispatch45.GlobalContext1C");
тип=Врап.ТипКакОбъект(тип);
assem=тип.Assembly;
Сообщить(assem.Location);
268 Serginio1
 
08.07.16
10:44
(266) А ты вникни, а то не читал, но осуждаю
269 Serginio1
 
08.07.16
11:53
Если не получится вышли свою DLL
270 DES
 
08.07.16
12:24
С твой, из почты, DLL и на W2008r2 тесты прошли успешно.
271 Serginio1
 
08.07.16
12:34
(270) Вышли свою. Посмотрю
272 Serginio1
 
08.07.16
12:36
Вернее про какую DLL мы говорим? Я про ServiceEfactura.dll
273 DES
 
08.07.16
12:39
я про твое изобретение.
274 DES
 
08.07.16
12:40
щас переделываю тест на реале. ща поглядим
275 Serginio1
 
08.07.16
12:45
(273) Так в 218 должен быть аналог. Чуть позже добавлю более простое создание Genric типов и обновлю
276 DES
 
08.07.16
12:50
(275) ну все тики-так.
получаю PDF от сервиса.
Кстати, есть какая-то простая печаталка PDF  чтоб из-под 1с8 запускать ?
277 Serginio1
 
08.07.16
13:04
Я так же буду в Интернете смотреть.
278 Serginio1
 
08.07.16
13:05
279 Serginio1
 
08.07.16
13:07
280 oleg_km
 
08.07.16
13:07
(266) Может сделать тоже православным 1Сным способом?
281 Serginio1
 
08.07.16
13:11
(280) Ну он не читает. Зачем это ему. Проблема была в старой компоненте NetObjetToIDispatch45.dll и поначалу в старых DLL для подключения к сервису.
282 DES
 
08.07.16
13:11
(279) т.е. добавить в мою сборку модуль печати PDF и вызывать его ?
283 Новиков
 
08.07.16
13:19
(281) >>Ну он не читает. Зачем это ему.

Конечно не читаю. Зачем мне это?
284 oleg_km
 
08.07.16
13:19
(282) Там же вроде отдельная сборка.
285 DES
 
08.07.16
13:20
отдельная - не комильфо
286 Serginio1
 
08.07.16
13:25
(282) Нет там отдельные сборки Spire.Pdf.dll и Spire.License.dll

Не отдельно ты не найдешь
287 Serginio1
 
08.07.16
14:07
Но можно  Собрать проект Visual Studio в один файл с помощью ILMerge
https://habrahabr.ru/post/126089/
288 Serginio1
 
08.07.16
14:14
289 DES
 
08.07.16
14:17
ругаются на ILMerge.
А почему я не смогу дописать в классы свою функцию ?
290 Serginio1
 
08.07.16
14:20
Сможешь только тебе придется добавить эти две библиотеки в проект
291 Serginio1
 
08.07.16
14:54
Или можешь использовать командную строку из 1С
http://rsdn.ru/forum/dotnet/6117010.all
292 Serginio1
 
08.07.16
15:12
293 DES
 
08.07.16
17:14
Благодарствую.
294 DES
 
10.07.16
19:39
еще один проблемс, не создается BankAccountRequest
вроде бы однотипно описаны входящие переменные, но эта не создается, может глянешь у себя ?

{ОбщийМодуль.EFactura.Модуль(75)}: Ошибка при вызове метода контекста (СоздатьОбъект)
                        Request = Врап.СоздатьОбъект(ПространствоИмен + "BankAccountRequest");
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип ServiceEfactura.ServiceReference.BankAccountRequest
295 DES
 
10.07.16
19:42
и так тоже
    Возврат _Врап.СоздатьОбъект(_Врап.ПолучитьТип("ServiceEfactura.ServiceReference." + _ИмяОбъекта));
по причине:
Произошла исключительная ситуация (NetObjetToIDispatch45):  неверный тип ServiceEfactura.ServiceReference.BankAccountRequest
296 Serginio1
 
10.07.16
20:45
(295) У меня тест в 265 прошел. А там и BankAccountRequest.
Смотри пространство имен.
297 DES
 
10.07.16
20:55
не, разобрался.
обращается к сборке старой, ранее зареганой
C:\Program Files\FilesNetObjectToIDispatch2\ServiceEfactura.dll
а я указываю
C:\Program Files\Common Files\NetObjectToIDispatch.1C\ServiceEfactura.dll

Тип = Врап.ПолучитьТипИзСборки(ПространствоИмен + "BankAccountRequest", ФайлСборки.ПолноеИмя);
298 Serginio1
 
10.07.16
21:07
А как ты ServiceEfactura.dll  зарегистрировал?
Регистрировать нужно только NetObjetToIDispatch45.dll
299 DES
 
13.07.16
23:19
а можно как то  подключаться к серверу через прокси ?
(чтобы IP поменять)
300 Serginio1
 
14.07.16
00:05
301 Serginio1
 
14.07.16
00:10
302 Serginio1
 
14.07.16
00:12
303 DES
 
14.07.16
01:17
какая то фигня получается.
если запрашиваю список накладных - получаю 1 раз, все нормально
если запрашиваю повторно - 0 на выходе.
хотя если запрашивать конкретную накладную, хоть 100 раз подряд - работает.
304 Serginio1
 
14.07.16
07:48
Ты соединение закрываешь?
305 DES
 
14.07.16
08:43
ну вроде да, буфер сообщения сделал чуть больше 64к

Функция API_eFactura(_ИмяФункции, _ПараметрыФункции, _UserName="", _PassWord="") Экспорт // GetLogs from SIA E-Factura
    
    Перем Результат;
    Перем ФайлВрап, Assembly;
    Перем ПутьКФайлам, ИмяФайлаСборки, ПространствоИмен;  
    Перем Результат1;
    
    Результат = Неопределено;
    
    ФайлВрап = "NetObjectToIDispatch45";
    Попытка
        Врап = Новый COMОбъект(ФайлВрап);
        Врап.ВыводитьСообщениеОбОшибке = Ложь;
        Assembly = Врап.ТипКакОбъект(Врап.ПолучитьТип(ФайлВрап + ".GlobalContext1C")).Assembly;
    Исключение
        Assembly = Неопределено;
    КонецПопытки;
    Если НЕ Assembly=Неопределено Тогда
        ФайлВрап = Новый Файл(Assembly.Location);
        ПутьКФайлам = ФайлВрап.Путь;
        
        ИмяФайлаСборки = "ServiceEfactura.dll";
        ПространствоИмен = "ServiceEfactura.ServiceReference.";
        ИмяФайлаСборки = ПутьКФайлам + ИмяФайлаСборки;
        ФайлСборки = Новый Файл(ИмяФайлаСборки);
        Сборка_API_eFactura = ФайлСборки.Существует();
        Если Сборка_API_eFactura Тогда
            Попытка
                Сборка_API_eFactura = Врап.ПолучитьТипИзСборки(ПространствоИмен + "ServiceClient", ФайлСборки.ПолноеИмя);
            Исключение
                Сборка_API_eFactura = Неопределено;
            КонецПопытки;
        КонецЕсли;

        Если Сборка_API_eFactura=Неопределено Тогда //    Сообщить("Сервис API eFactura недоступен. Инструкция https://efactura.fisc.md/Help/eFactura_Integration_Guide.pdf";);
            Возврат Неопределено;
        Иначе
            Если ТипЗнч(_ПараметрыФункции)=Тип("Структура") Тогда
                #Область СlientEFactura                                
                UserName = "DES";
                PassWord = "MyPass";  
                Http = "Https";
                BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.Basic" + Http + "Binding", "System.ServiceModel.dll");
                Binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.Basic" + Http + "SecurityMode").TransportWithMessageCredential);
                Binding.MaxBufferSize = 2097151;
                Binding.MaxReceivedMessageSize = 2097151;
                Address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-efactura.fisc.md";);
                Попытка
                    СlientEFactura = Врап.СоздатьОбъект(ПространствоИмен + "ServiceClient", Binding, Address);    
                    СlientEFactura.ClientCredentials.UserName.UserName = ?(ПустаяСтрока(_UserName), UserName, _UserName);
                    СlientEFactura.ClientCredentials.UserName.Password =  ?(ПустаяСтрока(_Password), PassWord, _Password);
                Исключение
                    EFactura.ОбработкаОшибкиСlientEFactura(СlientEFactura.ПоследняяОшибка);
                    СlientEFactura = Неопределено;
                КонецПопытки;
                #КонецОбласти            
                Если НЕ СlientEFactura=Неопределено Тогда
                    Если _ИмяФункции="Test" Тогда
                        #Область Test                                    
                        Request = "TEST";
                        Попытка
                            Ответ = СlientEFactura.Test(Request);
                        Исключение
                            Ответ = Неопределено;
                        КонецПопытки;
                        Если Ответ=Неопределено Тогда
                            Результат = Неопределено;
                        Иначе
                            Результат = Новый Структура("RequestId,Status,TimeStamp", Ответ.RequestId, Ответ.Status, Ответ.TimeStamp);
                        КонецЕсли;
                        #КонецОбласти    
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        Врап.ЗакрытьРесурс(СlientEFactura);
    КонецЕсли;
    Возврат Результат;
    
КонецФункции
306 Serginio1
 
14.07.16
10:11
Наворотил.
Нет у  СlientEFactura свойства ПоследняяОшибка;

Есть Врап.ПоследняяОшибка . Я уже писал тебе.
307 DES
 
14.07.16
10:36
ну, ладно, а я закрываю соединение как нужно ?
308 Serginio1
 
14.07.16
10:48
Да можно СlientEFactura.Close()

Но
Врап.ЗакрытьРесурс(СlientEFactura);
универсален

Применяя ПолучитьТипИзСборки

ты получешь не сборку а тип.
ServiceClient= Врап.ПолучитьТипИзСборки(ПространствоИмен + "ServiceClient", ФайлСборки.ПолноеИмя);

Который можешь использовать для создания объекта
СlientEFactura = Врап.СоздатьОбъект(ServiceClient, Binding, Address);
309 DES
 
14.07.16
11:05
но так
СlientEFactura = Врап.СоздатьОбъект(ПространствоИмен + "ServiceClient", Binding, Address);    
тоже срабатывает ?
310 Serginio1
 
14.07.16
11:08
(309) Срабатывает так как ты уже сборку подгрузил,
Но вариант с
СlientEFactura = Врап.СоздатьОбъект(ServiceClient, Binding, Address);

Просто быстрее и лаконичнее.
311 DES
 
14.07.16
12:05
вот в их логах нашел  нашел

Error during serialization or deserialization using the JSON JavaScriptSerializer.
The length of the string exceeds the value set on the maxJsonLength property.

что бы это значило ?
312 Serginio1
 
14.07.16
12:19
https://msdn.microsoft.com/ru-ru/library/system.web.script.serialization.javascriptserializer.maxjsonlength(v=vs.110).aspx

Это скорее всего связано с

Задай им по максимуму
maxReceivedMessageSize=2147483647;

Binding.MaxBufferSize = maxReceivedMessageSize;

Binding.MaxReceivedMessageSize = maxReceivedMessageSize;
313 DES
 
14.07.16
12:27
какая то фигня, чтобы снять данные по сегодняшним ТТН нужно получить их список и по списку (но серии и номеру) дергать содержимое.
но если один раз получил список, то тут же получить еще раз не получается - возвращает список с 0 кол-вом строк.
Т.е. следить на новыми ТТН в течении дня не получится.
314 Serginio1
 
14.07.16
12:30
Ну это в службу поддержки.
315 DES
 
14.07.16
12:44
maxReceivedMessageSize=2147483647;
откуда такая цифра ?
316 DES
 
14.07.16
14:15
начал гонять получение лога
интересная деталь.
при некоторых значениях даты и времени выдает пусто
например с 14.07.2016 00:00:00 по 14.07.2016 23:59:59 - глючит, а  с 14.07.2016 090:00:00 по 14.07.2016 13:30:59 - выдает нормальный лог.
может быть дата+время не так передается ?
317 Serginio1
 
14.07.16
14:20
Фиддлером посмотри.
А это что такое 090:00:00?
318 Serginio1
 
14.07.16
14:21
Задай вопрос в службу поддержки.
319 DES
 
14.07.16
14:29
09:00:00
320 DES
 
14.07.16
14:30
ОНО возвращает время так /Date(-62135596800000)/
321 Serginio1
 
14.07.16
14:33
В формате JSON. Пиши в службу поддержки
322 Serginio1
 
14.07.16
14:33
А ты JSON формируешь?
323 Serginio1
 
14.07.16
14:38
Это возвращает тебе в JSON формате. Смотри фиддлером что отправляет
324 DES
 
14.07.16
15:19
не, JSON не нужно, у них описаны входные структуры.
вот щас на 14.07.2016 12:09:31 - дает лог
а на 14.07.2016 12:09:30 - фиг
325 DES
 
14.07.16
15:21
такого понятия как служба поддержки у них нет.
я все обзвонил, никто не слышал про API вообще.
326 Serginio1
 
14.07.16
15:28
Возьми в руки фиддлер и посмотри запрос. Можешь отослать им письмо.
Я без понятия, что и где там у них
327 DES
 
14.07.16
22:37
у меня такое впечатление, что все связанное с датой - глючит.
я намекаю, что может быть формат даты не соответствует или ломается при передаче через твою примочку?.
328 Serginio1
 
14.07.16
22:41
Возьми в руки фиддлер
329 DES
 
14.07.16
22:42
да там ногу сломишь
330 DES
 
14.07.16
22:52
пишет
This is a CONNECT tunnel, through which encrypted HTTPS traffic flows. To view the encrypted sessions inside this tunnel, enable the Tools > Fiddler Options > HTTPS > Decrypt HTTPS traffic option. A SSLv3-compatible ServerHello handshake was found. Fiddler extracted the parameters below. Version: 3.1 (TLS/1.0) SessionID:

-skipid-

Cipher: TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA [0xC014] CompressionSuite: NO_COMPRESSION [0x00] Extensions: server_name empty renegotiation_info 00 ec_point_formats uncompressed [0x0], ansiX962_compressed_prime [0x1], ansiX962_compressed_char2 [0x2]
331 tndr
 
14.07.16
23:02
Народ подскажите плиз, как правильно быть в такой ситуации:
Есть несколько версий платформ серверов приложений
8.1, 8.2, и 8.3.5 и 8.3.7

Надо иметь возможность из С# иметь возможность подключаться ко всем 4-м агентам сервера, именно к ним, не к базам, а к самой службе.
Нужно это для того чтобы с помощью 8VComConnector-а получать список баз который крутится на каждом из РАгентов.

Проблема в том, что для каждой платформы используется свой комконнектор, и свое пространство имен  V81,V82,V83 при подключенной к проекту компоненте.

Надо сделать так чтобы когда пользователь выбирает платформу, то иницировалось подключение к нужному серверу приложений (это по порту и не сложно), и основное - это понять какой класс комконнектора надо подключать с каким пространством имен.

Код примерно такой:
V83.COMConnector com1s = new V83.COMConnector();

V83.IServerAgentConnection agent = com1s.ConnectAgent(server);
            Array clasters = agent.GetClusters();
            
            foreach(V83.IClusterInfo clasterInfo in clasters) ......

И надо чтобы в зависимости от того, какая версия платформы выбрана, V82 менялось на V81 или на V83.
Или может какой-то другой подход должен быть?

И еще хотел узнать, если например я подключаю к проекту компоненту из релиза 8.2.19.83 на локальном компе, а на сервере есть  и этот и допустим 8.2.19.130,  V83.IServerAgentConnection agent = com1s.ConnectAgent(server); работать же не будет?
332 Serginio1
 
14.07.16
23:02
333 DES
 
14.07.16
23:04
вроде как нормально дату лепит, только без Z
система пишет типа 2016-07-14T20:05:11.249Z
а мои параметры
2016-07-14T20:05:11
334 Serginio1
 
14.07.16
23:06
(331) Для 8.3 не получится
v8: v8: Использование сборок .NET в 1С 7.x и 8.x
core83.dll использует текущего процесса
335 DES
 
14.07.16
23:57
влепил запрос без дат (там можно пустые) - получил все ТТН за все время.
Что-то с датами не то.
336 Serginio1
 
15.07.16
00:00
Без стороны сервера ты этого не поймешь
337 Serginio1
 
15.07.16
00:01
334+ Вернее для каждой 8.X нужен отдельный процесс.
338 DES
 
18.07.16
11:50
а как System.ServiceModel.BasicHttpBinding.TextEncoding переделать на windows-1250?
а то передает символы и исправляет в kou-8
339 Serginio1
 
18.07.16
12:01
Нет по умолчанию UTF8Encoding.
https://msdn.microsoft.com/ru-ru/library/system.servicemodel.basichttpbinding.textencoding(v=vs.100).aspx

Binding.TextEncoding Врап.ПолучитьТип("System.Text.Encoding").GetEncoding(1250);
340 Serginio1
 
18.07.16
12:03
Просто раз ты кирилицу передаешь, то 1250 тебе точно не подойдет. А у них по умолчанию только значит 1250. Следи затем, что бы кириллицу не передавать

Про GetEncoding
https://msdn.microsoft.com/ru-ru/library/wzsz3bk3(v=vs.110).aspx
341 Serginio1
 
18.07.16
12:30
Или если ы используешь строки то при получении строкового представления используй CultureInfo.InvariantCulture
http://catalog.mista.ru/public/448668/

CultureInfo=Врап.ПолучитьТип("System.Globalization.CultureInfo");
SB.AppendFormat(CultureInfo.InvariantCulture,"{0} {1} {2} {3}",Целое,Дробное,Строка,Дата,0);
Сообщить(SB.ToString());



Получаем

55333 66333.44 абвгд 01/26/2016 17:10:05
342 Serginio1
 
18.07.16
12:38
Или в 1С используй XMLСтрока
343 DES
 
20.07.16
12:29
А еще.
Получаю файл на сервере и сохраняю его под пользователем сервера USR1CV8, в его КаталогВременныхФайлов()
file.WriteAllBytes(Результат, Ответ.Result.Content);

Но Клиенты же могут не иметь доступа в темпу USR1CV8,
как перекинуть файл из темпа сервера в темп клиента?
ИЛИ вернуть с сервера не файл, а COMSafaArrray и уже на клиенте создавать файл? ( COMSafaArrray - содержит PDF)
344 Serginio1
 
20.07.16
12:42
Я тебе уже писал
Convert=Врап.ПолучитьТип("System.Convert");
ДД=Base64Значение(Convert.ToBase64String(Ответ.Result.Content))
345 Serginio1
 
20.07.16
12:44
А Двоичные Данные возвращай на клиента
346 DES
 
20.07.16
13:20
т.е. ДД - это двоичные данные?
347 Serginio1
 
20.07.16
14:11
Глобальный контекст (Global context)
Base64Значение (Base64Value)
Синтаксис:

Base64Значение(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Строка, закодированная по алгоритму base64.
Возвращаемое значение:

Тип: ДвоичныеДанные.

Описание:

Получает из строки закодированной по алгоритму base64 двоичные данные.
348 DES
 
11.08.16
17:12
можно ли 1с8.ехе заставить понимать файл 1с8.ехе.config при

Прокси = WSСсылки.eFactura.СоздатьWSПрокси(targetNamespace, name, Binding,,,Новый ЗащищенноеСоединениеOpenSSL(),,Истина);
WSПараметр.message = "TEST";
Прокси.Пользователь = "DES";
Прокси.Прокси.Пользователь = Прокси.Пользователь;
Прокси.Пароль = "MyPass";
Прокси.Прокси.Пароль = Прокси.Пароль;
Результат = Прокси.Test(WSПараметр); // тут чтобы понимала что я хочу TransportWithMessageCredential
//<binding name="BasicHttpBinding_IService">
//<security mode="TransportWithMessageCredential" />
349 Serginio1
 
11.08.16
17:39
Ты не сюда пиши, а в 1С. А нам сообщи