Пример обращения к биллингу из 1С v.7.7

Материал из BiTel WiKi

Версия от 06:00, 25 апреля 2008; Admin (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Ниже представлен пример тестовой конфигурации по интеграции биллинга с 1С Бухгалтерией версии 7.7. Для корректной работы конфигурации на компьютере должен быть установлен msxml версии 4.0. Вы можете загрузить его Медиа:msxml4.zip. При инсталляции данного пакета также устанавливается справочная система по MSXML. В ней вы можете ознакомиться с API функциями для работы с полученным XML деревом.

В конфигурации привены примеры поиска договора x0000, занесения прихода, просмотра баланса и выполнения произвольного запроса в базе биллинга. Для корректной работы с реальным биллингом необходимо исправить логин и пароль пользователя, URL для подключения к биллингу, название договора.

Для определения прочих запросов возможно использование режима DEBUG клиента (запуск bgbilling_debug.bat) биллинга, при этом в файл log записываются запросы на сервер и его ответы. К строке запроса выводимой в логе необходимо добавить лишь параметры user и pswd.

Обратите внимание, что все параметры запросов, содержащие русские символы либо спецсимволы &= должны быть обработаны функцией URLEncode.

Для более удобного просмотра результатов запросов их можно вводить в строке браузера.

// кодирование запроса в формате URL Encoded, функция должна быть применена ко всем параметрам запроса,
// содержащим символы, отличные от символов латинского алфавита
Функция URLEncode( value )
    table = "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14" +
            "%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28" +
            "%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37%38%39%3A%3B%3C" +
            "%3D%3E%3F%40%41%42%43%44%45%46%47%48%49%4A%4B%4C%4D%4E%4F%50" +
            "%51%52%53%54%55%56%57%58%59%5A%5B%5C%5D%5E%5F%60%61%62%63%64" +
            "%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78" +
            "%79%7A%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C" +
            "%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0" +
            "%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4" +
            "%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8" +
            "%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC" +
            "%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0" +
            "%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF";
    
    result = "";        
            
    length = СтрДлина( value );        
    
    Для i = 1 По  length Цикл        
        symbol = Сред( value, i, 1 );        
        code = КодСимв( symbol );        
        result = result + Сред( table, code*3 + 1, 3 );        
    КонецЦикла;
    
    Возврат result;
КонецФункции    


// оправка запроса на сервер биллинга
Функция ПослатьЗапрос( query )
    // URL сервера биллинга    
    url="http://192.168.184.2:8080/bgbilling/executer?";
    // логин и пароль пользователя биллинга
    user="shamil";
    pswd ="shamil";
    
    Сообщить( "1" );
    
    Попытка  
        odd=СоздатьОбъект("MSXML2.XMLHTTP");    
        odd.Open("Post", url, 0);
        odd.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        
        i = odd.Send( "user="+ user + "&pswd="+ pswd + "&" + query );
        od   =  odd.responseXML; 
        
        // распечатка запросов и ответов, можно включить для отладки
        Сообщить( "Запрос: " + query );
        Сообщить( "Результат: " + od.xml );       
    Исключение
        Сообщить( "Ошибка: " + ОписаниеОшибки() );        
    КонецПопытки;    
    
    Возврат od;    
КонецФункции 

// поиск договора по названию, может использоваться для привязки договоров биллинга к 1с
Функция ПоискДоговора( mask )
     od = ПослатьЗапрос( "module=contract&action=FilterContract&contractMask=" + mask );
           
     cid = 0;
     
     rc = od.selectNodes( "/data/contracts/item" );
     Если rc.Length > 0 Тогда
         cid = Число( rc.item(0).getAttribute( "id" ) )
     КонецЕсли;
 
     Возврат cid;
КонецФункции


// просмор платежей договора за определенный месяц (необходим код догвоора)
Функция ПросмотрБаланса( cid ) 
    od = ПослатьЗапрос( "module=contract&action=ContractBalance&cid=" + cid  );    
    
    summa = 0;
    
    rc = od.selectNodes( "/data/table" );
    Если rc.Length > 0 Тогда
         summa = Число( rc.item(0).getAttribute( "summa5" ) )
    КонецЕсли;
     
    Возврат summa;
КонецФункции

// выполнение произвольного SQL запроса
Функция SQLЗапрос( query )
    Возврат ПослатьЗапрос( "module=admin&action=SQLEditor&pageSize=1000000&page=1&sql=" + URLEncode( query ) );
КонецФункции
    

// занесение прихода в договор
Процедура ЗанесениеПрихода( cid, type, summa, comment )
     
    dt = ТекущаяДата();
    paymentDate = Формат( dt, "ДДДММГГГГ" );    
    ПослатьЗапрос( "module=contract&action=UpdateContractPayment&date=" + paymentDate + "&pt=" + type + "&cid=" + cid + "&comment=" + comment + "&summa=" + summa + "&id=new"  );
    
КонецПроцедуры    

// 
Процедура ПриНачалеРаботыСистемы()  
    // ищем код договора x0000
    cid = ПоискДоговора( "x0000" );
    
    Сообщить( "cid=" + cid );
    
    Если cid > 0 Тогда    
        // просмотр баланса данного договора за текущий месяц
        summa = ПросмотрБаланса( cid );
        Сообщить( "Баланс= " + summa );
        
        // занесение прихода в договор
        ЗанесениеПрихода( cid, 16, "10", URLEncode( "ая" ) );
        
        // просмотр баланса данного договора за текущий месяц
        summa = ПросмотрБаланса( cid );
        Сообщить( "Баланс= " + summa );
        
        // произвольный SQL запрос в базу биллинга
        od = SQLЗапрос( "SELECT * FROM contract" );
        Сообщить( "Результат выборки: " + Лев( od.xml, 400 ) );
    КонецЕсли;    
КонецПроцедуры
Личные инструменты