값 표에 참조 요소를 추가하는 방법




다음은 시작해야 할 작은 사실입니다. 값 테이블 작업에 대한 간단한 예입니다.

1. 값 테이블 만들기

ValueTable = 새 ValueTable;


2. 값 테이블의 열을 생성합니다.

ValueTable.Columns.Add("이름");
ValueTable.Columns.Add("성");


3. 열 이름을 사용하여 새 행을 추가합니다.


NewString.Name = "바실리";
NewRow.LastName = "강아지";


4. 값 테이블에서 값을 검색하는 방법:
원하는 값이 포함된 테이블 행을 찾아야 합니다.

FoundString = ValueTable.Find(LookupValue);


5. 값 표의 특정 열에서 첫 번째 항목 찾기

FoundString = ValueTable.Find(LookupValue, "공급자, 구매자");


6. 값 표에서 모든 항목을 찾아야 하는 경우:
우리는 검색 구조를 사용합니다.

SearchStructure = 구조("직원", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


각 요소에 열 이름이 키로 포함되고 이 열에서 검색된 값이 값으로 포함되는 검색 구조를 만들어 보겠습니다. 검색 구조를 매개변수로 FindStrings() 메소드에 전달합니다. 결과적으로 우리는 테이블의 행을 얻습니다.
예를 들어 Responsible 열에도 원하는 값에 대한 검색을 검색 구조에 추가하면 FindRows() 메서드를 적용한 결과 Employee와 Responsible이 모두 원하는 값과 동일한 모든 행을 얻게 됩니다. 값.

7. 값 테이블을 무작위 순서로 반복하는 방법

ValueTable 루프의 각 CurrentRow에 대해
보고서(현재라인.이름);
엔드사이클;

인덱스를 사용하여 동일한 작업을 수행합니다.

SeniorIndex = ValueTable.Count() - 1;
SeniorIndex 주기에 따라 MF = 0인 경우
Report(값테이블[개수].이름);
엔드사이클;


8. 기존 값 테이블 행 삭제

ValueTable.Delete(RemoveRow);

색인별

ValueTable.Delete(0);


9. 값 표의 기존 열 삭제

ValueTable.Columns.Delete(RemoveColumn);


색인별

ValueTable.Columns.Delete(0);

값 테이블의 "중간"에서 행(또는 열)을 삭제하면 삭제된 "이후" 행의 인덱스 중 하나가 감소한다는 점을 고려해야 합니다.

10. 변수에 컬럼 이름이 포함된 경우 값 테이블을 어떻게 채우나요?

NewRow = ValueTable.Add();
NewRow[열이름] = 값;


11. 값 표의 전체 열을 원하는 값으로 채우는 방법은 무엇입니까?
값 테이블의 값 테이블에 있는 FiscalAccounting Flag 열은 False 값으로 채워져야 합니다.

ValueTable.FillValue(False, "재정회계 플래그");


값 테이블에는 FillValues() 메서드를 사용합니다. 첫 번째 매개변수는 채울 값입니다. 두 번째 매개변수는 채워진 열의 이름입니다.

12. "SourceTable" 값 표의 데이터로 "TableRecipient" 값 표를 채우는 방법은 무엇입니까?

작업 시 Receiver Table이 아직 존재하지 않거나 이전 열을 저장할 필요가 없는 경우 원본의 전체 복사본으로 생성할 수 있습니다.

TableReceiver = TableOriginal.Copy();


옵션 2: TableReceiver 테이블이 존재하는데 해당 열과 열 데이터 형식에 대한 제한 사항이 없어져서 안타깝습니다. 그러나 이름이 원본 테이블의 이름과 일치하는 열에 대한 데이터를 채워야 합니다.

이름이 일치하는 열에 대한 부분 데이터 전송:

SourceTable 루프에서 SourceTable의 각 행에 대해
FillPropertyValues(NewString, SourceTableString);
EndCycle


원본 테이블의 각 행에 대해 새 행이 대상 테이블에 추가되고 이름이 원본 테이블의 열 이름과 일치하는 새 테이블의 해당 열에 값이 채워집니다.

테이블에 동일한 이름의 열이 없는 경우 대상 테이블은 원본 테이블의 행 수만큼 null 값이 있는 행으로 종료됩니다.
동일한 이름의 일부 열에 대해 원본 테이블의 데이터 값 유형이 대상 테이블 열의 허용 유형 배열에 속하지 않는 경우 해당 필드에 빈 값이 표시됩니다.
세 번째 경우를 고려해 보겠습니다. 이름이 같은 컬럼의 경우 대상 테이블의 컬럼은 원본 테이블의 컬럼과 완전히 일치해야 합니다.

이름이 일치하는 열의 전체 데이터 복사

유사한 열 = 새 배열();

SourceTable.Columns 루프의 각 열에 대해
MatchingColumn = TableReceiver.Columns.Find(열.이름);

일치하는 열인 경우<>정의되지 않음

// 열 속성을 가져옵니다.
이름 = 열.이름;
ValueType = 열.값 유형;
제목 = 열.제목;
너비 = 열.너비;

// 대상 테이블의 열을 교체합니다.
인덱스 = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(색인);
TableReceiver.Columns.Insert(색인, 이름, 값 유형, 제목, 너비);

// 일치하는 열의 다음 이름을 배열에 추가합니다.
Same-nameColumns.Add(열.이름);

EndIf;

엔드사이클;

// 소스 테이블의 행을 반복합니다.
SourceTable 루프에서 SourceTable의 각 행에 대해

// 대상 테이블에 새 행을 추가합니다.
NewString = TableReceiver.Add();

// 일치하는 셀에 값을 채웁니다.
동일한 NameColumns 루프의 각 NameColumns에 대해
NewString[열이름] = SourceTableString[열이름];

엔드사이클;

엔드사이클;


대상 테이블의 열을 새 열로 바꿔야 합니다. 이 열의 속성은 원본 테이블의 열과 완전히 일치합니다.
따라서 수신자 테이블에 동일한 이름의 열이 있으면 새 열에 대한 모든 속성을 변수에 수집합니다. 다음으로 이전 항목을 삭제하고 새 열을 만듭니다. 그런 다음 소스 테이블의 행을 반복합니다.
루프에서는 수신자 테이블에 새 행을 추가하고 일치하는 열 배열의 열 이름을 통해 루프를 엽니다.
이 중첩 루프 내에서 수신자 테이블의 셀을 소스 테이블의 셀 데이터로 채웁니다.

13. 유형 제한을 사용하여 값 표 "값 표"에 열을 추가하는 방법은 무엇입니까?

열을 추가할 때 간단히 이름을 지정하면 되며 Add() 메서드의 두 번째 매개 변수는 건드리지 마세요. 이 경우 열의 데이터 유형은 임의적입니다.

데이터 유형을 지정하지 않고 열 추가

// 유형 제한 없이 열을 추가합니다.
ValueTable.Columns.Add("개체");


두 번째 매개변수의 값을 입력할 수 있습니다. 해당 열에 허용되는 유형에 대한 설명을 전달해야 합니다. 설명 자체는 유형의 문자열 이름을 매개변수(유형이 많은 경우 쉼표로 구분) 또는 유효한 유형의 배열로 전달하여 생성자를 사용하여 얻을 수 있습니다.

데이터 유형을 지정하는 열 추가

// 열 데이터 유형에 대한 제한사항:
// "Contractors" 디렉토리의 요소들만.
ValueTable.Columns.Add("계정", New TypeDescription("ReferenceReference.Accounts"));


열 데이터를 채우는 데 허용되는 유형 중 문자열이 있는 경우 해당 비트 깊이(길이)를 제한하고 변수 또는 고정 길이의 사용을 지정할 수 있습니다. 이 모든 것은 StringQualifiers 생성자를 사용하여 객체를 생성함으로써 제공됩니다. 또한 이 개체는 TypeDescription 생성자의 매개 변수 중 하나로 사용됩니다.

한정자를 사용하여 값 테이블 열의 데이터 유형 지정

// String 타입 데이터에 대한 제한을 준비하고 설정합니다.
문자열 한정자 = 새 문자열 한정자(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


숫자 및 날짜 한정자에 대해서도 동일한 작업을 수행할 수 있습니다.
참고: 유형 설명은 "처음부터" 생성자에 의해 작성될 수 있으며 기존 유형 설명을 기초로 사용할 수 있습니다.

기존 유형 선언을 사용하여 값 테이블 열의 데이터 유형 지정

// 이전에 사용된 유형 설명의 확장입니다.
번호 한정자 = 새 번호 한정자(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "숫자, 날짜",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("참고", ExtendedAllowedTypes);

infostart의 독자 여러분께 인사드립니다. 이 기사에서는 프로그래밍 방식으로 관리되는 응용 프로그램의 형태로 임의의 값 테이블을 만드는 문제에 대해 다룹니다.

작업 기능.

일반 애플리케이션으로 프로그래밍하는 모든 사람은 종종 양식에서 임의의 값 테이블을 가져오는 작업에 직면했습니다. 임의의 값 테이블은 열의 수와 유형이 미리 알려지지 않은 테이블로 이해됩니다. 즉, 3개 열, 6개 또는 8개 열이 있을 수 있습니다. 일반 응용 프로그램에서는 모든 것이 간단합니다. 처리 양식에 "값 테이블" 요소를 배치한 다음 생성된 값 테이블을 프로그래밍 방식으로 전송할 수 있습니다. 이 요소에. 그런 다음 간단한 명령을 사용하여:

FormElements.TableField.CreateColumns();

양식에 준비된 값 테이블을 수신합니다. 더 쉬울 수도 있을 것 같습니다.

그것은 모두 일반 응용 프로그램에 있었습니다. 관리되는 애플리케이션의 상황이 변경되었습니다. 따라서 임의의 테이블을 생성할 수 없습니다. 이제 양식의 값 테이블을 엄격하게 매개 변수화하거나 프로그래밍 방식으로 생성해야 합니다(사실 이것이 관리되는 응용 프로그램 자체의 본질임을 설명하기 위해). 이것이 우리가 시도할 것입니다. 관리되는 양식에 임의의 값 테이블을 프로그래밍 방식으로 생성하는 것입니다.

문제의 해결책.

가장 먼저 해야 할 일은 테이블이 양식에 어떻게 나타날지 결정하는 것입니다. 가장 중요한 점은 처리 시 양식 요소를 생성할 필요가 없다는 것입니다. 전체 테이블처럼 프로그래밍 방식으로 생성하겠습니다. 즉, 테이블을 설명하고 양식을 열 때 또는 버튼을 사용하여 생성됩니다. 이것이 필요한 방법입니다.

양식에 테이블을 생성하는 것은 속성으로서의 값 테이블 설명을 통해 발생합니다.
ArrayChoiceType = 새 배열; ArrayChoiceType.Add(Type("ValueTable")); ChoiceTypeDescription = 새로운 ChoiceTypeDescription(ChoiceTypeArray); ArrayAttributes = 새 배열; ArrayAttributes.Add(New FormAttribute("ScheduleTable", ChoiceTypeDescription, "", "TRN")); 이제 데이터가 포함된 프로그래밍 방식의 값 테이블을 만들어야 합니다. 쿼리에서 값 테이블을 얻으면 모든 것이 어느 정도 순서대로 이루어집니다. 테이블을 수동으로 생성한 경우 "유형 설명"을 통해 숫자나 날짜가 포함될 열의 값을 생성할 수 있습니다. 결론은 값 테이블의 열에 특정 유형이 있어야 한다는 것입니다. 예를 들어 사용자가 이러한 열의 데이터를 대화형으로 채울 것이라고 가정하면 간단한 이름으로 값 테이블 열을 추가할 수 없으며 유형이 있어야 합니다. 명심하세요 - 이것은 매우 중요합니다. 이러한 유형을 양식의 표로 전송하겠습니다.
여러 열을 포함하는 테이블을 만듭니다.
CD = New DateQualifiers(DateParts.Time); ArrayCD = 새 어레이; ArrayKD.Add(Type("날짜")); TypeDescriptionTime = 새 TypeDescription(ArrayKD,KD); TK = 새 ValueTable;
TK.Columns.Add("From", TypeDescriptionTime);
TK.Columns.Add("이전", TypeDescriptionTime);
TK.Columns.Add("이름");
TK.Columns.Add("Note");//이름 및 참고 - 문자열 다음으로 프로그램 테이블 TK를 필요한 데이터로 채웁니다. 필요한 값을 포함하고 생성된 양식 속성으로 전송할 준비가 된 TK 테이블을 얻습니다. TK.Column 루프의 각 열에 대해

ArrayAttributes.Add(New FormAttribute(Column.Name, Column.ValueType,"ScheduleTable"));
엔드사이클;
ChangeAttributes(ArrayAttributes);
SelectionFieldTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldTable.DataPath = "일정표";
SelectionFieldTable.Display = DisplayTable.List;

여기에 간단한 조합이 있으며 테이블이 준비되었습니다.

TK.Column 루프의 각 열에 대해

NewElement = Elements.Add(Column.Name, Type("FormField"), ChoiceFieldTable);
NewItem.View = FormFieldView.InputField;
NewItem.DataPath = "일정표." + 열.이름;
NewElement.Width = 10;
엔드사이클;

조건부 디자인은 필요한 경우 명령 메뉴를 수동으로 작성합니다. 테이블 핸들러도 직접 작성합니다. 예를 들어 "Choice" 테이블에 대한 이벤트 핸들러를 추가하려면 다음을 수행하십시오.

ChoiceFieldTable.SetAction("선택","TCChoice");

이 이벤트를 프로시저 형태로 처리하기 위해 별도의 프로시저가 작성됩니다.

&At클라이언트
절차 TSNSelect(TK, SelectedRow, Field, StandardProcessing)
//처리기 명령 EndProcedure

테이블 핸들러는 클라이언트에서 실행되므로 컴파일러 포인터 명령이 있어야 합니다.

&At클라이언트

마지막으로 추가하고 싶은 것은 이러한 모든 작업 후에 완성된 테이블을 form 속성으로 전송하는 것을 잊지 말아야 한다는 것입니다.

ValueVFormAttribute(TK, "일정표");

그 결과는 다음과 같습니다.


다음은 "Select" 이벤트를 처리하는 방법입니다.



후문.

이 기사가 프로그래밍 방식으로 양식에 테이블을 만들기 시작한 1C 프로그래머에게 도움이 되기를 바랍니다.

프로그래밍 방식으로 값 테이블을 생성하고 테이블 생성에 도움이 되는 설명이 포함된 관리되는 양식으로 출력하는 처리를 다운로드할 수 있습니다.

게시일: 2011년 9월 21일

값 1C - 파트 3. 메타데이터. 값 테이블의 열 반복

이 기사에서는 "알 수 없는" 구조의 값 테이블로 작업하는 방법, 값 테이블의 열을 반복하는 방법, 열 이름을 사용하지 않고 열과 행에서 데이터를 추출하는 방법을 설명합니다. (이 기사는 일련의 기사 1C를 처음부터 참조하고, 1c를 처음부터 프로그래밍하고, 값 표 1c를 참조합니다)

자료를 설명하고 프로그램 코드의 예제를 "실시간"으로 실행하려면 몇 가지가 필요합니다. 테스트 값 표 1C. 예제 중 일부는 값 테이블에서 데이터를 추출하므로 "성", "이름", "후원자"라는 세 개의 열이 있는 테이블을 만들고 여기에 소량의 데이터(최대 3개 행)를 입력합니다. :)

이제 1C 값의 테스트 테이블을 만들고 채워 보겠습니다.

MyTR = 새 ValueTable; // "MyTR" 변수에 저장된 새로운 값 테이블 생성 MyTR.Columns.Add("Last name"); // "성" 열 생성 MyTR.Columns.Add("이름"); // "이름" 열 생성 MyTM.Columns.Add("Patronymic"); // "중간 이름" 열 생성 // 값 테이블에 첫 번째 행 추가 ​​NewRow = MyТЗ.Add(); NewLine.Surname = "차파예프"; NewString.Name = "바실리"; NewString.Patronymic = "이바노비치"; // 두 번째 줄 추가 NewLine = MyТЗ.Add(); NewLine.Lastname = "제르진스키"; NewString.Name = "펠릭스"; NewLine.Patronymic = "에드문도비치"; // 세 번째 줄 추가 NewLine = MyTR.Add(); NewRow.LastName = "코토프스키"; NewString.Name = "그레고리"; NewString.Patronymic = "이바노비치";

테스트 테이블은 이름, 성, 중간 이름의 세 가지 열로 구성됩니다. 남북 전쟁 영웅의 이름이 적힌 세 줄의 완성된 줄이 있습니다.

첫 번째 코드 샘플은 1C 값 테이블의 열을 컬렉션으로 반복합니다.

// TK의 모든 열 이름을 표시합니다. For Each Column From My TK.Columns Notify loop("열 이름: " + Column.Name); 엔드사이클;

루프는 1C 메시지 상자에 모든 열 이름을 표시합니다.

열 이름: 성 열 이름: 이름 열 이름: 중간 이름

행 반복 루프(마지막 기사)와 유사하게 열을 반복하는 데 특수 컬렉션 루프가 사용되는 것을 볼 수 있습니다. MyTM.열- 이것은 1C 값 표의 열 모음입니다. "모야TZ". 컬렉션에는 다음 유형의 개체가 포함되어 있습니다. "열값 테이블"이 유형의 각 개체는 값 테이블의 열이며 속성과 메서드를 포함합니다. 이러한 속성과 메서드를 참조하여 한 열에 대해 필요한 정보를 얻거나 해당 열에 대해 다른 작업을 수행합니다.

예를 들어, 속성에 액세스 "이름" (열.이름) 현재 열의 이름을 얻습니다.

저는 사이클 제목인 "For Each"에 여러분의 관심을 끌고 싶습니다. MyTR.Columns 루프에서"라는 이름의 변수 "열"우리가 발명했습니다. 동일한 이름을 사용할 필요는 없습니다. 예를 들어 이 변수의 이름을 원하는 대로 지정할 수 있습니다. "내현재열"그러면 위의 예는 다음과 같습니다.

// TK의 모든 열 이름을 인쇄합니다. For Each MyCurrentColumn From MyTK.Columns Notify Loop("열 이름: " + MyCurrentColumn.Name); 엔드사이클;

1C 실행 하위 시스템이 이러한 종류의 주기를 발견하면 주기가 진행될 때마다 컬렉션의 요소 하나를 지정된 이름의 변수에 할당합니다. 이 경우에는 다음과 같습니다. 컬렉션의 한 요소값 테이블 열 MyTM.열그런 다음 현재 열이 포함된 변수를 참조하고 속성을 사용합니다. "이름".

열 이름 옆에 열 컬렉션의 각 열 번호를 표시하는 것이 좋습니다.

// 값 테이블의 모든 열의 번호와 이름을 표시합니다. For Each Column From MyTR.Columns LoopColumnNumber = MyTR.Columns.Index(Column); // 열 번호를 가져옵니다. ColumnName = Column.Name; // 열 이름 가져오기 Report("열 번호:" + 열 번호 + " 열 이름: " + 열 이름); 엔드사이클;

텍스트가 1C 메시지 상자에 표시됩니다.

열 번호:0 열 이름: 성 열 번호:1 열 이름: 이름 열 번호:2 열 이름: 중간 이름

1C 값 표의 열은 값 표의 행과 마찬가지로 0부터 시작하여 번호가 매겨져 있다는 사실에 주목합시다.

값 표의 열 수 1C

값 테이블의 열 수를 확인하려면 열 컬렉션에서 "Number()" 메서드를 사용합니다.

열 개수 = MyTM.Columns.Number(); 보고서(열 수);

화면에 숫자 "3"이 표시됩니다. 실제로 우리 테이블에는 "성", "이름", "후원자"의 세 가지 열이 있습니다.

해당 번호(인덱스)로 열 객체를 얻고 열 인덱스를 사용하여 열을 반복합니다.

열 인덱스(숫자)를 사용하여 값 테이블의 모든 열을 순환해 보겠습니다. 열 번호는 0부터 시작한다는 점을 기억하세요. 따라서 주기 "Sh"의 카운터를 0에서 열 수에서 1을 뺀 숫자까지 늘려야 합니다.

SC = 0 By MyTM.Columns.Quantity() - 1 루프 CurrentColumn = MyTM.Columns[SC]; 알림(현재열.이름); 엔드사이클;

화면에 다음이 표시됩니다.

성명

나는 이 예가 분명하다고 생각한다. 우리는 방법을 선택했습니다 수량()열 컬렉션" MyTM.열.수량()", 열 수를 가져오고 카운터로 루프를 시작했습니다. ~ 전에 열 수 빼기 1. 루프 내에서 열 컬렉션의 각 열을 가져오고 현재 열 개체를 변수에 할당합니다. 현재열다음으로 변수 현재열우리는 그 부동산에 접근한다 이름이 속성의 값을 화면에 표시합니다. 알림(현재열.이름);

객체 속성과 객체 메소드를 혼동하지 않는 것이 중요합니다.

속성은 일종의 정적 값이며 이에 대한 액세스는 대괄호 없이 작성됩니다. 예를 들어 현재열.이름. 메소드는 본질적으로 객체의 프로시저 또는 함수이며, 프로시저 및 함수에 대한 호출은 항상 괄호로 작성됩니다(입력 매개변수가 없더라도). 예를 들어: MyTM.열.수량()

괄호 작성을 잊어버리고 메서드를 참조하면 1C 인터프리터는 오류 메시지를 표시하고 실행할 코드를 실행하지 않습니다. 인터프리터는 대괄호가 없기 때문에 메소드가 아닌 속성에 액세스한다고 가정합니다. 그리고 해당 이름을 가진 속성을 찾을 수 없습니다(해당 이름을 가진 메서드만 있기 때문에). 이는 오류 메시지에 표시됩니다.

잘못된 방식으로 메소드 호출에 괄호를 넣는 것을 잊어버린 경우 통역사가 작성하는 내용입니다. MyTM.열.수량("Quantity()" 뒤에 괄호 없음):

개체 필드를 찾을 수 없습니다(개수)

이 경우 "필드"와 "속성"은 동의어 또는 1C 개발자 용어의 부정확성으로 이해되어야 합니다. 그들은 동일한 개념을 나타내기 위해 이 두 단어를 모두 사용합니다. 다른 프로그래밍 언어에서는 이러한 용어가 다른 개념을 의미할 수 있습니다.

열 번호를 사용하여 1C 값 테이블에서 데이터 얻기

우선, 테이블의 첫 번째 행에서 데이터를 가져오는 간단한 예를 제공하겠습니다. 기사 시작 부분부터 미리 채워진 표를 사용하고 있다는 점에 유의하시기 바랍니다. 우리는 테이블에 첫 번째 행과 하나 이상의 열이 있다는 것을 확실히 알고 있습니다. 이 예제를 빈 테이블에 적용하면 오류가 발생합니다. 그래서:

FirstLine = MyTR; // 첫 번째 행을 가져옵니다(0부터 번호 매기기) ColumnFirstValue = RowFirst; // 첫 번째 열의 값을 가져옵니다(열 번호 지정도 0부터임) Report(FirstColumnValue); // 테이블의 첫 번째 행에 있는 첫 번째 열의 값을 표시합니다.

화면에 다음이 표시됩니다.

차파예프

먼저 [...] 연산자를 사용하여 값 테이블에 액세스하여 값 테이블 행 개체를 얻었습니다. (이 작업을 수행하는 방법을 잊었다면 이전 기사를 볼 수 있습니다.) 연산자 내부에 인수 "0"을 전달했습니다. 이는 값 표의 첫 번째 행에 대한 색인입니다. FirstLine = MyTR;

또한 [...] 연산자를 사용하여 문자열 개체를 참조할 권리도 있습니다. 이 명령문 내에서 값 테이블의 열 번호(이 경우 "0")를 전달했습니다. 따라서 숫자가 "0"인 테이블의 현재 행에 대해 숫자가 "0"인 열의 값을 얻었습니다. 이 값을 화면에 표시했는데 이는 "Chapaev"라는 문자열을 나타냅니다.

예제를 조금 복잡하게 만들어 보겠습니다.

FirstLine = MyTR; // 첫 번째 줄을 가져옵니다(0부터 번호가 매겨짐) Report(FirstLine); // 테이블의 첫 번째 행에 있는 첫 번째 열의 값을 표시합니다. Report(FirstRow); // 테이블의 첫 번째 행에 있는 두 번째 열의 값을 표시합니다. Report(FirstRow); // 테이블의 첫 번째 행에 세 번째 열의 값을 표시합니다.

이제 값 표의 첫 번째 행에 있는 세 열의 값을 모두 표시했습니다.

Chapaev 바실리 이바노비치

이제 변수 없이 수행할 수 있도록 이 예제를 추가로 수정하겠습니다. "첫 번째 줄"

알림(MyTM); // 테이블의 첫 번째 행에 있는 첫 번째 열의 값을 표시합니다. Report(MyTR); // 테이블의 첫 번째 행에 있는 두 번째 열의 값을 표시합니다. Report(MyTR); // 테이블의 첫 번째 행에 세 번째 열의 값을 표시합니다.

화면은 똑같을 겁니다.

Chapaev 바실리 이바노비치

위의 예에서 값 테이블의 특정 행과 특정 열에 있는 값에 액세스하려면 다음 형식으로 두 연산자 [...]를 연속적으로 호출할 수 있음을 확인했습니다. 값테이블[IndexRows][IndexColumns]

이제 루프를 만들고 행 및 열 인덱스를 사용하여 모든 행과 열의 데이터를 가져올 준비가 되었습니다.

For RowCount = 0 By MyTM.Quantity() - 1 루프 // 행을 통해 루프 For ColumnCount = 0 By MyTM.Columns.Quantity() - 1 루프 // 열을 통해 중첩 루프 // 현재 행에서 셀 값 가져오기 및 현재 열) CellValue = MyTR[RowCount][ColumnCount]; // 행 번호, 열 번호 및 셀 값을 표시합니다. Report("Line #" + RowCount + "column #" + ColumnCount + " = " + CellValue); 엔드사이클; 엔드사이클;

화면에 다음이 표시됩니다.

라인 #0 열 #0 = Chapaev 라인 #0 열 #1 = Vasily 라인 #0 열 #2 = Ivanovich 라인 #1 열 #0 = Dzerzhinsky 라인 #1 열 #1 = Felix 라인 #1 열 #2 = Edmundovich 라인 # 2 열 번호 0 = Kotovsky 라인 번호 2 열 번호 1 = Grigory 라인 번호 2 열 번호 2 = Ivanovich

두 개의 루프 중 하나가 다른 루프에 중첩되어 1C 값 표의 모든 행에 있는 모든 열의 값을 표시했습니다. 이 경우에는 열 이름을 사용하지 않고 인덱스로 열과 행을 참조했습니다. 더 나은 이해를 위해 예제 내부의 설명에 주의하세요.

결론적으로, 열 번호 대신 이름이 화면에 표시되도록 예제를 약간 변경하는 것이 좋습니다. 그리고 추가적으로 화면에 콘텐츠를 표시하기 위한 디자인을 좀 더 보기 좋게 만들겠습니다.

For RowCount = 0 By MyTR.Quantity() - 1 루프 // 행을 통해 루프 Report(" ======= Row # " + RowCount + " ======="); 신고하기(" "); // 줄바꿈(빈 줄 삽입) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // 중첩된 열 반복 루프 // 셀 값 가져오기(현재 행과 현재 열에서) CellValue = MyTR[RowCount][ 열 개수]; // 컬럼 이름을 가져옵니다. ColumnName = MyTR.Columns[ColumnCount].Name; // 열 이름과 셀 값을 표시합니다. Report(ColumnName + ": " + CellValue); 엔드사이클; 신고하기(" "); // 개행(빈 줄 삽입) EndCycle;

이제 화면에서 정보가 더욱 대표적으로 보이기 시작했습니다.

0행 ======= 성: Chapaev 이름: Vasily 중간 이름: Ivanovich ======= 1행 ======= 성: Dzerzhinsky 이름: Felix Middle 이름: Edmundovich ===== == 2번 줄 ======= 성: Kotovsky 이름: Grigory Patronymic: Ivanovich

네, 거의 잊어버렸어요. 두 개의 연산자 [...][...]를 한 행에 사용하는 경우 열 인덱스 대신 이 열의 이름을 전달할 수 있습니다. 값테이블[행 인덱스][열 이름]

For RowCount = 0 By MyTR.Quantity() - 1 루프 // 행을 통해 루프 Report(" ======= Row # " + RowCount + " ======="); 신고하기(" "); // 줄 바꿈(빈 줄 삽입) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // 열을 통한 중첩 루프 ColumnName = MyTR.Columns[ColumnCount].Name; // 열 이름 가져오기CellValue = MyTR[RowCount][ColumnName]; //

화살표로 표시된 줄에 주의하세요. ". 이 줄에서는 현재 열의 인덱스 대신 현재 열의 이름을 대괄호 안의 인수에 전달합니다. [...] 결과는 동일합니다.

이제 이 글의 마지막입니다.

루프를 사용하여 행 컬렉션과 열 컬렉션을 반복하여 1C 값 테이블의 모든 데이터를 올바르게 수신합니다.

MyTR 루프의 각 CurrentRow에 대해 // 문자열 컬렉션을 순환합니다. Report(" ======= Line # " + MyTR.Index(CurrentRow) + " ======="); 신고하기(" "); For Each CurrentColumn From MyTR.Columns Loop // 열 컬렉션을 통한 중첩 루프 ColumnName = CurrentColumn.Name; // 열 이름 가져오기CellValue = CurrentRow[ColumnName]; // 열 NAME별로 셀 값 가져오기 Report(ColumnName + ": " + CellValue); // 열 이름과 셀 값을 표시합니다. EndCycle; 신고하기(" "); 엔드사이클;

이 예에서는 두 개의 루프가 사용되었습니다. 열 수집 루프는 행 루프 내에 중첩됩니다. 위의 예제를 다루고 이전 기사를 읽어 본 적이 있다면 이 예제가 어떻게 작동하는지 이해하는 데 어려움이 없을 것입니다.

마지막으로 중간 변수의 사용을 제거하여 마지막 예제의 코드 줄 수를 최대한 짧게 유지하겠습니다. 실제 응용 프로그램에 사용되는 "산업 코드" 샘플을 얻을 것입니다.

이는 자신이 하고 있는 일을 잘 이해한 경우에만 수행해야 합니다. 코드가 매우 복잡한 경우 나중에 자신의 코드를 더 쉽게 이해할 수 있도록 중간 변수를 남겨 두는 것이 허용됩니다. 또한 모든 코드에는 최소한 최소한의 주석만 달아야 합니다. 그래야 시간이 지나면 프로그램의 텍스트를 다루는 것이 더 쉬워질 것입니다.

MyTR 루프의 각 CurrentRow에 대해 // 라인을 반복합니다. Report(" ======= Line # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); For Each CurrentColumn From MyTr.Columns Loop // 열을 반복합니다. Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); 엔드사이클; 신고하기(" "); 엔드사이클;

화면의 출력은 변경되지 않았으며 이전 예와 동일하게 유지됩니다.

2주 코스

"초보자를 위한 1C 프로그래밍"

강좌가 이메일로 전송됩니다. 단계별 작업을 완료하여 프로그래머가 되십시오.

참여하는 데 필요한 것은 컴퓨터와 인터넷뿐입니다.

강좌 무료 이용:

sp-force-hide ( 디스플레이: 없음;).sp-form ( 디스플레이: 블록; 배경: #eff2f4; 패딩: 5px; 너비: 270px; 최대 너비: 100%; 테두리 반경: 0px; -moz-border -반경: 0px; -webkit-border-radius: 0px; 글꼴 계열: Arial, "Helvetica Neue", sans-serif; 배경 반복: 반복 없음; 배경 위치: 중앙; 배경 크기: 자동;) .sp-form 입력(디스플레이: 인라인 블록; 불투명도: 1; 가시성: 표시;).sp-form .sp-form-fields-wrapper(여백: 0 자동; 너비: 260px;).sp-form .sp -form-control ( 배경: #ffffff; 테두리 색상: #cccccc; 테두리 스타일: 단색; 테두리 너비: 1px; 글꼴 크기: 15px; 왼쪽 패딩: 8.75px; 오른쪽 패딩: 8.75px; 테두리 -반경: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; 높이: 35px; 너비: 100%;).sp-form .sp-필드 라벨( 색상: #444444; 글꼴- 크기: 13px; 글꼴 스타일: 일반; 글꼴 두께: 굵은 글꼴;).sp-form .sp-버튼( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; 배경색: #f4394c;색상: #ffffff;너비: 100%;글꼴 두께: 700; 글꼴 스타일: 일반 글꼴 모음: Arial, "Helvetica Neue", sans-serif; 상자 그림자: 없음 -moz-box-shadow: 없음; -webkit-box-shadow: 없음; 배경: 선형 그라데이션(위로, #e30d22 , #f77380);).sp-form .sp-button-container ( 텍스트 정렬: 중앙; 너비: 자동;)

돈과 상품을 고려하기 위해 비즈니스에서는 다양한 테이블이 널리 사용됩니다. 거의 모든 문서는 테이블입니다.

한 테이블에는 창고에서 배송될 상품이 나열되어 있습니다. 다른 표에는 이러한 상품에 대한 지불 의무가 있습니다.

따라서 1C에서는 테이블 작업이 눈에 띄는 위치를 차지합니다.

1C의 테이블은 "테이블 부분"이라고도 합니다. 참고서, 문서 및 기타 자료가 있습니다.

쿼리는 실행 결과로 두 가지 방법으로 액세스할 수 있는 테이블을 반환합니다.

첫 번째 - 더 빠른 선택, 행 가져오기는 순서대로만 가능합니다. 두 번째는 쿼리 결과를 값 테이블로 언로드한 다음 이에 대한 무작위 액세스입니다.

//옵션 1 - 쿼리 결과에 대한 순차적 액세스

// 테이블 가져오기
선택 = Query.Execute().Select();
// 쿼리 결과의 모든 행을 순서대로 우회합니다.
While Selection.Next() 루프
보고서(선택.이름);
엔드사이클;

//옵션 2 - 값 테이블에 업로드
Query = New Query("디렉토리에서 이름 선택.명칭");
// 테이블 가져오기
테이블 = 쿼리.실행().업로드().
// 그러면 모든 줄을 우회할 수도 있습니다.
테이블 루프의 각 행에 대해
보고서(문자열.이름);
엔드사이클;
//또는 문자열에 임의로 액세스
String = Table.Find("삽", "이름");

중요한 특징은 쿼리 결과로 얻은 테이블에서 모든 열이 강력한 형식으로 지정된다는 것입니다. 즉, 명명법 조회에서 이름 필드를 요청하면 허용되는 길이가 N자 이하인 문자열 유형의 열을 받게 됩니다.

양식의 표(thick client)

사용자는 테이블이 양식에 배치될 때 테이블을 사용하여 작업합니다.

우리는 다음 단원과 단원에서 양식 작업의 기본 원칙에 대해 논의했습니다.

이제 폼에 테이블을 배치해 보겠습니다. 이렇게 하려면 제어판에서 테이블을 드래그하면 됩니다. 마찬가지로 메뉴에서 Form/Insert 컨트롤을 선택할 수 있습니다.

데이터는 구성에 저장될 수 있습니다. 그런 다음 편집 중인 양식이 있는 구성 개체의 기존(이전에 추가된) 표 형식 부분을 선택해야 합니다.

데이터 속성에서 "..." 버튼을 클릭합니다. 표 형식 부분의 목록을 보려면 개체 분기를 확장해야 합니다.

표 형식 부분을 선택할 때 1C 자체는 양식의 표에 열을 추가합니다. 사용자가 이러한 테이블에 입력한 문자열은 디렉토리/문서와 함께 자동으로 저장됩니다.

동일한 데이터 속성에 임의의 이름을 입력하고 ValueTable 유형을 선택할 수 있습니다.

이는 임의의 값 테이블이 선택되었음을 의미합니다. 자동으로 열을 추가하지도 않고 자동으로 저장되지도 않지만 원하는 대로 무엇이든 할 수 있습니다.

테이블을 마우스 오른쪽 버튼으로 클릭하면 열을 추가할 수 있습니다. 열 속성에서 이름(1C 코드 참조용), 양식의 열 제목, 표 부분의 속성과의 연결(후자 - 임의의 표가 선택되지 않은 경우 표 형식)을 지정할 수 있습니다. 부분).

양식의 테이블 속성에서 사용자가 행을 추가/삭제할 수 있는지 여부를 지정할 수 있습니다. 더 고급 형식은 ViewOnly 확인란입니다. 이러한 속성은 편집용이 아닌 정보 표시용으로 테이블을 구성하는 데 유용합니다.

테이블을 관리하려면 폼에 명령 패널을 표시해야 합니다. 양식/컨트롤/명령 패널 삽입 메뉴 항목을 선택합니다.

명령 모음 속성에서 자동 완성 확인란을 선택하면 도구 모음의 버튼이 자동으로 나타납니다.

양식의 테이블(씬/관리 클라이언트)

관리되는 양식에서는 이러한 작업이 약간 다르게 보입니다. 양식에 표 형식 섹션을 배치해야 하는 경우 개체 분기를 확장하고 표 형식 섹션 중 하나를 왼쪽으로 끕니다. 그리고 그게 다야!

값 테이블을 배치해야 하는 경우 새 양식 속성을 추가하고 해당 속성(값 테이블)에서 유형을 지정합니다.

열을 추가하려면 이 양식 속성에서 마우스 오른쪽 버튼 메뉴를 사용하고 속성 열 추가 항목을 사용하세요.

그런 다음 테이블도 왼쪽으로 드래그합니다.

테이블에 명령 모음을 포함하려면 테이블 속성의 사용법 - 명령 모음 위치 섹션에서 값을 선택하세요.

테이블을 Excel로 내보내기

양식에 있는 모든 1C 테이블을 인쇄하거나 Excel에 업로드할 수 있습니다.

이렇게 하려면 테이블의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 목록 표시를 선택합니다.

관리되는(씬) 클라이언트에서는 모든 작업/표시 목록 메뉴 항목을 사용하여 유사한 작업을 수행할 수 있습니다.