ООО "ПМ-Студия" | Мы рады Вас удивить! |
Загрузить
|
Примеры
|
Описание скрипта связи KDVB1C и 1С Предприятие 7.7
Для передачи данных использован язык скриптов (VBScript), входящий в комплект Windows. Это сделано для обеспечения возможности изменения алгоритма передачи непосредственно у заказчика, т.к. исходный текст скрипта в KDVB1C, доступен для редакции. При нажатии на кнопку связи с 1С, KDVB1C создаёт форму и несколько визуальных элементов на ней. После загрузки формы в память, программа грузит скрипт и передает ему управление. Путем редактирования скрипта, можно задействовать расположенные на форме элементы. Всего на форме определены три кнопки (CommandButton), три метки (Label), три текстовых поля. Их можно использовать для определения пользовательского интерфейса. Для обработки нажатий кнопок cmd2 и cmd3 – используйте предопределенные имена процедур обработчикв событий. Например для обработки события нажатия кнопки cmd2 нужно в скрипте определить процедуру: Sub cmd2() ….. EndSub. В скрипте таким образом определена реакция на нажатие кнопки cmd1.
'Файл скрипт, для организации связи KDVB1C с 1С Предприятие
7.7
'ООО "ПМ-Студия" Copyryght 2004г
'-------------------------------------------------------
'Предопределенные объекты
'form - ссылка на текущую форму
'rs - ссылка на recordset
'rsJournal - ссылка на recordset со строкой текущего заказа
'bd1c - ссылка на базу данных 1C Предприятие 7.7
'form.gridSt1c - грид (MSFlexGrid)
'
'Предопределенные процедуры
'form.ShowMes(s as string) - Вывести строку в окно Log из скрипта (для отладки)
'form.FormatM(z as variant, s as string) as string - функция Format для форматирования
дат.
'
'Обратите внимание, что вызовы функций 1С необходимо записывать
'в англоязычной транскрипции.
'Так как я так и не определил, как из скрипта вставить control в форму, то
'я решил разместить в форме несколько уже готовых элементов. Их имена следующие:
'cmd1, cmd2, cmd3 - коммандная кнопка
'lb1, lb2, lb3 - label
'txt1, txt2, txt3 - текстовое поле
'Что бы воспользоваться этими элементами, их надо передвинуть в форму.
'предварительно сделать их доступными
'Выключим лишние элементы
Form.cmd1.enabled=false
Form.cmd2.enabled=false
Form.cmd3.enabled=false
Form.lb1.enabled=false
Form.lb2.enabled=false
Form.lb3.enabled=false
Form.txt1.enabled=false
Form.txt2.enabled=false
Form.txt3.enabled=false
'Воспользуемся первой кнопкой, Передвинем кнопку cmd1, подпишем
её
Form.cmd1.enabled=true
Form.cmd1.Top = 4320
Form.cmd1.Left = 180
Form.cmd1.Width = 1935
Form.cmd1.Height = 315
Form.cmd1.Caption = "Работа"
'Подпишем заголовок формы
Form.Caption = "Связь с 1С Бухгалтерия 7.7"
'Вставим колонки в грид и подпишем их
Form.gridSt1c.Cols = 4
Form.gridSt1c.AddItem ""
Form.gridSt1c.ColWidth(0) = 0
Form.gridSt1c.ColWidth(1) = 1000
Form.gridSt1c.ColWidth(2) = 3000
Form.gridSt1c.ColWidth(3) = Form.gridSt1c.Width - (Form.gridSt1c.ColWidth(1) +
Form.gridSt1c.ColWidth(2)) - 100
Form.gridSt1c.TextMatrix(0, 1) = "Заказ №"
Form.gridSt1c.TextMatrix(0, 2) = "Контрагент"
Form.gridSt1c.TextMatrix(0, 3) = "Комментарий"
Form.gridSt1c.row = 0
'Зададим выравнивание колонок грида
For i = 1 To 3
Form.gridSt1c.col = i 'Активная
колонка
Form.gridSt1c.CellAlignment = 4
'Выравнивание по центру
Next
Form.gridSt1c.RemoveItem (2) 'Удалим вторую строку, т.к.
она вставляется по умолчанию
'К моменту открытия формы, мы уже имеем готовый объект bd1c
- ссылка на открытую базу 1С
'В гриде отобразим список документов "Счет" из 1С
'Прочитаем документы из 1С
Form.lblHeadGrid.Caption ="Журнал документов СЧЕТ из 1с за "+Form.FormatM(rsJournal.Fields("DataCreate").Value,"DD.MM.YY")
ClearGrid 'Очистим грид
AddGrid 'Заполним грид списком документов из 1С
'--------------------------------------------------------
‘Эта процедура для проверки работоспособности скрипта
Sub Test()
Dim MyControl
For Each MyControl In Form.Controls
Form.ShowM (MyControl.Name)
Next
'Проверим работу rs
Form.ShowM "------------------------------------"
For each MyControl in rsJournal.Fields
Form.ShowM (MyControl.Name)
Next
Form.ShowM cstr(rsJournal.Fields("DataCreate").Value)
End Sub
'--------------------------------------------------------
'Осуществляет связь KDVB1C с 1С
'Имя процедуры cmd1 - предопределено (имя кнопки)
Sub cmd1()
dim Nom1
dim Nom2
dim NomDok
dim dScet
Set dScet = bd1c.CreateObject("Документ.Счет")
Set Nom1 = bd1c.CreateObject("Справочник.Номенклатура")
Set Nom2 = bd1c.CreateObject("Справочник.Номенклатура")
dScet.New() 'Формируем новый документ Счет
dScet.SetAttrib "НомерДок", (rsJournal.Fields("NomerZ").Value)
dScet.SetAttrib "ДатаДок", (rsJournal.Fields("DataCreate").Value)
dScet.Write() 'Записываем документ
End Sub
'--------------------------------------------------------
'Очистить грид
Sub ClearGrid()
dim i
For i = 2 To Form.gridSt1c.Rows - 1
Form.gridSt1c.RemoveItem (1)
Next
Form.gridSt1c.TextMatrix(1, 1) = ""
Form.gridSt1c.TextMatrix(1, 2) = ""
Form.gridSt1c.TextMatrix(1, 3) = ""
End Sub
'--------------------------------------------------------
'Заполнить грид
Sub AddGrid()
dim dScet
dim i
dim DateDok
Set dScet = bd1c.CreateObject("Документ.Счет")
i = 1
DateDok = rsJournal.Fields("DataCreate").Value 'Читаем дату
документа из recordset журнала
If 1 = dScet.SelectDocuments((DateDok), (DateDok)) Then
'Есть документы в выборке
Do While dScet.GetDocument() = 1
If > 1 Then
Form.gridSt1c.AddItem ""
End If
'Так как нельзя в скрипте использовать синтаксис 1С Пример:
Спр.Наименование="Иваноов"
'Приходится использовать английскую транскрипцию 1С вызовов
Form.gridSt1c.TextMatrix(i, 1) = Trim(dScet.GetAttrib("НомерДок"))
Set kagent = dScet.GetAttrib("Контрагент")
Form.gridSt1c.TextMatrix(i, 2) = Trim(kagent.GetAttrib("Наименование"))
Form.gridSt1c.TextMatrix(i, 3) = Trim(dScet.GetAttrib("Комментарий"))
i = i + 1
Loop
End If
End Sub