При разработке очередного обмена с интернет магазином через API столкнулисть что сайт возвращает ответ в виде:
{"ok":"true","description":"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d"}
из кода ясно что это JSON и используя код ПрочитатьJSON
Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(стрВходящая); ДанныеЛога = ПрочитатьJSON(Чтение); Чтение.Закрыть();
В переменной ДанныеЛога будет структура в виде
В результате получилась функция с 2-мя вариантами возрата, в зависимости от того как нужно
//Функция читает полученный JSON декадируя текст юникод Функция ДекодироватьUniCodeВJSON(стрВходящая) // стрВходящая содержит {"ok":"true","description":"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d"} Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(стрВходящая); ДанныеЛога = ПрочитатьJSON(Чтение); Чтение.Закрыть(); // Вариант 1 используя перебор структуры и вывод в текстовую переменную Текст = ""; Для каждого Элемент Из ДанныеЛога Цикл //добавим разделитель после предыдущего значения Текст = Текст + ?(НЕ ПустаяСтрока(Текст), Символы.ПС, ""); //добавим представление ключа и значения: Текст = Текст + Элемент.Ключ + " = " + Элемент.Значение; КонецЦикла; Возврат Текст; //Вернет ok = true description = Статус заказа изменен // Вариант 2 мспользуя ЗаписьJSON Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); ЗаписатьJSON(Запись, ДанныеЛога,); Возврат Запись.Закрыть(); // Вернет JSON {"ok":"true","description":"Статус заказа изменен"} КонецФункции
На просторах интернета была найдена еще одна функция:
//Параметры: Строка в Юникод (обязательный) Тип: Строка. Исходная строка. //Возвращаемое значение: Тип: Строка. Строка обработанных символов. //Описание: Возвращает преобразованную строку из формата Unicod. //Автор: Александр Кияница (treedo) Функция ПереобразоватьЮникод(Строка) ГотововаяСтрока = "" ; МасУкр = Новый Массив(66) ; МасУкр[0]="А"; МасУкр[1]="Б"; МасУкр[2]="В"; МасУкр[3]="Г"; МасУкр[4]="Ґ"; МасУкр[5]="Д"; МасУкр[6]="Е"; МасУкр[7]="Є"; МасУкр[8]="Ж"; МасУкр[9]="З"; МасУкр[10]="И"; МасУкр[11]="І"; МасУкр[12]="Ї"; МасУкр[13]="Й"; МасУкр[14]="К"; МасУкр[15]="Л"; МасУкр[16]="М"; МасУкр[17]="Н"; МасУкр[18]="О"; МасУкр[19]="П"; МасУкр[20]="Р"; МасУкр[21]="С"; МасУкр[22]="Т"; МасУкр[23]="У"; МасУкр[24]="Ф"; МасУкр[25]="Х"; МасУкр[26]="Ц"; МасУкр[27]="Ч"; МасУкр[28]="Ш"; МасУкр[29]="Щ"; МасУкр[30]="Ь"; МасУкр[31]="Ю"; МасУкр[32]="Я"; МасУкр[33]="а"; МасУкр[34]="б"; МасУкр[35]="в"; МасУкр[36]="г"; МасУкр[37]="ґ"; МасУкр[38]="д"; МасУкр[39]="е"; МасУкр[40]="є"; МасУкр[41]="ж"; МасУкр[42]="з"; МасУкр[43]="и"; МасУкр[44]="і"; МасУкр[45]="ї"; МасУкр[46]="й"; МасУкр[47]="к"; МасУкр[48]="л"; МасУкр[49]="м"; МасУкр[50]="н"; МасУкр[51]="о"; МасУкр[52]="п"; МасУкр[53]="р"; МасУкр[54]="с"; МасУкр[55]="т"; МасУкр[56]="у"; МасУкр[57]="ф"; МасУкр[58]="х"; МасУкр[59]="ц"; МасУкр[60]="ч"; МасУкр[61]="ш"; МасУкр[62]="щ"; МасУкр[63]="ь"; МасУкр[31]="ю"; МасУкр[65]="я"; МасКод = Новый Массив(66) ; МасКод[0]="0410"; МасКод[1]="0411"; МасКод[2]="0412"; МасКод[3]="0413"; МасКод[4]="0490"; МасКод[5]="0414"; МасКод[6]="0415"; МасКод[7]="0404"; МасКод[8]="0416"; МасКод[9]="0417"; МасКод[10]="0418"; МасКод[11]="0406"; МасКод[12]="0407"; МасКод[13]="0419"; МасКод[14]="041A"; МасКод[15]="041B"; МасКод[16]="041C"; МасКод[17]="041D"; МасКод[18]="041E"; МасКод[19]="041F"; МасКод[20]="0420"; МасКод[21]="0421"; МасКод[22]="0422"; МасКод[23]="0423"; МасКод[24]="0424"; МасКод[25]="0425"; МасКод[26]="0426"; МасКод[27]="0427"; МасКод[28]="0428"; МасКод[29]="0429"; МасКод[30]="042C"; МасКод[31]="042E"; МасКод[32]="042F"; МасКод[33]="0430"; МасКод[34]="0431"; МасКод[35]="0432"; МасКод[36]="0413"; МасКод[37]="0491"; МасКод[38]="0434"; МасКод[39]="0435"; МасКод[40]="0454"; МасКод[41]="0436"; МасКод[42]="0437"; МасКод[43]="0438"; МасКод[44]="0456"; МасКод[45]="0457"; МасКод[46]="0439"; МасКод[47]="043A"; МасКод[48]="043B"; МасКод[49]="043C"; МасКод[50]="043D"; МасКод[51]="043E"; МасКод[52]="043F"; МасКод[53]="0440"; МасКод[54]="0441"; МасКод[55]="0442"; МасКод[56]="0443"; МасКод[57]="0444"; МасКод[58]="0445"; МасКод[59]="0446"; МасКод[60]="0447"; МасКод[61]="0448"; МасКод[62]="0449"; МасКод[63]="044C"; МасКод[31]="044E"; МасКод[65]="044F"; тмпСтрока = "" ; Для Счетчик = 1 По СтрДлина(Строка) Цикл Если Лев(Строка, 1) = "\" Тогда Если Лев(Строка, 2) = "\u" Тогда тмпСтрока = Прав(Лев(Строка, 6),4) ; Если МасКод.Найти(тмпСтрока) = Неопределено Тогда СтрокаЗамены = Прав(тмпСтрока, 1) ; тмпСтрока = СтрЗаменить(тмпСтрока,СтрокаЗамены,ТРег(СтрокаЗамены)); Если МасКод.Найти(тмпСтрока) = Неопределено Тогда Сообщить("Код символа не найден: " + тмпСтрока) ; Иначе ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод.Найти(тмпСтрока)] ; КонецЕсли; Иначе ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод.Найти(тмпСтрока)] ; КонецЕсли; Строка = Прав(Строка, (СтрДлина(Строка)-6)) ; Иначе Строка = Прав(Строка, (СтрДлина(Строка)-2)) ; КонецЕсли; Иначе ГотововаяСтрока = ГотововаяСтрока + Лев(Строка, 1) ; Строка = Прав(Строка, (СтрДлина(Строка)-1)) ; КонецЕсли; КонецЦикла; Возврат ГотововаяСтрока ; КонецФункции
Процедура СнятиеФлагаПустыхГрупп(Кнопка) СтрПодключения = "DSN=mySQL_ishop;"; СтрПодключения = СтрПодключения+"Database=joomla;"; СтрПодключения = СтрПодключения+"Uid=Sa;"; СтрПодключения = СтрПодключения+"Pwd=хххххххх;"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрПодключения); RS = Новый COMОбъект("ADODB.Recordset"); RSIDProduct= Новый COMОбъект("ADODB.Recordset"); Command = Новый COMОбъект ("ADODB.Command"); Command.ActiveConnection = Connection; Сообщить (Строка (ТекущаяДата()) + " обновляем флаг пустых групп"); Запрос =Новый Запрос; ЗАпрос.Текст ="ВЫБРАТЬ РАЗЛИЧНЫЕ | Номенклатура.ЭтоГруппа, | Номенклатура.НеОтображатьWeb, | Номенклатура.НеОтображатьНикогда, | Номенклатура.Код КАК Код, | Номенклатура.Артикул, | Номенклатура.ПустойОстаток |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ИСТИНА"; // | И (Номенклатура.ПустойОстаток = ИСТИНА // | ИЛИ Номенклатура.НеОтображатьWeb = ИСТИНА // | ИЛИ Номенклатура.НеОтображатьНикогда = ИСТИНА)"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ПустойОстаток ИЛИ Выборка.НеОтображатьНикогда ИЛИ Выборка.НеОтображатьWEB Тогда АпдейтГрупп = "UPD ATE jos_vm_category SET category_publish='N' WHERE category_description='"+Выборка.Код+"'" ; Иначе АпдейтГрупп = "UPD ATE jos_vm_category SET category_publish='Y' WHERE category_description='"+Выборка.Код+"'" ; КонецЕсли; Command.CommandText = АпдейтГрупп; Command.CommandType = 1; Попытка РекордСет = Command.Execute(); Исключение Сообщить (ОписаниеОшибки()); КонецПопытки; КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) СтрПодключения = "DSN=mySQL_ishop;"; СтрПодключения = СтрПодключения+"Database=joomla;"; СтрПодключения = СтрПодключения+"Uid=Sa;"; СтрПодключения = СтрПодключения+"Pwd=ххххххх;"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрПодключения); RS = Новый COMОбъект("ADODB.Recordset"); RSIDProduct= Новый COMОбъект("ADODB.Recordset"); Command = Новый COMОбъект ("ADODB.Command"); Command.ActiveConnection = Connection; // выберем запросом все группы товаров Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.ПометкаУдаления, | Номенклатура.Предопределенный, | Номенклатура.Родитель, | Номенклатура.ЭтоГруппа, | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.НеОтображатьWeb, | Номенклатура.НеОтображатьНикогда, | Номенклатура.Артикул, | Номенклатура.ПустойОстаток |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ИСТИНА"; // | И Номенклатура.Родитель = &Родитель"; // Запрос.УстановитьПараметр("Родитель",Справочники.Номенклатура.ПустаяСсылка()); Результат = Запрос.Выполнить(); Выборка= Результат.Выбрать(); ЭлементыФормы.Индикатор1.МинимальноеЗначение = 0; ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Выборка.Количество(); н=0; Пока Выборка.Следующий() Цикл н=н+1; // запрос существования товара в базе виртуемарта query = " |SEL ECT category_id |FR OM jos_vm_category WHERE category_description='"+Выборка.Код+"' limit 1"; RSIDProduct.CursorType = 3; RSIDProduct.Open(query, Connection); Если RSIDProduct.EOF() И RSIDProduct.BOF() Тогда СтрН = СтрЗаменить(Строка(н)," ",""); //пишем группы верхнего уровня // если группа имеет признак того что-бы ее не выгружать на web то отменим публикацию // необходимо для оптимизации добавить рекурсию по родительскому каталогу Если Выборка.НеОтображатьWeb или Выборка.НеОтображатьНикогда или Выборка.Родитель.НеОтображатьНикогда или Выборка.Родитель.НеОтображатьWeb или Выборка.ПустойОстаток Тогда query = "ins ert into jos_vm_category (vendor_id , category_name ,category_description, category_publish , category_browsepage , products_per_row , category_flypage, list_order ) |values ('1' , '"+Выборка.НАИМЕНОВАНИЕ+"' ,'"+Выборка.Код+"', 'N', 'managed' , '1' , 'flypage.tpl', '1')"; // иначе публикуем Иначе query = "ins ert into jos_vm_category ( |vendor_id , |category_name , |category_description, |category_publish , |category_browsepage , |products_per_row , |category_flypage, |list_order ) |values ('1' , '"+Выборка.НАИМЕНОВАНИЕ+"' ,'"+Выборка.Код+"', 'Y', 'managed' , '1' , 'flypage.tpl', '1')"; КонецЕсли; Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить (ОписаниеОшибки()); Сообщить (Выборка.Код); Сообщить (Формат (н,"ЧГ=0")); КонецПопытки; query = " |SEL ECT * |FR OM jos_vm_category WHERE category_description='"+Выборка.Код+"' limit 1"; RS.Open(query, Connection); RS.MoveFirst(); Пока RS.EOF() = 0 Цикл ИДГруппы = RS.Fields("category_id").Value; RS.MoveNext(); КонецЦикла; RS.Close(); query = "ins ert into jos_vm_category_xref ( `category_parent_id` , `category_child_id` ) |values ( '"+0+"' , '"+Формат(ИДгруппы,"ЧГ=0")+"' )"; Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить (Выборка.Код); Сообщить(ОписаниеОшибки()); КонецПопытки; ОбработкаПрерыванияПользователя(); // Состояние("Обновляем группу товаров " + Выборка.Наименование); КонецЕсли; Индикатор1=н; RSIDProduct.Close(); КонецЦикла; Сообщить ("обновлено " + н+ " групп"); // обновим статус публикацию групп Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.ПометкаУдаления, | Номенклатура.Предопределенный, | Номенклатура.Родитель.Код КАК КодРодителя, | Номенклатура.ЭтоГруппа, | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.НеОтображатьWeb, | Номенклатура.НеОтображатьНикогда |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ИСТИНА | И (НЕ Номенклатура.Родитель = &Родитель)"; Запрос.УстановитьПараметр("Родитель",Справочники.Номенклатура.ПустаяСсылка()); Результат = Запрос.Выполнить(); Выборка= Результат.Выбрать(); ЭлементыФормы.Индикатор1.МинимальноеЗначение = 0; ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Выборка.Количество(); н=0 ; Сообщить ("Строим структуру..."); Пока Выборка.Следующий() Цикл н=н+1; // Если не Выборка.Ссылка.Уровень=0 тогда //1 найдем айди родителя и категории в виртуамарте query = " |SEL ECT * |FR OM jos_vm_category WHERE category_description='"+Выборка.КодРодителя+"' limit 1"; RS.Open(query, Connection); RS.MoveFirst(); Пока RS.EOF() = 0 Цикл ИДРодителя = RS.Fields("category_id").Value; RS.MoveNext(); КонецЦикла; RS.Close(); query = " |SEL ECT * |FR OM jos_vm_category WHERE category_description='"+Выборка.Код+"' limit 1"; RS.Open(query, Connection); Попытка RS.MoveFirst(); Исключение Сообщить (Выборка.Код); КонецПопытки; Пока RS.EOF() = 0 Цикл ИДГруппы = RS.Fields("category_id").Value; RS.MoveNext(); КонецЦикла; RS.Close(); //найдем и завалим запись в категории query = "delete fr om jos_vm_category_xref where category_child_id='"+Формат(ИДгруппы,"ЧГ=0")+"'"; Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить (Выборка.Код); Сообщить(ОписаниеОшибки()); КонецПопытки; // добавим запись в категорию query = "ins ert into jos_vm_category_xref ( category_parent_id , category_child_id) |values ( '"+Формат(ИДРодителя,"ЧГ=0")+"' , '"+Формат(ИДгруппы,"ЧГ=0")+"' )"; Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить (Выборка.Код); Сообщить(ОписаниеОшибки()); КонецПопытки; Индикатор1=н; // КонецЕсли; КонецЦикла; Сообщить ("обновлена структура " + н+ " групп"); // RS.Close(); Connection.Close(); КонецПроцедуры Процедура ОсновныеДействияФормыОчистьТАблицыSQL(Кнопка) СтрПодключения = "DSN=mySQL_ishop;"; СтрПодключения = СтрПодключения+"Database=joomla;"; СтрПодключения = СтрПодключения+"Uid=Sa;"; СтрПодключения = СтрПодключения+"Pwd=ххххххх;"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрПодключения); RS = Новый COMОбъект("ADODB.Recordset"); Command = Новый COMОбъект ("ADODB.Command"); Command.ActiveConnection = Connection; Command = Новый COMОбъект ("ADODB.Command"); Command.ActiveConnection = Connection; query =" |DELETE FR OM jos_vm_category"; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); query =" |DELETE FR OM jos_vm_category_xref"; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); query =" |DELETE FR OM jos_vm_product"; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); query =" |DELETE FR OM jos_vm_product_category_xref"; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); query =" |DELETE FR OM jos_vm_product_price"; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); // RS.Close(); Connection.Close(); КонецПроцедуры Процедура ОсновныеДействияФормыОбновитьТовары(Кнопка) Сообщить (Строка (ТекущаяДата()) + " обновляем группы товаров..."); КнопкаВыполнитьНажатие(1); СтрПодключения = "DSN=mySQL_ishop;"; СтрПодключения = СтрПодключения+"Database=joomla;"; СтрПодключения = СтрПодключения+"Uid=Sa;"; СтрПодключения = СтрПодключения+"Pwd=ххххххх;"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрПодключения); RS = Новый COMОбъект("ADODB.Recordset"); RSIDProduct = Новый COMОбъект("ADODB.Recordset"); Command = Новый COMОбъект ("ADODB.Command"); Command.ActiveConnection = Connection; Склад = Константы.СкладРозница.Получить(); Сообщить (Строка (ТекущаяДата()) + " распубликовываем отсутсвующие товары"); Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК Остаток, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул КАК Артикул, | ЕСТЬNULL(ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0), 0) КАК ДоступноеКоличество, | ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) КАК Заказы |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&КонецДня, СкладКомпании = &Склад) КАК ОстаткиТоваровКомпанииОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки(&КонецДня, ) КАК ЗаказыПокупателейОстатки | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ЗаказыПокупателейОстатки.Номенклатура |ГДЕ | ОстаткиТоваровКомпанииОстатки.Заказ = &ПустойЗаказ | И ЕСТЬNULL(ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0), 0) > 0 | И (НЕ ОстаткиТоваровКомпанииОстатки.Номенклатура.WebЦенаУпр = 0) | И (НЕ ОстаткиТоваровКомпанииОстатки.Номенклатура.WebЦенаУпр2 = 0)"; Запрос.УстановитьПараметр("ПустойЗаказ", Документы.ЗаказПокупателя.ПустаяСсылка()); Запрос.УстановитьПараметр("Склад",Склад ); Запрос.УстановитьПараметр("КонецДня",КонецДня (ТекущаяДата())); // Запрос.УстановитьПараметр("Артикул",Артикул); ТЗостатоков = Запрос.Выполнить().Выгрузить(); // ТЗостатоков.ВыбратьСтроку(); query = " |SEL ECT product_sku, product_id |FR OM jos_vm_product"; RS.Open(query, Connection); Если (НЕ RS.EOF()) И (НЕ RS.BOF()) Тогда RS.MoveFirst(); Пока RS.EOF() = 0 Цикл Артикул = RS.Fields("product_sku").Value; ПродуктИД = RS.Fields("product_id").Value; // Если Выборка.Количество()= 0 Тогда Если ТЗостатоков.Найти(Артикул,"Артикул")= Неопределено Тогда АпдейтВиртмарта = "UPD ATE jos_vm_product SET product_in_stock= '0',product_publish='N' WHERE product_sku='"+Артикул+"'" ; Command.CommandText = АпдейтВиртмарта; Command.CommandType = 1; Попытка РекордСет = Command.Execute(); Исключение Сообщить (ОписаниеОшибки()); КонецПопытки; КонецЕсли; RS.MoveNext(); КонецЦикла; КонецЕсли; RS.Close(); //** модуль обновление цен Сообщить (Строка (ТекущаяДата()) + " начинаем обновление цен на сайте..."); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК Остаток, | ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Код КАК Код, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул КАК Артикул, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Наименование КАК Наименование, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Родитель.Код КАК РодительКОД, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Родитель.Артикул КАК РодительАртикул, | ОстаткиТоваровКомпанииОстатки.Номенклатура.WebЦенаУпр КАК WEbЦЕнаУПР, | ОстаткиТоваровКомпанииОстатки.Номенклатура.WebЦенаУпр2 КАК WEbЦЕнаУПР2, | ОстаткиТоваровКомпанииОстатки.Номенклатура.НеВыводитьНаСайт КАК НеВыводитьНаСайт, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Родитель.НеОтображатьWeb КАК НеОтображатьWeb, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Родитель.НеОтображатьНикогда КАК НеОтображатьНикогда, | ЕСТЬNULL(ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0), 0) КАК ДоступноеКоличество, | ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) КАК Заказы |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&КонецДня, СкладКомпании = &Склад) КАК ОстаткиТоваровКомпанииОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки(&КонецДня, ) КАК ЗаказыПокупателейОстатки | ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ЗаказыПокупателейОстатки.Номенклатура |ГДЕ | ОстаткиТоваровКомпанииОстатки.КоличествоОстаток > 0 | И ОстаткиТоваровКомпанииОстатки.Заказ = &ПустойЗаказ | И (НЕ ОстаткиТоваровКомпанииОстатки.Номенклатура.WebЦенаУпр = 0) | И (НЕ ОстаткиТоваровКомпанииОстатки.Номенклатура.WebЦенаУпр2 = 0)"; Запрос.УстановитьПараметр("ПустойЗаказ", Документы.ЗаказПокупателя.ПустаяСсылка()); Запрос.УстановитьПараметр("Склад", Справочники.СкладыКомпании.НайтиПоКоду("00002")); Запрос.УстановитьПараметр("КонецДня",КонецДня(ТекущаяДата())); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); ЭлементыФормы.Индикатор1.МинимальноеЗначение = 0; ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Выборка.Количество(); н=0 ; ЗапросКурса = Новый Запрос; ЗапросКурса.Текст = "ВЫБРАТЬ | КурсыВалютСрезПоследних.Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&ТекущаяДата, ) КАК КурсыВалютСрезПоследних |ГДЕ | КурсыВалютСрезПоследних.Валюта = &Валюта"; ЗапросКурса.УстановитьПараметр("Валюта", Константы.ВалютаУправленческогоУчетаКомпании.Получить()); ЗапросКурса.УстановитьПараметр("ТекущаяДата",КонецДня(ТекущаяДата())); ВыборкаКурса = ЗапросКурса.Выполнить().Выбрать(); Пока ВыборкаКурса.Следующий() Цикл Курс = ВыборкаКурса.Курс; КонецЦикла; Пока Выборка.Следующий() Цикл н=н+1; // Если Выборка.ДоступноеКоличество < 0 Тогда ДОступноеКоличество=0; Иначе ДОступноеКоличество=Выборка.ДоступноеКоличество; КонецЕсли; ДОступноеКоличество=Выборка.ДоступноеКоличество; // Сообщить (Выборка.Номенклатура.Наименование + " " + ДОступноеКоличество); флагсуществования=Ложь; // убираем непорядочные символы Наименование = СтрЗаменить(Выборка.Наименование,"'"," "); //уберем символ ' // запрос существования товара в базе виртуемарта query = " |SEL ECT * |FR OM jos_vm_product WHERE product_sku='"+Выборка.Артикул+"' limit 1"; RSIDProduct.Open(query, Connection); Если RSIDProduct.EOF() И RSIDProduct.BOF() Тогда // Если Выборка.НеОтображатьНикогда = NULL Тогда НеОтображатьНикогда=Ложь; Иначе НеОтображатьНикогда=ИСТИНА; КонецЕсли; // Если Выборка.НеОтображатьНикогда = NULL Тогда НеОтображатьWeb=Ложь Иначе НеОтображатьНикогда=ИСТИНА; КонецЕсли; Если ПРО2 Тогда Цена = ВЫборка.WEbЦЕнаУПР2; Иначе Цена = Выборка.WEbЦЕнаУПР; КонецЕсли; Если Выборка.НеВыводитьНаСайт Тогда // флаги отображения на сайте //Если Выборка.НеВыводитьНаСайт или Выборка.НеОтображатьНикогда или Выборка.НеОтображатьWeb Тогда query = "ins ert into jos_vm_product ( vendor_id , product_parent_id , product_sku , product_s_desc , product_publish , product_special , product_discount_id , product_name , product_unit , quantity_options, product_order_levels, product_in_stock, product_sales,product_url ) |values ( '1', '0', '"+Выборка.Артикул+"', '"+наименование+"', 'N', 'N', '0', '"+наименование+"', 'шт.', 'none,0,0,1', '0,0','"+Формат (ДОступноеКоличество, "ЧГ=0")+"','"+Формат (Цена*Курс,"ЧГ=0")+"','http://catalog.sunrise.ru/descriptionPage.aspx?a="+Выборка.Артикул+"')"; Иначе query = "ins ert into jos_vm_product ( vendor_id , product_parent_id , product_sku , product_s_desc , product_publish , product_special , product_discount_id , product_name , product_unit , quantity_options, product_order_levels, product_in_stock, product_sales, product_url ) |values ( '1', '0', '"+Выборка.Артикул+"', '"+наименование+"', 'Y', 'N', '0', '"+наименование+"', 'шт.', 'none,0,0,1', '0,0','"+Формат (ДОступноеКоличество, "ЧГ=0")+"','"+Формат (Цена*Курс,"ЧГ=0")+"','http://catalog.sunrise.ru/descriptionPage.aspx?a="+Выборка.Артикул+"')"; КонецЕсли; // запишем номенклатуру // Сообщить (query); Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить (ОписаниеОшибки()); КонецПопытки; RSIDProduct.Close(); флагсуществования =Ложь; Иначе флагсуществования=Истина; // выполним пока не нужный запрос /// данные об изменении в номенклатуре //RSIDProduct.MoveFirst(); //Пока RSIDProduct.EOF() = 0 Цикл // ИД = RSIDProduct.Fields("product_id").Value; // RSIDProduct.MoveNext(); //КонецЦикла; // Если Выборка.НеОтображатьНикогда = NULL Тогда НеОтображатьНикогда=Ложь; Иначе НеОтображатьНикогда=ИСТИНА; КонецЕсли; // Если Выборка.НеОтображатьНикогда = NULL Тогда НеОтображатьWeb=Ложь Иначе НеОтображатьНикогда=ИСТИНА; КонецЕсли; Если ПРО2 Тогда Цена = ВЫборка.WEbЦЕнаУПР2; Иначе Цена = Выборка.WEbЦЕнаУПР; КонецЕсли; Если Выборка.НеВыводитьНаСайт Тогда query = "UPD ATE jos_vm_product SET product_sku='"+Выборка.Артикул+"', product_s_desc= '"+наименование+"',product_in_stock= '"+Формат (ДОступноеКоличество, "ЧГ=0")+"',product_sales='"+Формат (Цена*Курс,"ЧГ=0")+"',product_url='http://catalog.sunrise.ru/descriptionPage.aspx?a="+Выборка.Артикул+"',product_publish='N' WHERE product_sku='"+Выборка.Артикул+"'" ; Иначе query = "UPD ATE jos_vm_product SET product_sku='"+Выборка.Артикул+"', product_s_desc= '"+наименование+"',product_in_stock= '"+Формат (ДОступноеКоличество, "ЧГ=0")+"',product_sales='"+Формат (Цена*Курс,"ЧГ=0")+"',product_url='http://catalog.sunrise.ru/descriptionPage.aspx?a="+Выборка.Артикул+"',product_publish='Y' WHERE product_sku='"+Выборка.Артикул+"'" ; КонецЕсли; Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить (ОписаниеОшибки()); КонецПопытки; RSIDProduct.Close(); КонецЕсли; // Попытка записать Данные о товаре Попытка // запрос ID родителя товара query = " |SEL ECT * |FR OM jos_vm_category WHERE category_description='"+Выборка.РодительКод+"' limit 1"; RS.Open(query, Connection); RS.MoveFirst(); Пока RS.EOF() = 0 Цикл ИДгрупы = RS.Fields("category_id").Value; RS.MoveNext(); КонецЦикла; RS.Close(); //Обновление группы // запрос айди товара в мускуле виртуемарта // Сообщить (Выборка.Номенклатура.Артикул); query = " |SEL ECT * |FR OM jos_vm_product WHERE product_sku='"+Выборка.Артикул+"' limit 1"; RS.Open(query, Connection); RS.MoveFirst(); Пока RS.EOF() = 0 Цикл ИД = RS.Fields("product_id").Value; RS.MoveNext(); КонецЦикла; RS.Close(); Если НЕ флагсуществования Тогда query = "ins ert into jos_vm_product_category_xref (category_id , product_id ) values ( '"+Формат(ИДгрупы,"ЧГ=0")+"' , '"+Формат(ИД,"ЧГ=0")+"' )"; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); Иначе query = "UPD ATE jos_vm_product_category_xref SET category_id='"+Формат(ИДгрупы,"ЧГ=0")+"' WHERE product_id='"+Формат(ИД,"ЧГ=0")+"'"; // "UPD ATE jos_vm_product_category_xref SET category_id='"+Формат(ИДгрупы,"ЧГ=0")+"', product_id='"+Формат(ИД,"ЧГ=0")+"' WHERE product_id='"+Формат(ИД,"ЧГ=0")+"' " ; // Сообщить (query); Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); КонецЕсли; // прибьем ценник товара query = "delete fr om jos_vm_product_price WHERE product_id='"+Формат(ИД,"ЧГ=0")+"' " ; Command.CommandText = query; Command.CommandType = 1; RS = Command.Execute(); // все поля важны ! query = "I_nsert into jos_vm_product_price ( |product_id, |product_price, |product_currency, |product_price_vdate, |product_price_edate, |cdate, |mdate, |shopper_group_id, |price_quantity_start, |price_quantity_end ) |values ( '"+Формат(ИД,"ЧГ=0")+"' , '"+Формат (Цена*Курс,"ЧГ=0")+"','RUB',0,0,1222792314,1222792314,'5',0,0 )"; // Сообщить(Формат(ИД,"ЧГ=0")); Command.CommandText = query; Command.CommandType = 1; Попытка RS = Command.Execute(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Исключение Сообщить (ОписаниеОшибки()); Сообщить (Выборка.Наименование); КонецПопытки; ОбработкаПрерыванияПользователя(); // Состояние("Обновляем товары " + Выборка.Номенклатура.Наименование); Индикатор1 = н; КонецЦикла; Сообщить ("Выгружено " + н + " объектов"); Сообщить(Строка (ТекущаяДата()) + " обновление завершено"); КонецПроцедуры Процедура Автомат () ОсновныеДействияФормыОбновитьТовары(1); КонецПроцедуры Процедура ПустыеГруппы() СнятиеФлагаПустыхГрупп(1); КонецПроцедуры Процедура ОсновныеДействияФормыАвтомат(Кнопка) ЭтаФорма.ПодключитьОбработчикОжидания("автомат", 3600); ЭтаФорма.ПодключитьОбработчикОжидания("ПустыеГруппы", 5400); ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Автомат.Доступность = Ложь; КонецПроцедуры
//п_Текст - ТекстЗапроса... вернётся соответственно ТЗ Функция Прямой_запрос_к_jabber(п_Текст) Экспорт л_ТЗ = Новый ТаблицаЗначений; л_число_попыток = 0; л_Запрос_выполнен = Ложь; Пока (л_Запрос_выполнен = Ложь) И (л_число_попыток <= 3) Цикл Если (гл_Соединение_jb.State = 0) Или (гл_Соединение_jb.DefaultDatabase <> "log_1c") Тогда гл_Соединение_jb = ""; л_Параметры_соединения = "DRIVER={MySQL ODBC 5.1 Driver};OPTION=3;DATABASE=BAZADANNIH_IMYA;PWD=PAROLLLLL;PORT=3306;SERVER=ip_adres_servera;UID=admin"; гл_Соединение_jb = Новый COMОбъект("ADODB.Connection"); Попытка гл_Соединение_jb.Open(л_Параметры_соединения); Исключение КонецПопытки; КонецЕсли; л_Команда = Новый COMОбъект("ADODB.Command"); л_Команда.ActiveConnection = гл_Соединение_jb; л_Команда.CommandText = п_Текст; л_Команда.CommandType = 1; л_Набор_записей = Новый COMОбъект("ADODB.Recordset"); л_Набор_записей.CursorType = 3; л_число_попыток = л_число_попыток + 1; Попытка л_Набор_записей = л_Команда.Execute(); л_Запрос_выполнен = Истина; Исключение КонецПопытки; КонецЦикла; Если (л_Запрос_выполнен = Ложь) Тогда Сообщить(ОписаниеОшибки()); Возврат(л_ТЗ); Иначе л_Число_колонок = л_Набор_записей.Fields.Count - 1; Если (л_Число_колонок > -1) Тогда Для Ф = 0 По л_Число_колонок Цикл л_Колонка_добавлена = Ложь; л_Префикс = ""; л_сч = 0; Пока (л_Колонка_добавлена = Ложь) Цикл Попытка л_ТЗ.Колонки.Добавить(л_Префикс + л_Набор_записей.Fields(Ф).Name); л_Колонка_добавлена = Истина; Исключение л_Префикс = ?(л_сч = 0, "_", "_" + л_сч + "_"); л_сч = л_сч + 1; КонецПопытки; КонецЦикла; КонецЦикла; Если (л_Набор_записей.EOF() = Истина) И (л_Набор_записей.BOF() = Истина) Тогда Иначе л_Набор_записей.MoveFirst(); Пока (л_Набор_записей.EOF() = 0) Цикл л_стр = л_ТЗ.Добавить(); Для Ф = 0 По л_Число_колонок Цикл л_стр[Ф] = л_Набор_записей.Fields(Ф).Value; КонецЦикла; л_Набор_записей.MoveNext(); КонецЦикла; КонецЕсли; КонецЕсли; Попытка л_Набор_записей.Close(); Исключение КонецПопытки; Возврат(л_ТЗ) КонецЕсли; КонецФункции
// заполним список пользователей FSO=createobject("Scripting.FileSystemObject"); WshShell = CreateObject("WScript.Shell"); Txt=FSO.OpenTextFile(КаталогИБ()+"usrdef\users.usr"); LineUser=""; ChI=0; Пока Txt.AtEndOfStream=0 Цикл Chi=Chi+1; Buf=Txt.Read(1); Если КодСимв(Buf)>31 Тогда LineUser=LineUser+Buf; КонецЕсли; КонецЦикла; LineBof="{"+chr(34)+"Container.Contents"+chr(34)+","; LineUser=Сред(LineUser,Найти(LineUser,LineBof)+23); LineUser=Сред(LineUser,1,Найти(LineUser,"}}")); //Сп=СоздатьОбъект("СписокЗначений"); LineUser=СтрЗаменить(LineUser,РазделительСтрок," "); LineUser=СтрЗаменить(LineUser,"},{",РазделительСтрок); Для к=1 По СтрКоличествоСтрок(LineUser) Цикл а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),Симв(34),""); а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),"}",""); а=Сред(а,19); а=Сред(а,Найти(а,",")+1); а=Сред(а,1,Найти(а,",")-1); а=СтрЗаменить(а,"""",""); // уберем кавычки списПользователи.Установить(а,а); КонецЦикла; списПользователи.ТекущаяСтрока(1); // Список Пользователей заполнен