Примеры скриптов

Navigation:  Для разработчиков >

Примеры скриптов

Previous pageReturn to chapter overviewNext page

 

Содержание:

 

Работа с запросами

 

Заполнение и отображение полей

 

Работа с прайс-листом

 

Работа с субконто

 

Работа с договорами и документами

 

Выполнение бизнес-операций

 

Внешний вид (подсветка полей, изменение фона и т.п.)

 

Работа с Сальдо/Оборот

 

 

Работа с запросами

 

======

Задача: передать даты периода в запрос.

 

Решение:

 

1.Задать начало и конец периода (в пользовательской форме через GlobalVar).

 

2.Получить значения в VBScript и ввести в запрос.

 

Текст кода:

 

public VBStr1, VBStr2

Sub ViewOnSetVBStr ''

   VBStr1 = GetGlobalVar ("BegDate")

   VBStr2 = GetGlobalVar ("EndDate")

End Sub

 

В запросе на закладке WHERE необходимо ввести: Документ.Дата between ^VBStr1^ and ^VBStr2^

 

======

Задача: организовать с помощью VBScript сортировку итоговых данных.

 

Решение:

 

1.В форме выбирается порядок сортировки.

 

2.Это значение с помощью GlobalVar передается в VBScript.

 

3.В VBScript значение получается и обрабатывается.

 

Текст кода:

 

'выборочное цитирование кода

Itogi = GetGlobalVar("SOS_Itogi")

Select Case Itogi

 Case "Общие итоги"                        OrderStr  = ""

 Case "Подразделение"                OrderStr  = "Подразделение"

 Case "Вид ОС"                                OrderStr  = "Вид"

 Case "Отв. лицо"                        OrderStr  = "МОЛ"

 Case "Группа ОС"                        OrderStr  = "[Группа ОС]"

 Case "Подразделение, вид ОС"        OrderStr  = "Подразделение, вид"

 Case "Подразделение, отв.лицо"        OrderStr  = "Подразделение, МОЛ"

 Case "Подразделение, группа ОС"        OrderStr  = "Подразделение, [группа ОС]"

End Select

 

В результате работы скрипта имеется список полей, по которым надо проводить сортировку.

В запросе на закладке SQLAfter необходимо ввести: order by ^OrderStr^

 

 

Заполнение и отображение полей

 

======

Задача: в реквизитах договора в поле Способ оплаты отображать список валют, в которых может быть произведен платеж.

 

Решение: написать текст кода в VBScript карточки договора.

 

Текст кода:

 

Sub FormOnShow          'при открытии формы редактирования

SposobOplatyEdit.ComboType = "SQL в ComboItems"

SposobOplatyEdit.ClearComboItems

SposobOplatyEdit.Comboitems.Add("SELECT DISTINCT Название FROM Валюта")

SposobOplatyEdit.LoadComboItems

End Sub

 

======

Задача: заполнять автоматически поле [Сумма] в спецификации при заполнении/редактировании полей с ценой и количеством

 

Решение: написать текст кода в VBScript карточки спецификации.

 

Текст кода:

 

Sub KolEditOnChange 'Количество'

 SumEdit.Value = KolEdit.Value * CenaEdit.Value 'Сумма = Кол-во * Цена

End Sub

Sub CenaEditOnChange 'Цена'

 SumEdit.Value = KolEdit.Value * CenaEdit.Value

End Sub

 

======

Задача: заполнять автоматически поле [Сумма руб.] в спецификации при заполнении поля [Сумма] (в USD); заполнение производить по курсу на текущую дату.

 

Решение: написать текст кода в VBScript карточки спецификации.

 

Текст кода:

 

Sub SumEditOnChange 'Сумма'

 SummaRubEdit.Value = GetValueFromSQL("SELECT dbo.[Конвертация валюты] (" + intToStr(Val1Edit.Value) + ", " + intToStr(rubcode)+ ", " + FloatToStr(SumEdit.Value) + " , " + DateAsSQL(DateEdit.Value) + ", 'ЦБ')")

End Sub

Sub Val1EditOnChange 'Валюта1'

 SummaRubEdit.Value = GetValueFromSQL("SELECT dbo.[Конвертация валюты] (" + intToStr(Val1Edit.Value) + ", " + intToStr(rubcode)+ ", " + FloatToStr(SumEdit.Value) + " , " + DateAsSQL(DateEdit.Value) + ", 'ЦБ')")

End Sub

Sub Val2EditOnChange 'Валюта2'

 SummaRubEdit.Value = GetValueFromSQL("SELECT dbo.[Конвертация валюты] (" + intToStr(Val1Edit.Value) + ", " + intToStr(rubcode)+ ", " + FloatToStr(SumEdit.Value) + " , " + DateAsSQL(DateEdit.Value) + ", 'ЦБ')")

End Sub

 

========

Задача: включать/отключать видимость и доступность полей.

 

Текст кода:

 

PostEdit.Enabled=False 'поле недоступно

PostEdit.Visible=False 'поле невидимо

PostEdit.Enabled=True 'поле доступно

PostEdit.Visible=True 'поле видимо

 

 

Работа с прайс-листом

 

======

Задача: при открытии окна Прайс-лист автоматически открыть требуемый прайс-лист.

 

Решение: открыть редактор скрипта для прайс-листа и на свойство PriceFormShow добавить приведенный ниже код.

 

Текст кода:

Sub PriceFormShow ''

 PriceListEdit.Value="[3]основной" 'Указать значение поля [Номер и Название] прайс-листа.

End Sub

 

======

Задача: вставить цену из прайс-листа в спецификацию.

 

Решение: <...где помещать текст кода?...>

 

Текст кода:

 

Sub Subconto1EditOnChange

   CenaEdit.Value=GetValueFromSQL("SELECT TOP 1 Цена FROM [Базовая цена ТМЦ] WHERE ТМЦ="+CSTR(Subconto1Edit.Value)+"AND [Базовая цена]='Основная' ORDER BY Дата DESC")

End Sub

 

 

Работа с субконто

 

======

Задача: заполнить поле субконто 1 в спецификации значением из поля Получатель из шапки Договора или Документа.

 

Решение: написать текст кода в VBScript карточки спецификации договора/документа.

 

Текст кода:

 

Sub FormAfterNewData 'Автоподстановка плательщика в субконто спецификации'

 Subconto1Edit.SubcontoType=Form.OwnerForm("PolEdit").SubcontoType

 if IsEmptyRef(Form.OwnerForm("PolEdit").Value)=false then

   Subconto1Edit.Value=Form.OwnerForm("PolEdit").Value

 else

   bmInformation("Не указан плательщик!")

   Subconto1Edit.Value=249

 end if

End Sub

 

======

Задача: узнать тип субконто в карточке редактирования или назначить тип субконто.

 

Текст кода (обращение к типу субконто):

 

Subconto1Edit.SubcontoType='Орг'

 

 

Работа с документами и договорами

 

======

Задача: запретить копирование записей (например, документов).

 

Решение: написать текст кода в VBScript списка записей (например, списка документа).

 

Текст кода:

 

Sub FormOnAfterCopy(TableName, SourceID, DestID) ''

 MsgBox "OOPS!"

End Sub

'-------------------------------------------------------------------------------

Sub FormOnBeforeCopy(ByRef TableName, SourceID, IsContinue) ''

 MsgBox "OOPS!"

 IsContinue=False 'Если IsContinue=False - копирование запрещено.

End Sub

 

======

Задача: при сохранении договора проводится создание документа, по спецификациям этого договора.

Как сделать так, чтобы документы не пересоздавались, если при редактировании в договоре изменены поля, от которых документы не меняются.

 

Текст кода:

 

' процедура инициирует служебную переменную = кол-ву измененных догспец

Sub FormOnShow ''

 SpecChanged=0

End Sub

 

' Значение служебной переменной заполняется кол-вом измененных догспец.

Sub FormBeforeSaveData ''

 SpecChanged=GetValueFromSQL("Select Count(*) From #Догспец Where Status>0")

End Sub

 

' Процедура, проверяющая изменения важных полей формы редактирования договора и измененния в спецификациях

Sub FormAfterSaveData ''

 If SpecChanged=0 and _

   PostEdit.Value=PostEdit.InitValue and _

   PolEdit.Value=PolEdit.InitValue and _

   ((Data_1.Value="0:00:00" and Data_1.InitValue="01.01.1900") or Data_1.Value=Data_1.InitValue) and _

   ........................

   ((Data_14.Value="0:00:00" and Data_14.InitValue="01.01.1900") or Data_14.Value=Data_14.InitValue) and _

   Priznak_1.Value=Priznak_1.InitValue and _

   ........................

   Priznak_14.Value=Priznak_14.InitValue Then

   Exit Sub  //Если ничего существенного не было изменено - выходим из процедуры и не создаем документы заново

 end if

 

 [Далее процедура создания документов]

End Sub

 

======

Задача: вывод информации по долгам клиента во время редактирования договора (документа):

 

Решение: написать текст кода в VBScript карточки договора/документа. Запуск процедуры надо включить в события FormAfterLoadData, PolEditOnChange

 

Текст кода:

 

Sub ShowClientInfo

   DepositRub=GetValueFromSQL("SELECT ISNULL((SELECT Значение FROM Остаток WHERE [Юр.лицо]=1 AND Вид=3 AND Субконто="+PolEdit.ValueAsSQL+"),0)")

   if DepositRub<0 then

     PolNote.Caption="Депозит "+CStr(-DepositRub)+" руб."

     PolNote.Font.Color=clBlue

   else

   if DepositRub>0 then

     PolNote.Caption="Долг "+CStr(DepositRub)+" руб."

     PolNote.Font.Color=clRed

   end if

   end if

End Sub

 

======

Задача: контроль пустых полей в шапке договора.

 

Решение: написать текст кода в VBScript карточки договора.

 

Текст кода:

 

Sub PostEditOnValidate(ByRef IsValid, ByRef NoValidMessage) 'Поставщик'

   if VarType(PostEdit.Value)=0 or (VarType(PostEdit.Value)=3 and PostEdit.Value=0) then

   NoValidMessage="Поставщик не может быть пустым"

   MsgBox(NoValidMessage)

 end if

End Sub

 

 

Выполнение бизнес-операций

 

======

Задача: создать/отредактировать бизнес-операции для вида документа.

 

Решение:

 

1.Открыть карточку редактирования документа.

 

2.Открыть редактор скрипта и добавить туда приведенный ниже код (приведенный код позволяет изменить ставку НДС в отмеченных документах).

 

Текст кода:

 

Sub FormGetBizOperList(ByRef List) ''

 List = "НДС 18; Пересчет для НДС=18%" + Chr(13) + _

         "НДС 10; Пересчет для НДС=10%"

End Sub

 

Sub FormRunBizOper(BizOper) ''

 Select Case BizOper

        Case "НДС 18"

          ExecuteSQL ("UPDATE Докспец SET [НДС]=18 WHERE Документ=" + IntegerAsSQL(Form.RecordID))

          ExecuteSQL ("EXEC [Пересчет спецификаций документа от суммы] " + IntegerAsSQL(Form.RecordID)+"")

        Case "НДС 10"

          ExecuteSQL ("UPDATE Докспец SET [НДС]=10 WHERE Документ=" + IntegerAsSQL(Form.RecordID))

          ExecuteSQL ("EXEC [Пересчет спецификаций документа от суммы] " + IntegerAsSQL(Form.RecordID)+"")

        Case Else MsgBox "Неизвестная бизнес-операция: " + BizOper

 End Select

End Sub

 

======

Задача: создать документы на основании договора посредством бизнес-операций.

 

Решение:

 

1.Открыть карточку редактирования документа.

 

2.        Открыть редактор скрипта и добавить туда приведенный ниже код (позволяет запустить SQL-процедуру по созданию документов на списание комплектующих).

 

Текст кода:

 

Sub FormGetBizOperList(ByRef List) ''

 List = "Создание док 21; Списание комплектующих"

End Sub

 

Sub FormRunBizOper(BizOper) ''

 Select Case BizOper

        Case "Создание док 21" EXECUTESQL ("EXEC [_Создание документа 21] " + IntegerAsSQL(Form.RecordID))

        Case Else MsgBox "Неизвестная Бизнес операция: " + BizOper

 End Select

End Sub

 

 

Внешний вид (подсветка полей, изменение фона и т.п.)

======

Задача: подсветить строку в списке договоров.

 

Решение: написать текст кода в VBScript запроса по списку договоров.

 

Текст кода для смены окраски строки с крупным заказом:

 

Sub ViewOnSetColor(Column, ByRef Color) ''

 if View("Сумма")>=20000 then Color = 9104422 end if

End Sub

 

Текст кода (вторая часть) для смены цвета в поле Получатель для клиентов определенного вида:

 

Sub ViewOnSetFont(Column, ByRef Font) ''

if View("Вид клиента")=2 and Column = "Получатель" then

  font.color = 255

  font.style = 1 'Значения, которые может принимать font.style, приведены ниже.

end if

End Sub

 

Значения, которые может принимать font.style:

 

0 - обычный шрифт (по умолчанию);

 

1 - жирный;

 

2 - курсив;

 

3 - жирный курсив;

 

4 - подчеркнутый;

 

5 - подчеркнутый жирный;

 

6 - подчеркнутый курсив;

 

7 - подчеркнутый жирный курсив;

 

8 - зачеркнутый;

 

9 - зачеркнутый жирный.

 

 

Работа с Сальдо/Оборот

 

======

Программное управление выполнением запроса по Сальдо/Оборот.

 

Предположим, что есть пользовательская форма с полями ввода OrgEdit, DateEdit, ValEdit, таблицей(TbuhtaGrid) с именем Grid и запросом  с  именем View

 

 Grid.ClearNodes;  

 View.Close;  

 

Период для Сальдо/Оборот задается при помощи параметров 'BegDate' и 'EndDate'

 

 View.Param.Values['BegDate'] := DateEdit.Value;

 View.Param.Values['EndDate'] := DateEdit.Value;

 

Если параметры 'BegDate' и 'EndDate' не заданы, произойдет запрос периода через стандартный диалог.

Параметры должны быть именно не заданы(опущены), нельзя использовать View.Param.Values['BegDate'] := 0; и View.Param.Values['EndDate'] := 0;

 

 View.Param.Values['СальдоВалюта'] := 'Одна';

 View.Param.Values['СальдоВалюта значение'] := ValEdit.Value;

 View.Param.Values['СальдоСчет'] := 'Список';

 View.Param.Values['СальдоСчет список'] := '62,62/1';

 View.Param.Values['СальдоСчет Субсчета'] := True;

 

 View.Param.Values['СальдоСубконто 1 тип'] := 'Один';

 View.Param.Values['СальдоСубконто 1 значение тип'] := 'Орг';

 View.Param.Values['СальдоСубконто 1'] := 'Один';

 View.Param.Values['СальдоСубконто 1 значение'] := OrgEdit.Value;

 

 Grid.LoadData;

 

 Результат выполнения запроса  зависит от состава  его полей. Так, если в запросе задействовано поле [Субконто 2], то возможно лишь выбрать конкретное значение или список значений,

 

 View.Param.Values['СальдоСубконто 2 тип'] := 'Все';

 View.Param.Values['СальдоСубконто 2 список тип'] := 'Дог';

 View.Param.Values['СальдоСубконто 2'] := 'Все';

 View.Param.Values['СальдоСубконто 2 список'] := '5343, 5244';

 

но "свернуть" суммы по всем субконто, указав View.Param.Values['СальдоСубконто 2'] := 'Нет' - нельзя.