|
Выгрузка номенклатуры на Shop-script free ТИС 9.2 | ☑ | ||
---|---|---|---|---|
0
Sergod
16.06.12
✎
06:02
|
Автор куда пропал... Плиз помогите доработать для ТИС 9.2 Что почитать, советы предложения
//******************************************************************* // Скрипт написан homutke 2007 [email protected] // распространяется под лицензией GPL // http://web21c.info // По вопросом получения полной версии обработки или доработки функционала обращаться // тел. 909 972-9000 // email [email protected] //******************************************************************* Перем Результат; Перем СписоктаблицвMYSQL; Перем ПозНовости; Перем Структура; Перем HTTPxml; Перем objXML; Перем СимволыBASE64; Перем ТекущаяЗакладка; Перем Меню; Перем ТекущееМеню; Функция СообщитьЛог(Текст="",Знак="") Сообщить(Текст); КонецФункции Функция ВДату(ДДД,Разд="") _Дата = ДатаЧисло(ДДД); Если СтрДлина(_Дата) = 1 тогда _Дата = "0"+ _Дата; КонецЕсли; _Месяц = ДатаМесяц(ДДД); Если СтрДлина(_Месяц) = 1 тогда _Месяц = "0"+ _Месяц; КонецЕсли; _Год = ДатаГод(ДДД); Возврат ""+_Год+Разд+_Месяц+Разд+_Дата; КонецФункции //-------------------------------------------------------------------------------- //!!!функция взята с сайта www.mista.ru Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции //------------------------------------------------------------------------------------------------------------------------------------------------------------ //!!!функция взята с сайта www.mista.ru Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; Результат=0; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции //-------------------------------------------------------------------------------- Функция ДвоичныеДанные(Стр) Экспорт Стр1=СокрЛП(стр); //проверим содержащиеся символы ДлинаСтроки=СтрДлина(Стр1); Для п=1 по ДлинаСтроки цикл Если найти(СимволыBASE64,Сред(Стр1,п,1))=0 Тогда СообщитьЛог("Некорректные символы!"); возврат ""; КонецЕсли; КонецЦикла; ДвоичныеДанные=""; Для п=1 по ДлинаСтроки цикл ДвоичныеДанные=ДвоичныеДанные+Строка( Формат(Из_10_В_Любую(КодСимв(Сред(Стр1,п,1)),2),"Ч(0)8") ); КонецЦикла; возврат ДвоичныеДанные; КонецФункции //------------------------------------------------------------------------------------------------------------------------------------------------------------ Функция base64_encode(Стр) Экспорт ДвоичныеДанные=ДвоичныеДанные(Стр); ДлинаСтр = СтрДлина(ДвоичныеДанные); Целые24 = Цел(ДлинаСтр/24); //сколько целых 3*8бит BASE64_String=""; Для п=1 по Целые24 Цикл Для р=1 По 4 Цикл //сделаем из 3*8бит 4*6бит BASE64_Simbol=Число(Сред(ДвоичныеДанные,6*р-5,6)); //найдем номер символа в BASE64 BASE64_Simbol=Сред(СимволыBASE64,Из_Любой_В_10(BASE64_Simbol+1,2),1); //достанем его по этому номеру //сделаем из них 8 битовые числа BASE64_String=BASE64_String+BASE64_Simbol; КонецЦикла; КонецЦикла; НеХватает = 3-(ДлинаСтр/8-Целые24*3); //вычислим сколько не хватает до целых 3*8бит Если Нехватает<3 Тогда Для п=1 По (3-НеХватает+1) Цикл //сделаем из 3*8бит 4*6бит + 1обрубок BASE64_Simbol=Сред(ДвоичныеДанные,6*п-5,6); Если СтрДлина(BASE64_Simbol)<6 Тогда Пока СтрДлина(BASE64_Simbol)<>6 Цикл BASE64_Simbol=BASE64_Simbol+"0"; КонецЦикла; КонецЕсли; BASE64_Simbol=Число(BASE64_Simbol); //найдем номер символа в BASE64 BASE64_Simbol=Сред(СимволыBASE64,Из_Любой_В_10(BASE64_Simbol+1,2),1); //достанем его по этому номеру (+1 нумерация с 0)!! //сделаем из них 8 битовые числа BASE64_String=BASE64_String+BASE64_Simbol; КонецЦикла; Для п=1 по НеХватает Цикл BASE64_String=BASE64_String+"="; КонецЦикла; КонецЕсли; Возврат BASE64_String; КонецФункции //------------------------------------------------------------------------------------------------------------------------------------------------------------ //******************************************************************************** // // Создано: осень 2001 года, Денис // // Может использоваться при отладке, отображает содержимое // произвольного объекта типа "ТаблицаЗначений" // // Исправлено 7 декабря 2002 года, Денис // Добавлено изменение ширины столбцов // и обработка случая, когда параметр не является таблицой значений // // Исправлено 25 января 2003 года, Денис // Добавлена расшифровка // Процедура csvie_ВывестиТаблицуЗначений(ТаблицаЗначений, Заголовок = "") Экспорт Перем Таб, ИИ, ЖЖ, НазваниеКолонки, ТипКолонки, Ширина, Значение, Сообщение; Таб = СоздатьОбъект("Таблица"); Если ТипЗначенияСтр(ТаблицаЗначений) <> "ТаблицаЗначений" Тогда Сообщение = ТаблицаЗначений; Таб.Область(1, 1, 1, 1).Текст = Сообщение; Таб.Область(1, 1, 1, 1).ШиринаСтолбца(СтрДлина(Сообщение)); Таб.ТолькоПросмотр(1); Таб.Показать("Не таблица значений: "+Заголовок); Возврат; КонецЕсли; Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ,,,, НазваниеКолонки); Таб.Область(1, ЖЖ, 1, ЖЖ).Текст = СокрЛП(НазваниеКолонки); Таб.Область(1, ЖЖ, 1, ЖЖ).РамкаОбвести(5, 5, 5, 5); Таб.Область(1, ЖЖ, 1, ЖЖ).ВертикальноеПоложение(3); Таб.Область(1, ЖЖ, 1, ЖЖ).ГоризонтальноеПоложение(3); Таб.Область(1, ЖЖ, 1, ЖЖ).РазмерШрифта(7); Таб.Область(1, ЖЖ, 1, ЖЖ).Полужирный(1); Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(); Ширина = Макс(Ширина, СтрДлина(СокрЛП(НазваниеКолонки))); Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина); КонецЦикла; Для ИИ = 1 по ТаблицаЗначений.КоличествоСтрок() цикл Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл Значение = ТаблицаЗначений.ПолучитьЗначение(ИИ, ЖЖ); Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Текст = Значение; Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Расшифровка(Значение, 0); Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).РамкаОбвести(3, 0, 3, 0); Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(); Ширина = Макс(Ширина, СтрДлина(СокрЛП(Строка(Значение)))); Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина); ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ, ТипКолонки); ; Если ТипКолонки = "Число" тогда Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ГоризонтальноеПоложение(2); КонецЕсли; Если ИИ = ТаблицаЗначений.ТекущаяСтрока() тогда Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ЦветФона(255, 0, 0); КонецЕсли; КонецЦикла; КонецЦикла; Попытка Таб.ТолькоПросмотр(1); Таб.Показать("Таблица значений: "+Заголовок); исключение КонецПопытки; КонецПроцедуры Функция Логировать(рез,текст="",ВЛог=0) Если логировать = 1 тогда Если ВЛог = 1 тогда СообщитьЛог(текст); Иначе csvie_ВывестиТаблицуЗначений(рез,текст); Конецесли; КонецЕсли; КонецФункции Функция КаталогВременныхФайлов1() //Возврат КаталогВременныхФайлов(); //Возврат КаталогПрограммы(); Возврат "c:\"; КонецФункции Функция РесайзТаблицыЗначений(Таблица,Размер) Пока Таблица.КоличествоСтрок() < Размер Цикл Таблица.НоваяСтрока(); КонецЦикла; Возврат Таблица; КонецФункции Функция writeFaultXML(errNum, errDesc="", from="") СообщитьЛог(errNum); КонецФункции Функция XMLToValueCInt(Стр) Возврат Стр; КонецФункции Функция CLng(Стр) Возврат Стр; КонецФункции Функция CBool(Стр) Возврат Стр; КонецФункции Функция CDbl(Стр) Возврат Стр; КонецФункции Функция convertStr(Стр) Возврат Стр; КонецФункции // // разборка ответа XML RPC сервера // Адаптировано для 1С 7.7 // [email protected] // www.web21c.ru, www.konset.ru // Функция XMLToValue(xmlNd) перем vval; Перем arrLen; перем valArr; Если xmlNd.childNodes(0).nodeType <> 3 тогда Если xmlNd.childNodes(0).tagName = "int" тогда возврат (XMLToValueCInt(xmlNd.childNodes(0).text)); ИначеЕсли xmlNd.childNodes(0).tagName = "i4" тогда // changed CInt to CLng for values over 32K ? Возврат(CLng(xmlNd.childNodes(0).text)); ИначеЕсли xmlNd.childNodes(0).tagName = "boolean" тогда Возврат(CBool(xmlNd.childNodes(0).text)); ИначеЕсли xmlNd.childNodes(0).tagName = "string" тогда Возврат(convertStr(xmlNd.childNodes(0).text)); ИначеЕсли xmlNd.childNodes(0).tagName = "double" тогда возврат (CDbl(xmlNd.childNodes(0).text)); ИначеЕсли xmlNd.childNodes(0).tagName = "dateTime.iso8601" тогда //Dim dt //dt=xmlNd.childNodes(0).text //val = CDate(mid(dt, 1, 4) & "/" _ // & mid(dt, 5, 2) _ // & "/" & mid(dt, 7, 2)) //val = dateadd("h", CInt(mid(dt, 10, 2)), val) //val = dateadd("n", CInt(mid(dt, 13, 2)), val) //val = dateadd("s", CInt(mid(dt, 16, 2)), val) ИначеЕсли xmlNd.childNodes(0).tagName = "array" тогда valArr = СоздатьОбъект("ТаблицаЗначений"); Размер = xmlNd.childNodes(0).childNodes(0).childNodes.length; // // valArr = РесайзТаблицыЗначений(valArr,Размер); // Для i = 0 по Размер-1 Цикл Темп = XMLToValue(xmlNd.childNodes(0).childNodes(0).childNodes(i)); Если ТипЗначенияСтр(Темп) = "СписокЗначений" тогда Для y = 1 По Темп.РазмерСписка() Цикл ЗначениеКолонки = ""; ИмяКолонки = Темп.ПолучитьЗначение(y,ЗначениеКолонки); Попытка valArr.ПолучитьПараметрыКолонки(ИмяКолонки); исключение valArr.НоваяКолонка(ИмяКолонки); КонецПопытки; valArr.ПолучитьСтрокуПоНомеру(i+1); valArr.УстановитьЗначение(i+1,ИмяКолонки,ЗначениеКолонки); КонецЦикла; Иначе Если valArr.КоличествоКолонок() = 0 тогда valArr.НоваяКолонка("Колонка1"); КонецЕсли; valArr.ПолучитьСтрокуПоНомеру(i+1); valArr.УстановитьЗначение(i+1,"Колонка1",Темп); КонецЕсли; КонецЦикла; // Возврат valArr; ИначеЕсли xmlNd.childNodes(0).tagName = "struct" тогда vval = СоздатьОбъект("СписокЗначений"); dictLen = xmlNd.childNodes(0).childNodes.length; Для k = 0 По dictLen-1 Цикл vval.ДобавитьЗначение(xmlNd.childNodes(0).childNodes(k).childNodes(0).text, XMLToValue(xmlNd.childNodes(0).childNodes(k).childNodes(1))); КонецЦикла; Возврат vval; ИначеЕсли xmlNd.childNodes(0).tagName = "base64" тогда Возврат base64_encode(xmlNd.childNodes(0).text); Конецесли; Иначе Возврат(convertStr(xmlNd.text)); Конецесли; КонецФункции Функция ТипXml(Тип) Если ТипЗначенияСтр(Тип) = "Строка" тогда Возврат " |<string>"+Тип+"</string>"; ИначеЕсли ТипЗначенияСтр(Тип) = "Число" тогда Возврат " |<int>"+Тип+"</int>"; ИначеЕсли ТипЗначенияСтр(Тип) = "Дата" тогда //Возврат " //|<dateTime.iso8601>"+Вдату(Тип)+"T00:00:01" + "</dateTime.iso8601>"; Возврат " |<dateTime>"+Вдату(Тип,"-")+ " 00:00:01</dateTime>"; иначе Возврат(Тип); КонецЕсли; Возврат(Тип); КонецФункции Функция ЗапросXMLRPC(url ="", metod="",value="") Если ТипЗначенияСтр(value) = "СписокЗначений" тогда СтрокаПараметров = ""; Для i = 1 по value.размерСписка() Цикл СтрокаПараметров = СтрокаПараметров + "<param><value>"+ типXML(value.ПолучитьЗначение(i)) +"</value></param>"; КонецЦикла; ИначеЕсли value<>"" тогда СтрокаПараметров = " |<param> |<value>"+ТипXml(value)+" |</value> |</param>"; Иначе СтрокаПараметров = ""; КонецЕсли; Если СтрокаПараметров<>"" тогда СтрокаПараметров = " |<params>" + СтрокаПараметров+ " |</params>"; КонецЕсли; Text = "<?xml version='1.0'?> |<methodCall> |<methodName>" + metod +"</methodName>" + СтрокаПараметров + " |</methodCall>"; HTTPxml.Open("POST", url , 0 ); HTTPxml.Send( Text ); objXML.async = 0; xml_fso=СоздатьОбъект("Scripting.FileSystemObject"); xml_fso.CreateTextFile(КаталогВременныхФайлов1()+"\test.xml", 1); xml_file=xml_fso.OpenTextFile(КаталогВременныхФайлов1()+"\test.xml", 2, 1); xml_file.WriteLine(HTTPxml.ResponseText); xml_file.Close(); objXML.Load(КаталогВременныхФайлов1()+"\test.xml"); ответ = СоздатьОбъект("СписокЗначений"); objLst = objXML.getElementsByTagName("param"); // Если objLst.length = 0 Тогда objLst = objXML.getElementsByTagName("member"); ответ.ДобавитьЗначение(-1,"Ошибка"); ответ.ДобавитьЗначение("",""); Иначе результат = XMLToValue(objLst.item(0).childNodes(0)); ответ.ДобавитьЗначение(0,"результат"); ответ.ДобавитьЗначение(результат); КонецЕсли; Возврат ответ; КонецФункции /////////////////////////////////// тестировать соединение shop script /////////////////////////////////// // // ////////////////////////////////////////////////////////////////////////////////////////////////////// Процедура ТестироватьСоединение(рез=0) Если Рез = 0 тогда результат = ЗапросXMLRPC( Сервер,"shopscript.getVersion",""); иначеЕсли Рез = 2 тогда СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(24); результат = ЗапросXMLRPC( Сервер,"shopscript.getTime",СписокПараметров ); иначеЕсли Рез = 3 тогда результат = ЗапросXMLRPC( Сервер,"system.listMethods",""); иначеЕсли Рез = 4 тогда результат = ЗапросXMLRPC( Сервер,"test",""); Конецесли; Если Результат.ПолучитьЗначение(1) = 0 тогда рез = Результат.ПолучитьЗначение(2); Логировать(рез); Иначе СообщитьЛог(Результат.ПолучитьЗначение(2),"!!!"); КонецЕсли; КонецПроцедуры /////////////////////////////////// считать товары из shop script /////////////////////////////////// // // ////////////////////////////////////////////////////////////////////////////////////////////////////// Функция обновитьТовары(Поз=1,Кол=1) Товары.УстановитьПараметрыКолонки("productID",,,,"номер",5); Товары.УстановитьПараметрыКолонки("categoryID",,,,"категория",10); Товары.УстановитьПараметрыКолонки("name",,,,"имя",10); Товары.УстановитьПараметрыКолонки("description",,,,"",15); Товары.УстановитьПараметрыКолонки("Price",,,,"цена",6); Товары.УстановитьПараметрыКолонки("in_stock",,,,"в продаже",6); Товары.ВидимостьКолонки("categoryID",0,); Товары.ТекущаяСтрока(Поз); Товары.ТекущаяКолонка(Кол); КонецФункции Процедура ЗаписатьТовар() СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Товары.productID); СписокПараметров.ДобавитьЗначение(tovar_name); СписокПараметров.ДобавитьЗначение(tovar_description); результат = ЗапросXMLRPC( Сервер,"shopscript.setProductNumber",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Активизировать("кнЗакрыть"); КонецЕсли; КонецПроцедуры Процедура РедактироватьТовар() ТекСтр = Товары.ТекущаяСтрока(); Если ТекСтр = 0 Тогда Возврат КонецЕсли; Товары.ПолучитьСтрокуПоНомеру(Товары.ТекущаяСтрока()); Если Товары.productID<>0 тогда СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Товары.productID); результат = ЗапросXMLRPC( Сервер,"shopscript.getProductNumber",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Рез = Результат.ПолучитьЗначение(2); Логировать(Рез, "результат"); Рез.Свернуть("itemID,name,description,price,Quantity",""); tovar_ProductId = Товары.productId; tovar_name = Товары.name; tovar_description = Товары.description; tovar_price = Товары.price; Форма.ИспользоватьСлой("РедактироватьТовар", 2); Активизировать("кнЗакрыть"); КонецЕсли; Иначе СообщитьЛог("ошибочный номер заказа","!!"); КонецЕсли; КонецПроцедуры Функция РефрешТоваров() Если ТекущаяЗакладка = 3 тогда Уровень = 1; ТекСтр = Категории.ТекущаяСтрока(); Если ТекСтр = 0 Тогда Уровень = 1; Форма.группаРедактировать.Доступность(0); Иначе Форма.группаРедактировать.Доступность(1); КонецЕсли; ТекСтр = Товары.ТекущаяСтрока(); ТекКол = Товары.ТекущаяКолонка(); Если ТекСтр = 0 Тогда Форма.товарРедактировать.Доступность(0); Иначе Форма.товарРедактировать.Доступность(1); КонецЕсли; Если Уровень>1 тогда Категории.ПолучитьСтрокуПоНомеру(Уровень); КонецЕсли; Категория = Категории.categoryID; СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Категория); результат = ЗапросXMLRPC( Сервер,"shopscript.getProducts",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Рез = Результат.ПолучитьЗначение(2); Логировать(Рез, "резульатат"); Рез.Свернуть("productID,categoryID,name,description,Price,in_stock",""); Если Рез.КоличествоСтрок() = 0 тогда Товары.УдалитьСтроки(); Иначе Товары.Загрузить(Рез); обновитьТовары(ТекСтр,текКол); ТекСтр = Товары.ТекущаяСтрока(); Если ТекСтр = 0 Тогда Форма.товарРедактировать.Доступность(0); Иначе Форма.товарРедактировать.Доступность(1); КонецЕсли; КонецЕсли; Иначе СообщитьЛог(Результат.ПолучитьЗначение(2),"!!!"); КонецЕсли; КонецЕсли; КонецФункции /////////////////////////////////// считать категории из shop script /////////////////////////////////// // // ////////////////////////////////////////////////////////////////////////////////////////////////////// Функция обновитьКатегории(Поз) Категории.УстановитьПараметрыКолонки("categoryID",,,,"номер",5); Категории.УстановитьПараметрыКолонки("name",,,,"наименование",10); Категории.УстановитьПараметрыКолонки("parent",,,,"",0); Категории.УстановитьПараметрыКолонки("products_count",,,,"",0); Категории.УстановитьПараметрыКолонки("description",,,,"описание",15); Категории.ВидимостьКолонки("parent,products_count",0,); Категории.ТекущаяСтрока(Поз); КонецФункции Процедура РефрешКатегорий() Если ТекущаяЗакладка = 3 тогда Уровень = Категории.ТекущаяСтрока(); Если Уровень <> 0 Тогда Категории.ПолучитьСтрокуПоНомеру(Уровень); Уровень = Категории.categoryID; Иначе Уровень = 1; КонецЕсли; СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Число(Уровень)); результат = ЗапросXMLRPC( Сервер,"shopscript.getCategory",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Рез = Результат.ПолучитьЗначение(2); Логировать(Рез, "результат"); Рез.Свернуть("categoryID,name,parent,description,products_count",""); Если Рез.КоличествоСтрок() = 0 тогда Категории.УдалитьСтроки(); Категории.НоваяСтрока(1); Категории.categoryID=1; Категории.name=".."; Иначе Категории.Загрузить(Рез); Если Уровень<>1 тогда Категории.НоваяСтрока(1); Категории.categoryID=1; Категории.name=".."; КонецЕсли; обновитьКатегории(1); КонецЕсли; Иначе СообщитьЛог(Результат.ПолучитьЗначение(2),"!!!"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура РедактироватьКатегорию() ТекСтр = Категории.ТекущаяСтрока(); Если ТекСтр = 0 Тогда Возврат КонецЕсли; Категории.ПолучитьСтрокуПоНомеру(Категории.ТекущаяСтрока()); Если Категории.categoryID<>0 тогда СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Категории.categoryID); результат = ЗапросXMLRPC( Сервер,"shopscript.getCategoryNumber",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Рез = Результат.ПолучитьЗначение(2); Логировать(Рез, "результат"); Рез.Свернуть("categoryID,name,parent,description",""); category_categoryID = Категории.categoryID; category_name = Категории.name; category_parent = Категории.parent; category_description = Категории.description; Форма.ИспользоватьСлой("РедактироватьКатегорию", 2); Активизировать("кнЗакрыть"); КонецЕсли; Иначе СообщитьЛог("ошибочный номер категории","!!"); КонецЕсли; РефрешКатегорий(); КонецПроцедуры Процедура ЗаписатьКатегорию() Если ТекущаяЗакладка = 3 тогда СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(category_categoryID); СписокПараметров.ДобавитьЗначение(category_name); СписокПараметров.ДобавитьЗначение(category_description); результат = ЗапросXMLRPC( Сервер,"shopscript.setCategoryNumber",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Активизировать("кнЗакрыть"); КонецЕсли; КонецЕсли; КонецПроцедуры /////////////////////////////////// считать заказы из shop script /////////////////////////////////// // // ////////////////////////////////////////////////////////////////////////////////////////////////////// Функция обновитьЗаказы(Поз) Заказы.УстановитьПараметрыКолонки("orderID",,,,"заказ",5,,); Заказы.УстановитьПараметрыКолонки("order_time",,,,"дата",5,,); Заказы.УстановитьПараметрыКолонки("order_amount",,,,"сумма",5,,); Заказы.УстановитьПараметрыКолонки("customer_lastname",,,,"Фамилия",15,,); Заказы.УстановитьПараметрыКолонки("customer_firstname",,,,"Имя",15,,); Заказы.ТекущаяСтрока(Поз); КонецФункции Функция обновитьЗаказ(Поз) Заказ.УстановитьПараметрыКолонки("itemID",,,,"Код",5,,); Заказ.УстановитьПараметрыКолонки("name",,,,"Наименование",15,,); Заказ.УстановитьПараметрыКолонки("price",,,,"Цена",5,,); Заказ.УстановитьПараметрыКолонки("Quantity",,,,"Кол-во",5,,); Заказ.ТекущаяСтрока(Поз); КонецФункции Процедура РефрешЗаказов(ТекущееМеню) Если ТекущееМеню = 1 тогда СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(сДаты); СписокПараметров.ДобавитьЗначение(поДату+1); результат = ЗапросXMLRPC( Сервер,"shopscript.getPayments",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Рез = Результат.ПолучитьЗначение(2); Логировать(Рез, "резульатат"); Рез.Свернуть("orderID,order_time,order_amount,customer_lastname,customer_lastname,customer_firstname",""); Если Рез.КоличествоСтрок() = 0 тогда Заказы.УдалитьСтроки(); Иначе Заказы.Загрузить(Рез); обновитьЗаказы(1); КонецЕсли; Иначе СообщитьЛог(Результат.ПолучитьЗначение(2),"!!!"); КонецЕсли; ИначеЕсли ТекущееМеню = 2 тогда Попытка objXML2 = CreateObject("Microsoft.XMLDOM"); Исключение СообщитьЛог("Ошибка инициализации XMLDOM"); КонецПопытки; root = objXML2.createNode(1, "orders", ""); Для i = 1 По Заказы.КоличествоСтрок() Цикл Заказы.ПолучитьСтрокуПоНомеру(i); order = objXML2.createNode(1, "order", ""); attribute = objXML2.CreateNode(2, "orderID", ""); attribute.Value = Заказы.orderID; order.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "order_time", ""); attribute.Value = Заказы.order_time; order.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "order_amount", ""); attribute.Value = Заказы.order_amount; order.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "customer_lastname", ""); attribute.Value = Заказы.customer_lastname; order.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "customer_firstname", ""); attribute.Value = Заказы.customer_firstname; order.Attributes.SetNamedItem(attribute); СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Заказы.orderID); результат2 = ЗапросXMLRPC( Сервер,"shopscript.getPaymentsNumber",СписокПараметров); Если Результат2.ПолучитьЗначение(1) = 0 тогда Рез = Результат2.ПолучитьЗначение(2); Рез.Свернуть("itemID,name,price,Quantity",""); Для j=1 По Рез.КоличествоСтрок() Цикл Рез.ПолучитьСтрокуПоНомеру(j); products = order.AppendChild(objXML2.CreateNode(1, "products", "")); attribute = objXML2.CreateNode(2, "itemID", ""); attribute.Value = Рез.itemID; products.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "name", ""); attribute.Value = Рез.name; products.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "price", ""); attribute.Value = Рез.price; products.Attributes.SetNamedItem(attribute); attribute = objXML2.CreateNode(2, "Quantity", ""); attribute.Value = Рез.Quantity; products.Attributes.SetNamedItem(attribute); КонецЦикла; Конецесли; root.AppendChild(order); КонецЦикла; objXML2.AppendChild(root); objXML2.save("c:\order.xml"); Сообщить("Файл сохранен в c:\order.xml"); ИначеЕсли ТекущееМеню = 3 тогда Предупреждение("Демо версия"); ИначеЕсли ТекущееМеню = 4 тогда Предупреждение("Демо версия"); КонецЕсли; КонецПроцедуры Процедура РедактироватьЗаказ() ТекСтр = Заказы.ТекущаяСтрока(); Если ТекСтр = 0 Тогда Возврат КонецЕсли; Заказы.ПолучитьСтрокуПоНомеру(Заказы.ТекущаяСтрока()); Если Заказы.Orderid<>0 тогда СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение(Заказы.Orderid); результат = ЗапросXMLRPC( Сервер,"shopscript.getPaymentsNumber",СписокПараметров); Если Результат.ПолучитьЗначение(1) = 0 тогда Рез = Результат.ПолучитьЗначение(2); |
|||
1
Sergod
16.06.12
✎
06:04
|
Ой что то не так выложил.... Вот php обработчик
<?php include('IXR_Library.inc.php'); $dbConn = mysql_connect ("localhost", "root", "") or die ('MySQL connect failed. ' . mysql_error()); mysql_select_db("ss") or die('Cannot select database. ' . mysql_error()); mysql_query("SET NAMES utf8"); function dbQuery($sql){ dump($sql); $result = mysql_query($sql) or die(mysql_error()); return $result; } function dump($value='') { $fp = fopen("xmlrpc.log", 'a'); fwrite($fp, $_SERVER['REMOTE_ADDR'] . " " . " " . $value."\r\n"); fclose($fp); } function mysql_resultTo2DAssocArray ( $result) { $i=0; $ret = array(); while ($row = mysql_fetch_assoc($result)) { foreach ($row as $key => $value) { $ret[$i][$key] = $value; } $i++; } return ($ret); } function getSQL($args) { dump($args); //return mysql_resultTo2DAssocArray( dbQuery($args)); } function getVersion() { return mysql_resultTo2DAssocArray( dbQuery(" SELECT * FROM `SS_system` LIMIT 0 , 30 ")); } function getPayments($args) { return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_orders` WHERE order_time>='" . $args[0]. "' AND order_time<='" . $args[1]. "'")); } function getCategory($args) { dump("SELECT * FROM `SS_categories` WHERE SS_categories.parent=" . $args); return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_categories` WHERE SS_categories.parent=" . $args)); } function getCategoryNumber($args) { dump("SELECT * FROM `SS_categories` WHERE SS_categories.categoryID=" . $args); return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_categories` WHERE SS_categories.categoryID=" . $args)); } function setCategoryNumber($args) { dbQuery("UPDATE `SS_categories` SET name='" . $args[1] . "' ,description='" . $args[2] . "' WHERE categoryID='" . $args[0]. "'"); } function getProducts($args) { return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_products` WHERE categoryID='" . $args. "'")); } function getProductNumber($args) { return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_products` WHERE productID='" . $args. "'")); } function setProductNumber($args) { dbQuery("UPDATE `SS_products` SET name='" . $args[1] . "', description='" . $args[2] . "' WHERE productID='" . $args[0]. "'"); } function getPaymentsNumber($args) { return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_ordered_carts` WHERE orderID='" . $args. "'")); } function getNews() { return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_news_table` ")); } function setNewsNumber($args) { if ($args[0] == 0) { dbQuery("INSERT `SS_news_table` (`NID` ,`add_date` ,`title` ,`picture` ,`textToPublication` ,`textToMail` ,`add_stamp` ,`priority` ,`emailed`) VALUES ( NULL , NULL , '" . $args[1] ."', '" . $args[2] ."', '". $args[3]."', '". $args[4]."' , NULL , NULL , NULL)"); } else { dbQuery("UPDATE `SS_news_table` SET title='" . $args[1] . "' , picture='" . $args[2] . "', textToPublication='" . $args[3] . "', textToMail='" . $args[4] . "' WHERE NID='" . $args[0]. "'");} } function delNews($args) { dbQuery("DELETE FROM `SS_news_table` WHERE NID='" . $args . "'"); return true; } function getAuxPage($args) { return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_aux_pages` ")); } function setAuxPageNumber($args) { if ($args[0] == 0) { dbQuery("INSERT `SS_aux_pages` (`aux_page_ID`,`aux_page_name`,`aux_page_text_type`,`aux_page_text`,`meta_keywords`,`meta_description`) VALUES (NULL,$args[1],$args[2],$args[3],$args[4],$args[5])"); } else { dbQuery("UPDATE `SS_aux_pages` SET aux_page_name='" . $args[1] . "', aux_page_text_type='" . $args[2] . "', aux_page_text='" . $args[3] . "', meta_keywords='" . $args[4] . "', meta_description='" . $args[5] . "' WHERE aux_page_ID='" . $args[0]. "'"); } } function delAuxPage($args) { dbQuery("DELETE FROM `SS_aux_pages` WHERE aux_page_ID='" . $args . "'"); return true; } function getPicture($args) { if($img = @file_get_contents($args)) { return new IXR_Base64($val); } return new IXR_Error(-1, 'You did not open picture'); } function setPicture($args) { //return mysql_resultTo2DAssocArray( dbQuery("SELECT * FROM `SS_aux_pages` ")); } function getTime($args) { return "[" . $args . "]"; } function add($args) { return $args[0]; // return $args[0] + $args[1]; } function addArray($array) { $total = 0; foreach ($array as $number) { $total += $number; } return implode(' + ', $array).' = '.$total; } function addProduct($array) { $str = ""; dump(sizeof($array)); $str = $str ."INSERT INTO `shop-script`.`SS_products` ( `productID` , `categoryID` , `name` , `description` , `customers_rating` , `Price` , `in_stock` , `customer_votes` , `items_sold` , `enabled` , `brief_description` , `list_price` , `product_code` , `sort_order` , `default_picture` , `date_added` , `date_modified` , `viewed_times` , `eproduct_filename` , `eproduct_available_days` , `eproduct_download_times` , `weight` , `meta_description` , `meta_keywords` , `free_shipping` , `min_order_amount` , `shipping_freight` , `classID` ) VALUES ( NULL , $array[$number][0], '$array[$number][1]', '$array[$number][2]', '0', $array[$number][3], '1', '0', '', '1', NULL , NULL , NULL , '0', NULL , NULL , NULL , '0', NULL , '5', '5', '0', NULL , NULL , '0', '1', '0', NULL );"; } $server = new IXR_Server(array( 'shopscript.getPicture' => 'getPicture', 'shopscript.getNews' => 'getNews', 'shopscript.setNewsNumber' => 'setNewsNumber', 'shopscript.delNews' => 'delNews', 'shopscript.setPicture' => 'setPicture', 'shopscript.getSQL' => 'getSQL', 'shopscript.getVersion' => 'getVersion', 'shopscript.getPayments' => 'getPayments', 'shopscript.getCategory' => 'getCategory', 'shopscript.getCategoryNumber' => 'getCategoryNumber', 'shopscript.setCategoryNumber' => 'setCategoryNumber', 'shopscript.getPaymentsNumber' => 'getPaymentsNumber', 'shopscript.getProducts' => 'getProducts', 'shopscript.getProductNumber' => 'getProductNumber', 'shopscript.setProductNumber' => 'setProductNumber', 'shopscript.addProduct' => 'addProduct', 'shopscript.getAuxPage' => 'getAuxPage', 'shopscript.setAuxPageNumber' => 'setAuxPageNumber', 'shopscript.delAuxPage' => 'delAuxPage', 'test.add' => 'add', 'test.addArray' => 'addArray', 'shopscript.getTime' => 'getTime')); ?> |
|||
2
Sergod
16.06.12
✎
06:05
|
Блин и не в ту ветку , жутко извиняюсь....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |