Как я интегрировал 1Сv8 и Virtuemart

03.09.09

Интеграция - Сайты и интернет-магазины

Задача: создать обмен 1Сv8 управление торговлей 10.1 и Virtuemart .

Что такое Virtuemart можно почитать тут http://www.virtuemart.ru, вкратце - это компонент интернет-магазина (каталога товаров) к известному CMS-движку Joomla.
Процедура СнятиеФлагаПустыхГрупп(Кнопка)
    СтрПодключения = "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 = "insert 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);  
    ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Автомат.Доступность = Ложь;
КонецПроцедуры

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

Сайты и интернет-магазины Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Управленческий учет Платные (руб)

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси.

59990 руб.

05.09.2023    6574    83    74    

63

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15655    9    17    

9

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1038    4    0    

4

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    31181    108    100    

62

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17421    6    15    

13

Выгрузка для АВИТО

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Россия Платные (руб)

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15239    42    56    

37
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Душелов 4013 09.10.08 20:24 Сейчас в теме
Но вот "НайтиПоКоду" - не красиво!..
2. d.snissarenko 152 10.10.08 10:35 Сейчас в теме
Согласен, надо взять из констант, просто в тек момент режим отладки, но нужно конечно делать сразу правильно.
3. ValentinV 12.10.08 08:34 Сейчас в теме
>Вооружившись книгой г-на Михайлова, ... вестись по ODBC
У Михайлова про ODBC не нашел?
4. d.snissarenko 152 13.10.08 10:40 Сейчас в теме
5. Ibrogim 1311 04.03.09 15:01 Сейчас в теме
Не настаиваю, но мне кажется что свойства НеОтображатьWeb и НеОтображатьНикогда лучше было реализовать механизмом категорий...
6. d.snissarenko 152 24.03.09 14:33 Сейчас в теме
(5) это очень древняя и лохматая конфигурация, в ней много чего надо менять - будет переезд на ут 10.3
7. Ibrogim 1311 17.05.09 17:53 Сейчас в теме
Скажите, а каким хостингом вы пользовались? Интересуюсь потому, что обычно хостеры закрывают TCP-порт и подключиться через ODBC не представляется возможным.
8. d.snissarenko 152 01.06.09 07:37 Сейчас в теме
У меня свои сервера, к сожалению да, либо договор с провайдером либо свой сервер, но я думаю не стоит смотреть в сторону одбц если сервер не в локале.
9. d.snissarenko 152 28.06.09 17:33 Сейчас в теме
ВНИМАНИЕ!
ПРИ ПОПЫТКЕ РЕДАКТИРОВАНИЯ ТЕКСТА СТАТЬИ - редактор не захотел ее сохранять!

Кому нужен текст - пишите в личку.
10. d.snissarenko 152 13.07.09 22:27 Сейчас в теме
11. szhukov 139 11.08.10 12:48 Сейчас в теме
(10) А подскажите пожалуйста - как решается вопрос с кодировкой?
Я правда с 1Сv7.7 борюсь.
У VirtueMart кодировка utf8,
у 1С cp1251 как побороть, а то при выгрузке через соединение с базой в наименованиях кракозябры какие-то?
12. d.snissarenko 152 23.08.10 09:38 Сейчас в теме
(11) Через конфиг файл my.cf, там можно прописать кодировку.
13. user31 21.06.11 16:14 Сейчас в теме
Есть бесплатная разработка http://softent.ru/component/option,com_jdownloads/Itemid,14/cid,2/task,view.download/. Выгружает из 1С в VirtueMart товары, категории, описания, загрузка заказов и отслеживание статусов заказов, бесплатная версия не выгружает изображения товара.
14. ilonnaa 26.09.11 10:12 Сейчас в теме
Класс очень полезно, буду пробовать! Именно этим сейчас и занимаюсь.
15. TopUP 23.11.11 11:39 Сейчас в теме
Интересное решение, перспективное и вполне реализуемое
16. Александр 20.06.12 14:52 Сейчас в теме
Интересное решение. Пригодиться в разработке. Давно искал что нибудь подобное
17. СветикК 19.07.12 18:25 Сейчас в теме
DSN=mySQL_ishop;
скажите пожалуйста,а в этой строке вот это что:
mySQL_ishop;

???
18. Ed111111 11 19.05.13 23:09 Сейчас в теме
Все работает замечательно. Спасибо.

У вас еще есть разработки? Как с ними можно ознакомиться и протестировать?
20. IvankoSusanin 23.12.13 01:19 Сейчас в теме
а файлы можете прикрепить?

21. JediG 15.08.19 05:28 Сейчас в теме
Здравствуйте! Прошло уже 5 лет. Код, вероятно уже утратил актуальность?
Насколько реально его переработать в код для УТ10 и Virtuemart 3?
А может быть уже есть новые наработки? Закрытые решения за деньги есть. Хотелось бы открытое.
Оставьте свое сообщение