Проблеми з розробкою шаблонів DMT з XML

Хто мав справу з роботою з XML, а конкретніше хто розробляв хоч якісь шаблони .DMT. Допоможіть розробити шоблон, щоб викачував інформацію з параметрів XML

В мене можете запитати.

До недавна я використовував шаблони для формування ПЛАНЧИВКІВ такого типу, показано на малюнку.
Чи можливо якимось чином його переробити, щоб він вибирав інформацію про власника, адрес ділянки, та суміжників із слоїв XML.
Дуже вдячний за допомогу.

розпакуйте вкладення в папку Digitals\Templates
запустіть ged.exe
відкрийте xml-файл
помітьте ділянку
натисніть Сервис-Документы-
відредагуйте план та натисніть “Продолжить”
CadPlanA4.dmt.zip (34.7 KB)

Дуже дякую, та воно шось в мене не працює. Але я знайшов інший вихід з даної ситуації.

Потрібен новий ged.exe та деякі файли-довідники з дистрибутиву Digitals, щоб все працювало.

после нажатия “продолжить” выдает ошибку

Digitals

Cannot create file D:\Digitals\Pictures\CP0520488600010010088.wmf.

ОК

сканач был дестрибютив с поста выше

Создайте папку Digitals\Pictures

а где взять 6ZemLB.txt ? Не удается найти указанный файл

Извиняюсь, забыл про этот файл, его нужно поместить в папку Digitals\Templates
6ZemLB.txt (7.47 KB)

Допоможіть будь-ласка. Не знаю як виконати скрипт, в “генераторе отчетов” щоб робило скорочення з Попов Петро Петрович на Попов П.П. Буду дуже вдячний за допомого. Або підкажіть функцію яка таке можк зробити.(Я формую звіт з XML)

Найпростіший варіант
if S=‘Попов Петро Петрович’ then S:=‘Попов П.П.’; //це шутка

Якщо за основу взятий шаблон кадплану викладений мною, то можно модифікувати функцію PrepareNMList, яка повертає список власників розділений роздільником.

Строки
if IsNodeExists(PPath+‘/ProprietorInfo/Authentication/NaturalPerson’)
then Result:=Result+
XPath(PPath+‘/ProprietorInfo[’+IntToStr(I)+‘]/Authentication/NaturalPerson/FullName/LastName’)+’ ‘+
XPath(PPath+’/ProprietorInfo[‘+IntToStr(I)+’]/Authentication/NaturalPerson/FullName/FirstName’)+’ ‘+
XPath(PPath+’/ProprietorInfo[‘+IntToStr(I)+’]/Authentication/NaturalPerson/FullName/MiddleName’)+IIF(I<>N,Delimeter+’ ‘,’‘)
else Result:=Result+XPath(PPath+’/ProprietorInfo[‘+IntToStr(I)+’]/Authentication/LegalEntity/Name’)+IIF(I<>N,Delimeter+’ ‘,’')

замінити на

if IsNodeExists(PPath+'/ProprietorInfo/Authentication/NaturalPerson')
  then Result:=Result+
            XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/LastName')+' '+
            [b]Copy([/b]XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/FirstName')[b],1,1)+'.'[/b]+
            [b]Copy([/b]XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/MiddleName')[b],1,1)+'.'[/b]+IIF(I<>N,Delimeter+' ','')
  else Result:=Result+XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/LegalEntity/Name')+IIF(I<>N,Delimeter+' ','')

Дякую, за підсказку, дуже допомогли.

Ще одне запитаннячко, а де можна почерпнути знання про функції та їх опис, що використовуються для розробки звітів.

Для початку продивіться опис функцій в генераторі звітів. Синтаксис такий як в Паскалі.

Підскажіть будь ласка який потрібно покласти розділювач, щоб текст виводився з нового рядка, а не через коми чи пробіл.

chr(13)

Дякую…

Я не міг зробити ОПИС МЕЖ для шаблону REPORT з XML, а потім до мене прийшла муза і я видав таке:

begin
ALFAVIT := ‘А Б В Г Д Е Є Ж З И І Ї К Л М Н О П Р С Т’;

AL := NodesCount('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits','AdjacentUnitInfo');  
  BYK:='';
              
  if AL>=1
  then begin
  for B:=1 to AL do
  BYK:= byk+ 'від '+ Copy(StringPart(ALFAVIT,B,' '),1,1)+' '+ 'до ' + IIF(B<>AL,Copy(StringPart(ALFAVIT,B+1,' '),1,1),'А') +' землі '+XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits/AdjacentUnitInfo['+IntToStr(B)+']/Proprietor/NaturalPerson/FullName/LastName')+' '+              
                     XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits/AdjacentUnitInfo['+IntToStr(B)+']/Proprietor/NaturalPerson/FullName/FirstName')+' '+                       
                     XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits/AdjacentUnitInfo['+IntToStr(B)+']/Proprietor/NaturalPerson/FullName/MiddleName')+''+
                     XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits/AdjacentUnitInfo['+IntToStr(B)+']/Proprietor/LegalEntity/Name')+''+IIF(B<>AL,chr(13),'')
   end;                                        
end;            

можливо комусь пригодиться

Работоспособность вашего кода не проверял. Но, очевидно, что для повышения читаемости лучше использовать дополнительную переменную, хранящую путь для XPath запроса.

[code]const
ALFAVIT := ‘А Б В Г Д Е Є Ж З И І Ї К Л М Н О П Р С Т’;

begin

AL := NodesCount(‘InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits’,‘AdjacentUnitInfo’);

BYK:=‘’;

for B:=1 to AL do
begin

Proprietor := ‘InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/AdjacentUnits/AdjacentUnitInfo[’+IntToStr(B)+‘]/Proprietor/’;

BYK := byk + ‘від ‘+ Copy(StringPart(ALFAVIT,B,’ ‘),1,1)+ ’ до ’ + IIF(B<>AL,
Copy(StringPart(ALFAVIT,B+1,’ ‘),1,1),‘А’) +’ землі ‘+
XPath(Proprietor + ‘NaturalPerson/FullName/LastName’)+’ ‘+
XPath(Proprietor + ‘NaturalPerson/FullName/FirstName’) +’ ‘+
XPath(Proprietor + ‘NaturalPerson/FullName/MiddleName’) + ’ ’ +
XPath(Proprietor + ‘LegalEntity/Name’)+IIF(B<>AL,chr(13),’’)

end;

end; [/code]

Кроме того, желательно проверять или это NaturalPerson или LegalEntity и выдавать имя из соответствующих тегов (я бы вынес это в отдельную функцию). В текущей реализации для LegalEntity у вас перед названием окажутся 3 лишних пробела.