Отправляет email-рассылки с помощью сервиса Sendsay

1С и электронная коммерция

  Все выпуски  

1С и электронная коммерция Взаимодействие через OLE - 4 часть.


Информационный Канал Subscribe.Ru



1С и электронная коммерция    Рассылка сайта MAGs RU

Информационно-аналитический бюллетень. Проект компании "Online System Group"
Информационный источник: "Каталог ресурсов e-commerce" 
26.08.2005

Бесплатный трехчасовой семинар по электронной коммерции для всех желающих.

На семинарах будут освещаться вопросы, касающиеся электронной коммерции, технологии создания интернет-магазинов, их интеграции с учетной системой и управления из 1С:Предприятия, а так же общие вопросы по оптимизации и продвижению интернет-магазинов в сети Интернет.

Задача этих семинаров заключается в формировании у компаний общего представления о рынке электронной коммерции и тенденциях его развития, об интернет-магазине как инструменте развития бизнеса, а так же о роли бизнес-решений в создании современных интернет-ресурсов.

На семинар можно попасть по предварительной записи, прислав письмо по электронной почте. Они будут проходить каждый четверг в офисе компании OSG.

Ближайший семинар планируется провести 01 сентября

*****

OSG Интернет-магазин Start

Программный комплекс "OSG Интернет-магазин Start" позволяет с наименьшими затратами времени и средств разработать многофункциональный интернет-магазин и организовать продажу товаров и услуг в сети Интернет. Он ориентирован как на розничную (B2C), так и на оптовую (B2B) торговлю, и может не только оптимизировать работу с существующими клиентами, но и решить задачу привлечения и удержания новых.


Интернет-магазин на базе программного комплекса "OSG Интернет-магазин Start" - это:

  • дополнительный круглосуточный канал сбыта Ваших товаров и услуг;
  • удобный сервис для Ваших клиентов (рынок B2C), позволяющий ознакомиться с перечнем товаров и их подробным описанием, а затем совершить покупку, используя различные варианты оплаты и доставки;
  • возможность автоматизировать работу с Вашими оптовыми партнерами (рынок B2B);
  • современный маркетинговый инструмент по изучению целевой аудитории и методов работы с клиентами.


Используя интуитивно понятные и удобные в управлении интерфейсы, "OSG Интернет-магазин Start" позволяет оперативно решать следующие задачи:

  • подготовить и оперативно вести товарную базу, классифицированную по категориям, где каждый товар может содержать неограниченное количество характеристик и свойств, несколько графических изображений, краткое и расширенное описания, несколько цен в рублях или валюте;
  • организовать продвижение определенных категорий товаров, используя маркетинговые возможности системы специальных предложений;
  • определять категории покупателей, а следовательно, те цены, предложения, скидки и бонусы, которые он увидит;
  • реализовать гибкую ценовую политику за счет системы скидок по сумме заказа, по категориям пользователей и др.;
  • собирать и отслеживать все индивидуальные данные по каждому зарегистрированному клиенту;
  • собирать и обрабатывать информацию о поступивших заказах, изменять количество и состав заказанных позиций, отслеживать и изменять состояние заказа;
  • отправлять оповещение клиенту по электронной почте при каждом изменении состояния заказа;
  • управлять информационными разделами сайта (публиковать информацию о компании, предлагаемых сервисах, новости, статьи, техническую информацию, добавлять и удалять разделы);
  • организовать информационные рассылки (новости, статьи и т.п.), и управлять подпиской;
  • контролировать доступ к закрытым разделам сайта;
  • организовать обсуждения на форумах и гостевых книгах;
  • проводить онлайн опросы и викторины со сбором статистики;
  • оптимизировать сайт под поисковые системы.


Интернет-магазин, построенный на основе "OSG Интернет-магазин Start", предоставляет клиентам воспользоваться следующими сервисами:

  • ознакомиться с информацией о товарах, используя иерархический рубрикатор, либо воспользоваться контекстным поиском с ограничением по категориям, цене и т.п., или поиском по характеристикам товаров;
  • сравнить характеристики интересующих товаров;
  • выбрать интересующие товары в корзину;
  • зарегистрироваться в системе для получения доступа к дополнительным сервисам интерент-магазина;
  • оформить онлайн заказ на основе сформированной корзины, с выбором наиболее удобного варианта оплаты и доставки;
  • просматривать истории своих заказов и этапы их выполнения (статусы заказов);
  • распечатывать онлайн счета для оплаты оформленных заказав;
  • оплачивать оформленные заказы через различные онлайн платежные системы – Assist, Webmoney, ЯндексДеньги и другие;
  • получать подтверждения о ходе исполнения заказов на свой e-mail.


Это далеко не полный список возможностей и задач, решаемых с помощью "OSG Интернет-магазин Start"



Вниманию владельцев интернет-магазинов! Участники каталога MAG's RU могут совершенно бесплатно, в автоматическом режиме размещать свои маркетинговые предложения в рассылке и у нас на сайте. Для этого достаточно зарегистрировать свой ресурс и написать письмо с просьбой выслать данные, необходимые для размещения вашей информации.

*****

Имеющиеся у Вас материалы по тематике бюллетеня Вы можете опубликовать на нем, отправив их по адресу mags@mags.ru в имеющемся у Вас формате. Не забудьте указать Ваши координаты и информацию личного характера, которую желаете опубликовать вместе с предоставленными материалами.

Внимание! У нас открыт форум посвященный электронной коммерции!

Приглашаем Вас принять активное участие в жизни и развитии форума. Создавайте свои темы, дискутируйте с посетителями и создателями интернет - магазинов. Возможно, тут Вы найдете ответ на свой вопрос, на который ищете ответ. Только тут можно обсудить уникальный продукт интеграции интернет – магазина с 1С.

Теперь у вас есть возможность получить для своего сайта ежедневно обновляемую ленту новостей электронной коммерции.
Технология построения ленты позволяет выбирать тип отображаемых новостей - Новости электронной коммерции, обзоры интернет-магазинов, обзоры платежных ситем, уроки usability или аналитические статьи.

Как её установить можете узнать здесь >>>


Взаимодействие через OLE - 4 часть.

Работа с запросами и EvalExpr().

Наконец-то добрались и до запросов. Надо пояснить несколько вещей, касаемых запросов (да и EvalExpr() тоже). Самое главное - компиляция текста OLE-запроса (т.е. разбор всех переменных внутри запроса), как и сами OLE-запросы выполняются внутри базы OLE и поэтому ни одна переменная, ни один реквизит местной базы там недоступны, да и запрос даже не подозревает, что его запускают по OLE из другой базы!!! Поэтому, чтобы правильно составить текст, иногда требуется не только обдумать, как передать параметры запроса в базу OLE, но и обдумать, что нужно добавить в глобальный модуль той самой OLE-базы, чтобы как-то собрать для запросы переменные!

  1. Поскольку сам текст запроса и функции EvalExpr() является по сути текстом, а не набором параметров, то напрямую передать ему ссылку на элемент справочника, документ, счет и т.п. нельзя. Исключение может быть составлено для конкретных значений перечислений, видов субконто, констант, планов счетов и т.п.
  2. Хоть и многим и так понятно, что я скажу дальше, но я все-таки уточню: при описании переменных в тексте запроса не забывайте, что объекты базы надо указывать напрямую, без всяких префиксов типа "БазаОле".
  3. Отрабатывать запрос сложно тем, что ошибки, например, при компиляции напрямую не увидеть. Поэтому начинаем пошагово готовится к отработке запроса в базе OLE.

Вначале допишем в глобальном модуле базы OLE немного строк, которые нам помогут в работе:

//**************************************************************
Перем СписокЗначенийЗапроса[10] Экспорт; // Мы в них "запихнем" значения для запроса
//**************************************************************
Функция СкорректироватьСписок(ИндексМассива,
                              Действие,
                              ТипОбъекта = "",
                              ВидОбъекта = "",
                              Параметр1 = "",
                              Параметр2 = "",
                              Параметр3 = "",  // Ну и далее по параметрам, сколько надо
                              // …………………
                              Параметр99 = "") Экспорт
     ИндексМассива=Число(ИндексМассива);
     Если ИндексМассива = 0 Тогда
          Возврат -99; // Обышка: Не указали индекс массива ?
     КонецЕсли;
     Если Действие = 1 Тогда      // Очистить список значений
          СписокЗначенийЗапроса[ИндексМассива].УдалитьВсе();
          Возврат 1;
     ИначеЕсли Действие = 2 Тогда // Добавить объект в список
          Если ТипОбъекта = "Документ" Тогда
               Если ВидОбъекта = "" Тогда
                    Возврат -99; // Обышка: Передавайте нормальный вид объекта!
               КонецЕсли;
               Попытка
                    Док = СоздатьОбъект("Документ."+ВидОбъекта);
               Исключение
                    Возврат -99; // Обышка: Попытка обращения к неверному объекту
               КонецПопытки;
               Если Док.НайтиПоНомеру(Параметр1,Параметр2)=1 Тогда
                    СписокЗначенийЗапроса[ИндексМассива].ДобавитьЗначение(Док.ТекущийДокумент());
                    Возврат 1; // Нашли документ
               Иначе
                    Возврат 0; // Не нашли документ :(
               КонецЕсли;
          ИначеЕсли ТипОбъекта = "Справочник" Тогда
               Если ВидОбъекта = "" Тогда
                    Возврат -99; // Обышка: Передавайте нормальный вид объекта!
               КонецЕсли;
               Попытка
                    Спр = СоздатьОбъект("Справочник."+ВидОбъекта);
               Исключение
                    Возврат -99; // Обышка: Попытка обращения к неверному объекту
               КонецПопытки;
               // Параметр1 - Код
               // Параметр2 - наименование
               // Параметр3 - флаг глобального поиска
               Если Спр.НайтиПоКоду(Параметр1,Число(Параметр3))=1 Тогда
                    СписокЗначенийЗапроса[ИндексМассива].ДобавитьЗначение(Спр.ТекущийЭлемент());
                    Возврат 1; // Нашли элемент
               ИначеЕсли Спр.НайтиПоНаименованию(Параметр2,Число(Параметр3))=1 Тогда
                    СписокЗначенийЗапроса[ИндексМассива].ДобавитьЗначение(Спр.ТекущийЭлемент());
                    Возврат 1; // Нашли элемент
               Иначе
                    Возврат 0; // Не нашли элемент :(
               КонецЕсли;
          ИначеЕсли ТипОбъекта = "Счет" Тогда
               // Вид объекта - Идентификатор плана счетов
               // Параметр1 - Код счета
               Попытка
                    Если ВидОбъекта<>"" Тогда
                         ИскомыйСчет = СчетПоКоду(Параметр1, ПланСчетов.ЗначениеПоИдентификатору(ВидОбъекта));
                    Иначе
                         ИскомыйСчет = СчетПоКоду( Параметр1);
                    КонецЕсли;
                    Если ПустоеЗначение(ИскомыйСчет) = 1 Тогда
                         Возврат 0; // не нашли счет :(
                    Иначе
                         СписокЗначенийЗапроса[ИндексМассива].ДобавитьЗначение(ИскомыйСчет);
                         Возврат 1; // нашли счет
                    КонецЕсли;
               Исключение
                    Возврат -99;   // Ошибка: Неверный тип объекта
               КонецПопытки;
          ИначеЕсли Действие = 3 Тогда // Вернуть размер списка
               Возврат СписокЗначенийЗапроса[ИндексМассива].РазмерСписка();
          Иначе
               Возврат -99;        // Ошибка: Неверное действие
          КонецЕсли;
          Возврат -999;            // ???
     КонецЕсли;
КонецФункции
//**************************************************************
Процедура ПриНачалеРаботыСистемы()
     // Данная процедура уже есть в глобальном модуле, просто надо
     // дописать в ней несколько строк:
     Для Сч=1 По 10 Цикл
          СписокЗначенийЗапроса[Сч]=СоздатьОбъект("СписокЗначений");
     КонецЦикла;
КонецПроцедуры
//**************************************************************

Теперь начинаем потихоньку писать сам запрос. Что мы имеем:
В форме диалога местной базы несколько реквизитов диалога (либо местные переменные):

  • Даты периода (НачДата и КонДата)
  • Элементы справочников для фильтрации (ВыбТовар, ВыбФирма, ВыбКлиент, и т.д.)
  • Какие-либо флажки (ТолькоЗамерзающийЗимойТовар , ..)

Мы начинаем писать запрос и сразу попадаем в такую ловушку:

ТекстЗапроса = " Период с НачДата по КонДата; ";

Вроде все в порядке, но такой запрос не выполнится в базе OLE, так как там понятия не имеют, что такое НачДата и КонДата :)) Ведь эти переменные действительны только для местной базы! Переписываем запрос заново:

ТекстЗапроса = " Период с '" + НачДата + "' по '" + КонДата + "';
     // Будет типа '01.01.02'
     // т.е. прямое представление даты, которое всегда поймет любой запрос
     | Товар = Регистр.ОстаткиТоваров.Товар;
     | Фирма = Регистр.ОстаткиТоваров.Фирма;
     | Склад = Регистр.ОстаткиТоваров.Склад;
     | Остаток = Регистр.ОстаткиТоваров.Остаток;
     | Группировка Товар без групп;
     | Группировка Документ;
     | Функция НачОст =  НачОст(Остаток);
     | Функция КонОст =  КонОст(Остаток);
     | Функция ПрихОст = Приход(Остаток);
     | Функция РасхОст = Расход(Остаток);";

Так... Дошли до условий отбора в запросе. Рассмотрим два варианта, когда выбран ВыбТовар:

// 1-й вариант - когда выбран элемент справочника (не группа).
// Самый простой случай - коды товаров совпадают абсолютно
// Вариант 1а.
Если ВыбТовар.Выбран()=1 Тогда
    ТекстЗапроса = ТекстЗапроса + "
    | Условие (Товар.Код = " +ВыбТовар.Код+");";
КонецЕсли;
// Вариант 1б. Чтоб запрос быстрее был:
// Вначале добавим к запросу переменную в общем списке:
     | КодТовара = Регистр.ОстаткиТоваров.Товар.Код;
// А уж потом добавим к запросу условие (такое условие будет выполнятся проще, так как
// запрос при формировании таблицы запроса сразу сформирует отдельную колонку кодов и по
// ней уже будет отбирать, а не будет каждый раз при обработке товаров извлекать из них
// код):
Если ВыбТовар.Выбран()=1 Тогда
     ТекстЗапроса = ТекстЗапроса + "
     | Условие (КодТовара = " +ВыбТовар.Код+");";
КонецЕсли;

Казалось бы все очень просто. По аналогии - если уникальность для товаров ведется по наименованию, то простой заменой слова "код" на "наименование" мы решаем вопрос и здесь. Теперь рассмотрим, когда мы выбрали группу, т.е. текст условия должен будет выглядеть так:

| Условие (Товар.ПринадлежитГруппе(КакаяТоГруппа)=1);

И здесь, правда можно проблему решить "двумями путями" :)) Первый пусть - когда мы имеем дело с двухуровне вымсправочником. Тогда проблема группы решается также просто, как и в 1-м варианте:

// Добавляем в списке переменных строку:
     | КодРодителя = Регистр.ОстаткиТоваров.Товар.Родитель.Код;
// Далее пишем условие:
Если ВыбТовар.Выбран()=1 Тогда
     ТекстЗапроса = ТекстЗапроса + "
     | Условие (КодРодителя = " +ВыбТовар.Код+");";
КонецЕсли;
// В качестве домашнего задания - переписать условие по наименоваиню :)))

А если справочник очень даже многоуровневый? Вот для этого мы и используем написанную ранее функцию. Предположим, что список значений запроса с индексом массива " 1 " мы будем использовать для хранения подобных значений (например, хранить в нем группы товаров, клиентов) для хитрых условий. Итак, например, в ВыбТовар у нас указана группа товаров, а в ВыбКлиент - группа клиентов, которым мы товары группы ВыбТовар продавали. Кроме того, мы должны пропустить накладные возвратов поставщикам, и не забыть, что товары надо еще отбирать по флажку ТолькоЗамерзающийЗимойТовар:

// Очистим список значений запроса
Результат = БазаОле.EvalExpr("СкорректироватьСписок(1,1)");
// Закинем в список значений запроса группу товаров (он сам найдет ее в базе OLE)
// И запоминаем (в уме), что этой группе соответствует 1-е значение списка
Результат = БазаОле.EvalExpr("СкорректироватьСписок(1, 2 , ""Справочник"", """ +
               Выбтовар.Вид())+ """," + ВыбТовар.Код + ", """ +
               ВыбТовар.Наименование + """)");
// Теперь закинем в список значений запроса группу клиентов
// И запоминаем, что этой группе соответствует 2-е значение списка
Результат = БазаОле.EvalExpr("СкорректироватьСписок(1, 2 , ""Справочник"", """ +
               ВыбКлиент.Вид())+ """," + ВыбКлиент.Код + ", """ +
               ВыбКлиент.Наименование + """)");
// А еще до кучи и фирму из ВыбФирма
// И запоминаем, что этой фирме соответствует 3-е значение списка
Результат = БазаОле.EvalExpr("СкорректироватьСписок(1, 2 , ""Справочник"", """ +
               ВыбФирма.Вид())+ """," + ВыбФирма.Код + ", """ +
               ВыбФирма.Наименование + """)");
// Теперь формируем текст запроса
ТекстЗапроса = " Период с '"+НачДата+ "' по '"+КонДата+"';
     | Товар = Документ.РасходнаяНакладная.Товар;
     | Замерзает = Документ.РасходнаяНакладная.Товар.ЗамерзаетЗимой;
     | Признак = Документ.РасходнаяНакладная.ПризнакНакладной;
     | Фирма = Документ.РасходнаяНакладная.Фирма;
     | Клиент = Документ.РасходнаяНакладная.Клиент;
     | Количество = Документ.РасходнаяНакладная.Количество;
     | СуммаДок = Документ.РасходнаяНакладная.Сумма;
     | Группировка Товар без групп;
     | Группировка Документ;
     | Функция СуммаОтгрузки=Сумма(СуммаДок);
     | Условие (Признак<>Перечисление.ПризнРасхНакл.ВозвратПоставщику);
     | Условие (Замерзает = " + ТолькоЗамерзающийЗимойТовар + ");
     // Внимание! Начинается:
     | Условие (Товар.ПринадлежитГруппе(СписокЗначенийЗапроса[1].ПолучитьЗначение(1))=1);
     | Условие (Клиент.ПринадлежитГруппе(СписокЗначенийЗапроса[1].ПолучитьЗначение(2))=1);
     | Условие (Фирма= СписокЗначенийЗапроса[1].ПолучитьЗначение(3));";

Уфф. Вроде все… Остается только запустить запрос:

Запрос = БазаОле.CreateObject("Запрос");
Если
 Запрос.Выполнить(ТекстЗапроса)=0 Тогда
     Предупреждение("Запрос безутешен!");
     Возврат;
КонецЕсли;

Ну, а с реквизитами запроса разбираемся так же, как указано было выше в предыдущих разделах… И не забываем, что кроме хранения конкретных значений, можно использовать другие списки значений запроса. Например, можно заполнить какой-либо список значений запроса списком клиентов и использовать его в запросе:

// Всякими правдами/неправдами заполнили список значений (хотя бы через другой запрос :))
// конкретными клиентами…
// Предположим, индекс массива равен "2". Тогда в тексте запроса появится следующее:
     | Условие (Клиенты в СписокЗначенийЗапроса[2]);

P.S. Чего еще нет: перенос реквизитов неограниченной длины, более подробно остановиться на "периодических реквихитах"…

Егоров Андрей Викторович


Архив рассылки по адресу: http://www.mags.ru
Пишите нам: mags@mags.ru
ICQ: 203839414
Тел. (095)737-39-35
Факс. (095)730-66-74

Надежные серверы и графические станции на платформе Intel (Xeon) и AMD различного назначения. Большой выбор моделей. Сборка конфигураций на заказ. Трехлетняя гарантия, сервисное обслуживание серверов с выездом к Заказчику. Бесплатная доставка.

Online System Group - Создание сайта, создание интернет магазина. Профессиональные Веб - сайты - решения по разработке интернет магазинов и сайтов. Технология создания сайтов и интернет магазинов. Аренда интернет-магазинов от 50$.

Новый Иерусалим on-line: Все о Ново Иерусалимском монастыре, городская и районная информация, объявления, расписание автобусов и электричек, телефоны предприятий и частных лиц, православный чат, форум и много другой полезной информации.
Преподаватели православной воскресной школы ищут благотворителей, которые готовы помочь с помещением в городе Истра или Новый Иерусалим, возможно заключение договора некоммерческого партнерства. Будем рады любой помощи!!!

Подпишитесь на другие наши рассылки

Рассылки Subscribe.Ru
Секреты рекламы и создания интернет-магазинов
Скидки, подарки, призы...
1С и электронная коммерция
Серверы, сетевое оборудование, тесты, характеристики, советы
Рукопашный бой для девушек – выживание, психология, самозащита!
Милосердие. Чем ты можешь помочь ближнему.
Православные знакомства.

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: economics.icommerce.osg
Отписаться
Вспомнить пароль

В избранное