Аналитика
http://www.geosystema.net/forum/

XML против Reports
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2051
Страница 5 из 20

Автор:  Dmitry_Zolotar [ 19 апр 2011 11:04 ]
Заголовок сообщения:  Re: XML против Reports

kukin писал(а):
Дмитрий, пожалуйста поверхностно опешите алгоритм последовательности выполнения процедур и функций, чтоб решить как создать вторую форму 6-зем, её "клон" с измененными memo.
Как создать "клон", чтоб небыло повторяющихся имен?
Хотел узнать, можно ли не лазить в код, а "переназначать" текст клону, через диалоговое окно, по имени создаваемого memo?

Там 600 строк кода + данные (6zemcols.txt), поверхностно и в то же время доступно может не получится
Areas - массив площадей угодий
HeaderPrint - вывод "шапки" таблицы
AddMemoToHeader(j,l) - вывод ячейки "шапки" таблицы в j-й столбец, l-й уровень (с уровнем "все сложно" :))
BodyPrint - вывод "тела" таблицы
AddMemoToBody(i,j) - вывод ячейки "тела" таблицы в i-ю строку, j-й столбец

Автор:  kukin [ 19 апр 2011 17:03 ]
Заголовок сообщения:  Re: XML против Reports

Спасибо!
Цитата:
Там 600 строк кода + данные (6zemcols.txt),

6zemcols.txt довольно читабельно открывает MS Excel или Oo Calc, но там ничего менять вроде не надо.
Шпаку менять не надо, если это не "зміна цільового призначення", что делается не так часто(тут уже можно ручками в готовом отчете).
В итоге надо разобраться с именами Memo, и как запустить 2 диалоговых окна, первое до обработки кода, а второе после.

Автор:  DmitrNick [ 20 апр 2011 10:31 ]
Заголовок сообщения:  Re: XML против Reports

Хотелось бы в Поземельной книге в Экспликацию добавить строку "з них в зоні дії обмежень" с соответствующими площадями.
Можно рассчитывать на такое?

Автор:  kukin [ 20 апр 2011 21:15 ]
Заголовок сообщения:  Re: XML против Reports

DmitrNick писал(а):
в Экспликацию добавить строку "з них в зоні дії обмежень" с соответствующими площадями.Можно рассчитывать на такое?

Хорошая прозьба, правда как её решить.. вопрос затруднительный.
Слой "обмеження" больше не объединен с участками, тут надо определять по перекрытию угодья ограничением.
Изображение
Это будет "по круче" клона экспликации!

Автор:  kukin [ 21 апр 2011 13:26 ]
Заголовок сообщения:  Re: XML против Reports

Так с переименовыванием Memo я помоему начал разбиратся:
в функции function AddMemoToHeader(Col:Integer; Level:Integer):Integer;
за это отвечают :
with TfrxMemoView(HeaderMemo[Num]) do
begin
Name:='HDRMemo'+IntToStr(Num)+;
case Level of
8:if Col=1

а в procedure AddMemoToBody(Row: Integer; Col:Integer);
отвечает
with TfrxMemoView(BodyMemo[BodyMemo.Count-1]) do
begin
Name:='BodyMemo'+IntToStr(MemoCounter);
Inc(MemoCounter);

Теперь надо будет сделать "клон" кода.
Или впихнуть еще формальные параметры в функции и процедуры.
Также Bondarets Alexander подсказал насчет диалогового окна, надо в тело добавить:
dialogpage1.showmodal
где dialogpage1 имя диалогового окна (надо переобозвать это окно, чтоб язык не ломать :lol: )

Автор:  kukin [ 21 апр 2011 14:05 ]
Заголовок сообщения:  Re: XML против Reports

Дмитрий подскажите:
Все функции по экспликации проходят в теле procedure AddExplication?
Если я внесу в неё дополнительный формальный параметр Boolean (True, False) и он будет действителен для всех внутренних функций?
По этому у меня и не работает функция function AnyStrToFloat(S:string):Real; в определении периметра участка? Просто к ней нет доступа из тела программы?

Автор:  kukin [ 21 апр 2011 15:13 ]
Заголовок сообщения:  Re: XML против Reports

В общем разобрался, клон уже выводит!
проделанные изменения:
procedure AddExplication(ParentPage:TfrxReportPage; ParentMemo:TfrxMemoView; );
поменял на:
procedure AddExplication(ParentPage:TfrxReportPage; ParentMemo:TfrxMemoView; NewOldExpl:Boolean;);

Name:='BodyMemo'+IntToStr(MemoCounter)
поменял на:
begin
if NewOldExpl then
Name:='BodyMemo'+IntToStr(MemoCounter)
else
Name:='BodyMemo2'+IntToStr(MemoCounter);
end;


Name:='HDRMemo'+IntToStr(Num)+
поменял на:
begin
if NewOldExpl=true
then
Name:='HDRMemo'+IntToStr(Num)+
else
Name:='HDRMemo2'+IntToStr(Num)+;
end;


Вывод мемо:
AddExplication(Page3,ExplicationMemo1);//правда не помню какая страничка была
змаенено на:
AddExplication(Page7,ExplicationMemo1,False);
AddExplication(Page3,ExplicationMemo2,true);

Дело за диалоговым окном :wink:

Автор:  Dmitry_Zolotar [ 21 апр 2011 15:38 ]
Заголовок сообщения:  Re: XML против Reports

kukin писал(а):
Все функции по экспликации проходят в теле procedure AddExplication?

Да
kukin писал(а):
Если я внесу в неё дополнительный формальный параметр Boolean (True, False) и он будет действителен для всех внутренних функций?

Да
kukin писал(а):
По этому у меня и не работает функция function AnyStrToFloat(S:string):Real; в определении периметра участка? Просто к ней нет доступа из тела программы?
Да, но эту функцию можно целиком перенести в начало скрипта, в этом случае нужно также переменную DecDelimeter объявить как глобальную и позаботиться о ее инициализации до первого вызова AnyStrToFloat.

Автор:  kukin [ 21 апр 2011 18:20 ]
Заголовок сообщения:  Re: XML против Reports

Продолжим:
Я создал DialogPage2 (диалоговое окно) и в нем 4 элимента EditA, EditB, EditV, EditG(которые отвечают за столбцы А, Б, В, г)
case StringPart(SL[Col],1,chr(9)) of
'А':if NewOldExpl then
// ячейка А, если NewOldExpl=True, то
Begin // открываем первый раздел (который существовал до изменений)
if XMLMode //проверка режима дигиталс-регистратор
then
Memo.Text:=SEF(XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/ProprietorCode'),'KZ.txt')
//присваивание Мемо значенияиз списка KZ.txt для ХМЛ
else Memo.Text:=SEF(Param('KZ',Row),'KZ.txt'); //иначе присваиваем значения из списка KZ.txt для ин4
end //закрываем первый раздел
else //иначе (если NewOldExpl=False)
begin //открываем второй раздел (для работы с диалоговым окном)
EditA.text:=SEF(XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/ProprietorCode'),'KZ.txt'); //в мемо EditA назначаем подсказку (номер рядка из фактического обменника)
EditB.text:=PrepareXMLNMList(',');//и также назначаем остальным элементам EditB, EditV, EditG значения подсказок
EditV.text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/ProprietorCode');
EditG.text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/CategoryPurposeInfo/Purpose');
dialogpage2.showmodal;
//терепь выводим диалог на экран, с подсказками, который можно править. Для диалогового окна задаем в свойствах Visible False, чтоб не віводить окошко по окончанию обработки кода.
Memo.Text:=EditA.text //заносим в в мемо экспликации значение из окна диалогового окна
end;//закрываем второй раздел
'Б':if NewOldExpl then // Запускаем ячейку Б, все делается аналогично описанному выше, только не надо присваивать каждый раз подсказку и выводить диалоговое окно, так как делается это один раз
Begin
if XMLMode
then Memo.Text:=PrepareXMLNMList(',')
else
Memo.Text:=' '+Param('NM',Row);
HAlign:=haLeft;
end
else
Memo.Text:=EditB.text;
'В': if NewOldExpl then
Begin
if XMLMode
then Memo.Text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/ProprietorCode')
else Memo.Text:=Param('KZ',Row);
end
else
Memo.Text:=EditV.text;
'Г':if NewOldExpl then
Begin
if XMLMode
then Memo.Text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/CategoryPurposeInfo/Purpose')
else Memo.Text:=Param('CV',Row);
end
else
Memo.Text:=EditG.text;

Сперва выводит окно, потом идет обработка и вторая экспликация вылазит так как надо!
Вот вам и 600 строк кода, в которых я не шибко разобрался(хотя общую схему понял).
Я вынужден отказаться от поддержки ин4, у меня есть другой (старый) дигиталс для этого. Иначе шаблон становится слишком громоздким и не читабельным, также откажусь от кода регистратора. Мне оно явно не надо.
Цитата:
Да, но эту функцию можно целиком перенести в начало скрипта, в этом случае нужно также переменную DecDelimeter объявить как глобальную и позаботиться о ее инициализации до первого вызова AnyStrToFloat.

Пока выставил в региональных настройках символ точки, как разделителя. И убрал пробелы в цифровых значениях.
Подумаю об этом после "облегчения" шаблона.

Автор:  fair_18 [ 21 апр 2011 20:57 ]
Заголовок сообщения:  Re: XML против Reports

а как насчёт каталога координат под XML в генераторе отчётов? У меня почему то не пашет. Есть ли пример шаблона?

Автор:  kukin [ 22 апр 2011 08:04 ]
Заголовок сообщения:  Re: XML против Reports

fair_18 писал(а):
а как насчёт каталога координат под XML в генераторе отчётов? У меня почему то не пашет. Есть ли пример шаблона?

Шаблон для ин4? Если так, то и не удивительно :lol:
Вы меня опередили, вот хотел за это браться, да еще первые циферки "по обрубать", чтоб под ДСК не подходил.

Автор:  fair_18 [ 22 апр 2011 08:25 ]
Заголовок сообщения:  Re: XML против Reports

Факт в том что под ин4 он есть, а как его переделать по XML ? :roll:

Автор:  kukin [ 22 апр 2011 11:47 ]
Заголовок сообщения:  Re: XML против Reports

fair_18 писал(а):
Факт в том что под ин4 он есть, а как его переделать по XML ?

Чтоб каталог координат заработал в отчете, надо или вернуть хоть часть старого буфера обмена (как было в ин4),
или писать все заново.
Самый простой метод на данный момент, это получать каталог из DMF.

Автор:  kukin [ 20 июн 2011 19:51 ]
Заголовок сообщения:  Re: XML против Reports

Призрак ИН4 все еще "ходит", ну не могут без него наши "коллеги" в регистрации, акты "не печатаются", планы "не формируются"...

И опять руки потянулись к шаблонам, по причине создания полной совместимости ин4 и хмл.
Надо заметить, что точность у ин4 и у хмеля разные, по этому надо-бы в настройках ин4 шаблонов выставить точность хотяб до 3 знаков (сам же с 2008 года использую обменники с 4мя знаками, до сих пор никто за руку не поймал, дурного слова не сказал :D )
Поскольку созданный шаблон базировался на "Поземельній книзі version 1.0" которая создана в конце марта, у которой не все возможности были "заточены" под ин4, да и у меня изначально цель не стояла в создании универсального шаблона, по этому не дополнял шаблон кодами для ИН4.
Возник такой вопрос Дмитрию (Dmitry_Zolotar), изменялись ли шаблоны, оттачивались ли они под ИН4? Если да, то какие, и можно ли коротко, что было сделано?
Самостоятельные ковыряния шаблонов займут еще довольно много времени, которого и без этого вечно не хватает.

Почему то у меня не работает строка
Memo.Text:=SEF(Param('KZ',Row),'KZ.txt');
выводит полную строку и по этому не сравнивает по KZ.txt
зато такой "изврат канает" Memo.Text:=SEF(copy(param('KZ'),1,2),'KZ.txt');
в каком случае используется Param('KZ',Row), не понял описания этой функции в дереве данных(какая разница между Param('KZ',Row) и Param('KZ') )?

Где "закопан" код, который отвечает за вывод столбца "Код цільового використання" в экспликацию, для ИН4 столбец не выводится

Автор:  Dmitry_Zolotar [ 21 июн 2011 08:07 ]
Заголовок сообщения:  Re: XML против Reports

kukin писал(а):
Почему то у меня не работает строка
Memo.Text:=SEF(Param('KZ',Row),'KZ.txt');
выводит полную строку и по этому не сравнивает по KZ.txt
зато такой "изврат канает" Memo.Text:=SEF(copy(param('KZ'),1,2),'KZ.txt');

Может тип параметра 'KZ' не список, а строка? Тогда вся строка попадет и в репортс.

kukin писал(а):
в каком случае используется Param('KZ',Row), не понял описания этой функции в дереве данных(какая разница между Param('KZ',Row) и Param('KZ') )?

Второй аргумент функции Param - номер участка (от 1 до ObjCount), если он не указан явно, то он равен 1, то есть параметры извлекаются из первого участка.
Param('KZ') = Param('KZ',1)
Есть еще третий аргумент функции: Param('IDxxx',I,J) - извлекает параметр из J-го угодья I-го участка, где 1<=I<=ObjectCount, 1<=J<=ChildCount(I);
kukin писал(а):
Где "закопан" код, который отвечает за вывод столбца "Код цільового використання" в экспликацию, для ИН4 столбец не выводится

строка поиска в коде 'Г': (с апострофами и двоеточием)

Страница 5 из 20 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/