Подключение к Web-сервису ECOD для обмена документами в формате EDI (провайдер Корус)

Публикация № 189959

Разработка - Системная интеграция - Интеграция с WEB

Подробное описание подключения из 1С 8.2 к Web-сервису ECOD для одностороннего обмена электронными документами в формате EDI (провайдер Корус).

Была поставлена задача – принимать заказы от крупной сети в электронном виде. Сеть работает следующим образом – рассылает всем заказы (ORDERS) через провайдера Корус в формате EDI, а подтверждений обратно не принимает. Соответственно, обмен идет только в одну сторону. Ну, ещё желательно было сэкономить на модуле сопряжения, который Корус предлагает купить, и коннектиться к ним непосредственно из 1С.

После заполнения всех необходимых бумаг и получения GLN своей организации, наконец–то мне выдали описание формата обмена и способа подключения к Web–сервису.

Уже в процессе работы созрели 2 варианта технической реализации обмена – тот, который рекомендует Корус (по протоколу SOAP) и который позволяет платформа 8.2 (через XDTO). Опишу ОБА способа реализации.

Первый способ (рекомендованный Корусом).

Для обмена через протокол SOAP, необходимо установить Soap Toolkit 3 с сайта Майкрософт. Он может там быть доступен для скачивания в разобранном виде (файлы с расширением .msm), тогда лучше поискать дистрибутив в виде инсталлятора. Также желательно установить финишное обновление SOAPDSK3.0–KB827257–x86.exe, которое лежит на том же Майкрософте, но уже в виде инсталлятора. Для 64-битных систем всё должно тоже штатно установиться. Протокол слегка устаревший, но Корус пока другого не предлагает….

Следующий шаг – добавление сертификатов в файл Cacert.pem из каталога bin программы. На всякий случай, добавил и корневые сертификаты, выданные Thawte, и сертификаты сайта, на котором живёт Web–сервис. Способ добавления сертификатов подробно описан в литературе, не буду на нём заострять внимание.

Пример реально работающего кода:

// Необходимо установить Soap Toolkit 3 и обновление к нему
// В папку bin программы 1С 8.2 добавить отредактированный файл cacert.pem с сертификатами Web-сервиса
//
Процедура ПолучитьЗаказыПокупателяMSSOAP(ДатаНачала, ДатаКонца, Login="Ваш логин", Password="Ваш пароль", Partner_ID="GLN Партнера") Экспорт

   
ИмяСервиса = "https://www.ecod.pl/webserv2/EDIservice.asmx?WSDL";

    Попытка
       
oSOAPClient = Новый COMОбъект("MSSOAP.SoapClient30");
    Исключение
       
#Если Клиент Тогда
       
Сообщить(ОписаниеОшибки());
       
#КонецЕсли
       
Возврат;
    КонецПопытки;

    Попытка
       
Инициализация = oSOAPClient.mssoapinit(ИмяСервиса, "", "", "");
    Исключение
       
#Если Клиент Тогда
       
Сообщить(ОписаниеОшибки());
       
#КонецЕсли
       
Возврат;
    КонецПопытки;

    Попытка
       
Подключение = oSOAPClient.Relationships(Login, Password, "5000");
       
СтрокаХML = Подключение.item(1).text;
       
КодОшибкиПодключения = Подключение.item(0).text;
    Исключение
       
#Если Клиент Тогда
       
Сообщить(ОписаниеОшибки());
       
#КонецЕсли
       
Возврат;
    КонецПопытки;

    Если
КодОшибкиПодключения <> "00000000" Тогда
       
#Если Клиент Тогда
       
Сообщить("Код ошибки подключения = " + КодОшибкиПодключения);
       
#КонецЕсли
       
Возврат;
    КонецЕсли;

   
ДатаНачалаECOD = ПривестиДатуКВидуECOD(ДатаНачала);
   
ДатаКонцаECOD = ПривестиДатуКВидуECOD(ДатаКонца);

   
// Возвращает массив tracking-id документов, доставленных пользователю ECOD
   
Попытка
       
Доставка = oSOAPClient.ListMBEx(Login, Password, Partner_ID, "ORDER", "RU1", "XML", "P",
                       
ДатаНачалаECOD, ДатаКонцаECOD, "", "", "N", "5000");
       
СтрокаДоставки = Доставка.item(1).text;
       
КодОшибкиДоставки = Доставка.item(0).text;
    Исключение
       
#Если Клиент Тогда
       
Сообщить(ОписаниеОшибки());
       
#КонецЕсли
       
Возврат;
    КонецПопытки;

    Если
КодОшибкиДоставки <> "00000000" Тогда
       
#Если Клиент Тогда
       
Сообщить("Код ошибки идентификации документов = " + КодОшибкиДоставки);
       
#КонецЕсли
       
Возврат;
    КонецЕсли;

   
// Теперь соберём массив идентификаторов документов tracking-id
   
МассивИдентификаторов = ПолучитьМассивИдентификаторовДокументовECOD(СтрокаДоставки);

   
// Теперь для каждого идентификатора получим документ
   
Для Каждого Элемент Из МассивИдентификаторов Цикл
        Попытка
           
Документ = oSOAPClient.Receive(Login, Password, Partner_ID, "ORDER", Элемент, "XML", "R", "5000");
           
СтрокаДокументаXML = Документ.item(1).text;
           
КодОшибкиДокументаXML = Документ.item(0).text;
            Если
КодОшибкиДокументаXML <> "00000000" Тогда
               
#Если Клиент Тогда
               
Сообщить("Код ошибки доставки документа " + Элемент + " = " + КодОшибкиДокументаXML);
               
#КонецЕсли
               
Продолжить;
            КонецЕсли;
           
СформироватьЗаказПокупателяECODИзСтрокиXML(СтрокаДокументаXML);
        Исключение
           
#Если Клиент Тогда
           
Сообщить(ОписаниеОшибки());
           
#КонецЕсли
           
Продолжить;
        КонецПопытки;
    КонецЦикла;

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

Второй способ (использование возможностей платформы 8.2).

Известно, что 1С 8.2 тоже умеет работать с неродственными ей объектами, для этого нужно использовать объект Фабрика XDTO. В тексте процедуры показан динамический способ создания описания объектов Web–сервиса, подключения к нему и управления входящими документами.

Добавление сертификатов также обязательно и в этом случае.

 

Полный текст кода:

 

Процедура ПолучитьЗаказыПокупателяXDTO(ДатаНачала, ДатаКонца, Login="Ваш логин", Password="Ваш пароль", Partner_ID="GLN Партнера") Экспорт

   
Определение = Новый WSОпределения("https://www.ecod.pl/webserv2/EDIservice.asmx?WSDL");
   
Прокси = Новый WSПрокси(Определение, "http://www.comarch.com/", "EDIWebService", "EDIWebServiceSoap12");

   
Фабрика = Прокси.ФабрикаXDTO;

   
Запрос = Фабрика.Создать(Фабрика.Тип("http://www.comarch.com/", "Relationships"));
   
Запрос.Name = Login;
   
Запрос.Password = Password;
   
Запрос.Timeout = "5000";

   
РезультатRelationships = Прокси.Relationships(Запрос.Name, Запрос.Password, Запрос.Timeout);
   
// Возвращает документ XML, если операция выполнена успешно

   
КодОшибкиПодключения = РезультатRelationships.Res;
    Если
КодОшибкиПодключения <> "00000000" Тогда
       
#Если Клиент Тогда
       
Сообщить("Код ошибки подключения = " + КодОшибкиПодключения);
       
#КонецЕсли
       
Возврат;
    КонецЕсли;

   
Запрос = Фабрика.Создать(Фабрика.Тип("http://www.comarch.com/", "ListMBEx"));
   
Запрос.Name = Login;
   
Запрос.Password = Password;
   
Запрос.PartnerIln = Partner_ID;
   
Запрос.DocumentType = "ORDER";
   
Запрос.DocumentVersion = "RU1";
   
Запрос.DocumentStandard = "XML";
   
Запрос.DocumentTest = "P";
   
Запрос.DateFrom = ПривестиДатуКВидуECOD(ДатаНачала);
   
Запрос.DateTo = ПривестиДатуКВидуECOD(ДатаКонца);
   
Запрос.ItemFrom = "";
   
Запрос.ItemTo = "";
   
Запрос.DocumentStatus = "N";   // Читаем только новые документы
   
Запрос.Timeout = "5000";

   
РезультатListMBEx = Прокси.ListMBEx(Запрос.Name, Запрос.Password, Запрос.PartnerIln, Запрос.DocumentType, Запрос.DocumentVersion,
               
Запрос.DocumentStandard, Запрос.DocumentTest, Запрос.DateFrom, Запрос.DateTo, Запрос.ItemFrom, Запрос.ItemTo,
               
Запрос.DocumentStatus, Запрос.Timeout);

   
КодОшибкиДоставки = РезультатListMBEx.Res;
    Если
КодОшибкиДоставки <> "00000000" Тогда
       
#Если Клиент Тогда
       
Сообщить("Код ошибки идентификации документов = " + КодОшибкиДоставки);
       
#КонецЕсли
       
Возврат;
    КонецЕсли;

   
СтрокаДоставки = РезультатListMBEx.Cnt;
   
// Теперь соберём массив идентификаторов документов tracking-id
   
МассивИдентификаторов = ПолучитьМассивИдентификаторовДокументовECOD(СтрокаДоставки);

   
// Разберем полученные идентификаторы документов
   
Для Каждого Элемент Из МассивИдентификаторов Цикл
       
// А теперь получим файлы заказов из системы
       
Запрос = Фабрика.Создать(Фабрика.Тип("http://www.comarch.com/", "Receive"));
       
Запрос.Name = Login;
       
Запрос.Password = Password;
       
Запрос.PartnerIln = Partner_ID;
       
Запрос.DocumentType = "ORDER";
       
Запрос.TrackingId = Элемент;
       
Запрос.DocumentStandard = "XML";
       
Запрос.ChangeDocumentStatus = "R";   // Меняем статус на прочтённый
       
Запрос.Timeout = "5000";

       
РезультатReceive = Прокси.Receive(Запрос.Name, Запрос.Password, Запрос.PartnerIln, Запрос.DocumentType,
                   
Запрос.TrackingId, Запрос.DocumentStandard, , Запрос.Timeout);

       
КодОшибкиДокументаXML = РезультатReceive.Res;
       
СтрокаДокументаXML = РезультатReceive.Cnt;
        Если
КодОшибкиДокументаXML <> "00000000" Тогда
           
#Если Клиент Тогда
           
Сообщить("Код ошибки доставки документа " + Элемент + " = " + КодОшибкиДокументаXML);
           
#КонецЕсли
           
Продолжить;
        КонецЕсли;
       
СформироватьЗаказПокупателяECODИзСтрокиXML(СтрокаДокументаXML);

       
Запрос = Фабрика.Создать(Фабрика.Тип("http://www.comarch.com/", "ChangeDocumentStatus"));
       
Запрос.Name = Login;
       
Запрос.Password = Password;
       
Запрос.TrackingId = Элемент;
       
Запрос.Status = "R";   // Меняем статус на прочтённый

       
РезультатStatus = Прокси.ChangeDocumentStatus(Запрос.Name, Запрос.Password, Запрос.TrackingId, Запрос.Status);
       
КодОшибкиStatus = РезультатStatus.Res;
        Если
КодОшибкиStatus <> "00000000" Тогда
           
#Если Клиент Тогда
           
Сообщить("Код ошибки изменения статуса документа " + Элемент + " = " + КодОшибкиStatus);
           
#КонецЕсли
       
КонецЕсли;
    КонецЦикла;

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

Результат работы обеих процедур абсолютно одинаков - возвращаются документы ORDERS из Web-сервиса. Теперь задача существенно упрощается - необходимо правильно распарсить входной документ в формате XML и создать документы Заказ Покупателя. Для облегчения вашего читательского труда привожу код сервисных процедур чтения строки XML и парсинга. Ну а создать нужный документ в собственной базе из полученной структуры не составит особого труда.

 

// Читает полученную строку XML в формате ECOD (из Web-сервиса)
Процедура СформироватьЗаказПокупателяECODИзСтрокиXML(СтрокаXML, СсылкаНаОбъект = Неопределено) Экспорт

   
Чтение = Новый ЧтениеXML;
   
ДеревоЗначений = Новый ДеревоЗначений();
    Попытка
       
Чтение.УстановитьСтроку(СтрокаXML);
       
Чтение.Прочитать();
    Исключение
       
#Если Клиент Тогда
       
Сообщить("Ошибка при чтении строки XML! " + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
       
#КонецЕсли
       
Чтение.Закрыть();
    КонецПопытки;

   
ДеревоЗначений.Колонки.Добавить("Элемент");
   
ДеревоЗначений.Колонки.Добавить("Текст");
   
Корень         = ДеревоЗначений.Строки.Добавить();
   
Корень.Элемент = Чтение.Имя;
   
Рекурсия(Корень, Чтение);
   
Дерево = ДеревоЗначений;

   
Чтение.Закрыть();

   
СтруктураДокумента = ПолучитьСтруктуруДокумента_ORDER_ECOD(Дерево);
    Если
ТипЗнч(СтруктураДокумента) = Тип("Структура") Тогда
       
ЗаказСсылка = ЗагрузитьСтруктуруВДокументЗаказ(СтруктураДокумента, СсылкаНаОбъект);
        Если
ЗаказСсылка <> Неопределено Тогда
           
СделатьЗаписьВСправочникеЗаказыПокупателяEDI(СтруктураДокумента, ЗаказСсылка);
        КонецЕсли;
    КонецЕсли;

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

Процедура
Рекурсия(СтрокаДерева, Чтение)

   
АтрибутыСоответствие = Новый Соответствие();
    Пока
Чтение.ПрочитатьАтрибут() Цикл
       
АтрибутыСоответствие.Вставить(Чтение.Имя, Чтение.Значение);
    КонецЦикла;
    Если
АтрибутыСоответствие.Количество() > 0 Тогда
       
СтрокаДерева.Атрибуты = АтрибутыСоответствие;
    Иначе
       
АтрибутыСоответствие = 0;
    КонецЕсли;
    Пока
Чтение.Прочитать() Цикл
        Если
Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            Прервать;
        ИначеЕсли
Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
           
СтрокаДерева.Текст = Чтение.Значение;
        ИначеЕсли
Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
           
Дочерний         = СтрокаДерева.Строки.Добавить();
           
Дочерний.Элемент = Чтение.Имя;
           
Рекурсия(Дочерний, Чтение);
        КонецЕсли;
    КонецЦикла;

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

// Получить структуру Заказа Покупателя
Функция ПолучитьСтруктуруДокумента_ORDER_ECOD(Дерево)

   
СтруктураДокумента = Новый Структура;

   
Узел = ПолучитьУзелДерева(Дерево.Строки, "Строка", "Document-Order");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаКорня = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Файл не является Заказом покупателя!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// I. Order-Header (из корня)

   
Узел = ПолучитьУзелДерева(СтрокаКорня, "Строка", "Order-Header");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаДерева = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдена шапка документа!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// Номер документа
   
xmlНомерДокумента = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "OrderNumber", Истина);
    Если НЕ
xmlНомерДокумента = Неопределено Тогда
       
СтруктураДокумента.Вставить("НомерДокумента", СокрЛП(xmlНомерДокумента));
    Иначе
        Возврат Ложь;
    КонецЕсли;

   
//  Дата Документа
   
xmlДатаДокумента = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "OrderDate", Истина);
    Если НЕ
xmlДатаДокумента = Неопределено Тогда
       
СтруктураДокумента.Вставить("ДатаДокумента", Дата(Прав(СокрЛП(xmlДатаДокумента),2)+"."+Сред(СокрЛП(xmlДатаДокумента),6,2)+"."+Лев(СокрЛП(xmlДатаДокумента),4)+" 0:00:00"));
    Иначе
        Возврат Ложь;
    КонецЕсли;

   
// Дата Поставки(обязательное поле)
   
xmlДатаПоставки = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "ExpectedDeliveryDate", Истина);
    Если НЕ
xmlДатапоставки = Неопределено Тогда
       
ДатаПоставки = Дата(Прав(СокрЛП(xmlДатаПоставки),2)+"."+Сред(СокрЛП(xmlДатаПоставки),6,2)+"."+Лев(СокрЛП(xmlДатаПоставки),4)+" 0:00:00");
       
СтруктураДокумента.Вставить("ДатаПоставки", ДатаПоставки);
    Иначе
        Возврат Ложь;
    КонецЕсли;

   
// Время Поставки(опциональное поле)
   
xmlВремяПоставки = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "ExpectedDeliveryTime", Ложь);
    Если НЕ
xmlВремяПоставки = Неопределено Тогда
       
СтруктураДокумента.Вставить("ВремяПоставки", xmlВремяПоставки);
    Иначе
       
СтруктураДокумента.Вставить("ВремяПоставки", "00:00");
    КонецЕсли;

   
// Валюта(UAH,RUB,USD,EUR,MDL,BYR)(опциональное поле)
   
xmlВалюта = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "Currency", Ложь);
    Если НЕ
xmlВалюта = Неопределено Тогда
       
СтруктураДокумента.Вставить("Валюта", ПолучитьВалюту(xmlВалюта));
    КонецЕсли;


   
// Обозначение Документа(опциональное поле)
   
xmlОбозначениеДокумента = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "DocumentFunctionCode", Ложь);
    Если НЕ
xmlОбозначениеДокумента = Неопределено Тогда
       
СтруктураДокумента.Вставить("ОбозначениеДокумента", СокрЛП(xmlОбозначениеДокумента));
    КонецЕсли;


   
// Свободный текст(опциональное поле)
   
xmlСвободныйТекст = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "Remarks", Ложь);
    Если НЕ
xmlСвободныйТекст = Неопределено Тогда
       
СтруктураДокумента.Вставить("СвободныйТекст", СокрЛП(xmlСвободныйТекст));
    КонецЕсли;

   
// II. Order-Summary (из корня)
   
Узел = ПолучитьУзелДерева(СтрокаКорня, "Строка", "Order-Summary");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаДерева = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдены реквизиты табличной части!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// Количество Строк(опциональное поле)
   
xmlКоличествоСтрок = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "TotalLines", Ложь);
    Если НЕ
xmlКоличествоСтрок = Неопределено Тогда
       
СтруктураДокумента.Вставить("КоличествоСтрок", СокрЛП(xmlКоличествоСтрок));
    КонецЕсли;

   
// Общая Сумма(опциональное поле)
   
xmlОбщаяСумма = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "TotalOrderedAmount", Ложь);
    Если НЕ
xmlОбщаяСумма = Неопределено Тогда
       
СтруктураДокумента.Вставить("ОбщаяСумма", СокрЛП(xmlОбщаяСумма));
    КонецЕсли;

   
// III. Order-Parties (из корня)
   
Узел = ПолучитьУзелДерева(СтрокаКорня, "Строка", "Order-Parties");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаУровня = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдены реквизиты покупателя!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
Узел = ПолучитьУзелДерева(СтрокаУровня, "Строка", "Buyer");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаДерева = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдены реквизиты покупателя!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// Поставщик(Организация)(обязательное поле)
   
xmlПоставщикGLN = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "ILN", Истина);
    Если НЕ
xmlПоставщикGLN = Неопределено Тогда
       
СтруктураДокумента.Вставить("ПоставщикGLN", СокрЛП(xmlПоставщикGLN));
    КонецЕсли;

   
Узел = ПолучитьУзелДерева(СтрокаУровня, "Строка", "Seller");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаДерева = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдены реквизиты продавца!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// Покупатель(контрагент)(обязательное поле)
   
xmlКонтрагентGLN = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "ILN", Истина);
    Если НЕ
xmlКонтрагентGLN = Неопределено Тогда
       
СтруктураДокумента.Вставить("КонтрагентGLN", СокрЛП(xmlКонтрагентGLN));
    КонецЕсли;

   
xmlКонтрагентКод = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "CodeByBuyer", Истина);
    Если НЕ
xmlКонтрагентКод = Неопределено Тогда
       
СтруктураДокумента.Вставить("КонтрагентКод", СокрЛП(xmlКонтрагентКод));
    КонецЕсли;

   
Узел = ПолучитьУзелДерева(СтрокаУровня, "Строка", "DeliveryPoint");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаДерева = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдены реквизиты точки доставки!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// Точка доставки (ДоговорКонтрагента)(опциональное поле)
   
xmlТочкаДоставкиGLN = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "ILN", Ложь);
    Если НЕ
xmlТочкаДоставкиGLN = Неопределено Тогда
       
СтруктураДокумента.Вставить("ТочкаДоставкиGLN", СокрЛП(xmlТочкаДоставкиGLN));
    КонецЕсли;

   
// IV. Табличная часть
    // Order-Lines (из корня)
   
Узел = ПолучитьУзелДерева(СтрокаКорня, "Строка", "Order-Lines");
    Если НЕ
Узел = Неопределено Тогда
       
СтрокаУровня = Узел.Строки;
    Иначе
       
#Если Клиент Тогда
       
Сообщить("Не найдена табличная часть!", СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

   
// Создаем таблицуЗначений, в которую выгружаем табличную часть документа
   
ДокументТЧ = Новый ТаблицаЗначений;
   
ДокументТЧ.Колонки.Добавить("НомерСтрокиТЧ");
   
ДокументТЧ.Колонки.Добавить("ШтрихКод");
   
ДокументТЧ.Колонки.Добавить("КодПокупателя");
   
ДокументТЧ.Колонки.Добавить("НоменклатураНаименование");
   
ДокументТЧ.Колонки.Добавить("Количество");
   
ДокументТЧ.Колонки.Добавить("Цена");
   
ДокументТЧ.Колонки.Добавить("Сумма");
   
ДокументТЧ.Колонки.Добавить("Коэффициент");

   
ТабличнаяЧасть = ПолучитьУзелДерева(СтрокаУровня, "Массив", "Line");

    Для Каждого
Узел ИЗ ТабличнаяЧасть Цикл

        Если НЕ
Узел = Неопределено Тогда
           
СтрокаДерева = Узел.Строки;
        Иначе
           
#Если Клиент Тогда
           
Сообщить("Не найдены строки табличной части!", СтатусСообщения.Важное);
           
#КонецЕсли
           
Возврат Ложь;
        КонецЕсли;

       
Узел = ПолучитьУзелДерева(СтрокаДерева, "Строка", "Line-Item");

        Если НЕ
Узел = Неопределено Тогда
           
СтрокаДерева = Узел.Строки;
        Иначе
           
#Если Клиент Тогда
           
Сообщить("Не найдена строка табличной части!", СтатусСообщения.Важное);
           
#КонецЕсли
           
Продолжить;
        КонецЕсли;

       
НоваяСтрокаТЧ = ДокументТЧ.Добавить();

       
//Номер строки (этот параметр при создании заказа не используется, может быть проверочным)
       
xmlНомерСтрокиТЧ = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "LineNumber", Истина);
        Если НЕ
xmlНомерСтрокиТЧ = Неопределено Тогда
           
НоваяСтрокаТЧ.НомерСтрокиТЧ = xmlНомерСтрокиТЧ;
        КонецЕсли;

       
// Определяем атрибуты номенклатуры:
        // Штрих - код номенклатуры
       
xmlШтрихКодНоменклатуры = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "EAN", Истина);
        Если НЕ
xmlШтрихКодНоменклатуры = Неопределено Тогда
           
НоваяСтрокаТЧ.ШтрихКод = СокрЛП(xmlШтрихКодНоменклатуры);
        КонецЕсли;

       
// Код поставщика(поле поиска)
       
xmlКодПокупателя = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "BuyerItemCode", Ложь);
        Если НЕ
xmlКодПокупателя = Неопределено Тогда
           
НоваяСтрокаТЧ.КодПокупателя = СокрЛП(xmlКодПокупателя);
        КонецЕсли;

       
// Наименование номенклатуры(опциональное поле)
       
xmlНоменклатураНаименование = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "ItemDescription", Ложь);
        Если НЕ
xmlНоменклатураНаименование = Неопределено Тогда
           
НоваяСтрокаТЧ.НоменклатураНаименование = СокрЛП(xmlНоменклатураНаименование);
        КонецЕсли;

       
xmlКоличество = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "OrderedQuantity", Истина);
        Если НЕ
xmlКоличество = Неопределено Тогда
            Попытка
               
НоваяСтрокаТЧ.Количество = Число(xmlКоличество);
            Исключение
               
#Если Клиент Тогда
               
Сообщить("Не определил количество!", СтатусСообщения.Важное);
               
#КонецЕсли
               
НоваяСтрокаТЧ.Количество = 0;
            КонецПопытки;
        КонецЕсли;

       
// Единицы измерения количества(опциональное поле)
       
xmlЦена = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "OrderedUnitGrossPrice", Ложь);
        Если НЕ
xmlЦена = Неопределено Тогда
           
НоваяСтрокаТЧ.Цена = Число(xmlЦена);
        КонецЕсли;

       
// Сумма
       
xmlСумма = ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, "GrossAmount", Ложь);
        Если НЕ
xmlЦена = Неопределено Тогда
           
НоваяСтрокаТЧ.Сумма = Число(xmlСумма);
        КонецЕсли;

       
НоваяСтрокаТЧ.Коэффициент = 1;

    КонецЦикла;

   
СтруктураДокумента.Вставить("ДокументТЧ", ДокументТЧ);

    Возврат
СтруктураДокумента;

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

Функция
ПолучитьУзелДерева(СтрокаДерева, ТипУзла, ИмяПоля)

    Если
ТипУзла = "Строка" Тогда
       
xmlУзел = СтрокаДерева.Найти(ИмяПоля, "Элемент", Ложь);
    ИначеЕсли
ТипУзла = "Массив" Тогда
       
xmlУзел = СтрокаДерева.НайтиСтроки(Новый Структура("Элемент", ИмяПоля), Ложь);
    Иначе
       
xmlУзел = Неопределено;
    КонецЕсли;

    Возврат
xmlУзел;

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

Функция
ПолучитьЗначениеВСтрокеДерева(СтрокаДерева, ИмяПоля, Обязательное)

   
xmlЗначение = СтрокаДерева.Найти(ИмяПоля, "Элемент", Ложь);

    Если
xmlЗначение = Неопределено Тогда

        Если
Обязательное Тогда
           
#Если Клиент Тогда
           
Сообщить("В файле не найдено обязательное поле """ + ИмяПоля + """", СтатусСообщения.ОченьВажное);
           
#КонецЕсли
       
КонецЕсли;

        Возврат Неопределено;

    Иначе

       
ТекстовоеЗначение = xmlЗначение.Текст;

        Если Не
ЗначениеЗаполнено(ТекстовоеЗначение) Тогда

            Если
Обязательное Тогда
               
#Если Клиент Тогда
               
Сообщить("Не заполнено обязательное поле """ + ИмяПоля + """", СтатусСообщения.Важное);
               
#КонецЕсли
           
КонецЕсли;

            Возврат Неопределено;

        Иначе

            Возврат
ТекстовоеЗначение;

        КонецЕсли;

    КонецЕсли;

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

Функция
ПолучитьВалюту(xmlВалюта)

    Если
xmlВалюта = "UAH" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(980);
    ИначеЕсли
xmlВалюта = "RUB" или xmlВалюта = "0" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(643);
    ИначеЕсли
xmlВалюта = "USD" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(840);
    ИначеЕсли
xmlВалюта = "EUR" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(978);
    ИначеЕсли
xmlВалюта = "MDL" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(498);
    ИначеЕсли
xmlВалюта = "BYR" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(974);
    ИначеЕсли
xmlВалюта = "KZT" Тогда
        Возврат
Справочники.Валюты.НайтиПоКоду(398);
    Иначе
        Возврат
Справочники.Валюты.ПустаяСсылка();
    КонецЕсли;

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

Функция ПривестиДатуКВидуECOD(ВходящаяДата) Экспорт

    Возврат
Формат(ВходящаяДата, "ДФ=""гггг-ММ-дд""");

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

Функция ПолучитьМассивИдентификаторовДокументовECOD(СтрокаХML) Экспорт

   
МассивИдентификаторов = Новый Массив;

   
Чтение = Новый ЧтениеXML;
   
Чтение.УстановитьСтроку(СтрокаХML);
    Пока
Чтение.Прочитать() Цикл
       
ИмяУзла = Чтение.Имя;
        Если
ИмяУзла <> "tracking-id" Тогда  // Пропускаем все узлы, кроме tracking-id
           
Продолжить;
        КонецЕсли;
        Если
ИмяУзла = "tracking-id" Тогда
           
Чтение.Прочитать();
            Если
Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
               
МассивИдентификаторов.Добавить(Чтение.Значение);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Возврат
МассивИдентификаторов;

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

Хочу заметить, что хотя формат EDI и является стандартом электронного документооборота, однако форматы одинаковых документов у разных провайдеров могут существенно отличаться (казалось бы должны быть одинаковы - ан нет, разные у Коруса и Эксайта например). Так что этот формат обмена тоже не универсален......

Вот, собственно, и всё...

Если буду делать двусторонний обмен с Web-сервисами, обязательно выложу работающий код.

Удачи вам и не повторяйте чужих ошибок.

 

Скачать файлы

Наименование Файл Версия Размер
ПодключениеКWebСервисуКорус.epf

.epf 14,63Kb
06.06.13
75
.epf 14,63Kb 75 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Alex_Japanese_Student 441 06.06.13 19:39 Сейчас в теме
доводилось с корусом работать, через их интерфейс и с их обработками. В целом работало все, один раз понять и настроить, а дальше все было гуд
2. aspirator23 427 16.06.13 16:39 Сейчас в теме
К сожалению сколько провайдеров столько форматов. Метро работает по другому, Гиперглобус по третьему.
Уж лучше 1с формат для обмена документами.
3. miroha 27.10.13 18:04 Сейчас в теме
Нас тоже крупный покупатель обязал перейти на EDI рекомендовал корус. Сначала был шок, зачем платить за каждый отправленный документ? ведь полно способов сделать это бесплатно. Для нас это сумма сотни тысяч рублей, причем сервера корус не всегда доступны и являлись узким местом в нашем обмене.

Купили у них пакет с внедрением, в итоге внедряли все сами и полностью переписали их программу для хранения данные в базе, а не файловой помойке, которая в их конфигурации тормозит. Техническая поддержка ужасная, специалисты плохо разбираться в конфигурации и все сводиться к пустой болтовне в почте между менеджерами, руководителями и программистами. Когда разобрались в принципах обмена перешли на другого более доступного по ценам провайдера. Дешевле всего стать самому провайдером или найти другой способ обмена.
msvd; gfoods; Dilovar9; partner1c; +4 Ответить
4. MICK77 12 20.12.13 18:29 Сейчас в теме
(3) miroha, Если не великая тайна и не в качестве рекламы на кого перешли? А то тоже выбираем сейчас из 4-х.
5. 10ra 06.05.14 15:30 Сейчас в теме
этот кусок кода лишний т.к. уже поменяли статус при получении XML (Receive...Запрос.ChangeDocumentStatus = "R";)
        
        Запрос = Фабрика.Создать(Фабрика.Тип("http://www.comarch.com/", "ChangeDocumentStatus"));
        Запрос.Name = Login;
        Запрос.Password = Password;
        Запрос.TrackingId = Элемент;
        Запрос.Status = "R";   // Меняем статус на прочтённый

        РезультатStatus = Прокси.ChangeDocumentStatus(Запрос.Name, Запрос.Password, Запрос.TrackingId, Запрос.Status);
        КодОшибкиStatus = РезультатStatus.Res;
        Если КодОшибкиStatus <> "00000000" Тогда
            #Если Клиент Тогда
            Сообщить("Код ошибки изменения статуса документа " + Элемент + " = " + КодОшибкиStatus);
            #КонецЕсли
        КонецЕсли;
Показать


+ почитать Техническая спецификация EDIservice
Прикрепленные файлы:
ws-edi.doc
6. vbelyaev 03.08.14 14:56 Сейчас в теме
Товарищи, меня чё-т в гугле забанили походу. Не могу найти как добавить сертификаты в cacert.pem.

Пните в нужном направлении пожалуйста)))
21. bobo93 06.10.16 12:56 Сейчас в теме
(6) vbelyaev,
Здравствуйте.
Вы не розобрались с вопросом?

"Товарищи, меня чё-т в гугле забанили походу. Не могу найти как добавить сертификаты в cacert.pem.

Пните в нужном направлении пожалуйста)))"
7. Ulus 275 10.09.14 06:33 Сейчас в теме
Хорошая статья.
Грамотно!

8. Ulus 275 10.09.14 06:38 Сейчас в теме
А мы взяли Адаптер 1С от коруса.
начали внедрять.
Но оказалось, что в серийном Адаптере нету документа "Приложение к уведомлению об отгрузки".
Это новый документ, для поставщиков алкогольной продукции.
И все ... Корус нас завтраками кормит. В службу поддержки, вставайте в очереь и.т.п.
Ужасный сервис у них.
Сейчас пробую стрести с них формат файла этого электронного документа.
Сделаем сами.

P.s. кому интересно рекомендую Е-Ком. Четко, быстро, качественно. Не реклама. Просто работаем с несколькими провайдерами.
10. Antonio 6 03.02.15 12:50 Сейчас в теме
(8) Ulus, позвольте спросить как организовывали обмен с несколькими провайдерами? Сейчас тоже оптимизируем затраты на провайдеров, и возникла необходимость использовать несколько провайдеров.
9. Pim 167 10.01.15 16:48 Сейчас в теме
Никто не делал обратную выгрузку (выгрузку подтверждений) на сайт?
11. itcmsch71 08.07.15 05:21 Сейчас в теме
Спасибо Вам большое - статья очень помогла
Вначале пользовались адаптером Коруса (купили пакет с внедрением) - но после некоторого времени общения с ними - нервы не выдержали - стряс с них пакет спецификаций и оттолкнувшись от статьи написал свой обмен - причем теперь работаем без участия операторов - те только оформляют первичные документы.
Если кому интересно - могу отдать.......
Да, еще - установка сертификатов не понадобилась......
Так работает
Shooroopik111; asrgroup; Oleg_Anat; Pipapalamm; gfoods; +5 Ответить
12. gfoods 11.07.15 12:28 Сейчас в теме
(11) itcmsch71,
Было бы очень любопытно посмотреть Вашу работу. Сам готовлюсь уйти от *%^#нутого Коруса, сил нет больше их поделками пользоваться.
Если готовы показать, то пришлите ссылку в личку.
Спасибо.
13. binex 263 20.07.15 18:05 Сейчас в теме
(11) itcmsch71, поясните пожалуйста, что значит "теперь работаем без участия операторов"?
Какие сообщения внедрили?
15. Pipapalamm 25.11.15 11:08 Сейчас в теме
(11) itcmsch71, Очень хотелось бы посмотреть на ваш обмен. Сам обдумываю уход от Корусовских "Адаптер+Коннектор".
Буду очень благодарен за конфигурацию.
Заранее спасибо!
16. Oleg_Anat 01.12.15 09:50 Сейчас в теме
(11) itcmsch71, очень заинтересовал сделанный вами обмен. Мы сейчас только начинаем работать с этой системой, вот обдумываю варианты передачи данных. Вариант корусовских адаптера и коннектора - теперь не рассматриваю - после прочтения отзывов в данной статье об их техподдержке и сервисе. Если можете поделится вашей разработкой - буду очень благодарен, заранее огромное спасибо!
17. serg1785 18.04.16 12:40 Сейчас в теме
(11) itcmsch71, заинтересовала ваша разработка - если есть возможность - поделитесь. Спасибо!
20. bsv69 24.08.16 14:41 Сейчас в теме
(11) itcmsch71, Добрый день. Если можно, вышлите обработку обмена. Спасибо.
23. Shooroopik111 130 20.09.17 17:37 Сейчас в теме
24. taasha25 13 06.03.18 16:04 Сейчас в теме
(11) Здравствуйте! Буду благодарна, если поделитесь разработкой. Спасибо!
25. taasha25 13 28.04.18 09:00 Сейчас в теме
(11) Здравствуйте! Можете поделиться обработкой выгрузки Приложения к уведомлению об отгрузке? Заранее спасибо!
14. АЛьФ 10.09.15 14:53 Сейчас в теме
На попытке сменить статус документа отваливается с ошибкой:

Результат = ПолучитьСОАП().ChangeDocumentStatus(
{W:\...\EDI.ERT(358)}: Client: Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно.
 - Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно.


Кто-нибудь сталкивался? Я чего-то недопонял или проблема на их стороне?

Ой, чуть не забыл.

Вызов такой:

	Результат = ПолучитьСОАП().ChangeDocumentStatus(
								Идентификатор,
								Пароль,
								тзДокументы.идДокумента,
								НовыйСтатусДокумента);
18. katanovich 17.06.16 16:07 Сейчас в теме
Добрый день!
Выдает во втором варианте:
КодОшибкиПодключения = 000000001.
Логин/Пароль верные. Где можно посмотреть расшифровку ошибки?
19. asrgroup 20.06.16 09:47 Сейчас в теме
Неправильный пароль или логин. Логин надо брать из настроек ТТКонектора (обычно GLN + "ЕС")
22. кольщик 29.04.17 10:28 Сейчас в теме
А для 1с 7.7 есть какое-нибудь похожее описание??
26. darkmessiahan 115 04.09.18 15:51 Сейчас в теме
Что за НайтиОбъектПоЗначениюСвойства?
Оставьте свое сообщение

См. также

Внешняя печатная форма для проверки контрагентов с помощью Контур.Фокус Промо

WEB v8 1cv8.cf Абонемент ($m)

Помогает быстро найти сведения по контрагенту: Реквизиты, информацию по учредителю, данные ЕГРЮЛ / ЕГРИП, запрос на выписку, финансовые данные, госконтракты, арбитражные дела, список связанных организаций

1 стартмани

17.03.2013    25829    64    kstukov    21    

Яндекс.Переводчик (API)

Пользователю системы WEB v8 1cv8.cf Абонемент ($m)

Простой переводчик, использующий сервис Яндекс для перевода.

1 стартмани

23.03.2020    2365    0    kaliuzhnyi    8    

Получение списка совпадающих адресов при наборе адреса (Яндекс-карты) (обычные и управляемые формы)

WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка позволяет получить список адресов при его наборе в Яндекс API (обычные и управляемые формы).

2 стартмани

03.03.2020    1433    0    Denr83    0    

Адресная книга. 1С: ЗУП 3

WEB Управление персоналом (HRM) v8 ЗУП3.x Абонемент ($m)

Адресная книга позволяет компании без настройки прав пользователей и в удобном веб интерфейсе предоставить контактную информацию сотрудников во внутрикорпоративное пользование.

1 стартмани

22.01.2020    1289    2    Alex_ww    5    

Поиск местоположения объекта на карте по координатам

Универсальные обработки WEB v8 1cv8.cf Россия Абонемент ($m)

Карта с использованием WebKit. При открытии обработки сразу указывается местоположение на карте.

2 стартмани

17.01.2020    1786    0    Margo462    1    

Интеграция Yandex Maps в 1С на примере УТ 10.3

WEB v8 v8::ОУ УТ10 Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

На основание документов Реализация товаров и услуг, поля "Адрес доставки", создание маршрутов на основе Yandex API.

1 стартмани

25.12.2019    2840    8    tamerlan922    4    

Расчет расстояния от МКАД

WEB v8 Россия Абонемент ($m)

Расчет расстояния от МКАД до адреса с использованием API Яндекс.Карт.

1 стартмани

19.09.2019    3117    8    anton.fly7    2    

Подсистема Яндекс.Деньги

WEB Финансовый учет и бюджетирование (FRP) Финансовый учет и бюджетирование (FRP) v8 1cv8.cf Домашние учет и финансы УУ Абонемент ($m)

Подсистема полноценного учёта денежных средств для яндекс кошелька.

2 стартмани

09.09.2019    3806    2    CeHbKA    0    

Путеводитель по истории релизов

WEB v8 1cv8.cf Абонемент ($m)

Отчет по истории выпуска релизов и анализа информации по обновлениям.

5 стартмани

13.08.2019    12542    10    YPermitin    18    

Обращение к Web-сервису wsdl ECOD для загрузки документов (Заказы) в формате EDI для провайдера Корус

WEB Оптовая торговля Оптовая торговля v8 ERP2 УТ11 Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

Назначение - принимать заказы сети в электронном виде. Сеть рассылает всем заказы (ORDERS) через провайдера Корус в формате EDI. Соответственно, обработка создает ЗаказКлиента. Позволяет сэкономить на модуле сопряжения, который Корус предлагает купить, и коннектиться к ним непосредственно из 1С.

1 стартмани

04.06.2019    4254    8    O_Yurec    0    

Чат на управляемых формах

Практика программирования WEB v8 v8::УФ Абонемент ($m)

Чат для 1С на управляемых формах, для работы в браузере. Возможности: Есть общая комната Можно создавать открытые и закрытые комнаты Переписка между двумя пользователями (беседа) Протестировано на платформе 8.3.12.1714.

2 стартмани

14.12.2018    5707    10    panihinnv    13    

Загрузка данных о торгах с сайта finam.ru

WEB v8::УФ Финансовые услуги, инвестиции Россия Абонемент ($m)

В данной конфигурации реализована загрузка информации о торгах на ММВБ с сайта finam.ru с возможностью построения графика цены финансового инструмента (используется сервис Google.Graph).

1 стартмани

04.12.2018    3317    5    UncleLu    3    

Загрузка и анализ открытых государственных данных, предоставляемых Федеральной Налоговой службой (ФНС России)

WEB v8 Россия Абонемент ($m)

Конфигурация для загрузки и анализа некоторых наиболее важных наборов данных из списка https://www.nalog.ru/rn77/Opendata/

1 стартмани

26.10.2018    4816    11    o.kovalev    0    

Телефонный справочник

Управление персоналом (HRM) WEB Обработка справочников Управление персоналом (HRM) v8 ЗУП3.x Абонемент ($m)

Телефонный справочник сотрудников организации, интегрированный с 1C ЗУП 3.1.7.87 (веб форма).

3 стартмани

18.09.2018    3488    9    mrGREYka    16    

Показ карты яндекс в документе Задание на перевозку (расширение для УТ 11)

WEB Оптовая торговля Оптовая торговля v8::ОУ УТ11 Россия УУ Абонемент ($m)

Расширение для конфигурации УТ 11, добавляющее в документ Задание на перевозку яндекс карту с точками и маршрутом.

1 стартмани

04.09.2018    7547    38    FreeArcher    9    

Линия тренда в диаграмме на графике "Биржевая свеча"

Практика программирования WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Отчет демонстрирует, как можно отразить линию тренда на биржевом графике типа "свеча" средствами 1С.

1 стартмани

11.08.2018    6026    17    Scop    3    

Информация о треках с отображением маршрута на карте Google

WEB Оптовая торговля Оптовая торговля v8 1cv8.cf Транспорт, автопарки, такси Абонемент ($m)

Простая программа для загрузки треков в формате .tcx, с возможностью просмотра итогов за период и маршрутов на Картах Google.

2 стартмани

30.07.2018    7494    6    echo77    5    

Проверка контрагентов на наличие в реестре коммерческих организаций с повышенным риском совершения правонарушений РБ

WEB v8 БП1.6 Беларусь Абонемент ($m)

Обработка проверит, не включен ли контрагент в реестр правонарушений в экономической сфере.

1 стартмани

12.07.2018    4076    1    keyn5565`    0    

Проверка билетов на сайте ФИФА на чемпионат мира 2018

WEB v8::УФ Развлечения, искусство, спорт Абонемент ($m)

Увидел на сайте https://tjournal.ru/72929-kak-ya-kupil-bilety-na-chm-2018-i-ne-umer как можно получить количество свободных билетов на сайте. Решил все перенести на язык 1С )) Платформа 1С 8.3.6 и выше.

1 стартмани

29.06.2018    6595    5    MSK_Step    6    

Подписка на билеты на ЧМ по футболу 2018

WEB v8 Развлечения, искусство, спорт Абонемент ($m)

Для тех, кто любит запрыгивать в последний вагон уходящего поезда.

3 стартмани

12.06.2018    4499    3    veretennikoff    0    

Яндекс.Карты (маршруты) API 1.1

WEB Универсальные обработки v8 1cv8.cf Россия Абонемент ($m)

Обработка для создания маршрутов с помощью Яндекс карты API 1.1 и дальнейшей обработки полученной информации в 1С

1 стартмани

30.04.2018    4154    30    Jack_off    5    

Карта цен моделей Яндекс Маркета

Ценообразование, прайсы WEB Ценообразование, анализ цен Ценообразование, анализ цен v8 1cv8.cf Россия Абонемент ($m)

Монитор-карта цен для моделей Яндекс Маркета. Позволяет наглядно оценить ценовые предложения по регионам России в виде карты раскрашенных областей.

2 стартмани

30.03.2018    7041    5    onec.developer    0    

Работа с Яндекс картой

WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Предлагаю простенький пример работы с яндекс-картой под управляемыми формами. Реализована установка меток средствами 1С.

1 стартмани

08.02.2018    7150    21    pupkinSana    0    

Сервис проверки контрагента - Эскорт.Контрагент

WEB v8 1cv8.cf Россия Абонемент ($m)

Быстрая проверка контрагента по ЕГРЮЛ, Росстат.

1 стартмани

02.12.2017    8934    29    a.kapustin    17    

Биржа WEX: получение данных в 1С

WEB v8 v8::УФ 1cv8.cf Финансовые услуги, инвестиции Абонемент ($m)

Внешний отчет для получения данных с биржи WEX в режиме реального времени.

1 стартмани

16.10.2017    7184    3    Scop    0    

Запрос необработанных ТТН

Обработка документов Оптовая торговля WEB Оптовая торговля v8 1cv8.cf Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Россия БУ Абонемент ($m)

Обработка позволяет запрашивать необработанные ТТН в соответствии с документацией ЕГАИС, пункт 1.24 и запрашивать ТТН повторно в соответствии с документацией ЕГАИС, пункт 1.19. Обработка должна работать на любых конфигурациях 8.2 обычные формы. Тестировал на конфигурации Комплексная автоматизация, редакция 1.1 (1.1.34.1)

2 стартмани

07.08.2017    12274    17    vasilev2015    7    

Парсер БК

Игры WEB v8 Домашние учет и финансы Россия Абонемент ($m)

Пример конфигурации парсера (в данном случае парсер БК фонбет). Программа парсит коэфициенты БК, записывает их в события, парсит результаты этих событий.

1 стартмани

21.07.2017    16998    10    Hitchenson91    11    

Расчет стоимости доставки DPD, СДЭК, Деловые линии, ЕМС, ПЭК, ЖДЭ

Ценообразование, прайсы WEB Оптовая торговля Оптовая торговля v8 1cv8.cf Россия УУ Абонемент ($m)

Обработка позволяет получать расчет стоимости доставки по компаниям DPD, СДЭК, Деловые линии, ЕМС, ПЭК, ЖДЭ

1 стартмани

31.03.2017    10525    38    windsurf    3    

Яндекс.Метрики

WEB v8 1cv8.cf Россия Абонемент ($m)

Отчет по данным Яндекс.Метрики. Данный отчет можно использовать, например, для дальнейшего анализа интернет-заказов.

1 стартмани

22.03.2017    7119    26    morik44    0    

Загрузка шаблонов отчетности Статистики

Статистические Закрытие периода WEB Закрытие периода v8 ERP2 Россия БУ Абонемент ($m)

Обработка, позволяющая автоматически обновлять шаблоны отчетов статистики.

1 стартмани

08.02.2017    17430    11    unmensch    0    

Статистика аккаунтов Instagram

WEB v8 Абонемент ($m)

Конфигурация для сбора статистики по Instagram аккаунтам

1 стартмани

14.12.2016    6223    17    GAMLET    4    

Запрос QueryBarcode в ЕГАИС 1.5 для Розницы 2.2.6

Ценники Розничная торговля WEB Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Обработка решает проблему с нечитаемой маркой на крепком алкоголе.

2 стартмани

19.09.2016    15899    123    coolseo    43    

Чтение публикаций на Инфостарте

WEB v8 Абонемент ($m)

Конфигурация для чтения публикаций на Инфостарте. Десятилетнему юбилею посвящается

1 стартмани

18.01.2016    10251    16    Fox-trot    9    

Доступ к SOAP веб-сервисам 1С из JavaScript и Html

WEB v8 Абонемент ($m)

Описанный метод позволяет обратиться к веб-сервисам 1С из html-страницы через JavaScript. В качестве примера выводится список справочников. При нажатии на любой справочник выводятся первые буквы наименований. При нажатии на букву выводятся данные с наименованиями, начинающимися на эту букву.

1 стартмани

16.07.2013    29738    6    Elisy    53