Поиск по сайту На главную страницу Карта сайта Написать письмо
На главную страницу Карта сайта
Разработка программных продуктов - компания SOFTLANDSYSTEM

ДОПОЛНИТЕЛЬНО
о программе...


Цены

Демонстрация выгрузки в Word

Демонстрация выгрузки в Excel

Справочная система


Архив новостей

ПОДПИШИТЕСЬ НА НОВОСТИ ...

Демонстрация работы с SLS-Active Склад из Word

Для демонстрации работы с системой SLS-Active Склад приведем пример макроса для получения прайс-листа по группе товаров в Microsoft Word .
 
Разумеется, получать прайс-листы легче и быстрее прямо из системы SLS-Склад. Считывание информации из базы данных системы SLS-Склад производится путем обращения к интерфейсам, предоставляемым системой SLS-Active Склад.
 
Данный макрос служит лишь для демонстрации работы с SLS-Active Склад на простом примере. Ниже приведен текст макроса с пояснениями для печати из Microsoft Word прайс-листа по группе товаров.
 
 
Dim H, V, Vmax, Page, StartLineH, StartLineV, FontSize
Dim AxLoader, AxSklad, AxSession, SelPriceLists, TopGrName
Dim SelCards, PList, PosNum
Dim Table1, LastRow, PriceNum
'Функция для распечатки позиций прайс-листа
Sub PrintPos(GAdr, Pos, Title)
Dim Sel
       'отберем карточки товаров из группы с адресом GAdr
       Set Sel = AxSession.SelectData("Rec_cards", GAdr, 0)
       'перейдем карточке с номером позиции Pos
       Sel.Position = Pos
       First = True
       'цикл по всем отобранным карточкам
       While Not Sel.EOF
                 If Sel.GetFieldAsInteger("cardtyp", 0) = 1 Then
                 'стоим на записи подгруппы, нужно распечатать карточки и из нее
                       'сохраним текущие значения параметров
                       'и сформируем параметры для вызова рекурсии
                       iGAdr = Sel.Address               
                       iPos = 0
                       curPos = Sel.Position
                       'сформируем заголовок подгруппы для печати в прайс-листе
                       iTitle = Title + " *** " + Sel.GetFieldAsString("ntovar", 0)
                       'освободим список записей, чтобы не заниметь
                       'лишнюю память во время рекурсии
                       Set Sel = Nothing
                       'вызовем рекурсию
                       Call PrintPos(iGAdr, iPos, iTitle)
                       'восстановим список записей после прохождения рекурсии
                       Set Sel = AxSession.SelectData("Rec_cards", GAdr, 0)
                       Sel.Position = curPos
                 Else
                 'стоим не записи карточки товара
                 'надо вывести строку прайс-листа
                      If First = True Then
                      'это первая карточка в подгруппе
                      'надо вывести заголовок самой подгруппы
                             Table1.Rows.Add (Table1.Rows(H))
                             Table1.Rows(H).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
                             Table1.Rows(H).Range.Font.Bold = True
                             Table1.Rows(H).Cells.Merge
                             Table1.Cell(H, 1).Range.InsertAfter (Title)
                             H = H + 1
                             First = False
                      End If
                      Table1.Rows.Add (Table1.Rows(H))
                      Table1.Cell(H, 1).Range.InsertAfter (PosNum)
                      PosNum = PosNum + 1
                      'выведем данные
                      Table1.Cell(H, 2).Range.InsertAfter (Sel.GetFieldAsString("ntovar", 0))
                      Table1.Cell(H, 3).Range.InsertAfter (Sel.GetFieldAsString("nomnum", 0))
                      Table1.Cell(H, 4).Range.InsertAfter (Sel.GetFieldAsString("ediz", 0))
                      Table1.Cell(H, 5).Split NumColumns:=PriceNum
                      j = 5
                      'выведем цены
                      For i = 1 To 5
                            If PList.NotEmpty(i) Then
                                   Table1.Cell(H, j).Range.InsertAfter (PList.CountGoodsPrice(Sel.Address, i, 10))
                                    j = j + 1
                             End If
                      Next
                      H = H + 1
                 End If
                 'перейдем к следующей записи
                 Sel.Next
       Wend
       'уничтожим ссылку на интерфейс и освободим память
       Set Sel = Nothing
End Sub


Sub PrintPriceList()
'
'макрос для печати прайс-листа
On Error Resume Next
    PriceListNom = InputBox("Введите номер пайс-листа:", "Номер прайс-листа", 3)
    GroupAdr = InputBox("Введите адрес группы товаров:", "Адрес группы", 71228)

    FlgOK = False
    'получим указатель на основной интерфейс пакета SLS-ActiveСклад
    Set AxLoader = CreateObject("SLSSklad.AxLoader")
    If Err.Number = 0 Then
    'подключимся к базе данных
    AxLoader.OpenDatabase ("c:\skladdbx\base.dbx")
         If Err.Number = 0 Then
             WSFlag = True
             'получим указатель на интерфейс AxSklad
             'и попробуем авторизовать пользователя
             Set AxSklad = AxLoader.AxSklad
             If AxSklad.Login("Login", "Password", "") Then
                   'получим указатель на интерфейс рабочего сеанса
                   Set AxSession = AxSklad.AxSession
                   'отберем записи прайс-листов
                   Set SelPriceLists = AxSession.SelectData("Rec_Pricel", 0, 0)
                   'попробуем найти прайс-лист с номером, указанным пользователем
                   If SelPriceLists.GetPriceListByNom(PriceListNom) Then
                         Set PList = SelPriceLists.GetPriceList
                         If Err.Number <> 0 Then
                                MsgBox (Err.Description)
                         Else
                                FlgOK = True
                         End If
                   Else
                         MsgBox ("Нет прайс-листа с таким номером!")
                   End If
                   If FlgOK Then
                         'попробуем отобрать записи из группы товаров
                         'с указанным пользователем адресом
                         Set SelCards = AxSession.SelectData("REC_CARDS", GroupAdr, 0)
                         If Err.Number <> 0 Then
                               FlgOK = False
                               MsgBox ("Нет группы товаров с указанным адресом!")
                         End If
                   End If
             Else
                   MsgBox ("Ошибка при авторизации пользователя!")
             End If
       Else
             MsgBox ("Не удалось подключиться к базе данных!")
             WSFlag = False
       End If
   Else 
       MsgBox ("Не удалось создать AxLoader!")
   End If

   If FlgOK Then
       Dim TopGrSel
       'получим название группы товаров
       If SelCards.GetFieldAsInteger("adrgrp", 0) = 0 Then
       'это группа товаров верхнего уровня
            Set TopGrSel = AxSession.SelectData("Rec_Cards", 0, 0)
            TopGrSel.Address = GroupAdr
            TopGrName = TopGrSel.GetFieldAsString("name", 0)
            Set TopGrSel = Nothing
       Else
       'это группа товаров второго или ниже уровня
            Set TopGrSel = AxSession.SelectData("Rec_Cards", -1, 0)
            TopGrSel.Address = GroupAdr
            TopGrName = TopGrSel.GetFieldAsString("ntovar", 0)
            Set TopGrSel = Nothing
       End If
       Set EndHeader = Selection.Paragraphs.Add
       Set nOrg = Selection.Paragraphs.Add(EndHeader.Range)
       'получим название организации из глобальных параметров системы SLS-Склад
       Dim G_Param
       Set G_Param = AxSession.SelectData("G1_param", 0, 0)
       nOrg.Range.InsertBefore G_Param.GetFieldAsString("Nameshort", 0)
       Set G_Param = Nothing
       'красиво все оформим
       nOrg.Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
       nOrg.Range.Font.Size = 10
       nOrg.Range.Font.Bold = True
       Set nPrice = Selection.Paragraphs.Add(EndHeader.Range)
       'выведем название прайс-листа
       nPrice.Range.InsertBefore SelPriceLists.GetFieldAsString("printname", 0)
       nPrice.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
       nPrice.Range.Font.Size = 16
       nPrice.Range.Font.Bold = True
       Set nGr = Selection.Paragraphs.Add(EndHeader.Range)
       nGr.Range.InsertBefore TopGrName
       nGr.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
       nGr.Range.Font.Size = 18
       nGr.Range.Font.Bold = True
       Set nPr = Selection.Paragraphs.Add(EndHeader.Range)
       'выведем комментарии к прайс-листу
       nPr.Range.InsertBefore SelPriceLists.GetFieldAsString("poisn", 0)
       nPr.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
       nPr.Range.Font.Size = 10
       Set Table1 = ActiveDocument.Tables.Add(Range:=EndHeader.Range, NumRows:=2, NumColumns _
:=5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitContent)
       Set LastRow = Table1.Rows(2)
       Table1.AutoFormat Format:=wdTableFormatGrid1, ApplyBorders:= _
True, ApplyShading:=False, ApplyFont:=False, ApplyColor:=False, _
ApplyHeadingRows:=True, ApplyLastRow:=False, ApplyFirstColumn:=False, _
ApplyLastColumn:=False, AutoFit:=True
       Table1.Range.Font.Size = 10
       Table1.Rows.Add (LastRow)
       'озаглавим столбцы
       Table1.Cell(1, 1).Range.InsertAfter ("№ п/п")
       Table1.Cell(1, 2).Range.InsertAfter ("Наименование товара")
       Table1.Cell(1, 3).Range.InsertAfter ("Номенклатурный номер")
       Table1.Cell(1, 4).Range.InsertAfter ("Ед. изм.")
       Table1.Cell(1, 5).Range.InsertAfter ("Цены на " + CStr(Date))
       Table1.Rows(1).Cells.VerticalAlignment = wdAlignVerticalCenter
       Table1.Rows(2).Cells.VerticalAlignment = wdAlignVerticalCenter
       Table1.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
       Table1.Rows(2).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
       PriceNum = 0
       'посмотрим сколько цен в этом прайс-листе
       For i = 1 To 5
             If PList.NotEmpty(i) Then
                PriceNum = PriceNum + 1
             End If
       Next
       Table1.Cell(2, 5).Split NumColumns:=PriceNum
       j = 5
       'выведем названия цен и название валюты цены
       For i = 1 To 5
             If PList.NotEmpty(i) Then
                   Table1.Cell(2, j).Range.InsertAfter (PList.GetPriceField(i, "fname") + " " + PList.GetPriceField(i, "iUSD"))
                   j = j + 1
             End If
       Next
       PosNum = 1
       H = 3
       'вызовем функцию для печати позиций прайс-листа
       Call PrintPos(GroupAdr, 0, TopGrName)
       Table1.Rows(H).Delete
       Table1.Cell(1, 1).Merge (Table1.Cell(2, 1))
       Table1.Cell(1, 2).Merge (Table1.Cell(2, 1))
       Table1.Cell(1, 3).Merge (Table1.Cell(2, 1))
       Table1.Cell(1, 4).Merge (Table1.Cell(2, 1))
  End If

  'уничтожим указатели на интерфейсы и освободим память
  Set PList = Nothing
  Set PriceLists = Nothing
  Set SelCards = Nothing 
  Set AxSession = Nothing 
  Set AxSklad = Nothing
  'вызывать метод для закрытия подключения к базе надо,
  'только если оно было получено
  if WSFlag then
      AxLoader.CloseWorkSession
  end if
  Set AxLoader = Nothing
End Sub
    
СВЯЗЫВАЙТЕСЬ С НАМИ
ПН - ПТ с 10 до 18
info@sls.ru
адрес и схема проезда
 

(499) 265-3327265-4092 
 
Вся информация на сайте
защищена законом об авторском праве РФ
Создание сайта sls.ru - BinN Управление сайтом sls.ru - CMS S.Builder статистика сайта