Редактирование функции и шаблона на примере шаблона "ценники"
В этой статье мы рассмотрим как внести изменения в шаблон и добавить соответствующие поля в функцию, на примере шаблона "ценники". Для начала необходимо точно сформулировать, какие поля мы хотим добавить. В нашем случае, это колонки "дата" и "номер" из приходной накладной по данному товару. Для того, чтобы добавить данные колонки нам нужно узнать название этих полей в документе. Для этого мы открываем документ (в нашем случае это приходная накладная), и нажав клавишу F10 вызываем Мастер установок. Здесь мы переключаемся на закладку "колонки" и видим таблицу из двух столбцов. Левый -- название колонки, правый -- поле. Сверившись, мы выясняем, что "Дата" -- это DOCUMENTDATE, а "Номер" -- NUMBER. Закрываем окно мастера установок. Далее, для правки шаблона намнеобходимо открыть редактор скрипт-объектов. ДЛя этого в списке интересующих нас документов (внашем случае это приходные накладные) мы нажимаем на значек принтера и выбираем пункт "редактор скрипт-объектов". И сейчас у нас открывается окно редактора, где мы будем вносить все необходимые изменения. для начала, в левой части редактора у нас открыто окно ПРоводник (если вдруг оно не открылось автоматически, то мы можем открыть его сами, выбрав пункт "проводник" в меню "Окно"). В проводнике мы вибираем интересующий нас пункт -- Ценники -- и открываем его двойным щелчком. В открывшемся окне, мы переключаемся на закладку Основная функция, и чуть ниже -- закладка "Скрипт". Просматривая скрипт выясняем, что в нем уже фигурирует поле documentdate, но вот поля NUMBER нет. следовательно, мы добавляем поле NUMBER, везде вслед за полем DOCUMENTDATE по его образу и подобию. Единственно, что следует учесть, это то, что выражение AsDateTime задает формат даты, который не очень подойдет полю NUMBER, поэтому это выражение мы будем заменять на AsString. В конечном счете, после внесения всех правок мы должны прийти к следующему виду функции:
function RetailInv_rp_AddwBill_Order147050326_88538865(OwnerForm, CountOnQuantity)
set gdcInvDocument = OwnerForm.gdcObject
if gdcInvDocument.IsEmpty then
call Exception.Raise("Exception", "Пустой набор данных")
end if
BaseQueryList.Clear
set CustomerSQL = BaseQueryList.Query(BaseQueryList.Add("CustomerSQL", 0))
CustomerSQL.SQL = _
"select * from GD_V_company where id = " + Cstr(IBLogin.Companykey)
CustomerSQL.Open
id = gdcBaseManager.GetIDByRUIDString("147006033_63934951")
set t = BaseQueryList.Query(BaseQueryList.Add("T", 0))
t.SQL = "SELECT gr.lb, gr.rb from " & _
"gd_goodgroup gr " & _
"where gr.id= " + CStr(id)
t.Open
set q1 = BaseQueryList.Query(BaseQueryList.Add("GDCINVDOCUMENTLINE", 0))
q1.SQL = " SELECT " + _
" Z.DOCUMENTDATE, INVLINE.QUANTITY, Z.NUMBER, " + _
" G.NAME AS GOODNAME, " + _
" G.ALIAS AS GOODALIAS, " + _
" V.NAME, " + _
" CARD.USR$INV_COSTRETAILNCU AS TO_USR$INV_COSTRETAILNCU " + _
" FROM GD_DOCUMENT Z " + _
" LEFT JOIN USR$INV_ADDWBILLLINE INVLINE ON ( Z.ID = INVLINE.DOCUMENTKEY ) " + _
" LEFT JOIN INV_CARD CARD ON ( CARD.ID = INVLINE.FROMCARDKEY ) " + _
" LEFT JOIN GD_GOOD G ON ( G.ID = CARD.GOODKEY ) " + _
" LEFT JOIN GD_GOODGROUP gg on g.GROUPKEY = GG.ID " + _
" LEFT JOIN GD_VALUE V ON ( G.VALUEKEY = V.ID ) " + _
" LEFT JOIN AC_ACCOUNT CARD_USR$INV_ACCOUNTKEY ON ( CARD.USR$INV_ACCOUNTKEY = CARD_USR$INV_ACCOUNTKEY.ID ) " + _
" LEFT JOIN GD_DOCUMENT CARD_USR$INV_ADDLINEKEY ON ( CARD.USR$INV_ADDLINEKEY = CARD_USR$INV_ADDLINEKEY.ID ) " + _
" LEFT JOIN GD_CONTACT CARD_USR$INV_PROVIDER ON ( CARD.USR$INV_PROVIDER = CARD_USR$INV_PROVIDER.ID ) " + _
" WHERE not (GG.LB >= :lb AND GG.RB <= :rb) and Z.PARENT = " + gdcInvDocument.FieldByName("id").AsString
q1.ParamByName("LB").AsInteger=t.FieldByName("lb").Asinteger
q1.ParamByName("rB").AsInteger=t.FieldByName("rb").Asinteger
q1.Open
set q11 = BaseQueryList.Query(BaseQueryList.Add("GDCINVDOCUMENTLINE1", 1))
call q11.AddField("DOCUMENTDATE", "ftDate", 0, 0)
call q11.AddField("NUMBER", "ftString", 20,0)
call q11.AddField("GOODNAME", "ftString", 60, 0)
call q11.AddField("GOODALIAS", "ftString", 20, 0)
call q11.AddField("NAME", "ftString", 20, 0)
call q11.AddField("TO_USR$INV_COSTRETAILNCU", "ftBCD", 0, 0)
q11.Open
while not q1.EOF
if CountOnQuantity then
for i = 0 to Int(q1.FieldByName("quantity").AsCurrency) - 1
q11.Append
q11.FieldByName("documentdate").AsDateTime = _
q1.FieldByName("documentdate").AsDateTime
q11.FieldByName("NUMBER").AsString=_
q1.FieldByName("NUMBER").AsString
q11.FieldByName("goodname").AsString = _
q1.FieldByName("goodname").AsString
q11.FieldByName("goodalias").AsString = _
q1.FieldByName("goodalias").AsString
q11.FieldByName("name").AsString = _
q1.FieldByName("name").AsString
q11.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency = _
q1.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency
q11.Post
next
else
q11.Append
q11.FieldByName("documentdate").AsDateTime = _
q1.FieldByName("documentdate").AsDateTime
q11.FieldByName("NUMBER").AsString=_
q1.FieldByName("NUMBER").AsString
q11.FieldByName("goodname").AsString = _
q1.FieldByName("goodname").AsString
q11.FieldByName("goodalias").AsString = _
q1.FieldByName("goodalias").AsString
q11.FieldByName("name").AsString = _
q1.FieldByName("name").AsString
q11.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency = _
q1.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency
q11.Post
end if
q1.Next
wend
set RetailInv_rp_AddwBill_Order147050326_88538865 = BaseQueryList
end function
Закончив с функцией переходим к закладке "Шаблон". При открытии закладки в поле ниже появляются четыре кнопки. Нас интересует кнопка "редактировать шаблон".
Итак, перед нами шаблон печатной формы "ценники". Прежде всего, поскольку мы хотим, чтобы данные по номеру и дате накладной печатались на обороте ценника, то нам необходимо добавить вторую страницу. Что мы и делаем, щелкнув правым кликом по закладке Стр. 1 и выбрав пункт "добавить страницу". Теперь переключаемся на эту вторую страницу, и в инспекторе указваем в строке Colums 3. Таким образом, мы разбиваем лист на три колонки. Далее, нам нужно сориентироваться по размерам ценника, чтобы его лицевая и обратная сторона совпадали между собой. Для этого на первом листе мы выделяем ценник целиком, копируем его и вставляем на вторую страницу.
Теперь, у нас есть размеры ценника, но нет его заполнения. поэтому, мы удаляем все его внутренние поля и вместо них добавляем свои. Для добавления поля, мы нажимаем в левой части окна на кнопку "вставить прямоугольник с текстом" и выбираем, куда его вставить. Поле будет вставляться от положения курсора вниз и вправо. Как только мы его вставим, у нас открывается редактор текста, чтобы указать заполнение поля. Чтобы в шаблоне выводились соответствующие значения, нам нужно нажать кнопку " вставка поля БД". Открывается окно для выбора поля. В левой части этого окна мы выбираем группу -- GDCINVDOCUMENTLINE -- а в правой поле -- соотв DOCUMENTDATE и NUMBER. Выбрав поля, нажимаем кнопку ОК в верхней части окна и возвращаемся в режим Дизайнер. Здесь, зацепив мышкой за уголок поля мы растягиваем его до нужных нам размеров. Для того, чтобы добиться более эстетического вида мы можем внести нужные нам данные в разных полях и разместить их в шаблоне так, как нам нужно.
Теперь, осталось лишь сохранить изменения и выйти из шаблона.