Имя: Пароль:
1C
1С v8
Выгрузка номенклатуры на 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
Блин и не в ту ветку , жутко извиняюсь....
Ошибка? Это не ошибка, это системная функция.