현재 Lord of Fear와 저는 흥미로운 프로젝트를 진행하고 있습니다. 우리는 대기업을 위한 1C:Enterprise 8.2 플랫폼 기반 솔루션을 개발 중입니다. 작업 세트의 경우 1C의 가능성은 충분하며 우리는 우리의 선택을 전혀 후회하지 않습니다. 실제로, 우리는 위대하고 강력한 플랫폼 1C: Enterprise에 대해 더 이상 이야기하지 않을 것입니다.

중 하나 주요 기능우리 프로그램 - 다양한 입법 문서(프로토콜, 통지서 등)의 인쇄된 형태 생성. 기술적인 면에서는 모든 것이 단순해 보입니다. 스프레드시트 문서와 같은 표준 레이아웃을 만들고 레이아웃을 시작하면 됩니다. 우리는 시간을 보내고 모든 인쇄 양식을 빠르게 던졌습니다. 결과는 좋았지만 고객이 다시 디자인을 요구했고 우리는 웅덩이에 빠졌습니다. 문제는 동일한 셀 내의 특정 단어에 서식 스타일을 적용할 수 없다는 것이었습니다. 예, 전체 셀에 스타일을 적용할 수 있지만 이 방법은 우리에게 적합하지 않았습니다. 하나의 셀에는 여러 단어가 포함될 수 있지만 어떻게 든 그 중 하나만 특별히 강조 표시해야했습니다.

원칙적으로 이 문제는 스프레드시트 문서 셀의 크기를 줄임으로써 해결할 수 있습니다. 어떤 경우에는 그러한 (작은) 셀이 작업하기 더 쉽지만 이러한 높은 마크업을 너무 자주 변경하는 것만으로는 충분하지 않습니다. 적어도 나에게는.

우리는 생각하고 생각하고 "스프레드시트 문서" 유형의 일반적인 레이아웃을 포기하고 MS Word의 기능을 사용하기로 결정했습니다. 아이디어는 다음과 같았습니다.

1. 필요한 문서에 대한 템플릿을 만듭니다. 모든 템플릿 파일은 MS Word용 템플릿으로 정확히 생성되었습니다. 모르는 사람들을 위해 템플릿은 확장자가 점인 파일입니다. 이를 기반으로 새 문서를 만들 수 있습니다.

2. OLE 기술을 사용하여 문서를 만들고 의사 변수를 다음으로 대체합니다. 원하는 텍스트. 의사 변수의 형식은 [VariableName]입니다.

3. 상황에 따라 생성된 문서를 인쇄하거나 저장합니다.

원칙적으로 어려움은 없으나 지금까지 우리 둘 다 1C:Enterprise에서 MS Word로 작업할 필요가 없었습니다. 기본적으로 내가 만든 인쇄된 양식의 모든 레이아웃은 스프레드시트 문서, 그래서 플랫폼에서 MS Word / Excel로 데이터를 전송한 경험이 없었습니다. Excel에서 데이터를 읽어야 하는 경우가 많았지만 전송하지는 않았습니다.

기타로 몇 트랙을 연주한 후, 우리는 오래 참았던 악기를 제쳐두고 작업에 착수하기로 결정했습니다. 조금 생각하고 도움말을 읽은 후 다음과 같은 예를 스케치했습니다.

//Word.Application 유형의 새 개체 만들기 WordApplication = New COMObject("WORD.Application"); //템플릿을 기반으로 새 문서를 만듭니다. //PathKTemplate 변수에 템플릿의 전체 경로를 지정합니다. // 우리가 만든(도트 파일 확장자) NewDocument = WordApplication .Documents.Add(PathKTemplate); // searchReplaceContent 준비 = NewDocument.content.Find; //텍스트 바꾸기 //Execute 메서드의 첫 번째 매개변수에서 바꿀 문자열을 전달합니다. // 아홉 번째에는 바꿀 문자열을 //i.e. WhatReplace에서 변수 이름(예: [UserName])을 전달합니다. //그리고 마지막 변수에는 valueReplaceContent.Execute(WhatReplace,False,True,False,True,False,String(WhatWeReplace)); //모든 것은 위시리스트에 따라 다릅니다. //문서 저장 NewDocument.SaveAs(PathToSave); //문서 인쇄 NewDocument.PrintOut(); //작업이 끝나면 문서와 Winword 자체를 닫아야 합니다. //Quit 메서드의 경우 False 값을 전달합니다. 이는 완성된 문서를 저장할 필요가 없음을 나타냅니다. WordApplication.application.Quit(거짓); 단어 응용 프로그램 = 0;

작업 결과

우리는 MS Word를 사용하여 우아한 인쇄 양식을 생성하는 옵션에 완전히 만족했습니다. 우리는 래퍼 프로시저를 작성하는 데 몇 시간을 보냈고 이전에 만든 양식을 MS Word 템플릿으로 변환했습니다. 우리는 결과에 더 만족했습니다. 모든 것이 스마트하게 작동하며 고객은 문제 없이 출력 문서의 템플릿을 쉽게 변경할 수 있습니다. 문제가 있는 경우(고객이 실수로 기존 템플릿을 삭제한 경우) 원본 템플릿 파일을 복원하는 기능을 제공했습니다.

이 접근 방식을 프로젝트에 적용하기로 결정했다면 매우 주의하십시오. 이 모든 nyashek을 사용하려면 사용자의 컴퓨터에 MS Word가 있어야 합니다. 오늘날 많은 회사들이 끔찍한 (IMHO) OpenOffice로 이동하고 있음을 고려할 때 - 적용 이 방법문제를 일으킬 수 있습니다. 다행히도 우리는 이 점에서 운이 좋습니다.

간행물 - 귀하의아르 자형코드 예제가 포함된 ode 메모:

1. 채우기 단어 템플릿 1C의 데이터;
2. 1C의 데이터로 Word 머리글 및 바닥글 채우기
3. Word의 표를 1C의 데이터로 채웁니다.

작업 시작

대부분의 경우 다음 작업에 직면해 있습니다.
열 필요 워드 문서, 1C의 데이터로 채워집니다.

이를 위해서는 Word 문서 템플릿을 준비해야 합니다. 이것을 워드 템플릿과 혼동하지 마십시오. 특수 파일여러 번 사용할 수 있는 문서 설정이 포함된 Word. *.docx 또는 *.doc 확장자를 가진 일반 Word 문서가 필요합니다. 그런 다음 이 문서를 이진 데이터가 있는 레이아웃에 배치합니다.

시도 // 바이너리 데이터에서 레이아웃 가져오기 Template = GetLayout(AdditionalParameters.ContractType); 파일 이름 = GetTemporaryFileName(".docx"); Template.Write(파일명); //Word 작업을 위한 COM 개체 만들기 ObjectWord = New COMObject("Word.Application"); ObjectWord.Documents.add(파일 이름); // Word에서는 하나의 응용 프로그램에서 여러 문서를 열 수 있으므로 Word.Application.Documents 개체는 컬렉션입니다. 문서 열기. //우리의 경우 문서는 항상 열려 있습니다. DocumentWord = ObjectWord.Application.Documents(1); DocumentWord.Activate(); Exception Report("응용 프로그램 시작 오류 "+ErrorDescription()); 시도 종료; //물론 COM 개체를 가져오는 것은 시도해야 합니다. 뭔가 잘못되고 있습니다.

독자는 모달 호출이 사용 중임을 올바르게 알아차리고 작성자에게 손가락을 흔들 수 있습니다. 그리고 그는 옳을 것입니다.

//문서 매개변수의 구조 생성 DocumentParameters = PrepareParameterStructure(); //문서 매개변수 구조 채우기 Fill inParameterStructure(DocumentParameters);

Word가 작동하는 원리에 대해 조금 더 알아보자...

각 Word 문서는 페이지로 구성된 섹션으로 나뉩니다.

각 섹션에 대해 고유한 요소 번호, 고유한 머리글 및 바닥글, 페이지 설정을 만들 수 있습니다. 따라서 예를 들어 페이지 중 하나를 회전하려면(가로로 인쇄) 별도의 섹션을 만들어야 합니다.

단어 페이지여러 영역으로 나뉩니다:

  • 페이지 헤더
  • 본문
  • 보행인

각 섹션은 첫 번째 페이지에 대해 고유한 헤더를 가질 수 있습니다.

//객체, DocumentWord.Content의 모든 섹션에 있는 모든 기본 텍스트를 포함합니다. //객체에는 DocumentWord.Sections 문서의 섹션 컬렉션이 포함되어 있습니다. //각 섹션에는 헤더 DocumentWord.Sections(1)에 대한 자체 컬렉션이 있습니다. 머리글 //바닥글에 대한 자체 컬렉션 DocumentWord.Sections(1).Footers //동시에 "첫 페이지의 고유 머리글 및 바닥글" 확인란이 선택되면 머리글 및 바닥글 컬렉션에 두 개의 요소가 포함됩니다.

사용자 매개변수 채우기

이러한 컬렉션에 액세스할 때 컬렉션을 검색하고 테이블과 같은 내장 개체를 얻을 수 있습니다.

이제 Word 영역에 액세스하는 방법을 어느 정도 이해했으며, 이를 사용하여 매개변수를 교체할 수 있습니다.

//모든 매개변수를 살펴보고 문서에서 대체하겠습니다. For each Parameter From DocumentParameters Loop PerformReplace(DocumentWord.Content, Parameter.Key, Parameter.Value); //헤더에서 매개변수의 발생 찾기 PerformReplace(DocumentWord.Sections(1).Headers.Item(1).Range(), Parameter.Key, Parameter.Value); //첫 번째 및 후속 페이지의 바닥글에서 매개변수의 발생 찾기 PerformReplacement(DocumentWord.Sections(1).Footers.Item(1).Range(), Parameter.Key, Parameter.Value); ExecuteReplace(DocumentWord.Sections(1).Footers.Item(2).Range(), Parameter.Key, Parameter.Value); 종료 주기; //찾기 및 바꾸기 실행 Function ExecuteReplace(Value Object, Parameter, Value) Object.Find.Execute(Parameter,,Value,2) EndFunction

Execute 메서드를 더 자세히 고려하십시오. 해당 매개변수는 MS Word에서 직접 교체/검색할 때 대화 상자와 동일합니다.

다음은 주요 매개변수입니다(MSDN 도움말의 무료 번역).

  1. 검색 텍스트 - 문자열 - 대체할 텍스트입니다. 텍스트는 다음을 포함할 수 있습니다. 특별한 옵션. 예: ^p - 단락, ^t - 탭
  2. 대소문자 구분 - 부울 - true이면 검색에서 대소문자를 구분합니다.
  3. 전체 단어 - 부울 - true인 경우 전체 단어를 검색합니다. 단어의 출현은 고려되지 않습니다. 예를 들어 home이라는 단어를 검색할 때 home이라는 단어는 생략됩니다.
  4. 와일드카드 사용 - 부울 - true이면 기본 제공 정규식이 사용됩니다.
  5. 유사 검색 - 부울 - true인 경우 검색 결과에 유사한 단어가 포함됩니다.
  6. 모든 형식 검색 - 부울 - true인 경우 검색 결과에 다양한 형태의 단어가 포함됩니다.
  7. 먼저 검색 - Boolean - true인 경우 문서의 처음부터 끝까지 검색합니다.
  8. 적용 범위 - WdFindWrap - 검색 방향을 지정합니다
  9. 형식 - 형식 - 검색된 텍스트의 형식
  10. 대체 문자열 - 문자열 - 원본 텍스트를 대체할 문자열
  11. 교체 횟수 - WdReplace - 교체 횟수를 결정합니다.
  12. 등.

WdReplace - 상수 값:
wd교체모두 2
wdReplace없음 0
wdReplaceOne 1

이 방법을 사용하면 "교체 문자열"을 선택 항목으로 가져올 수 없지만 약 10배 느리게 작동합니다. 선택한 영역을 얻으려면 약간 수정된 일반 기능을 사용할 수 있습니다.

// SCP 구성 1.3에 대한 사소한 변경이 있는 PrintControlMSWordClient Function PerformReplace(Value Object, Parameter, Value) SearchString = "[" + Parameter + "]"; StringReplacement = 문자열(값); //교체할 영역을 선택해야 합니다. Object.Select(); //선택 영역을 가져옵니다. Selection = Object.Application.Selection; // 매개변수의 모든 항목을 찾아 필요한 값으로 바꿉니다. FindObject = Selection.Find; FindObject.ClearFormatting(); While FindObject.Execute(SearchString) 루프 If EmptyString(ReplacementString) then Selection.Delete(); 그렇지 않으면 Selection.TypeText(ReplacementString); EndIf; 종료 주기; //선택 해제 Selection.Collapse(); EndFunctions

선택한 영역을 이미 받았으면 텍스트 스타일, 글꼴 등을 편집할 수 있습니다.

//글꼴 수정 Selection.Font //색상 수정 Selection.HighlightColorIndex

Word 개체를 필드로 사용하는 두 번째 접근 방식도 있습니다. 나는 그를 별로 좋아하지 않는다. 왜냐하면. 약 100페이지의 큰 문서에서 이러한 필드가 실패하기 시작합니다(사라짐, 대체하지 않음 원하는 값) 및 기타 넌센스. 글쎄, 적어도 Word 2007에서는. 하지만 어쨌든 줄게:

템플릿을 준비할 때 문서 본문에 DOCVARIABLE 유형의 필드를 삽입해야 합니다(단축키 Ctrl+F9를 사용하여 삽입할 수 있음).

이러한 필드는 다음과 같은 간단한 방법으로 액세스할 수 있습니다.

DocumentWord.Variables.Item(ParameterName).Values

템플릿에 따라 테이블 채우기

따라서 문서의 본문에 매개변수를 채우고 머리글과 바닥글의 매개변수를 교체했지만 여전히 한 가지 문제가 있습니다. 표를 채워야 합니다.

아래에 설명된 접근 방식은 알려진 형식의 테이블에만 적합합니다. 저것들. 원하는 방식으로 테이블과 행의 형식을 지정할 수 있습니다. 그러나 변화는 꽤 문제가 있습니다.

테이블은 문서 영역을 통해 액세스할 수 있습니다.

//주 텍스트 Table = DocumentWord.Content.Tables(1)의 첫 번째 테이블에 대한 액세스 권한을 얻습니다.

서식을 설정하려면 나중에 삭제할 빈 첫 번째 행이 있는 템플릿에 테이블을 만드는 것이 더 쉽습니다.

//채울 데이터 ParametersPM = DocumentParameters.ApplicationPM; //헤더와 첫 번째 줄은 그대로 두어야 합니다. Iterator = 2; 테이블 = DocumentWord.Content.Tables(3); For Each Row From ParametersTCH 루프 //기본적으로 첫 번째 Table.Rows.Add() 위에 행을 추가합니다. 표 행을 채우십시오(표, 반복자, 문자열, "PP, 명명법 이름, 측정 단위, 가격 행", 매개변수 PM). 반복자 = 반복자 + 1; 종료 주기; //템플릿의 구조에는 열의 이름과 순서가 포함되어 있습니다. Procedure FillTableRow(Table,RowNumber,FillValue,TemplateStructure,ValueTable) StringArray = General Purpose.ExpandStringIntoSubstringArray(TemplateStructure,","); 반복자 = 1; ValueTable.Columns.Find(String) = Undefined AND String인 경우 문자열 배열 루프의 각 문자열에 대해<>"PP" 그러면 Iterator = Iterator + 1; 진행하다; //헤더도 문자열임을 잊지 마세요. 번호를 매길 때 제외해야 합니다. ElseIf String = "PP" Then Table.Cell(LineNumber, Iterator).Range().Text = String(LineNumber-1) ; 반복자 = 반복자 + 1; 진행하다; EndIf; Table.Cell(RowNumber, Iterator).Range().Text = String(FillValue[문자열]); 반복자 = 반복자 + 1; 종료 주기; 종료 절차

기본적으로 그렇습니다. Word로 작업할 때 발생하는 주요 문제를 강조하려고 했습니다. 이 리뷰가 작업에 도움이 되길 바랍니다 =)

조언과 의견 감사합니다:
,

비판만 환영합니다. 댓글이 많을수록 가이드가 더 좋아집니다 =)

1C 프로그래머의 작업에서이 기능은 매우 드물게 필요하지만 덕분에 꽤 해결할 수 있습니다. 도전적인 작업동적 및 비영구적 인쇄 형태로. 이 작업을 구현할 때 Word 템플릿을 만들고 Word 템플릿에 책갈피를 배치하는 작업은 1C 사용자에게 할당됩니다.

이 예 1C의 메커니즘과 Word 문서를 템플릿으로 사용하여 1C 프로그램 사용자에게 데이터를 출력하기 위한 인쇄 가능한 양식을 만드는 방법을 보여줍니다.

1C용 Word 문서를 기반으로 템플릿을 만들어 보겠습니다. 먼저 북마크를 활성화해야 합니다. 편리한 조작문서:


다음으로 1C용 템플릿 파일에 텍스트와 몇 개의 책갈피를 추가해야 합니다. 북마크는 "삽입"- "북마크" 메뉴를 통해 추가됩니다. 책갈피 텍스트를 선택하고 복사하고 "삽입 - 책갈피" 메뉴를 열고 복사한 책갈피 텍스트를 붙여넣고 "추가"를 클릭해야 합니다.


Word 템플릿 파일이 준비되면 1C에서 새 외부 처리를 만들고 양식을 추가하고 양식 모듈에 다음 코드를 삽입합니다. EndProcedure &AtClient Function FillTemplateWord() // 생성 시도 COM 개체 AttemptWordObject = 새 COMObject("Word.Application"); 예외 보고서("시작하는 동안 오류가 발생했습니다. 마이크로 소프트 워드: " + ErrorDescription(), MessageStatus.Attention); 정의되지 않은 반환; EndTry; //템플릿 WordObject.Documents.Add("C:\Users\Konstantin\Desktop\Template.docx")의 경로; WordTemplate = WordObject.ActiveDocument ; //템플릿에서 모든 북마크 가져오기 For 각 BookmarkWord From TemplateWord.Bookmarks Loop Report(BookmarkWord.Name); EndCycle; // bookmark1을 텍스트로 교체 TemplateWord.Bookmarks("Bookmark1").Select(); TemplateWord.Application.Selection .TypeText("책갈피 #1의 텍스트입니다."); //bookmark2를 텍스트로 바꾸기 TemplateWord.Bookmarks("Bookmark2").Select(); TemplateWord.Application.Selection.TypeText("책갈피 #2의 텍스트입니다."); // 북마크 3을 다음으로 변경 현재 날짜 TemplateWord.Bookmarks("Bookmark3").Select(); TemplateWord.Application.Selection.TypeText(현재 날짜()); ObjectWord.Application.Visible = 참; ObjectWord.Activate(); //문서 닫기 //Word object.Application.Quit(); EndFunctions

Word 파일 형식의 템플릿을 기반으로 인쇄 된 양식을 형성하기 위해 외부 처리 1C를 시작한 결과 다음과 같은 결과를 얻습니다.

Word 개체의 COM 메서드에 대한 정보와 추가 데이터는 MSDN에서 찾을 수 있습니다.

메모에 추가 1C에서 Word 템플릿 사용

기록에 대해 논평해 주신 모든 분들께 감사의 말씀을 전합니다. 여러분 덕분에 자료가 새로운 데이터로 보완되고 더 많은 방문자에게 유용할 것입니다.

1. 그리고 삽입된 텍스트의 글꼴 크기를 변경하는 방법은 무엇입니까?
템플릿에서 책갈피의 글꼴 크기를 변경하면 충분합니다. 그러나 차원을 동적으로 변경해야 하는 경우 다음을 수행합니다.

//bookmark3을 현재 날짜로 교체 TemplateWord.Bookmarks("Bookmark3").Select(); TemplateWord.Application.Selection.Font.Bold = 1; TemplateWord.Application.Selection.Font.Size = 20; TemplateWord.Application.Selection.TypeText(현재 날짜());

2. 템플릿에 사진을 업로드할 수 있나요?
그렇지. C# 및 VB의 예는 https://msdn.microsoft.com/ru-ru/library/ms178792.aspx 링크에 설명되어 있으며 1C의 경우 코드는 다음과 같습니다.

// 이미지 삽입 TemplateWord.Bookmarks("Bookmark3").Select(); TemplateWord.Application.Selection.InlineShapes.AddPicture("C:\Users\Konstantin\Desktop\logo_1c.png");

3. 코드를 실행할 때: ObjectWord.Documents.Add("C:/Template.docx") (문서를 배치한 위치) 오류가 발생합니다. "컨텍스트 메서드 호출 오류(추가)"이유는 무엇입니까?
경로를 "C:\Template.docx"로 변경해 보십시오.

4. 활성 문서 유형의 레이아웃을 코드가 포함된 워드 파일에 저장할 때 이유를 알려주세요.

ProcessingObject = FormAttributeToValue("객체"); 레이아웃 = ProcessingObject.GetLayout("지연 편지 템플릿"); 파일 이름 = TempFileDirectory() + "\"file.doc";Layout.Write(파일 이름);

나는 이와 같은 일반 문서 대신 http://prntscr.com/eshgjk를 얻습니다.
기본적으로 Write(,) 메서드는 MXL 형식으로 파일을 작성한다고 가정합니다. 값을 두 번째 매개변수인 SpreadsheetDocumentFileType.DOCX로 설정해 보십시오. "구문 도우미"에 자세히 설명되어 있습니다.

5. 내 문서에 다음 위치에 있는 파일에 대한 링크가 있습니다. 네트워크 드라이브. 템플릿에서 이러한 파일에 대한 하이퍼링크를 만드는 방법은 무엇입니까?
흥미로운 질문입니다. 매크로를 기록하고 결과를 확인하려고 하면 비주얼 베이직하이퍼링크를 추가하면 다음과 같습니다.

하위 매크로1() " " 매크로1 매크로 " " Selection.MoveLeft 단위:=wdCharacter, 개수:=15, 확장:=wdExtend ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, 주소:= _ "C:\Users\Konstantin \Desktop\Test.txt", SubAddress:="", ScreenTip:="", _ TextToDisplay:="TestLink" End Sub

MSDN에 메서드 설명 추가: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word

따라서 1C의 코드는 다음과 같습니다.

Function FillTemplateWord() //COM 개체 생성 시도 Attempt WordObject = New COMObject("Word.Application"); Exception Report("Microsoft Word 시작 오류: " + ErrorDescription(), MessageStatus.Attention); 정의되지 않은 반환; 시도 종료; //템플릿의 경로 ObjectWord.Documents.Add("C:\Users\k.blagin\Desktop\Template.docx"); TemplateWord = ObjectWord.ActiveDocument; //템플릿에서 모든 링크 가져오기 각 BookmarkWord에 대해 TemplateWord.Hyperlinks에서 Notify Loop(BookmarkWord.Name); 종료 주기; //기존 링크의 주소 변경 TemplateWord.Hyperlinks("Logs.zip").Address = "C:\Users\k.blagin\Desktop\Memory.zip"; //북마크를 링크로 교체 ObjectBookmark = TemplateWord.Bookmarks("Bookmark3"); TemplateWord.Hyperlinks.Add(ObjectBookmark.Range, "C:\Users\k.blagin\Desktop\Template.docx", "", "Template.docx", "C:\Users\k.blagin\Desktop\Template. docx"); ObjectWord.Application.Visible = true; ObjectWord.Activate(); //문서 닫기 //Word object.Application.Quit(); EndFunctions

매우 유용한 외부 처리모든 일반적인 1C:Enterprise 8.3 구성의 경우 시스템의 디렉토리 및 문서에서 선택한 템플릿에 따라 Word 파일을 생성할 수 있습니다. 도움을 받아 1C에서 다양한 사양, 노동 계약 및 계약자와의 계약, 보증 카드 등을 인쇄할 수 있습니다. 원하는 구조의 Word를 가지고 약간 수정하면 필요한 모든 매개변수를 입력하여 1부터 직접 구성할 수 있습니다.

처리 원리는 다음과 같습니다.

  • 원하는 구조의 Word를 선택하고,
  • 1C의 정보를 삽입해야 하는 파일 위치에 북마크를 만들고,
  • 템플릿을 준비한 후 1C(Files 디렉토리)에 추가하고,
  • 1C에서 인쇄 템플릿 채우기를 구성하고,
  • 생성된 템플릿을 선택하여 필요한 문서/디렉토리를 인쇄합니다.

Word 템플릿 준비

처리 작업을 시연하기 위해 상품 및 서비스 판매 문서에서 계약 사양의 인쇄를 설정합니다. 다음과 같은 단어가 있다고 가정해 보겠습니다.

그것으로부터 우리는 본격적인 사양을 형성 할 것입니다. 데이터베이스의 정보를 대체해야 하는 위치에 책갈피를 삽입하는 것으로 시작합니다.



책갈피 이름에는 공백을 사용할 수 없습니다.

인쇄할 때 상품 목록도 작성합니다. 보기 좋게 만들려면 헤더와 한 줄을 비워 둡니다.


Word를 저장하고 닫습니다.

템플릿 채우기 설정

이제 프로그램에서 판매 문서 잡지를 열고 인쇄 메뉴로 이동한 다음 버튼을 눌러 Word 템플릿에 따라 인쇄를 설정합니다.


템플릿 사용자 정의는 모든 권한이 있는 사용자만 사용할 수 있습니다.

열리는 설정 창에서 먼저 새로운 파일프로그램에서 (참조 요소를 의미 파일) 그리고 그것에 우리의 말씀을 묶으십시오:


열리는 창에서 다음을 선택하십시오. 파일을 추가하려면:


그런 다음 템플릿 설정에서 선택합니다. 그런 다음 북마크 테이블이 채워지면 다음 북마크에 데이터를 채울 소스를 선택해야 합니다.


판매 문서 자체의 세부 정보와 이러한 세부 정보의 파생물이 출처로 사용됩니다.

인쇄할 때 디렉토리 및 문서의 추가 세부 정보를 사용할 수도 있습니다.

사용 가능한 세부 정보 목록이 매우 크므로 빠른 입력을 사용하는 것이 편리합니다.


소스 선택의 결과로 테이블은 다음과 같이 표시됩니다.


테이블의 행에 대한 값의 경우 대소문자 구분과 전체 이름의 약어를 사용할 수 있습니다.


Word에서 표를 인쇄하려면 원본 문서 표를 선택하십시오.


표를 선택하면 Word에서 표를 표시하는 데 사용할 수 있는 세부 정보의 이름과 함께 도움말이 나타납니다. 필요한 세부 정보를 쉼표로 구분하여 나열해야 합니다(파일 열 순서대로). 열에 빈 값을 남겨두거나 거기에 임의의 텍스트를 쓸 수 있습니다.


모든 것이 정상입니다. 이제 원하는 단어를 인쇄할 수 있습니다.

이제 모든 사용자가 사용자 정의된 템플릿에 따라 인쇄할 수 있습니다. 사용자는 각자 스스로 인쇄를 설정할 필요가 없습니다.



단일 문서와 목록을 모두 인쇄할 수 있습니다.


인쇄 설정 양식에서 새 템플릿을 만드는 것 외에도 기존 템플릿을 편집할 수 있습니다.


개체에 대해 여러 Word 템플릿이 구성된 경우 인쇄 명령을 선택하면 필요한 항목을 선택하는 창이 열립니다.


디렉토리에 대한 사용자 액세스 권한과의 충돌을 방지하려면 파일 Word의 인쇄 처리 자체 외에도 사용자에게 참조 책을 읽을 수 있는 액세스 권한을 제공하는 1C용 확장(처리와 동일한 아카이브에 있음)을 설치해야 합니다.

이 처리에 대한 질문/의견/제안 사항이 있으면 기꺼이 답변해 드리겠습니다.

2018년 12월 15일자 릴리스 1.1.2.2

템플릿을 인쇄할 때 날짜를 표시하기 위해 형식을 선택하는 기능이 추가되었습니다.


이제 불필요한 템플릿을 제거할 수 있습니다.


2019년 1월 29일자 릴리스 1.1.2.3

이제 날짜의 일부를 별도로 표시할 수 있습니다. 일, 월(숫자 또는 이름) 및 연도:


을 위한 개인(및 개인 유형의 계약자) 이제 여권 데이터를 표시할 수 있습니다.


2019년 3월 12일자 릴리스 1.1.2.4

Word에서 상품 이동 문서의 표 형식 부분을 인쇄할 때 이 표 형식 부분의 세부 사항뿐만 아니라 명명법의 세부 사항도 사용할 수 있게 되었습니다.


2019년 7월 12일자 릴리스 1.1.2.5

Word 템플릿을 생성할 수 있을 뿐만 아니라 원본 개체(첨부 파일에)에 자동으로 첨부할 수 있게 되었습니다. 이렇게하려면 설정 옵션을 선택하십시오 첨부 파일에 저장.


인쇄 절차가 끝나면 첨부 파일 양식이 열립니다.


필요한 경우 이 양식에서 완성된 Word 템플릿을 열어 보고 편집할 수 있습니다.

이 글은 작품에 대한 정보를 수집하기 위한 글입니다. 입문 단계) MS Word를 한 곳에서. 유사한 자료가 많이 있으며 적절한 인내심으로이 모든 것을 찾을 수 있습니다. 요점을 한곳에 모아보고 싶었습니다.

간행물은 다음과 같은 코드 예제가 포함된 일종의 메모입니다.

  1. 1C의 데이터로 Word 템플릿 채우기;
  2. 1C의 데이터로 Word 머리글 및 바닥글 채우기;
  3. Word의 테이블을 1C의 데이터로 채우십시오.
작업 시작

대부분의 경우 다음 작업에 직면해 있습니다.
1C의 데이터로 채워진 Word 문서를 열어야 합니다.

이를 위해서는 Word 문서 템플릿을 준비해야 합니다. 재사용을 위한 문서 설정이 포함된 특수 Word 파일인 Word 템플릿과 이것을 혼동하지 마십시오. *.docx 또는 *.doc 확장자를 가진 일반 Word 문서가 필요합니다. 그런 다음 이 문서를 이진 데이터가 있는 레이아웃에 배치합니다.

시도
//바이너리 데이터에서 레이아웃 가져오기
템플릿 = GetLayout(AdditionalParameters.ContractType);
파일 이름 = GetTemporaryFileName(".docx");
Template.Write(파일명);
//Word와 함께 사용할 COM 개체를 만듭니다.
WordObject = 새 COMObject("Word.Application");
ObjectWord.Documents.add(파일 이름);
//Word는 동일한 응용 프로그램에서 여러 문서를 열 수 있으므로 Word.Application.Documents 개체는 열려 있는 문서의 모음입니다.
// 우리의 경우 문서는 항상 단독으로 열려 있습니다.
DocumentWord = ObjectWord.Application.Documents(1);
DocumentWord.Activate();
Exception Report("응용 프로그램 시작 오류 "+ErrorDescription());
시도 종료;
//물론 COM 개체를 가져오는 것은 시도해야 합니다. 뭔가 잘못되고 있습니다.

독자는 모달 호출이 사용 중임을 올바르게 알아차리고 작성자에게 손가락을 흔들 수 있습니다. 그리고 그는 옳을 것입니다.

//문서 매개변수 구조 생성
DocumentParameters = PrepareParameterStructure();
//문서 매개변수 구조 채우기
채우기 StructureParameters(DocumentParameters);

Word가 작동하는 원리에 대해 조금 더 알아보자...

각 Word 문서는 페이지로 구성된 섹션으로 나뉩니다.

각 섹션에 대해 고유한 요소 번호, 고유한 머리글 및 바닥글, 페이지 설정을 만들 수 있습니다. 따라서 예를 들어 페이지 중 하나를 회전하려면(가로로 인쇄) 별도의 섹션을 만들어야 합니다.

각 Word 페이지는 여러 영역으로 나뉩니다.

  • 페이지 헤더
  • 본문
  • 보행인
각 섹션은 첫 번째 페이지에 대해 고유한 헤더를 가질 수 있습니다.

//객체, DocumentWord.Content의 모든 섹션에 있는 모든 주요 텍스트를 포함합니다.
//객체는 문서 섹션 모음을 포함합니다.
DocumentWord.Sections
// 각 섹션에는 헤더에 대한 자체 컬렉션이 있습니다.
DocumentWord.Sections(1).Headers
// 그리고 바닥글에 대한 자체 컬렉션
DocumentWord.Sections(1).바닥글
//동시에 "Unique header for the first page" 체크박스를 선택하면 머리글 및 바닥글 컬렉션에 두 개의 요소가 포함됩니다.

사용자 매개변수 채우기

이러한 컬렉션에 액세스할 때 컬렉션을 검색하고 테이블과 같은 내장 개체를 얻을 수 있습니다.

이제 Word 영역에 액세스하는 방법을 어느 정도 이해했으며, 이를 사용하여 매개변수를 교체할 수 있습니다.

//모든 매개변수를 반복하고 문서에서 대체합니다.
DocumentParameters 루프의 각 매개변수에 대해
ExecuteReplace(DocumentWord.Content, Parameter.Key, Parameter.Value);
//헤더에서 매개변수의 발생을 찾습니다.
ExecuteReplace(DocumentWord.Sections(1).Headers.Item(1).Range(), Parameter.Key, Parameter.Value);
//첫 번째 및 후속 페이지의 바닥글에서 매개변수 발생을 찾습니다.
ExecuteReplace(DocumentWord.Sections(1).Footers.Item(1).Range(), Parameter.Key, Parameter.Value);
ExecuteReplace(DocumentWord.Sections(1).Footers.Item(2).Range(), Parameter.Key, Parameter.Value);
종료 주기;

// 찾기 및 바꾸기 기능 수행
PerformReplace(값 개체, 매개 변수, 값)
Object.Find.Execute(매개변수,,값,2)
EndFunctions

Execute 메서드를 더 자세히 고려하십시오. 해당 매개변수는 MS Word에서 직접 교체/검색할 때 대화 상자와 동일합니다.

(36.38킬로바이트) 다운로드 수: 5

다음은 주요 매개변수입니다(MSDN 도움말의 무료 번역).

  1. 검색 텍스트 - 문자열 - 대체할 텍스트입니다. 텍스트에는 특수 매개변수가 포함될 수 있습니다. 예: ^p - 단락, ^t - 탭
  2. 대소문자 구분 - 부울 - true이면 검색에서 대소문자를 구분합니다.
  3. 전체 단어 - 부울 - true인 경우 전체 단어를 검색합니다. 단어의 출현은 고려되지 않습니다. 예를 들어 home이라는 단어를 검색할 때 home이라는 단어는 생략됩니다.
  4. 와일드카드 사용 - 부울 - true이면 기본 제공 정규식이 사용됩니다.
  5. 유사 검색 - 부울 - true인 경우 검색 결과에 유사한 단어가 포함됩니다.
  6. 모든 형식 검색 - 부울 - true인 경우 검색 결과에 다양한 형태의 단어가 포함됩니다.
  7. 먼저 검색 - Boolean - true인 경우 문서의 처음부터 끝까지 검색합니다.
  8. 적용 범위 - WdFindWrap - 검색 방향을 지정합니다.
  9. 형식 - 형식 - 검색된 텍스트의 형식
  10. 대체 문자열 - 문자열 - 원본 텍스트를 대체할 문자열
  11. 교체 횟수 - WdReplace - 교체 횟수를 결정합니다.
  12. 등.
WdReplace - 상수 값:
wd교체모두 2
wdReplace없음 0
wdReplaceOne 1

이 방법을 사용하면 "교체 문자열"을 선택 항목으로 가져올 수 없지만 약 10배 느리게 작동합니다. 선택한 영역을 얻으려면 약간 수정된 일반 기능을 사용할 수 있습니다.

// SCP 1.3 구성에 대한 사소한 변경이 있는 ManagePrintMSWordClient
함수 PerformReplace(값 개체, 매개 변수, 값)
검색 문자열 = "[" + 매개변수 + "]";
StringReplacement = 문자열(값);
// 교체할 영역을 선택해야 합니다.
개체.선택();
//선택된 영역 가져오기
선택 = Object.Application.Selection;
// 매개변수의 모든 항목을 찾아 필요한 값으로 바꿉니다.
찾기 개체 = Selection.Find;
FindObject.ClearFormatting();
동안 FindObject.Execute(SearchString) 루프
If EmptyString(ReplacementString) 다음
선택.삭제();
그렇지 않으면
Selection.TypeText(대체 문자열);
EndIf;
종료 주기;
// 선택 해제
Selection.Collapse();
EndFunctions

선택한 영역을 이미 받았으면 텍스트 스타일, 글꼴 등을 편집할 수 있습니다.

//글꼴 수정
선택.글꼴
//색상 수정
Selection.HighlightColorIndex

Word 개체를 필드로 사용하는 두 번째 접근 방식도 있습니다. 나는 그를 별로 좋아하지 않는다. 왜냐하면. 약 100페이지의 큰 문서에서 이러한 필드는 실패하기 시작합니다(사라지고 원하는 값으로 대체하지 않음). 글쎄, 적어도 Word 2007에서는. 하지만 어쨌든 줄게:

템플릿을 준비할 때 문서 본문에 DOCVARIABLE 유형의 필드를 삽입해야 합니다(단축키 Ctrl+F9를 사용하여 삽입할 수 있음).

이러한 필드는 다음과 같은 간단한 방법으로 액세스할 수 있습니다.

DocumentWord.Variables.Item(ParameterName).Values

템플릿에 따라 테이블 채우기

따라서 문서의 본문에 매개변수를 채우고 머리글과 바닥글의 매개변수를 교체했지만 여전히 한 가지 문제가 있습니다. 표를 채워야 합니다.

아래에 설명된 접근 방식은 알려진 형식의 테이블에만 적합합니다. 저것들. 원하는 방식으로 테이블과 행의 형식을 지정할 수 있습니다. 그러나 변화는 꽤 문제가 있습니다.

테이블은 문서 영역을 통해 액세스할 수 있습니다.

//본문 텍스트의 첫 번째 테이블에 대한 액세스 권한을 얻습니다.
테이블 = DocumentWord.Content.Tables(1)

서식을 설정하려면 나중에 삭제할 빈 첫 번째 행이 있는 템플릿에 테이블을 만드는 것이 더 쉽습니다.

//채울 데이터
매개변수 PM = ParametersDocument.Application PM;
//헤더와 첫 번째 줄은 그대로 두어야 합니다. Iterator = 2;
테이블 = DocumentWord.Content.Tables(3);
매개변수 PM 루프에서 각 행에 대해
//기본적으로 첫 번째 줄 위에 한 줄을 추가합니다.
Table.Rows.Add();
표 행을 채우십시오(표, 반복자, 문자열, "PP, 명명법 이름, 측정 단위, 가격 행", 매개변수 PM).
반복자 = 반복자 + 1;
종료 주기;
//템플릿 구조에는 열의 이름과 순서가 포함됩니다.
프로시저 FillTableRow(Table,RowNumber,FillValue,TemplateStructure,ValueTable)
StringArray = 범용.ExpandStringIntoSubstringArray(TemplateStructure,",");
반복자 = 1;
문자열 루프의 각 문자열에 대해
ValueTable.Columns.Find(String) = Undefined AND 문자열 "PP"인 경우
반복자 = 반복자 + 1;
진행하다;
// Header도 문자열임을 잊지 말고 번호를 매길 때 제외해야 합니다.
ElseIf 문자열 = "PP" 다음
Table.Cell(RowNumber, Iterator).Range().Text = String(RowNumber-1);
반복자 = 반복자 + 1;
진행하다;
EndIf;
Table.Cell(RowNumber, Iterator).Range().Text = String(FillValue[문자열]);
반복자 = 반복자 + 1;
종료 주기;
종료 절차

기본적으로 그렇습니다. Word로 작업할 때 발생하는 주요 문제를 강조하려고 했습니다. 이 리뷰가 작업에 도움이 되길 바랍니다 =)

[링크를 보려면 회원가입이 필요합니다.]