Здравствуйте, уважаемые хабровчане. Не так давно пришлось решить следующую задачу. Разработать веб – приложение, для массовой генерации типовых договоров на поставку определенного оборудования или предоставляемых услуг. Все данные по товарам хранится с 1С: управление торговлей. Данное приложение необходимо менеджерам по продажам, так как они часто работают вне офиса, выезжают к клиентам, и составить договор через сайт компании достаточно удобно для них. ТЗ на этом заканчивается. Так как я еще и студент пятого курса, то я решил это же приложение вынести на дипломное проектирование.
Когда я получил такое задание, то мне очень не хватало статьи на подобие этой, где описывалось бы похожее решение, надеюсь, кому-нибудь это пригодится.
Сразу оговорюсь, что в данной статье я описываю общие пути решения данной задачи, не углубляясь в дебри реализации.
Для начала опишем идеологию проектируемой системы.
Цели, которые позволит достичь данная система:
Я разделил данную задачу на 2 основных этапа:
Из веб – ориентированных инструментов, с помощью которых можно решить данную задачу, я знаком только с PHP и MySQL, поэтому все решения искал на их основе.
Данный этап, пожалуй, был самым сложным для меня, так как я до этого 1C даже в глаза не видел. После краткого изучения возможностей импортирования и экспортирования данных в 1С, я принял решение использовать следующую схему перевода данных. По сути, мне нужна была только номенклатура товаров, поэтому я выгрузил ее, стандартными средствами 1С, в файл XML. Стоит упомянуть, что 1С поддерживает очень удобный стандарт обмена коммерческой информацией CommerceML.
Для парсинга данного файла я использовал расширение SimpleXML, которое доступно в PHP начиная с версии 5 (немного узнать о разборе xml с русскими тегами можно тут). Если кому интересно, вот XML файл который получается, при выгрузке в него номенклатуры из демонстрационной базы 1С.
Ниже можно увидеть часть кода синтаксического анализатора.
До этого момента не работал с парсерами, но оказалось это не так страшно, как мне казалось. Конвертировать в windows-1251 пришлось из-за того что данное приложение будет размещаться на сайте организации, а база данных сайта в этой кодировке, может есть и более простой способ решения этой проблемы, но я сделал так.
После того как номенклатура и еще кое-что было переведено из 1С в базу данных приложения можно думать над второй частью задачи.
Разумеется, перед созданием договора надо выбрать товары, относительно которых составляется договор, но эта часть не интересна.
В качестве формата в котором будет происходить генерация был выбран формат PDF, в первую очередь, он был выбран из-за кроссплатформенности и машино-независимости, то есть его можно открыть на любом компьютере или мобильном устройстве и напечатать, практически на любом печатающем устройстве. В интернете существует большое количество обзоров библиотек и классов PHP для работы с PDF. В конце концов я выбрал FPDF, единственной проблемой данного класса, это то что надо немного попотеть над кириллицей. Не думаю что стоит «мусорить» кодом, так как примеров использования данного класса предостаточно, в том числе и на русском языке.
В результате работы данного приложения получается примерно следующее:

Так же я еще прилепил на договор QR код (стянул тут), это больше не функциональная примочка, а просто способ показать моим преподавателям возможности web — технологий, хотя я читал на форумах, что 1С умеет работать с обычными 2D штрих-кодами, так что задумка не лишина смысла, ее надо только немного развить.
Целью задачи было не только создание договоров, но и создание отчетности работы каждого из менеджера по продажам, теперь в организации очень легко отследить любой договор. Легко отследить какой менеджер сколько заключил договоров и на какую сумму, в какой промежуток времени. Статистика представляется 2 способами: диаграммой и в табличной форме.
Скоро планирую начать приводить данное приложение в товарный вид, возможно попробую сделать из этого дела модуль для битрикса, в любом случае хочу попробовать немного развить еще данное приложение, с увеличением функционала и возмоностей.
Спасибо за внимание! Буду благодарен конструктивной критике.
Когда я получил такое задание, то мне очень не хватало статьи на подобие этой, где описывалось бы похожее решение, надеюсь, кому-нибудь это пригодится.
Сразу оговорюсь, что в данной статье я описываю общие пути решения данной задачи, не углубляясь в дебри реализации.
Для начала опишем идеологию проектируемой системы.
- система должна генерировать договоры на поставку товаров;
- система должна иметь интеграцию с программой бухгалтерского учета 1С: управление торговлей или с аналогичным программным средством;
- система должна позволять управлять менеджерами по продажам;
- система должна иметь систему разграничения прав доступа к различным ее частям.
Цели, которые позволит достичь данная система:
- уменьшение времени заключения типовых договоров;
- отслеживание личного вклада каждого из менеджера по продажам;
- уменьшение времени выполнения требований заказчиков;
- улучшение отношений между заказчиком и организацией;
- управление менеджерами;
- увеличить заинтересованность менеджеров по продажам в работе;
- возможно уменьшить статью затрат организации по заработной плате сотрудникам;
- увеличение объема работы, которую выполняет менеджер по продажам.
Я разделил данную задачу на 2 основных этапа:
- перевод данных из 1С в базу данных сайта;
- создание договора в электронном виде.
Из веб – ориентированных инструментов, с помощью которых можно решить данную задачу, я знаком только с PHP и MySQL, поэтому все решения искал на их основе.
Перевод данных из 1С в базу данных сайта
Данный этап, пожалуй, был самым сложным для меня, так как я до этого 1C даже в глаза не видел. После краткого изучения возможностей импортирования и экспортирования данных в 1С, я принял решение использовать следующую схему перевода данных. По сути, мне нужна была только номенклатура товаров, поэтому я выгрузил ее, стандартными средствами 1С, в файл XML. Стоит упомянуть, что 1С поддерживает очень удобный стандарт обмена коммерческой информацией CommerceML.
Для парсинга данного файла я использовал расширение SimpleXML, которое доступно в PHP начиная с версии 5 (немного узнать о разборе xml с русскими тегами можно тут). Если кому интересно, вот XML файл который получается, при выгрузке в него номенклатуры из демонстрационной базы 1С.
Ниже можно увидеть часть кода синтаксического анализатора.
$xml = new SimpleXMLElement($xmlstr);
foreach ($xml as $key=>$v)
{
$name=iconv("utf-8", "windows-1251", $v->Наименование);
$id=iconv("utf-8", "windows-1251", $v->Ид);
$barcode=iconv("utf-8", "windows-1251", $v->Штрихкод);
$art=iconv("utf-8", "windows-1251", $v->Артикул);
$unit=iconv("utf-8", "windows-1251", $v->БазоваяЕдиница->Пересчет->Единица);
$gr=iconv("utf-8", "windows-1251", $v->Группы->Ид);
$tax_s=iconv("utf-8", "windows-1251", $v->СтавкиНалогов->СтавкаНалога->Ставка);
$price=iconv("utf-8", "windows-1251", $v->Цены->Цена->ЦенаЗаЕдиницу);
}
$query = "INSERT INTO test (name,id,barcode,artikl,unit,gr,tax_type,tax_s,price) VALUES ('$name','$id','$barcode','$art','$unit','$gr','$tax_type','$tax_s','$price')"; mysql_query($query)or die(mysql_error());
До этого момента не работал с парсерами, но оказалось это не так страшно, как мне казалось. Конвертировать в windows-1251 пришлось из-за того что данное приложение будет размещаться на сайте организации, а база данных сайта в этой кодировке, может есть и более простой способ решения этой проблемы, но я сделал так.
Создание договора в электронном виде
После того как номенклатура и еще кое-что было переведено из 1С в базу данных приложения можно думать над второй частью задачи.
Разумеется, перед созданием договора надо выбрать товары, относительно которых составляется договор, но эта часть не интересна.
В качестве формата в котором будет происходить генерация был выбран формат PDF, в первую очередь, он был выбран из-за кроссплатформенности и машино-независимости, то есть его можно открыть на любом компьютере или мобильном устройстве и напечатать, практически на любом печатающем устройстве. В интернете существует большое количество обзоров библиотек и классов PHP для работы с PDF. В конце концов я выбрал FPDF, единственной проблемой данного класса, это то что надо немного попотеть над кириллицей. Не думаю что стоит «мусорить» кодом, так как примеров использования данного класса предостаточно, в том числе и на русском языке.
В результате работы данного приложения получается примерно следующее:

Так же я еще прилепил на договор QR код (стянул тут), это больше не функциональная примочка, а просто способ показать моим преподавателям возможности web — технологий, хотя я читал на форумах, что 1С умеет работать с обычными 2D штрих-кодами, так что задумка не лишина смысла, ее надо только немного развить.
Целью задачи было не только создание договоров, но и создание отчетности работы каждого из менеджера по продажам, теперь в организации очень легко отследить любой договор. Легко отследить какой менеджер сколько заключил договоров и на какую сумму, в какой промежуток времени. Статистика представляется 2 способами: диаграммой и в табличной форме.
Скоро планирую начать приводить данное приложение в товарный вид, возможно попробую сделать из этого дела модуль для битрикса, в любом случае хочу попробовать немного развить еще данное приложение, с увеличением функционала и возмоностей.
Спасибо за внимание! Буду благодарен конструктивной критике.