PDF 보고서¶
스튜디오를 사용하면:ref:`기존 PDF 보고서를 편집 <studio/pdf-reports/edit>`하거나(예: 송장, 견적서 등):ref:`새 보고서를 생성 <studio/pdf-reports/create>`할 수 있습니다.
기본 레이아웃¶
The default layout of reports is managed outside Studio. Go to the Settings app then, in the Companies section of the main page, click Configure Document Layout. Layout settings are company-specific but apply to all reports.
팁
A preview on the right side of the Configure your document layout window shows how the different settings affect the report layout. When creating or editing a report using Studio, a preview can be displayed by enabling Preview at the top-left of the screen.
다음과 같이 설정합니다.
레이아웃: 7가지 레이아웃을 사용할 수 있습니다:
배경: 다음 배경을 사용할 수 있습니다.
빈칸: 표시되는 내용이 없습니다.
데모 로고: 데모 로고가 배경에 표시됩니다.
사용자 지정: 사용자 지정 배경 이미지를 업로드합니다.
텍스트: 8개의 글꼴을 사용할 수 있습니다: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway, Tajawal(아랍어 및 라틴 문자 지원), Fira Mono. 미리 보려면 `Google Fonts 웹사이트 <https://fonts.google.com/>`_를 방문하세요.
Company logo: Hover over the image and click (Edit) to upload or change the logo. This adds the logo to the company’s record on the Company model, which can be accessed via the Settings app by clicking Update Info in the Companies section.
색상: 보고서 구조에 사용되는 기본 색상과 보조 색상을 변경합니다. 기본 색상은 로고의 색상을 기반으로 자동 생성됩니다.
주소: :ref:`외부 보고서 <studio/pdf-reports/header-footer>`의 헤더에 회사명과 주소가 표시됩니다. 여러 줄의 텍스트를 추가할 수 있습니다.
태그라인: Light, Striped, Bubble, Wave, Folder 레이아웃을 사용하는 :ref:`외부 보고서 <studio/pdf-reports/header-footer>`의 헤더와 Boxed, Bold 레이아웃을 사용하는 외부 보고서의 푸터에 표시됩니다. 여러 줄의 텍스트를 추가할 수 있습니다.
용지 서식: 보고서의 기본 용지 크기를 지정합니다. A4`(21cm x 29.7cm) 및 :guilabel:`US Letter`(21.59cm x 27.54cm) 중에서 선택할 수 있습니다. 또는 :ref:`스튜디오 <studio/pdf-reports/edit-options> 에 있는 용지 서식 필드에서 개별 보고서별로 지정하는 것도 가능합니다.
참고
설치한 앱이나 모듈에 따라 다른 용지 형식을 사용할 수 있습니다. 예를 들어 재고 관리 앱의 라벨 시트나 행사 앱의 이벤트 배지 등이 있습니다.
Tax ID: The tax identification number of the company, if applicable. This field contains the value of the Tax ID field in the company’s record on the Company model. This may be the company’s tax identification number,
/to indicate that the company has no tax identification number, or blank. Updating this field updates the value on the company’s record, and vice versa.Bank Account Number: The bank account to which the invoice amount should be paid. This field contains the Bank Account Number indicated in the company’s main bank journal. Updating this field updates the value in the company’s main bank journal, and vice versa.
QR Code: If the company is located in a country for which the EPC QR code feature is available, enabling this option adds an EPC QR code to invoices. This option can also be updated in , in the Customer Payments section.
새 PDF 보고서 만들기¶
새 보고서를 모델 (예: 판매주문서)에 대해 생성하려면 모델에 액세스한 후 :icon:`oi-studio`(:guilabel:`스튜디오 토글`) 버튼을 클릭한 다음 보고서 를 클릭합니다. 신규 를 클릭한 후 팝업창이 열리면 보고서 유형을 선택합니다. 이 항목은 머리글과 바닥글에 표시되는 내용을 지정하는 목적으로만 사용됩니다.
보고서 생성이 완료되면 편집 을 시작할 수 있습니다.
PDF 보고서 편집¶
모델에서 사용 가능한 보고서에 액세스하려면 모델에 액세스하고 (Toggle Studio) 버튼을 클릭한 다음 :guilabel:`Reports`를 클릭합니다. 기존 보고서를 선택하여 엽니다.
또는 스튜디오를 열고 보고서` 를 클릭한 후 특정 보고서나 모델을 검색할 수도 있습니다.
중요
표준 보고서를 복제 한 후 복제된 버전에서 변경하는 것을 권장합니다. 보고서를 복제하려면 보고서의 오른쪽 상단에 마우스 포인터를 가져간 후 (세로 줄임표) 아이콘이 나타나면 클릭한 다음 복제 를 선택합니다.
옵션¶
보고서를 선택하거나 생성한 후 화면 왼쪽의 옵션을 사용하여 다음을 수행할 수 있습니다:
Report name 변경: 새 이름은 모든 곳에 적용됩니다(스튜디오, 양식 보기의 (gear) 아이콘 아래 Print 메뉴 및 PDF 파일 이름).
Paper format 수정: 값이 선택되지 않은 경우 :ref:`기본 레이아웃 <studio/pdf-reports/default-layout-paper>`에 정의된 형식이 사용됩니다.
Show in print menu: 양식 보기의 Print 메뉴에 보고서를 추가합니다.
첨부 파일에서 다시 로드: 보고서가 처음 생성될 때 레코드에 첨부 파일로 저장하고 이후에는 보고서의 원본 버전을 다시 로드합니다. 청구서에 법적으로 요구되는 사항이며 주로 이 경우에 사용됩니다.
Limit visibility to groups: PDF 보고서의 가용성을 특정 :doc:`사용자 그룹 <../general/users/access_rights>`으로 제한합니다.
소스 편집: XML 파일 에서 직접 보고서를 수정할 수 있습니다.
Reset report: 보고서에 대한 모든 변경 사항을 취소하고 표준 버전으로 재설정합니다.
To generate a preview of the report, enable Preview at the top-left of the screen. In preview mode, click Print to download the preview.
보고서 편집기¶
보고서 편집기를 사용하면 보고서의 내용과 서식을 수정할 수 있습니다.
팁
중요
보고서에 있는 머리글과 바닥글을 편집할 경우 표준 보고서 및 사용자 지정 보고서에 영향을 주게 됩니다.
조건부 블록¶
점선 직사각형은 **조건부 블록**(if/else 문)을 나타냅니다. 특정 조건에 따라 콘텐츠를 표시하거나 숨기는 데 사용됩니다. 블록을 클릭하여 조건을 확인합니다.
값을 선택하여 출력 내용을 미리 보기로 확인한 후 필요한 경우 수정할 수 있습니다.
참고
조건은 XML 형식으로만 편집할 수 있습니다.
기타 콘텐츠¶
보고서에는 두 가지 유형의 텍스트 콘텐츠가 있습니다.
정적 텍스트, 즉 파란색으로 강조 표시되지 않은 텍스트로 편집기에서 직접 수정할 수 있습니다.
동적 텍스트, 즉 파란색으로 강조 표시된 텍스트로 보고서가 생성될 때 필드 값으로 대체됩니다(예: 판매 주문 번호 또는 견적 날짜).
`/`를 입력하여 :ref:`파워박스 <essentials/html_editor/commands>`를 열고 명령 이름을 입력하거나 목록에서 선택하여 보고서에 콘텐츠(예: 필드, 목록, 표, 이미지, 배너 등)를 추가할 수 있습니다.
보고서에 정적 텍스트를 추가하려면, 추가하려는 위치에 텍스트를 입력합니다.
고급 변경 사항의 경우 직접 XML에서 보고서 편집 을 할 수 있습니다.
필드 추가¶
필드를 추가하려면 / 를 입력한 후 필드 명령어를 선택합니다. 목록이 열리면 필드를 선택하거나 검색합니다. 필요한 경우 필드명 옆에 있는 오른쪽 화살표를 클릭하면 필드 목록에 액세스할 수 있습니다. 그런 다음 레코드에서 필드가 완료되지 않은 경우 표시될 기본값을 지정하고 엔터 를 누릅니다.
표 추가 또는 편집¶
보고서에는 두 가지 표 유형이 있습니다:
:ref:`정적 표 <studio/pdf-reports/static-table>`는 정적 텍스트나 필드를 표시하는 데 사용됩니다. 이 유형의 표는 표를 추가할 때 열과 행의 수를 정의합니다.
동적 표 은 관계형 필드 데이터를 표시할 때 사용합니다. 이런 유형의 표에서는 표 추가를 할 때에는 열 수만 지정합니다. 생성된 보고서의 행 수는 현재 모델과 연결된 관련 모델의 레코드 수에 따라 결정됩니다.
Example
판매 주문 보고서에서 동적 테이블은 판매 주문과 관련된 주문 내역을 표시할 때 활용합니다. 판매주문서에 10개의 주문 라인이 포함되어 있는 경우 보고서에 생성된 테이블에는 10개의 라인이 있습니다. 주문 라인이 2개 있는 경우에는 테이블은 2개의 행으로 구성됩니다.
정적 테이블 추가 또는 편집¶
정적 표를 추가하려면 /`를 입력하고 :guilabel:`Table 명령을 선택합니다. 표의 열과 행 수를 결정합니다. 표가 추가되면 편집을 시작할 수 있습니다.
표 도구를 사용하여 열과 행을 삽입, 이동 및 삭제할 수 있습니다. 커서를 열 위쪽이나 행 왼쪽에 놓은 다음 보라색 직사각형을 클릭하고 옵션을 선택합니다.
열의 크기를 조정하려면 열 테두리를 원하는 위치로 드래그합니다. 표 도구에서 :guilabel:`Reset Size`를 선택하여 모든 열을 표준 크기로 재설정합니다.
셀에 :ref:`원하는 필드 <studio/pdf-reports/add-field>`를 추가하거나 입력하여 정적 텍스트를 추가하세요.
팁
/`를 입력하고 적절한 명령을 선택하여 구조화된 방식으로 표를 사용하지 않고 텍스트를 추가할 수 있습니다: :guilabel:`2 columns, 3 columns 또는 4 columns.
동적 테이블 추가 또는 편집¶
참고
one2many또는many2many유형의 관계만 동적 표로 표시할 수 있습니다.표준 보고서에 있는 기존의 동적 테이블은 사용자가 직접 추가하는 동적 테이블보다 구조가 훨씬 복잡합니다. 해당 테이블의 경우 열을 삽입하거나 삭제할 수 있지만 열을 이동하거나 행을 삽입, 이동 또는 삭제할 수는 없습니다.
동적 테이블을 추가하려면 / 를 입력한 후 동적 테이블 명령어를 선택합니다. 목록이 열리면서 테이블에서 기준이 될 관계를 선택하거나 검색하고 엔터 를 누릅니다. 테이블이 추가되면 편집할 수 있습니다.
:ref:`정적 표 <studio/pdf-reports/static-table>`와 마찬가지로 표 도구를 사용하여 열을 삽입, 이동 및 삭제할 수 있습니다. 생성된 행 위 또는 아래에 표시될 정적 행을 삽입하는 것도 가능합니다.
셀에 필드를 추가하려면 자리 표시자 텍스트를 삭제한 다음 선택한 필드 를 추가합니다. 대화 상자가 열리면 필드의 소스 개체(예: 주문 내역 모델)와 사용 가능한 필드 목록이 표시됩니다.
열 이름 라벨을 원하는 라벨명으로 바꿀 수 있습니다.
참고
기본 행은 필드의 내용을 자동으로 반복하여 각 필드 값에 대해 보고서에 행을 생성합니다(예: 주문 라인당 하나의 행).
서식¶
보고서에서 텍스트를 서식 지정하려면 텍스트를 선택한 다음 :doc:`텍스트 편집기 </applications/essentials/html_editor>`의 옵션을 사용하여 서식을 지정하세요.
보고서 XML 편집하기¶
경고
XML을 직접 수정할 경우 업그레이드 중에 보고서 문제가 발생할 수 있습니다. 이런 경우에는, 이전 데이터베이스에서 변경된 내용을 업그레이드된 데이터베이스로 복사만 하면 됩니다.
보고서에서 XML을 편집하려면 왼쪽 창에 있는 소스 편집 을 클릭합니다.
예시¶
보고서에서 데이터 표시 방식을 변경하려면 필드의 기본 위젯 을 수동으로 수정합니다. 아래의 예시에서 주문일에는 기본적으로 날짜와 시간을 표시되며 단가는 소수점 둘째 자리의 정밀도로 기본 설정됩니다.
<div class="oe_structure"> <span t-field="doc.date_order"/> <span t-field="doc.price_unit"/> </div>
t-options`를 사용하여, 이 경우 `widget 옵션을 사용하면 이러한 필드를 수정하여 각각 날짜만 표시하고 소수점 네 자리의 정밀도를 표시할 수 있습니다:
<div class="oe_structure"> <span t-field="doc.date_order" t-options="{'widget': 'date'}"/> <span t-field="doc.price_unit" t-options="{'widget': 'float', 'precision': 4}"/> </div>
특정 조건에 따라 콘텐츠를 표시/숨기려면 보고서 XML에 if/else 제어문을 수동으로 추가할 수 있습니다.
예를 들어 태그가 없는 경우 사용자 지정 데이터 표를 숨기려면 ‘t-if’ 속성을 사용하여 조건을 정의한 다음 ‘참’ 이나 ‘거짓’ 으로 평가할 수 있습니다. 따옴표 안에 태그가 없는 경우에는 표가 표시되지 않습니다.
<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
<!-- thead = table header, the row with column titles -->
<thead>
<!-- table row element -->
<tr>
<!-- table header element -->
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<!-- table body, the main content -->
<tbody>
<!-- we create a row for each subrecord with t-foreach -->
<tr t-foreach="doc.tag_ids" t-as="tag">
<!-- for each line, we output the name and price as table cells -->
<td t-out="tag.id"/>
<td t-out="tag.name"/>
</tr>
</tbody>
</table>
t-if 구문이 거짓 인 경우 다른 블록을 표시하려면 t-else 구문을 사용하여 지정할 수 있습니다. t-else 블록은 문서 구조에서 t-if 블록 바로 뒤에 위치해야 합니다. t-else 속성에 조건을 지정할 필요는 없습니다. 예를 들어 다음에서 견적서에 태그가 없음을 설명하는 간단한 메세지를 표시해 봅니다.
<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
<!-- thead = table header, the row with column titles -->
<thead>
<!-- table row element -->
<tr>
<!-- table header element -->
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<!-- table body, the main content -->
<tbody>
<!-- we create a row for each subrecord with t-foreach -->
<tr t-foreach="doc.tag_ids" t-as="tag">
<!-- for each line, we output the name and price as table cells -->
<td t-out="tag.id"/>
<td t-out="tag.name"/>
</tr>
</tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>
t-if/t-else 표기법을 사용하면 보고서 편집기가 이러한 섹션이 상호 배타적이며 조건부 블록으로 표시되어야 함을 인식합니다:
편집기로 조건을 전환하여 출력 화면을 미리 볼 수 있습니다.
여러 가지 항목을 선택하려면 ‘t-elif’ 지시문을 사용하여 중간 조건을 추가할 수도 있습니다. 예를 들어 판매주문서 보고서의 제목은 기본 문서의 상태에 따라 변경되는 방식입니다.
<h2 class="mt-4">
<span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
<span t-elif="doc.state in ['draft','sent']">Quotation # </span>
<span t-else="">Order # </span>
<span t-field="doc.name">SO0000</span>
</h2>
견적용 청구서 라는 제목은 일부 상황에서 사용하게 됩니다. 이러한 조건이 충족되지 않은 상태에서 문서 상태가 ‘초안’ 또는 ‘전송됨’인 경우에는 견적서 를 사용합니다. 이러한 조건 중 어느 것도 충족되지 않는 경우 보고서 제목은 주문서 가 됩니다.
보고서에서 이미지 작업을 하기란 쉽지 않습니다. 이미지 크기와 동작을 한결같이 정교하게 제어하기가 쉬운 일이 아니기 때문입니다. 보고서 편집기를 활용하여 이미지 필드를 삽입할 수는 있으나 (/Field 명령어 사용), t-field 지시문과 수반되는 t-options 속성을 사용하여 XML에 삽입하면 크기와 위치를 더욱 쉽게 제어할 수 있습니다.
예를 들어, 다음의 코드를 통해 해당 줄에 있는 품목의 image_128 필드가 64px 너비의 이미지로 출력됩니다(이미지의 가로세로 비율에 따라 높이가 자동 조정).
<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>
다음 옵션을 이미지 위젯에 사용할 수 있습니다.
width: 이미지의 너비, 일반적으로 픽셀 또는 CSS 길이 단위(예:rem)로 표시(자동 너비의 경우 비워 둠).height: 이미지의 높이, 일반적으로 픽셀 또는 CSS 길이 단위(예:rem)로 표시(자동 높이의 경우 비워 둠).class:img태그에 적용된 CSS 클래스입니다; 부트스트랩 클래스 를 사용할 수 있습니다.alt: 이미지의 대체 텍스트스타일: 스타일 속성입니다. 더욱 자유롭게 스타일을 다시 지정하려면Bootstrap 클래스 <https://getbootstrap.com/docs/5.1/content/tables>를 확인해 보세요.
이러한 속성은 문자열, 즉 따옴표 안의 따옴표로 묶인 텍스트를 포함해야 합니다(예: t-options-width="'64px'")(또는 유효한 Python 표현식).
참고
이미지 위젯은 img 태그에 사용할 수 없습니다. 대신 span`(인라인 콘텐츠의 경우) 또는 `div`(블록 콘텐츠의 경우) 노드에 `t-field 지시문을 설정하세요.
예시로는 견적 표에 품목 이미지 열을 추가해 보겠습니다.
<table class="table table-sm o_main_table table-borderless mt-4">
<thead style="display: table-row-group">
<tr>
<th>Image</th>
<th name="th_description" class="text-start">Description</th>
<th>Product Category</th>
<th name="th_quantity" class="text-end">Quantity</th>
<th name="th_priceunit" class="text-end">Unit Price</th>
[...]
<t t-foreach="lines_to_report" t-as="line">
<t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
<tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
<t t-if="not line.display_type">
<td>
<span t-field="line.product_template_id.image_128"
t-options-widget="'image'"
t-options-width="'64px'"
t-options-class="'rounded-3 shadow img-thumbnail'"
/>
</td>
<td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
<td t-out="line.product_id.categ_id.display_name"/>
t-options-width 속성으로 이미지 너비를 64픽셀로 제한하고, t-options-class 에서 사용되는 Bootstrap 클래스로는 모서리가 둥글고 그림자가 있는 썸네일같은 테두리를 만듭니다.