Окно "Заголовки счетов"

Создайте окно 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!)