Появилось желание опубликовать некоторые выдержки из моих наработок. У нас имелась собственная база данных, в которой были связанные справочники Спецификаций и Номенклатуры.
Но все же остановимся на некоторых моментах касательно выгрузки.
В общем, есть некоторые неудобные моменты, связанные с загрузкой данных, если брать типовые конфигурации:
Несколько актуальных моментов, с которыми мы часто сталкиваемся при интеграции сайтов с 1С или Excel.
1) Не все компании готовы показывать цены, в силу разных причин, таких как конкуренция, персональные цены для контрагентов или групп контрагентов, цены по договоренности.
Как можно решить проблему – указывать на сайте розничную цену, для того, чтобы в каталоге была возможность сделать заказ любому клиенту. После отправки каждый заказ обрабатывается менеджером, который предоставляет скидки или особые условия контрагенту. Клиенту дается возможность сделать заказ, не обращая внимания на цены.
Еще один вариант: указать цену «от».
Отображение цены дает преимущество в продвижении сайта, поисковики отдают преимуществу сайту, содержащему точную актуальную информацию.
2) Обязательная регистрация пользователей.
Пользователи не любят регистрироваться, это известный статистический факт. Если при заказе вы ставите обязательным условием регистрацию, можно сказать с большой вероятностью, что регистраций не будет, и вы можете потерять заказы.
Если регистрация очень важна, дайте пользователям бонус или объясните, для чего нужна регистрация.
В данном случае речь не идет об авторизации по логину и паролю, которая необходима для закрытых систем онлайн заказа или, например, для выписки счета или биллинга по контрагентам. Как правило, в таких системах контрагенты вместе с логинами и паролями выгружаются из 1С.
3) Промежуточная выгрузка в Excel
Часто 1С используют только для выписки счетов по проданным товарам. Номенклатура не структурирована, часть товаров находятся в прайсах поставщиков. Поэтому сначала выгружают в Excel, затем корректируют, правят цены, структурируют. После этого Excel уже загружают на сайт.
На первый взгляд, кажется удобно, но в результате возникает масса ошибок, поскольку Excel не очень надежный источник данных с точки зрения их сохранности и минимизации ошибок, вызванных человеческим фактором.
Как можно решить – настроить механизм загрузки прайсов в 1С и их структуризацию, чтобы в дальнейшем сделать более стабильный обмен данных 1С и сайта.
4) Отсутствие артикулов
Бывает, что большая номенклатура в 1С организована хаотично, но необходимость в выгрузке есть, при этом в карточках товаров может не быть артикулов товаров. В 1С есть внутренний код товаров, по которому можно производить синхронизацию данных с сайтом. При этом если это делать через Excel, то при каждой новой загрузке данных на сайт программа синхронизации может удалять все товары и добавлять их как новые, это чревато переиндексацией сайта и потерей уже проиндексированных поисковиком страниц.
Приведу несколько независимых кодов.
выдержки:
Общие определения (допустим, в процедуре ПриНажатии кнопки выполнить (как на картинке))
//определимся с тем, что надо искать. В полеСпецификаций можно выло "забить" или выбрать нужную СП
ТЗРазбора = Справочники.Спецификации.НайтиПоНаименованию(ЭлементыФормы.ПолеСпецификаций.Значение).Состав;
//у вас скорее по другому получаем данные по наименованиям. Но суть в том, чтобы получить массив наименований.
//будьте внимательны, могут быть подсборки в СП.Но это зависит от вашей БД. Ниже получим данные по элементам СП в виде ТЗ
ТЗРез = Новый ТаблицаЗначений;
ТЗРез.Колонки.Добавить("КодБД");
ТЗРез.Колонки.Добавить("Номенклатура");
ТЗРез.Колонки.Добавить("Количество");
//надо количество и т.п.
Для каждого стрР из ТЗРазбора Цикл
Нов = ТЗРез.Добавить();
Нов.КодБД = стрР.Номенклатура.Код;
Нов.Номенклатура = стрР.Номенклатура;
Нов.Количество = стрР.Количество;
КонецЦикла;
ТЗРез.Сортировать("Номенклатура ВОЗР");
ТЗРез.Свернуть("КодБД, Номенклатура","Количество");
Имяфайла = "D:\1C_Databases\File.xls";
Если СокрЛП(Имяфайла)<>"" Тогда
MSExcel = Новый COMОбъект("Excel.Application");
Книга = MSExcel.Workbooks.Open(Сокрлп(Имяфайла));
//здесь можно в цикле вызывать ниже приведенную функцию. Касательно НаименованияБД, зависит от самой структуры вашей БД.
//можно организовать вывод через сообщения или вывести в макет...
MSExcel.Quit();
Теперь функция читки
Функция ЧиткаИзЭксФайла(НаименованиеБД,Книга)
КоличествоЛистов = Книга.WorkSheets.Count;
//прогулка по листам
Для НомерЛиста = 1 по КоличествоЛистов Цикл
//гуляем по листу
Лист = Книга.WorkSheets(НомерЛиста);
Лист.UnProtect();
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
ОбластьПоиска = Лист.Cells;
НачалоЛиста = ОбластьПоиска.Cells(1, 1);
//ИскатьДо = ОбластьПоиска.Cells(ВсегоСтрок, ВсегоКолонок);
ОбластьПараметр = ОбластьПоиска.Find("*"+СокрЛП(НаименованиеБД)+"*", НачалоЛиста);
//определим колонку "Цена"
Если ОбластьПараметр <> неопределено Тогда
СтрокаКолонкаЦена = ОбластьПоиска.Find("*цена*", НачалоЛиста);
Если СтрокаКолонкаЦена = неопределено тогда СтрокаКолонкаЦена = ОбластьПоиска.Find("*Цена*", НачалоЛиста);КонецЕсли;
Если СтрокаКолонкаЦена<>неопределено тогда
НомКолонкиЦена = СтрокаКолонкаЦена.Column;
Если ОбластьПараметр.Cells(1,НомКолонкиЦена).Value<>0 тогда
Результат = ОбластьПараметр.Cells(1,НомКолонкиЦена).Value;
Прервать;
КонецЕсли;
Иначе Результат = неопределено;
КонецЕсли;
//КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции;