Пример обращения к биллингу из 1С v.7.7
Материал из BiTel WiKi
(Новая: Ниже представлен пример тестовой конфигурации по интеграции биллинга с 1С Бухгалтерией версии 7.7. Для...)
Следующая правка →
Версия 05:50, 25 апреля 2008
Ниже представлен пример тестовой конфигурации по интеграции биллинга с 1С Бухгалтерией версии 7.7. Для корректной работы конфигурации на компьютере должен быть установлен msxml версии 4.0. Вы можете загрузить его здесь. При инсталляции данного пакета также устанавливается справочная система по 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 ) ); КонецЕсли; КонецПроцедуры