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

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


Цены

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

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

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


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

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

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

Для демонстрации работы с системой SLS-Active Склад приведем пример макроса для получения прайс-листа по группе товаров в Microsoft Excel .
 
Разумеется, получать прайс-листы легче и быстрее прямо из системы SLS-Склад. Считывание информации из базы данных системы SLS-Склад производится путем обращения к интерфейсам, предоставляемым системой SLS-Active Склад.
 
Данный макрос служит лишь для демонстрации работы с SLS-Active Склад на простом примере. Ниже приведен текст макроса с пояснениями для печати из Microsoft Excel прайс-листа по группе товаров.
 

Dim h, v, Vmax, Page, StartLineH, StartLineV, FontSize
Dim AxLoader, AxSklad, AxSession, SelPriceLists, TopGrName
Dim SelCards, PList, PosNum, IntfWSHNum
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'вывод отладочной информации о числе ссылок на интерфейсы
Sub IntfInfo(N, h)
Dim IntfNum, i
     IntfNum = AxLoader.GetMaxIntfNum
     For i = 1 To IntfNum
          Worksheets(N).Cells(i, h).Value = AxLoader.GetIntfName(i) + " : " + CStr(AxLoader.GetIntfCount(i))
     Next
End Sub
'
'функция печати информации по позиции прайс-листа
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
             'надо писать заголовок группы
                   Page.Range(Page.Cells(StartLineH + h, StartLineV), Page.Cells(StartLineH + h, StartLineV + Vmax)).Merge
                   Page.Range(Page.Cells(StartLineH + h, StartLineV), Page.Cells(StartLineH + h, StartLineV + Vmax)).HorizontalAlignment = xlHAlignCenter
                   Page.Range(Page.Cells(StartLineH + h, StartLineV), Page.Cells(StartLineH + h, StartLineV + Vmax)).Font.Size = FontSize
                   Page.Range(Page.Cells(StartLineH + h, StartLineV), Page.Cells(StartLineH + h, StartLineV + Vmax)).Font.Bold = True
                   Page.Range(Page.Cells(StartLineH + h, StartLineV), Page.Cells(StartLineH + h, StartLineV + Vmax)).Value = Title
                   h = h + 1
                   first = False
             End If
             'заполняем строку с информацией и ценами по текущей записи товара
             Page.Cells(StartLineH + h, StartLineV + v).Value = PosNum
             PosNum = PosNum + 1
             v = v + 1
             Page.Cells(StartLineH + h, StartLineV + v).Value = Sel.GetFieldAsString("ntovar", 0)
             v = v + 1
             Page.Cells(StartLineH + h, StartLineV + v).Value = Sel.GetFieldAsString("nomnum", 0)
             v = v + 1
             Page.Cells(StartLineH + h, StartLineV + v).Value = Sel.GetFieldAsString("ediz", 0)
             v = v + 1
             'цены
             For i = 1 To 5
                  If PList.NotEmpty(i) Then
                     Page.Cells(StartLineH + h, StartLineV + v).Value = PList.CountGoodsPrice(Sel.Address, i, 10)
                     v = v + 1
                  End If
             Next
             v = 0
             h = h + 1
          End If
          'перейдем к следующей записи
          Sel.Next
    Wend
    Set Sel = Nothing
End Sub

Sub PriceList()
'''''''''''''''''
'PriceList Макрос
'''''''''''''''''
On Error Resume Next
StartLineH = 7
StartLineV = 1
headH0 = 20
headH = 28
numW = 3
namesW = 40
namesH = 25
nomnumW = 12
edizW = 5
FontSize = 10
FontName = "Times New Roman Cyr"
Halign = xlHAlignLeft
Valign = xlVAlignCenter

Set Page = ActiveSheet
'Очистим лист
Page.UsedRange.Clear
'Ввод данных
PriceListNom = InputBox("Введите номер прайс-листа:", "Номер прайс-листа", 3)
GroupAdr = InputBox("Введите адрес группы товаров:", "Группа товаров", 71228)
IntfWSHNum = CInt(InputBox("Введите адрес листа для вывода информации о кол-ве интерфейсов:", "Отладочная информация", Page.Index + 1))
Worksheets(IntfWSHNum).UsedRange.Clear
'получим указатель на главный интерфейс пакета SLS-ActiveСклад
Set AxLoader = CreateObject("SLSSklad.AxLoader")
If Err.Number = 0 Then
'все хорошо, попробуем подключиться к базе
      AxLoader.OpenDatabase ("c:\skladdbx\base.dbx")
      If Err.Number = 0 Then
         MsgBox "Все ОК!"
         'все хорошо, получим указатель на интерфейс AxSklad
         Set AxSklad = AxLoader.AxSklad
         'попробуем авторизовать пользователя
         If AxSklad.Login("Login", "Password", "") Then
              'все хорошо, получим указатель на AxSession
              Set AxSession = AxSklad.AxSession
              'отберем записи прайс-листов
              Set SelPriceLists = AxSession.SelectData("Rec_Pricel", 0, 0)
              'попробуем найти прайс-лист с указанным пользователем номером
              If SelPriceLists.GetPriceListByNom(PriceListNom) Then
                 'нашли, получим указатель на интрефейс для
                 'работы с прайс-листом AxPriceList
                 Set PList = SelPriceLists.GetPriceList
                 If Err.Number <>0 Then
                        MsgBox (Err.Description)
                 Else
                        FlgOk = True
                 End If
              Else
              'нет такого прайс-листа
                  FlgOk = False
                  MsgBox ("Нет прайс-листа с таким номером!")
              End If
              If FlgOk Then
                  'отберем карточки и группы товаров,
                  'лежащие в группе с адресом GroupAdr
                  Set SelCards = AxSession.SelectData("REC_CARDS", GroupAdr, 0)
                  If Err.Number = 0 Then
                      'вызовем процедуру печати отладочной информации
                      'о количестве ссылок на интерфейсы
                      Call IntfInfo(IntfWSHNum, 1)
                      'теперь займемся оформлением заголовка нашего прайс-листа
                      h = 0
                      v = 0
                      Page.Cells(StartLineH + h, StartLineV + v).Value = "№ п/п"
                      Page.Range(Page.Cells(StartLineH + h, StartLineV + v),      Page.Cells(StartLineH + h + 1, StartLineV + v)).Merge
                      Page.Columns(StartLineV + v).ColumnWidth = numW
                      Page.Columns(StartLineV + v).HorizontalAlignment = xlHAlignRight
                      Page.Cells(StartLineH + h, StartLineV + v).HorizontalAlignment = xlHAlignCenter
                      v = v + 1
                      Page.Cells(StartLineH + h, StartLineV + v).Value = "Наименование товара"
                      Page.Range(Page.Cells(StartLineH + h, StartLineV + v),       Page.Cells(StartLineH + h + 1, StartLineV + v)).Merge
                      Page.Columns(StartLineV + v).ColumnWidth = namesW
                      Page.Columns(StartLineV + v).HorizontalAlignment = xlHAlignLeft
                      Page.Cells(StartLineH + h, StartLineV + v).HorizontalAlignment = xlHAlignCenter
                      v = v + 1
                      Page.Cells(StartLineH + h, StartLineV + v).Value = "Номенклатурный номер"
                      Page.Range(Page.Cells(StartLineH + h, StartLineV + v),          Page.Cells(StartLineH + h + 1, StartLineV + v)).Merge
                      Page.Columns(StartLineV + v).ColumnWidth = nomnumW
                      Page.Columns(StartLineV + v).HorizontalAlignment = xlHAlignLeft
                      Page.Columns(StartLineV + v).NumberFormat = "@"
                      Page.Cells(StartLineH + h, StartLineV + v).HorizontalAlignment = xlHAlignCenter
                      v = v + 1
                      Page.Cells(StartLineH + h, StartLineV + v).Value = "Ед. изм."
                      Page.Range(Page.Cells(StartLineH + h, StartLineV + v), Page.Cells(StartLineH + h + 1, StartLineV + v)).Merge
                      Page.Columns(StartLineV + v).ColumnWidth = edizW
                      Page.Columns(StartLineV + v).HorizontalAlignment = xlHAlignCenter
                      Page.Cells(StartLineH + h, StartLineV + v).HorizontalAlignment = xlHAlignCenter
                      v = v + 1
                      Page.Cells(StartLineH + h, StartLineV + v).Value = "Цены на " + CStr(Date)
                      Page.Cells(StartLineH + h, StartLineV + v).HorizontalAlignment = xlHAlignCenter
                      h = h + 1
                      Vmin = v
                      Page.Rows(StartLineH + h).RowHeight = headH
                      For i = 1 To 5
                          If PList.NotEmpty(i) Then
                               Page.Cells(StartLineH + h, StartLineV + v).Value = PList.GetPriceField(i, "fname") + " " + PList.GetPriceField(i, "iUSD")
                               Page.Columns(StartLineV + v).HorizontalAlignment = xlHAlignRight
                               Page.Cells(StartLineH + h, StartLineV + v).HorizontalAlignment = xlHAlignCenter
                               v = v + 1
                          End If
                      Next
                      Vmax = v - 1
                      Page.Range(Page.Cells(StartLineH + h - 1, StartLineV + Vmin), Page.Cells(StartLineH + h - 1, StartLineV + Vmax)).Merge
                      Page.Range(Page.Cells(StartLineH + h - 1, StartLineV + Vmin), Page.Cells(StartLineH + h - 1, StartLineV + Vmax)).HorizontalAlignment = xlHAlignCenter
                      'Верхний заголовок
                      Page.Range(Page.Cells(StartLineH - 2, StartLineV), Page.Cells(StartLineH - 2, StartLineV + Vmax)).Merge
                      Page.Range(Page.Cells(StartLineH - 2, StartLineV), Page.Cells(StartLineH - 2, StartLineV + Vmax)).HorizontalAlignment = xlHAlignCenter
                      Page.Range(Page.Cells(StartLineH - 2, StartLineV), Page.Cells(StartLineH - 2, StartLineV + Vmax)).Font.Size = FontSize
                      Page.Range(Page.Cells(StartLineH - 2, StartLineV), Page.Cells(StartLineH - 2, StartLineV + Vmax)).Value = SelPriceLists.GetFieldAsString("poisn", 0)

                      Page.Range(Page.Cells(StartLineH - 4, StartLineV), Page.Cells(StartLineH - 4, StartLineV + Vmax)).Merge
                      Page.Range(Page.Cells(StartLineH - 4, StartLineV), Page.Cells(StartLineH - 4, StartLineV + Vmax)).HorizontalAlignment = xlHAlignCenter
                      Page.Range(Page.Cells(StartLineH - 4, StartLineV), Page.Cells(StartLineH - 4, StartLineV + Vmax)).Font.Size = 16
                      Page.Range(Page.Cells(StartLineH - 4, StartLineV), Page.Cells(StartLineH - 4, StartLineV + Vmax)).Font.Bold = True
                      Page.Range(Page.Cells(StartLineH - 4, StartLineV), Page.Cells(StartLineH - 4, StartLineV + Vmax)).Value = SelPriceLists.GetFieldAsString("printname", 0)

                      h = h + 1
                      v = 0
                      'определим название группы с адресом GroupAdr
                      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
                      Page.Range(Page.Cells(StartLineH - 3, StartLineV), Page.Cells(StartLineH - 3, StartLineV + Vmax)).Merge
                      Page.Range(Page.Cells(StartLineH - 3, StartLineV), Page.Cells(StartLineH - 3, StartLineV + Vmax)).HorizontalAlignment = xlHAlignCenter
                      Page.Range(Page.Cells(StartLineH - 3, StartLineV), Page.Cells(StartLineH - 3, StartLineV + Vmax)).Font.Size = 18
                      Page.Range(Page.Cells(StartLineH - 3, StartLineV), Page.Cells(StartLineH - 3, StartLineV + Vmax)).Font.Bold = True
                      Page.Range(Page.Cells(StartLineH - 3, StartLineV), Page.Cells(StartLineH - 3, StartLineV + Vmax)).Value = TopGrName
                      Dim G_Param
                      'определим название организации
                      Set G_Param = AxSession.SelectData("G1_param", 0, 0)
                      Page.Range(Page.Cells(StartLineH - 5, StartLineV), Page.Cells(StartLineH - 5, StartLineV + Vmax)).Merge
                      Page.Range(Page.Cells(StartLineH - 5, StartLineV), Page.Cells(StartLineH - 5, StartLineV + Vmax)).HorizontalAlignment = xlHAlignLeft
                      Page.Range(Page.Cells(StartLineH - 5, StartLineV), Page.Cells(StartLineH - 5, StartLineV + Vmax)).Font.Size = FontSize
                      Page.Range(Page.Cells(StartLineH - 5, StartLineV), Page.Cells(StartLineH - 5, StartLineV + Vmax)).Font.Bold = True
                      Page.Range(Page.Cells(StartLineH - 5, StartLineV), Page.Cells(StartLineH - 5, StartLineV + Vmax)).Value = G_Param.GetFieldAsString("Nameshort", 0)
                      Set G_Param = Nothing
                      PosNum = 1
                      'выведем информацию по позициям прайс-листа
                      Call PrintPos(GroupAdr, 0, TopGrName)
                      'теперь все красиво оформим: рамочки и т.п.
                      With Page.UsedRange
                             .Font.Name = FontName
                             .VerticalAlignment = Valign
                             .WrapText = True
                      End With
                      With Page.Range(Page.Cells(StartLineH, StartLineV), Page.Cells(StartLineH + h - 1, StartLineV + Vmax))
                             .Borders.LineStyle = xlContinuous
                             .Borders.Weight = xlThin
                             .Font.Size = FontSize
                      End With
                      Page.PageSetup.PrintTitleRows = Page.Range(Page.Rows(StartLineH), Page.Rows(StartLineH + 1)).Rows.Address
                      'уничтожим ссылки на интерфесы, которые еще есть
                      Set SelCards = Nothing
                      Set PriceLists = Nothing
                      Set PList = Nothing
             Else
                  FlgOk = False
                  MsgBox ("Плохой адрес группы товаров!")
             End If
             Set SelCards = Nothing
         End If
         Set PList = Nothing
         Set SelPriceLists = Nothing
         Set AxSession = Nothing
     Else
         MsgBox ("Логин не прошел!")
     End If
     Set AxSklad = Nothing
     'закроем подключение к базе
     'это нужно делать ТОЛЬКО, если успешно
     'прошел AxLoader.OpenDatabase ("...."),
     'иначе будут ошибки!!!
     AxLoader.CloseWorkSession
  Else
     MsgBox ("К базе не подключились!")
  End If
Else
    MsgBox ("Loader не создался!")
End If
'перед закрытием SLS-ActiveСклада проверим, все ли
'ссылки на интерфейсы мы уничтожили
'Если остаются неуичтоженные ссылки - очень плохо, т.к.
'не освобождаем память, нужно найти и поправить.
Call IntfInfo(IntfWSHNum, 5)
Set AxLoader = Nothing
End Sub
 
    
СВЯЗЫВАЙТЕСЬ С НАМИ
ПН - ПТ с 10 до 18
info@sls.ru
адрес и схема проезда
 

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