메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

회계 감사에 적합한 이미지를 사용하여 종이 없는 사무실 구현

XML과 PHP를 사용하여 회계 문서화 강화

Colin Beckingham, Writer and Researcher, Freelance
Colin Beckingham is a freelance researcher, writer, and programmer who lives in eastern Ontario, Canada. Holding degrees from Queen's University, Kingston, and the University of Windsor, he has worked in a rich variety of fields including banking, horticulture, horse racing, teaching, civil service, retail, and travel and tourism. The author of database applications and numerous newspaper, magazine, and online articles, his research interests include open source programming, VoIP, and voice-control applications on Linux. You can reach Colin at colbec@start.ca.

요약:  관리자는 감사자에게 지원 문서를 정기적으로 제공합니다. 문서 기반 사무실에서는 이러한 작업이 불편하고 어렵습니다. XML을 PHP 및 이미지 함수와 함께 사용하여 감사 프로세스를 쉽게 처리하면서 다수의 관리자에게 효과적이고 포괄적인 인덱싱을 지원하는 방법을 살펴봅니다.

기사 게재일:  2011 년 8 월 22 일
난이도: 중급 원문:  보기 PDF:  A4 and Letter (57KB | 14 pages)Get Adobe® Reader®
페이지뷰:  1212 회
의견:  


회사의 감사자가 문서 기반 사무실에 와서 해당 계정에 표시되어 있는 트랜잭션에 해당하는 지원 문서를 요청한다고 가정한다. 이러한 요청은 문서가 적고 문서 레코드에서 문서를 쉽게 찾을 수 있는 경우에는 아무런 문제가 되지 않는다. 그러나 감사는 철저하게 진행되어야 하고 감사를 받을 만한 트랜잭션은 주로 추적하는 데 시간이 많이 소요되는 많은 문서가 포함된 복잡한 트랜잭션이다. 이렇게 복잡하기 때문에 다양한 증거가 사라질 가능성이 있다. 문서 하나를 추적하지 못해도 전체 프로세스는 의심을 받게 된다.

자주 사용하는 약어

  • HTML: Hypertext Markup Language
  • PDF: Portable Document Format
  • XML: Extensible Markup Language

문서 기반 사무실에서 문서를 추적할 수 없게 되는 한 가지 원인은 경쟁적이고 복잡한 인덱싱 시스템 때문이다. 한 관리자는 문서를 하나의 파일에 저장하려고 하는 반면에 따른 관리자는 같은 문서를 다양한 파일에 저장하려고 한다. 이러한 두 부류의 관리자가 만족하도록 문서를 중복해서 저장하면서 대용량 스토리지에 대한 필요성이 증가하고 있다. 또한, 어느 것이 원본이고 권위 있는 문서인지 확인하기 위한 논쟁이 발생한다.

매우 전문적인 회계 시스템에서는 빠르고 쉽게 검색할 수 있도록 관련 문서의 세부사항을 트랜잭션 세부사항과 함께 시스템에 저장한다. 이러한 기능이 없는 시스템에서는 여전히 기술이 차선책이 될 수 있다. 이 기사에서는 이러한 유형의 감사를 지원하는 데 필요한 구조 및 검색 메커니즘을 XML과 PHP를 사용하여 제공하는 방법을 탐색한다.

감사 관점에서 바라본 예제 트랜잭션

트랜잭션을 감사하는 과정과 연관된 문서는 다음과 같은 패턴을 따른다.

  • 계약에 대한 의사결정이 포함된 이사회 결의안
  • 계약 초안 및 토론 내용
  • 다음과 같은 둘 이상의 문서
    • 공급원을 하나만 채택한 사유를 관리자가 정당화하는 문서
    • 규정된 제공업체에서 획득한 여러 가지 견적서
    • 제출된 견적서를 선택한 사유를 관리자가 정당화하는 문서
  • 보충 계약이 첨부된, 낙찰자의 서명이 있는 계약서
  • 송장 및 부속 서류
    • 작업 완료 증명서
    • 취소된 수표 또는 기타 지불 증명서 및 영수증
  • 최종 작업 완료 증명서
  • 지불된 세금 관련 문서

이 경우에는 시행 부서에서 펀드 확장에 대한 의사결정을 한다. 관리자는 요구사항을 이행하는 계약서를 작성한 후, 입찰자를 모집하여 입찰 프로세스를 시작한다. 이사회의 계약 규칙에 따라 공급업체가 선정되면 계약서에 서명하게 된다. 지불은 작업 완료 증명서를 요청한 후에 이루어지며 지불을 할 때마다 해당 계정에는 고유한 트랜잭션 기록이 남게 된다. 각 단계에서는 실제 문서나 관리자가 감사자에게 제시할 수 있는 권위 있는 대체 자료가 필요하다.

작은 사무실에서는 손으로 작성한 장부나 문서 세부사항이 포함된 파일이 매우 유용하다. 그러나 감사를 받는 상황에서 생각해 보면 기술이 빠르고 확장 가능하다는 장점이 있다.


XML 문서 데이터베이스

XML을 백엔드로 사용하지 않아도 되지만, XML 문서는 단지 텍스트 파일이기 때문에 매우 분명하며 용량이 작은 경우에는 가독성이 우수하다. 목록 1에 있는 코드를 살펴보자.


목록 1. XML 백엔드

<?xml version="1.0" encoding="UTF-8"?>
<auditList>
  <projects>
    <project projid="xyz987">
      <boardMinute>2011-04-07-xxxx</boardMinute>
      <draftContractA>2011-04-07-xxxx</draftContractA>
      <contractA>2011-04-07-xxxx</contractA>
      <contractB>2011-04-08-xxxx</contractB>
      <contractC>2011-04-09-xxxx</contractC>
      <workCertA>2011-04-11-xxxx</workCertA>
      <workCertB>2011-04-11-xxxx</workCertB>
      <workCertC>2011-04-11-xxxx</workCertC>
    </project>
  </projects>
  <transactions>
    <transaction accid="abc123" projid="xyz987">
      <soleSourceAuth></soleSourceAuth>
      <invoice>2011-04-11-xxxx</invoice>
      <cheque>2011-04-21-xxxx</cheque>
    </transaction>
    <transaction accid="def123" projid="xyz987">
      <sourceAuth>2011-04-07-xxxx</sourceAuth>
      <invoice>2011-04-11-xxxx</invoice>
      <cheque>2011-04-21-xxxx</cheque>
    </transaction>
    <transaction accid="ghi123" projid="xyz987">
      <sourceAuth>2011-04-07-xxxx</sourceAuth>
      <invoice>2011-04-11-xxxx</invoice>
      <cheque>2011-04-21-xxxx</cheque>
    </transaction>
  </transactions>
</auditList>

목록 1에 있는 마크업은 회계 부서와 프로젝트 관리자 모두에게 유용한 기본적인 시스템을 기술한다. auditList 요소는 루트 요소이고 이 요소에는 하위 요소가 두 개(projectstransactions) 있다. 이러한 각 하위 요소는 동일한 이름의 부서와 관련된 세부사항이 들어 있는 컨테이너이다. 원래의 실제 문서는 날짜별로 분리된 바인더를 사용하여 유지한다. 문서가 바인더에 추가되면 문서에는 고유한 연속 번호가 주어진다. 모든 단일 문서를 날짜와 번호를 기반으로 쉽게 찾을 수 있다. 이 프로젝트 작업에서는 독립적인 세 명의 계약자를 모집하되, 한 명은 수의계약으로 다른 두 명은 공개입찰을 통해 모집한다. 프로젝트 관리자는 프로젝트 전체를 기반으로 생각하므로 모든 계약을 동일한 레코드의 일부로 본다. 회계 관리자는 트랜잭션 기반 목록을 필요로 하므로 회계 관리자의 레코드는 단지 하나의 지불만을 참조한다. accid 속성은 회계 시스템에서 해당 트랜잭션에 지정하는 고유한 트랜잭션 ID 번호이다. 이 ID는 회계 시스템과 파일 시스템을 서로 연결하는 역할을 한다. 또한, 트랜잭션에는 프로젝트 관리자 목록과 관련된 속성(projid)이 있으며, 이 속성은 역방향으로 작동하여 프로젝트 레코드를 트랜잭션에 연결할 수 있게 한다.

참고: 계약 A를 수의계약으로 할 수 있게 허가하는 코드는 빠져있는데, 이렇게 하면 감사자에게 경고를 받게 된다. 이 시점에서는 이러한 허가 코드를 공백으로 남겨 두어 확인용 트랩으로 역할을 하게 했다.

목록이 짧으면, 기술을 더 사용하지 않고도 파일을 시각적으로 읽고 해석할 수 있다. 더 확장된 목록에서는 정보를 효과적으로 검색할 수 있는 몇 가지 수단이 필요하다. 이러한 기능을 수행하는 방법은 여러 가지가 있는데, 한 가지 방법은 PHP와 SimpleXML 함수 라이브러리를 사용하는 것이다.


PHP 문서 검색

회계 관점에서 보면 목록의 핵심은 회계 시스템에서 트랜잭션에 지정하는 고유 ID이다. 목록 2에 있는 코드는 필터가 지정된 경우에는 목록에서 모든 트랜잭션을 가져오고 그렇지 않은 경우에는 관련 프로젝트 정보와 함께 트랜잭션 하나만을 가져오도록 계획되어 있다.


목록 2. 회계 쿼리

<?php
$transFilter = $argv[1];
$xml = simplexml_load_file("backend.xml");
echo "=====\nSummary for accounts section\n";
if (isset($transFilter)) {
  echo "=====\nTransaction filter $transFilter\n=====\n";
} else {
  echo "=====\nNo filter - showing all transactions\n=====\n";
}
foreach ($xml->transactions->transaction as $t) {
  if (!$transFilter or $t['accid'] == $transFilter) {
    if ($t['accid'] == $transFilter) {
      $projectFilter = trim($t['projid']);
    }
    echo "Detail for transaction ".$t['accid']."\n";
    foreach ($t->children() as $tc) {
      echo $tc->getName()." : ".$tc."\n";
    }
  }
}
if (isset($projectFilter)) {
  echo "=====\nAssociated project $projectFilter\n=====\n";
  foreach ($xml->projects->project as $p) {
    if ($p['projid'] == trim($projectFilter)) {
      echo "Detail for project ".$p['projid']."\n";
      foreach ($p->children() as $pc) {
          echo $pc->getName()." : ".$pc."\n";
      }
    }
  }
}
echo "=====\nEnd of search\n=====\n";
?>

목록 2에 있는 코드는 먼저, $argv 배열에 전달되는 매개변수를 검색한다. 매개변수는 하나가 있을 수도 있고 없을 수도 있다. 다음에는 추가로 처리하기 위해 목록 1에 있는 XML 코드를 오브젝트에 로드한다. 쿼리는 회계 섹션에서 제출되기 때문에 트랜잭션 섹션으로 바로 이동하며 필터의 존재 여부에 따라 루프를 사용하여 모든 트랜잭션을 처리하거나 요청된 ID와 일치하는 트랜잭션을 검색한다. 올바른 accid를 찾으면 나중에 참조할 수 있도록 연관된 projid나 project 속성을 변수에 저장한다. 특정 트랜잭션이 요청되는 경우에는 두 번째 루프가 작동하여 연관된 프로젝트 세부사항을 조사한 후에 인쇄한다.

이 스크립트는 명령행에서 다음과 같은 방식으로 호출된다. 여기서 acct.php는 스크립트 이름이고 def123은 회계 시스템에서 얻은 트랜잭션 ID이다.

> php acct.php def123

목록 3에는 목록 1에 있는 데이터를 대상으로 이 쿼리를 실행한 결과가 표시되어 있다.


목록 3. 결과물

=====
Summary for accounts section
=====
Transaction filter def123
=====
Detail for transaction def123
sourceAuth : 2011-04-07-xxxx
invoice : 2011-04-11-xxxx
cheque : 2011-04-21-xxxx
=====
Associated project xyz987
=====
Detail for project xyz987
boardMinute : 2011-04-07-xxxx
draftContractA : 2011-04-07-xxxx
contractA : 2011-04-07-xxxx
contractB : 2011-04-08-xxxx
contractC : 2011-04-09-xxxx
workCertA : 2011-04-11-xxxx
workCertB : 2011-04-11-xxxx
workCertC : 2011-04-11-xxxx
=====
End of search
=====

이 결과물에는 저장된 실제 문서 사본을 검색하는 데 필요한 정보가 있다. 또한, 특정 트랜잭션과 프로젝트 컨텍스트의 키가 자세하게 표시되어 있다. 따라서 감사자는 이사회의 결정안, 계약, 수의계약 허가, 송장, 작업 완료 증명서 및 취소된 수표에 액세스할 수 있게 된다. 당연히 있어야 할 문서가 이것이 전부라면, 더 이상 다른 작업은 필요하지 않다. 모든 사람이 만족할 것이며 감사자도 효율성과 구성에 좋은 인상을 받을 것이다.


PHP 무결성 확인

스크립트는 문서 정보를 검색할 수 있으며 문서가 불완전한 경우에는 경고 메시지를 전송한다. 앞서 언급한 바와 같이, 수의계약을 채택한 것이 정당하든, 제출된 여러 가지 입찰서를 바탕으로 적절한 선택을 했든 관계없이 이사회의 규칙을 준수하는 것이 중요하다. 목록 4에 있는 코드에는 이러한 확인 과정을 처리하는 코드가 표시되어 있다.


목록 4. 무결성 확인

<?php
$xml = simplexml_load_file("backend.xml");
echo "=====\nIntegrity check\n=====\n";
$i = 0;
foreach ($xml->transactions->transaction as $t) {
  if ($t['accid'] == "" or !$t['accid']) {
    $accid = "# $i #";
    echo "Transaction accid missing at transaction $accid\n";
  } else {
    $accid = $t['accid'];
  }
  if (!$t['projid']) echo "Project id missing at transaction $accid\n";
  if ($t->soleSourceAuth=="" and $t->sourceAuth=="") 
      echo "Authorization problem at $accid\n";
  $i++;
}
echo "=====\nEnd of search\n=====\n";
?>

목록 4에 있는 스크립트에서는 먼저 XML 백엔드를 오브젝트로 로드한다. 그런 다음, 각 트랜잭션을 조사하여 accid 속성이 존재하는지 판별한다. 이 속성이 없으면 스크립트는 조사한 레코드 개수와 경고 메시지를 표시한다. 다음에는 연관된 프로젝트 ID 번호를 확인하여 이 번호가 없으면 경고를 표시한다. 마지막으로 soleSourceAuth 또는 sourceAuth 요소가 존재하는지 그리고 이 요소의 값이 유효한지 확인한다. 이 경우에 요소의 값은 비어 있는 문자열이 아니다. 이 테스트가 실패하면 스크립트는 경고를 표시한다. 이러한 무결성 확인을 다른 방법으로 수행할 수도 있지만, SimpleXML은 프로그램을 사용하는 빠르고 쉬운 방식을 제공한다.

이 스크립트는 전체 목록을 확인한다. 따라서 다음과 같은 방식으로 인수를 사용하지 않고 이 스크립트를 호출한다.

> php integrity.php

목록 1에 있는 데이터를 확인 중이고 이 데이터에는 알려진 문서 참조가 없기 때문에 이 스크립트를 호출하면 목록 5에 있는 경고 메시지가 표시된다.


목록 5. 목록 4의 결과물

=====
Integrity check
=====
Authorization problem at abc123
=====
End of search
=====


문서 이미지

이제까지 감사 정보를 기본적으로 살펴보았으므로 다음 단계에서는 모든 문서가 이미지로서 사용 가능한지 확인한다. 감사자가 정보를 요청하면 감사자(자세한 세부사항이 필요한 경우에는 독자에게 연락함)를 정중하게 초대하여 온라인 문서 콜렉션을 확인할 수 있는 링크를 신속하게 전달한 다음, 레코드를 최신 상태로 유지하는 훨씬 더 중요한 업무를 계속 수행한다.

여기서 다시 목록 1을 사용한다. 그러나 이번에는 이미지 정보가 포함되어 있다(목록 6 참조).


목록 6. 이미지 속성이 있는 XML 백엔드

<?xml version="1.0" encoding="UTF-8"?>
<auditList>
  <projects>
    <project projid="xyz987">
      <boardMinute image="minute987.pdf">2011-04-07-xxxx</boardMinute>
      <draftContractA image="contractdraft987.pdf">2011-04-07-xxxx</draftContractA>
      <contractA image="contract987A.jpg">2011-04-07-xxxx</contractA>
      <contractB image="contract987B.jpg">2011-04-08-xxxx</contractB>
      <contractC image="contract987C.jpg">2011-04-09-xxxx</contractC>
      <workCertA image="workcert987A.pdf">2011-04-11-xxxx</workCertA>
      <workCertB image="workcert987B.pdf">2011-04-11-xxxx</workCertB>
      <workCertC image="workcert987C.pdf">2011-04-11-xxxx</workCertC>
    </project>
  </projects>
  <transactions>
    <transaction accid="abc123" projid="xyz987">
      <soleSourceAuth image="ssauth987A.odt"></soleSourceAuth>
      <invoice image="invoice987A.png">2011-04-11-xxxx</invoice>
      <cheque image="cheque987A.jpg"></cheque>
    </transaction>
    <transaction accid="def123" projid="xyz987">
      <sourceAuth image="sourceauth987B.odt">2011-04-07-xxxx</sourceAuth>
      <invoice image="invoice987B.png">2011-04-11-xxxx</invoice>
      <cheque image="cheque987B.jpg"></cheque>
    </transaction>
    <transaction accid="ghi123" projid="xyz987">
      <sourceAuth image="sourceauth987C.odt">2011-04-07-xxxx</sourceAuth>
      <invoice image="invoice987C.png">2011-04-11-xxxx</invoice>
      <cheque image="cheque987C.jpg"></cheque>
    </transaction>
  </transactions>
</auditList>

세부사항이 약간 더 추가되었다는 점을 제외하면 목록 6은 기본적으로 목록 1과 동일하다. 이제 일부 요소에는 image 속성이 있으며 이 속성에는 PDF, JPG, ODT 또는 PNG 파일로 저장된 문서나 이미지의 이름이 포함되어 있다. 이 경우에는 은행에서 실제 수표를 반환하지 않고 해당 수표가 채권결제시스템(clearing system)을 통과한 후에 온라인으로 JPG 이미지를 제공한다. 따라서 이미지는 사용 가능하지만 실제 문서는 저장되지 않는다.

이미지가 사용 가능하려면 회계 부서에서 감사자에게 이롭도록 쿼리를 수정해야 한다. 목록 7에는 업데이트된 쿼리가 표시되어 있다.


목록 7. 이미지가 있는 PHP 쿼리

<?php
$transFilter = $argv[1];
if (!$transFilter) die ('No transaction specified\n');
$path2images = "/path/to/images/";
echo "=====\nAudit response HTML\n=====\n";
$xml = simplexml_load_file("backend2.xml");
echo "=====\nTransaction $transFilter\n=====\n";
foreach ($xml->transactions->transaction as $t) {
  if ($t['accid'] == $transFilter) {
    $projectFilter = trim($t['projid']);
    echo "Detail for accounting transaction '".$t['accid']."'\n";
    foreach ($t->children() as $tc) {
      echo $tc->getName()." : ".$tc." image "
	."<a href='$path2images".$tc['image']."'>".$tc['image']."</a>\n";
    }
  }
}
foreach ($xml->projects->project as $p) {
  if ($p['projid'] == $projectFilter) {
    echo "Detail for project ".$p['projid']."\n";
    foreach ($p->children() as $pc) {
      echo $pc->getName()." : ".$pc." image "
	."<a href='$path2images".$pc['image']."'>".$pc['image']."</a>\n";
    }
  }
}
echo "=====\nEnd of list\n=====\n";
?>

목록 7에서는 먼저 특정 트랜잭션을 검색한다. 회계 ID가 매개변수로 지정되지 않은 경우에는 경고가 표시되면서 스크립트가 중지된다. 그렇지 않으면 스크립트는 수정된 백엔드를 SimpleXML 오브젝트로 로드한 후, 해당 회계 ID에 해당하는 트랜잭션을 검색한다. 트랜잭션이 발견되면 나중에 사용하기 위해 연관된 프로젝트 ID를 저장한다. 다음에는 스크립트가 연관된 문서의 정보를 표시한다. 이제 결과물에는 실제 문서에 대한 참조와 네크워크상의 어디인가에 저장된 이미지에 대한 링크(HTML 태그에 삽입된)가 포함된다.

다음 명령행 인터페이스 명령은

> php auditresponsehtml.php def123

목록 8에 있는 결과물을 생성한다.


목록 8. 이미지가 있는 PHP 쿼리

=====
Audit response HTML
=====
=====
Transaction def123
=====
Detail for accounting transaction 'def123'
sourceAuth : 2011-04-07-xxxx image 
  <a href='/path/to/images/sourceauth987B.odt'>sourceauth987B.odt</a>
invoice : 2011-04-11-xxxx image 
  <a href='/path/to/images/invoice987B.png'>invoice987B.png</a>
cheque :  image 
  <a href='/path/to/images/cheque987B.jpg'>cheque987B.jpg</a>
Detail for project xyz987
boardMinute : 2011-04-07-xxxx image
  <a href='/path/to/images/minute987.pdf'>minute987.pdf</a>
draftContractA : 2011-04-07-xxxx image
  <a href='/path/to/images/contractdraft987.pdf'>contractdraft987.pdf</a>
contractA : 2011-04-07-xxxx image
  <a href='/path/to/images/contract987A.jpg'>contract987A.jpg</a>
contractB : 2011-04-08-xxxx image
  <a href='/path/to/images/contract987B.jpg'>contract987B.jpg</a>
contractC : 2011-04-09-xxxx image
  <a href='/path/to/images/contract987C.jpg'>contract987C.jpg</a>
workCertA : 2011-04-11-xxxx image
  <a href='/path/to/images/workcert987A.pdf'>workcert987A.pdf</a>
workCertB : 2011-04-11-xxxx image
  <a href='/path/to/images/workcert987B.pdf'>workcert987B.pdf</a>
workCertC : 2011-04-11-xxxx image
  <a href='/path/to/images/workcert987C.pdf'>workcert987C.pdf</a>
=====
End of list
=====

간단하게 하기 위해 여기에서는 다음과 같이 가정을 했다. 첫째, 스크립트에서는 모든 파일이 존재하고 올바르게 이름이 지정되어 있다. 둘째, 감사자가 인덱싱 시스템을 이해하고 있다. 셋째, 감사자의 브라우저가 다운로드, 애드온 또는 애플리케이션에서 열기로 문서 유형을 처리할 수 있다.


PHP 및 이미지 함수

감사자에게 이미지를 전달하기 전에 여러 가지 방법으로 이미지를 조작할 수도 있다. 인쇄할 경우에는 새 문서를 원래의 아카이브 사본으로 오인하지 않도록 이미지에 표시를 해야 한다. PHP는 문서 전체에 있는 대용량 "VOID"나 한쪽 모서리에 있는 트랜잭션 ID를 인쇄할 수 있는 다양한 이미지 함수를 제공한다.

목록 9에는 브라우저로 문서를 스트리밍하기 전에 문서에 문자열을 추가하는 PHP 예제 코드가 표시되어 있다.


목록 9. 이미지에 세부사항 추가

<?php
$im = imagecreatefromjpeg("/path/to/images/contract987C.jpg");
$textcolor = imagecolorallocate($im, 0, 0, 100);
imagestring($im, 5, 55, 55, 'Archive: 2011-04-11-XXXX', $textcolor);
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

이 코드에서는 원본 문서를 이용하여 이미지를 작성하고 오버레이 텍스트의 색상을 정의한 다음, 이미지의 맨 위 왼쪽 모서리에 55픽셀 크기로 Archive: 2011-04-11-XXXX 문자열을 인쇄하되, 이전에 이 위치에 있었던 것과 중복해서 인쇄한다. 원칙적으로 텍스트 색상은 명확하게 텍스트를 읽을 수 있도록 텍스트가 표시될 배경의 색상을 고려해서 결정해야 한다. 그 다음에는 최종 이미지가 브라우저에 전달된다.

기타 PHP 이미지 함수는 이미지를 테스트하여 이미지의 크기를 확인하고, 이미지의 크기가 권고 기준을 넘어서면 감사의 화면에 맞춰 더 합당한 수준으로 이미지의 크기를 조정한다.


다른 부서를 위한 인덱싱

여기에 있는 예제에서는 회계 부서와 프로젝트 부서에서 실제 파일 한 세트를 인덱싱할 수 있게 한다는 점을 감안하면 XML 백엔드의 다른 섹션을 루트 요소의 하위 요소로 하여 다른 부서를 위한 컨테이너로 역할을 하게 하는 것은 간단하다. 전체 문서가 잘 구성되어 유지되는 한, PHP 스크립트를 사용하여 쉽게 다른 섹션을 삽입하거나 제외할 수 있다.

새로운 임원이 자신의 이사회 문서를 별도로 유지하고자 하는 경우에 이러한 접근 방식을 사용하려면 목록 1목록 6을 변경해야 한다. 목록 1을 수정한 예제는 목록 10을 참조한다.


목록 10. 추가된 섹션이 있는 XML 백엔드

<?xml version="1.0" encoding="UTF-8"?>
<auditList>
  <boardMinutes>
      <boardMinute boardMin="bm1234">2011-04-07-xxxx</boardMinute>
    ...
  </boardMinutes>
  <projects>
    <project projid="xyz987" boardMin="bm1234">
      <draftContractA>2011-04-07-xxxx</draftContractA>
      <contractA>2011-04-07-xxxx</contractA>
      ...
    </project>
  </projects>
  <transactions>
    ...
  </transactions>
  
</auditList>

목록 1을 수정한 코드에서는 projects 섹션에서 사용한 이사회 결의서 항목이 새로운 boardMinutes 컨테이너로 이동했다. 여기서는 인덱스 boardMin이 새 컨네이터에 있는 새 boardMinute 요소에 추가되었으며 동일한 인덱스가 관련 project 요소에 속성으로 추가되었다. 이제 projects 섹션에서 관련 이사회 정보를 찾을 수 있으며 그 반대도 가능하다. 이 방식에서는 단지 다양한 관리자의 요구를 만족시키는 것이 해당 컨테이너 요소와 인덱싱 속성의 문제점이다.


결론

이 기사에서는 감사자의 지원 문서 요청을 처리하는 데 필요한 몇 가지 도구를 탐구했다. 분명한 점은 PHP를 사용하여 XML 파일로 구성된 문서 목록을 처리하면 필요한 문서를 신속하게 찾아서 제시할 수 있다. 이러한 방식으로 정보를 구성하면 감사 요청이 들어왔을 때의 긴장되고 시간이 제한된 상황에서 벗어나 계속해서 조심스러운 문서 분류 및 검색 작업을 수행하는 데 역량을 집중할 수 있다.

이 기사에서 설명한 설정 과정은 XML 스키마와 doctype을 사용하여, 항목을 추가하고 입력하는 작업을 제어하고 누락된 요소를 확인하는 과정으로 인해 더 복잡해진다. PHP와 SimpleXML 함수는 XML의 적격성에 매우 민감하므로 일반 편집기로 파일을 직접 편집하는 것은 Eclipse(참고자료 참조)와 같은 전문 애플리케이션을 사용하는 것만큼 효과적이지 못하다. Eclipse를 사용하여 편집을 완료하면 결과 문서가 적격하게 구성된다.

비즈니스 분야에서는 여전히 종이를 전혀 사용하지 않는 사무실이 드물다. 능동적으로 참여할 사무실에서는 호환 가능한 소프트웨어가 실행 중이어야 하기 때문이다. 이러한 시스템의 모든 요소를 오픈 소스로 무료로 사용하면 완전한 채택을 가로막는 장벽은 직원에 대한 교육과 변화를 꺼리는 분위기로 귀결된다.


참고자료

교육

  • PHP 및 SimpleXML: XML을, 일반 특성 선택기와 배열 반복기로 처리할 수 있는 오브젝트로 변환하는 이 도구를 자세히 알아보자.

  • SimpleXML processing with PHP(Elliotte Rusty Harold, developerWorks, 2006년 10월): SimpleXML 확장을 확인하자. 이 확장은 PHP 버전 5에 번들되어 있으며 이 확장을 이용하면 PHP 페이지에서 PHP에 친화적인 구문으로 XML을 쿼리하고, 검색, 수정 및 재발행할 수 있다.

  • Get started with the Eclipse Platform(Chris Aniszczyk 및 David Gallardo, developerWorks, 2007년 7월): Eclipse로 개발하는 방법을 자세히 배우자.

  • Getting started with Eclipse(DB2 on Campus Book 시리즈): 이 무료 전자책을 확인하자. Eclipse의 모든 것을 확인하고 실습 예제를 사용하여 연습하자.

  • Introduction to XML(Doug Tidwell, developerWorks, 2002년 8월): 이 튜토리얼에서 XML의 정의, XML이 개발된 이유와 같은 XML의 기본 정보를 확인하자.

  • Thinking XML: Analyze financial reporting using XBRL(Uche Ogbuji, developerWorks, 2009년 1월): 회계 분야에서 사용되는 고급 XML을 알아보고 재무 서류를 분류하는 데 매우 적합한 XBRL(Extensible Business Reporting Language)을 해석하는 방법을 배우자.

  • XML development with Eclipse(Pawel Leszek, developerWorks, 2003년 8월): 신뢰할 수 있는 편집기를 사용한 XML 편집 작업의 개념을 확인하고 Eclipse를 사용하여 XML의 강력한 기능을 활용하자.

  • PHP로 스크립트 작성: 광범위하게 사용되는 범용 스크립팅 언어로, 웹 개발에 특히 적합하고 HTML에 삽입 가능한 PHP 언어를 자세히 배우자.

  • More articles by this author (Colin Beckingham, developerWorks, 2009년 3월 현재): XML, 음성 인식, XHTML, PHP, SMIL 및 기타 기술에 관한 기사를 읽어보자.

  • XML 입문 XML을 배우는 데 필요한 참고자료를 얻자.

  • developerWorks의 XML 영역: XML 분야의 기술을 향상시키는 데 도움이 되는 참고자료를 확인하자. XML 기술 자료에서 다양한 기술 관련 기사와 팁, 튜토리얼, 표준 및 IBM Redbook을 볼 수 있다.

  • IBM XML 인증: XML 및 관련 기술에 대한 IBM 인증 개발자가 되는 방법을 찾아볼 수 있다.

  • developerWorks 기술 행사 및 웹 캐스트: 이러한 세션에 참가하여 최신 기술에 대한 정보를 얻을 수 있다.

  • Twitter의 developerWorks 페이지: 오늘 가입하여 developerWorks 트윗을 팔로우하자.

  • developerWorks podcasts: 소프트웨어 개발자의 흥미로운 인터뷰와 토론을 확인할 수 있다.

  • developerWorks on-demand demos: 입문자를 위한 제품 설치 및 설정 과정에서 숙련된 개발자를 위한 고급 기능의 활용에 이르기까지 다양한 데모를 제공한다.

제품 및 기술 얻기

토론

  • XML 영역 토론 포럼: 여러 XML 관련 토론에 참여해 볼 수 있다.

  • developerWorks 커뮤니티: 개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.

필자소개

Colin Beckingham is a freelance researcher, writer, and programmer who lives in eastern Ontario, Canada. Holding degrees from Queen's University, Kingston, and the University of Windsor, he has worked in a rich variety of fields including banking, horticulture, horse racing, teaching, civil service, retail, and travel and tourism. The author of database applications and numerous newspaper, magazine, and online articles, his research interests include open source programming, VoIP, and voice-control applications on Linux. You can reach Colin at colbec@start.ca.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=XML, Industries, 오픈 소스
ArticleID=753409
ArticleTitle=회계 감사에 적합한 이미지를 사용하여 종이 없는 사무실 구현
publish-date=08222011
author1-email=colbec@start.ca
author1-email-cc=nancy_hannigan@us.ibm.com

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.