Импорт данных в ресторанный фронт офис
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (Новая страница: « <syntaxhighlight lang="XML"> <?xml version="1.0" encoding="windows-1251"?> <!-- 1. Все идентификаторы - целые числа, уникальн…») |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| + | |||
<syntaxhighlight lang="XML"> | <syntaxhighlight lang="XML"> | ||
| Строка 34: | Строка 35: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | <syntaxhighlight lang="vb"> | ||
| + | Option Explicit | ||
| + | |||
| + | Sub pd_ImportMenu(FileName) | ||
| + | |||
| + | Dim oXML | ||
| + | Set oXML = CreateObject("MSXML.DomDocument") | ||
| + | oXML.Async = False | ||
| + | |||
| + | If Not oXML.Load(FileName) Then | ||
| + | MsgBox "Invalid file name" | ||
| + | Exit Sub | ||
| + | End If | ||
| + | |||
| + | oXML.setProperty "SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" | ||
| + | oXML.setProperty "SelectionLanguage", "XPath" | ||
| + | |||
| + | Dim Item, Nodes | ||
| + | Set Nodes = oXML.documentElement.selectNodes("//MENU") | ||
| + | |||
| + | For Each Item In Nodes | ||
| + | If Not pd_imp_ProcessMenu(Item) Then _ | ||
| + | Exit Sub | ||
| + | Next | ||
| + | |||
| + | MsgBox "Success!" | ||
| + | End Sub | ||
| + | |||
| + | Function pd_imp_ProcessMenu(ByRef MenuNode) | ||
| + | pd_imp_ProcessMenu = False | ||
| + | |||
| + | Dim MenuName, MenuID, MenuKind, ActiveFrom, ActiveTo | ||
| + | MenuName = MenuNode.GetAttribute("name") | ||
| + | MenuID = CLng(MenuNode.GetAttribute("id")) | ||
| + | MenuKind = MenuNode.GetAttribute("menu_kind") | ||
| + | ActiveFrom = DateValue(MenuNode.GetAttribute("active_from")) | ||
| + | ActiveTo = DateValue(MenuNode.GetAttribute("active_to")) | ||
| + | |||
| + | Dim Creator, MenuObj | ||
| + | Set Creator = New TCreator | ||
| + | ' Работаем с базой данных | ||
| + | ' Находим/создаем объект меню в БД | ||
| + | |||
| + | Dim Groups, Group | ||
| + | Set Groups = MenuNode.SelectNodes("./MEAL_GROUP") | ||
| + | |||
| + | For Each Group in Groups | ||
| + | If Not pd_imp_ProcessGroup(MenuObj, Group) Then _ | ||
| + | Exit Function | ||
| + | Next | ||
| + | |||
| + | pd_imp_ProcessMenu = True | ||
| + | End Function | ||
| + | |||
| + | Function pd_imp_ProcessGroup(ByRef MenuObj, ByRef GroupNode) | ||
| + | pd_imp_ProcessGroup = False | ||
| + | |||
| + | Dim GroupName, GroupID | ||
| + | GroupName = GroupNode.GetAttribute("name") | ||
| + | GroupID = CLng(GroupNode.GetAttribute("id")) | ||
| + | |||
| + | Dim Creator, GroupObj | ||
| + | Set Creator = New TCreator | ||
| + | ' Работаем с базой данных | ||
| + | ' Находим/создаем объект группы блюд в БД | ||
| + | |||
| + | Dim Meals, Meal | ||
| + | Set Meals = GroupNode.SelectNodes("./MEAL") | ||
| + | |||
| + | For Each Meal in Meals | ||
| + | If Not pd_imp_ProcessMeal(MenuObj, GroupObj, Meal) Then _ | ||
| + | Exit Function | ||
| + | Next | ||
| + | |||
| + | pd_imp_ProcessGroup = True | ||
| + | End Function | ||
| + | |||
| + | Function pd_imp_ProcessMeal(ByRef MenuObj, ByRef GroupObj, ByRef MealNode) | ||
| + | pd_imp_ProcessMeal = False | ||
| + | |||
| + | Dim MealName, MealID, MealPrice | ||
| + | MealName = MealNode.GetAttribute("name") | ||
| + | MealID = CLng(MealNode.GetAttribute("id")) | ||
| + | MealPrice = CCur(MealNode.GetAttribute("price")) | ||
| + | |||
| + | Dim Creator, MealObj | ||
| + | Set Creator = New TCreator | ||
| + | ' Работаем с базой данных | ||
| + | ' Находим/создаем объект блюда в БД | ||
| + | |||
| + | pd_imp_ProcessMeal = True | ||
| + | End Function | ||
| + | </syntaxhighlight> | ||
[[Category:VBScript]] | [[Category:VBScript]] | ||
[[Category:Импорт/экспорт данных]] | [[Category:Импорт/экспорт данных]] | ||
[[Category:Учебный курс]] | [[Category:Учебный курс]] | ||
Версия 14:57, 6 сентября 2010
<?xml version="1.0" encoding="windows-1251"?> <!-- 1. Все идентификаторы - целые числа, уникальные для объектов одного типа 2. Для вещественных чисел используется точка в качестве десятичного разделителя. Например, 3.14 3. menu_kind - может принимать значения "B" - меню для бара, "K" - меню для кухни 4. active_from, active_to - задают период дат действия меню 5. Формат даты в строковом представлении дд.мм.гггг --> <MENU_LIST> <MENU name="Обеденное меню" id="1" menu_kind="K" active_from="01.10.2010" active_to="10.10.2010"> <MEAL_GROUP name="Закуски" id="222"> <MEAL name="Caлат летний" id="333" price="7800" /> <MEAL name="Caлат мясной" id="444" price="12800" /> </MEAL_GROUP> <MEAL_GROUP name="Супы" id="2"> <MEAL name="Суп гороховый" id="555" price="12800" /> </MEAL_GROUP> <MEAL_GROUP name="Горячие блюда" id="3"> <MEAL name="Бифштекс" id="3344" price="19800" /> </MEAL_GROUP> </MENU> <MENU name="Вечернее меню" id="2" menu_kind="K" active_from="01.10.2010" active_to="10.10.2010"> </MENU> </MENU_LIST>
Option Explicit Sub pd_ImportMenu(FileName) Dim oXML Set oXML = CreateObject("MSXML.DomDocument") oXML.Async = False If Not oXML.Load(FileName) Then MsgBox "Invalid file name" Exit Sub End If oXML.setProperty "SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" oXML.setProperty "SelectionLanguage", "XPath" Dim Item, Nodes Set Nodes = oXML.documentElement.selectNodes("//MENU") For Each Item In Nodes If Not pd_imp_ProcessMenu(Item) Then _ Exit Sub Next MsgBox "Success!" End Sub Function pd_imp_ProcessMenu(ByRef MenuNode) pd_imp_ProcessMenu = False Dim MenuName, MenuID, MenuKind, ActiveFrom, ActiveTo MenuName = MenuNode.GetAttribute("name") MenuID = CLng(MenuNode.GetAttribute("id")) MenuKind = MenuNode.GetAttribute("menu_kind") ActiveFrom = DateValue(MenuNode.GetAttribute("active_from")) ActiveTo = DateValue(MenuNode.GetAttribute("active_to")) Dim Creator, MenuObj Set Creator = New TCreator ' Работаем с базой данных ' Находим/создаем объект меню в БД Dim Groups, Group Set Groups = MenuNode.SelectNodes("./MEAL_GROUP") For Each Group in Groups If Not pd_imp_ProcessGroup(MenuObj, Group) Then _ Exit Function Next pd_imp_ProcessMenu = True End Function Function pd_imp_ProcessGroup(ByRef MenuObj, ByRef GroupNode) pd_imp_ProcessGroup = False Dim GroupName, GroupID GroupName = GroupNode.GetAttribute("name") GroupID = CLng(GroupNode.GetAttribute("id")) Dim Creator, GroupObj Set Creator = New TCreator ' Работаем с базой данных ' Находим/создаем объект группы блюд в БД Dim Meals, Meal Set Meals = GroupNode.SelectNodes("./MEAL") For Each Meal in Meals If Not pd_imp_ProcessMeal(MenuObj, GroupObj, Meal) Then _ Exit Function Next pd_imp_ProcessGroup = True End Function Function pd_imp_ProcessMeal(ByRef MenuObj, ByRef GroupObj, ByRef MealNode) pd_imp_ProcessMeal = False Dim MealName, MealID, MealPrice MealName = MealNode.GetAttribute("name") MealID = CLng(MealNode.GetAttribute("id")) MealPrice = CCur(MealNode.GetAttribute("price")) Dim Creator, MealObj Set Creator = New TCreator ' Работаем с базой данных ' Находим/создаем объект блюда в БД pd_imp_ProcessMeal = True End Function