Окно "Заголовки счетов"
Создайте окно w_account путем наследования из окна w_base_dw. Установите свойство dataobject для объекта dw_sheet в dw_account.
Объявление переменных
Date idt_beg = today() Date idt_end = today()
Скрипт ue_retrieve_data
dw_sheet.retrieve(idt_beg, idt_end)
Скрипт open
Предполагается, что программой выписывается достаточно большое количество счетов на оплату, поэтому выводить весь список счетов нецелесообразно. Обновляться информация в окне будет по запросу пользователя, т.е. скрипт open нужно перекрыть.
Откройте в окне Script художника DataWindow скрипт open и нажмите на нем правую кнопку мыши. Отключите в появившемся меню Extend Ancessor Script.
Скрипт ue_save
Т.к. поле id_account является уникальным ключом, и мы не можем использовать специфические свойства полей конкретных баз данных (как, например, последовательности Oracle), мы должны заполнить это поле при сохранении данных.
Для этого нам придется изменить скрипт события ue_save - так же, как и в окне "Список клиентов". Для того, чтобы скрипт события ue_save окна w_clients был вызван первым, мы должны перекрыть им скрипт родительского окна. Это можно сделать, нажав правую кнопку мыши на окне Script художника Window на скрипте события ue_save и сняв установку Extend Ancessor Script. После этого запишем следующий скрипт:
long ll_rowcount long ll_row double ld_account ll_rowcount = dw_sheet.rowcount() if ll_rowcount > 0 then select max(id_account) + 1 into :ld_account from account; if isnull(ld_account) then ld_account = 1 end if for ll_row = 1 to ll_rowcount if isnull(dw_sheet.getitemnumber(ll_row, 'id_account')) then dw_sheet.setitem(ll_row, 'id_account', ld_account) ld_account ++ end if next call super:: ue_save
Скрипт ue_dn_enter объекта dw_sheet
Добавьте событие ue_dn_enter объекта dw_sheet. Event ID события - pbm_dwnprocessenter (нажатие клавиши Enter).
Скрипт события:
w_account_item lw_account_item long ll_row double ld_account ll_row = dw_sheet.getrow() if ll_row = 0 then return ld_account = dw_sheet.getitemnumber(ll_row, 'id_account') opensheetwithparm(lw_account_item, ld_account, parent, 0, Layered!)
Скрипт события ue_account_item
dw_sheet.postevent('ue_dn_enter')
Т.е. окно "Спецификация счета" теперь можно вызвать как из меню, так и нажав клавишу Enter на интересующем нас счете.
Скрипт ue_view
Скрипт будет вызывать окно с параметрами для показа заголовков счетов. Параметрами являются даты начала и окончания периода. Переменные для этого объявлены, как переменные окна с доступом public по умолчанию.
Скрипт окна:
//w_period lw_period //openwithparm(lw_period, this) //if message.stringparm = 'OK' then postevent('ue_retrieve_data')
Окна w_period пока не существует, поэтому скрипт заключен в комментарии. Окно w_period объявлено как модальное (responce), открывается функцией open (в отличие от opensheet для немодальных окон) и с параметром this, что в данном случае означает само окно w_account.. Возвращаемое значение окна принимается через объект message.
Запись вызова окна в базовое меню
Откройте базовое меню m_rad_frame. Добавьте пункт "Заголовки счетов" в пункт меню "Счета" базового меню. Наименование пункта меню m_head_accounts. В скрипте события clicked пункта "Заголовки счетов" напишите следующий скрипт:
w_account lw_account; opensheet(lw_account, parentwindow, 0, Layered!)