Страница 2 из 3
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 15:53
edward_K
1. xlCreateExcel ( лучше CreateExcelWithTemplate ) вызываете где хотите. В данном случае в начале формы - как в примере Ирины. Вообще все ваше отличие, в том что циклы у вас другие.
Код: Выделить всё
wstr:=translatepath('%StartPath%XLS_????\')+wnmfile
if not fileexist(wstr)
{ message('ìÑΓ «íαáºτ¿¬á '+wstr)
exit ;
}
xlCreateExcelWithTemplate(wstr, True)
2. rtf и текстовая форма разные вещи - зачем вам тут rtf.
3. как попасть в ту же строку не знаю - запрос у вас сильно кривой . По идее в нем должна присутствовать ссылка спецификацию - посмотрите поля прототипа. Да и юзаmь noindex лучше в крайней случае а не по первому полю - есть индекс cattrnam+wtable+crec. Зачем вам в атрибуте ссылка на накладные?
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 16:49
Olegpro
1. Можете привести код на моем примере? У меня не компилирует, я уже в замешательстве.
2. Я видел только rtf и slk формы, поэтому и сделал вывод о том, что rtf и текстовая - одно и тоже. Как создать текстовую?
3. Как использовать в коде индекс cattrnam+wtable+creс? Noindex уже был до меня (отчет писал не я, я его исправляю). Отчет должен вызываться из акта на брак и выдавать список спецификаций акта на брак с другими параметрами (дата, кол-во и прочее), и номер, дату и сумму по накладной на возврат (в том числе по рекламации). Связь происходит только посредством того, что во внешних атрибутах в каждой спецификации каждой накладной на возврат (в том числе по рекламации) есть ссылка на соотествующий акт на брак. Если возможно, предложите лучший вариант такого запроса, я уже неделю бьюсь, может имеет смысл изменить саму логику запроса.
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 17:22
m0p3e
Если уж совсем для понимания принципов, то как-то так:
Код: Выделить всё
.LinkForm 'MNAKTBRK_SNAB_1 Prototype is 'MANUFAKTBRAK'
.NameInList 'Тест'
.var
iRow, iCol : LongInt;
.endvar
.Create view rrr
from katsopr kk,spsopr sp, attrval art
where
((
comp(KATSOPRNREC) /== art.vcomp (noindex)
and '1110' == art.wtable (noindex)
and art.crec == sp.nrec (noindex)
and '00010000000006DDh' /== art.cattrnam (noindex)
and sp.csopr == kk.nrec
and '206' == kk.vidsopr (noindex)
));
.begin
iRow := 0;
xlCreateExcel('MyReport.xls',true);
end.
.{
.{
.{
.}
.}
.{table 'rrr.art'
.begin
iRow++; iCol := 0;
iCol++; xlSetCellStringValue ( NameTovar, iRow, iCol, iRow, iCol );
iCol++; xlSetCellStringValue ( rrr.kk.nsopr, iRow, iCol, iRow, iCol );
iCol++; xlSetCellDateValue ( rrr.kk.dsopr, iRow, iCol, iRow, iCol );
iCol++; xlSetCellNumberValue ( rrr.kk.summa, iRow, iCol, iRow, iCol );
end.
.}
.}
.begin
xlKillExcel;
MNAKTBRK_SNAB_1.fExit;
end.
.endform
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 17:35
Olegpro
Спасибо большое за пример! Подредактировал и запустил. Но мне необходимо выводить так, как в моем примере. Т.е. NAME_TOVAR выводить в одном цикле, а остальные переменные во втором цикле. m0p3e, у Вас идет вывод в одном цикле, что мне не подходит к сожалению. Видимо нужно как-то совместить Ваш пример с примером Ирины.
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 17:49
m0p3e
Не совсем понимаю что в итоге должно получиться, но можно использовать для вывода матрицу.
В нее можно писать с любом порядке, но нужно указывать размер - кол-во столбцов и строк. Столбцов обычно известно, а вот для подсчета строк проще всего использовать ЛТ с последующим построчным выводом.
Код: Выделить всё
.LinkForm 'MNAKTBRK_SNAB_1 Prototype is 'MANUFAKTBRAK'
.NameInList 'Тест'
.var
iRow, iCol : LongInt;
.endvar
.Create view rrr
from katsopr kk,spsopr sp, attrval art
where
((
comp(KATSOPRNREC) /== art.vcomp (noindex)
and '1110' == art.wtable (noindex)
and art.crec == sp.nrec (noindex)
and '00010000000006DDh' /== art.cattrnam (noindex)
and sp.csopr == kk.nrec
and '206' == kk.vidsopr (noindex)
));
.begin
iRow := 0;
xlCreateExcel('MyReport.xls',true);
xlCreateMatrix(количество_строк,количество_столбцов);
end.
.{
.{
.{
.begin
xlStWriteToMatrix(столбец,строка,NameTovar);
end.
.}
.}
.{table 'rrr.art'
.begin
xlStWriteToMatrix ( столбец,строка,rrr.kk.nsopr );
xlDtWriteToMatrix ( столбец,строка,rrr.kk.dsoprl );
xlDoWriteToMatrix ( столбец,строка,rrr.kk.summa );
end.
.}
.}
.begin
xlWriteMatrixToExcel(левый_верхний_угол_столбец,левый_верхний_угол_строка);
xlKillExcel;
MNAKTBRK_SNAB_1.fExit;
end.
.endform
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:05
Olegpro
А возможно использовать для Вашего примера переменную-счетчик аналогично примеру Ирины?
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:20
Den
Olegpro писал(а):А возможно использовать для Вашего примера переменную-счетчик аналогично примеру Ирины?
что мешает использовать такую переменную ?
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:29
m0p3e
Olegpro писал(а):А возможно использовать для Вашего примера переменную-счетчик аналогично примеру Ирины?
Ну если Ирина не против...
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:36
Olegpro
Мешает неопытность, я пытаюсь, но выводится не то, что нужно.
Код: Выделить всё
.LinkForm 'MNAKTBRK_SNAB_1oleg' Prototype is 'MANUFAKTBRAK'
.NameInList 'Test'
.var
iRow, iCol : LongInt;
nomre:Double//
datre:Date//
summare:Double//
.endvar
.Create view rrr
from katsopr kk,spsopr sp, attrval art, katmc mccc//
where
((
comp(KATSOPRNREC) /== art.vcomp (noindex)
and '1110' == art.wtable (noindex)
and art.crec == sp.nrec (noindex)
and '00010000000006DDh' /== art.cattrnam (noindex)
and sp.csopr == kk.nrec
and '206' == kk.vidsopr (noindex)
and sp.cmcusl==mccc.nrec (noindex)//
and NAME_TOVAR == mccc.name//
));
.begin
iRow := 1;
xlCreateExcel('MyReport.xls',true);
end.
.{
.{
.{
.begin
xlSetCellStringValue ( Name_Tovar, iRow, 1, iRow, 1 );
iRow++;
end.
.}
.}
.begin
nomre:=0;
datre:=date(0,0,0);
summare:=0;
iRow := 0;
end.
.{table 'rrr.art'
.begin
xlSetCellStringValue ( rrr.kk.nsopr, iRow, 2, iRow, 2 );
xlSetCellDateValue ( rrr.kk.dsopr, iRow, 3, iRow, 3 );
xlSetCellNumberValue ( rrr.kk.summa, iRow, 4, iRow, 4);
iRow++;
end.
.}
.}
.begin
xlKillExcel;
MNAKTBRK_SNAB_1oleg.fExit;
end.
.endform
Что я делаю не так?
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:39
m0p3e
Как сейчас выводится и как надо?
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:41
Olegpro
В данный момент он вообще завис. Посмотрите код, видимо я неправильно использую счетчик.
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:46
Olegpro
Нашел ошибку, забыл в одном месте присвоить iRow := 1. Часть отчета, с которой сейчас работаю, вывелась верно. Буду дальше думать. Если что, буду спрашивать. Всем огромное спасибо за помощь! Я очень признателен, что не бросаете новичков!
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 18:57
Olegpro
Еще один вопросик: как я могу посчитать количество спецификаций в акте на брак, с которым работаю в отчете? Дело в том, что когда я выожу один акт на брак, то выводится все верно, но при выводе нескольких актов, первый столбец выводится верно, а второй и последующие всегда начинают выводится с первой строки, т.к. счетчик равен одному, другими словами значения затираются. Хотелось бы приравнять его к количеству строк в акте на брак, который выводился перед текущим. Возможно ли это?
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 19:05
m0p3e
Запоминаем строку в какой-нибудь переменной. И в начале нового акта iRow присваиваем не 1, а ее.
Re: ручная установка курсора в отчете excel
Добавлено: 19 фев 2014, 19:08
Olegpro
Это я понимаю. А как именно запомнить строку? Как это сделать в коде?