값 테이블에서 검색 1C

존재하는 방법과 동시에 여러 값을 검색하는 방법.

값 테이블을 검색하는 두 가지 특별한 방법이 있습니다.

1. 찾기

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
// 검색 속도를 높이기 위해 검색할 열을 지정할 수도 있습니다.
FoundString = TKNomenclature.Find(TVHorizon, "명명");

이 메서드는 찾고 있는 값으로 찾은 첫 번째 문자열을 반환하거나 찾지 못하면 Undefined를 반환합니다. 따라서 고유한 값을 검색하는 데 사용하는 것이 편리합니다. 그렇지 않으면 값을 찾을 때 다음 값을 찾기 위해 테이블에서 해당 값을 삭제해야 합니다.

이와 같은 고통을 겪지 않기 위해 적합한 문자열 배열을 찾을 수 있는 다음과 같은 방법이 있습니다.

2. 문자열 찾기


선택 Structure.Insert("명명", TVHorizon); // 먼저 검색할 열을 지정한 다음 검색할 항목을 지정합니다.

이 메서드는 항상 배열을 반환하지만 아무 것도 발견되지 않으면 비어 있을 수 있습니다. 그리고이 방법은 이전 방법과 마찬가지로 값 테이블의 행을 별도의 배열에 반환하지 않고 값 자체를 반환합니다. 따라서 배열 행의 값을 변경하거나 이전 방법과 같이 찾은 행에 대해 처리된 값 테이블의 값을 변경합니다.

이 방법의 또 다른 장점은 값 테이블의 여러 열을 한 번에 검색할 수 있다는 것입니다.


SelectionStructure = 새 구조체;
선택 Structure.Insert("명명", TVHorizon);
선택 Structure.Insert("수량", 10);
FoundStringArray = TKNomenclature.FindStrings(선택 구조);

보시다시피 유일한 부정적인 것은 "같음"이 아닌 다른 유형의 비교를 사용할 수 없다는 것입니다.

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

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 = Structure("직원", 조회값);
ArrayFoundStrings = ValueTable.FindStrings(검색 구조);


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

7. 임의의 순서로 값 테이블을 반복하는 방법

ValueTable 루프의 각 CurrentRow에 대해
보고서(현재라인.이름);
종료 주기;

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

SeniorIndex = ValueTable.Count() - 1;
MF = 0의 경우 SeniorIndex 주기에 의해
보고서(값표[카운트].이름);
종료 주기;


8. 기존 값 테이블 행 삭제

ValueTable.Delete(RemoveRow);

인덱스별

ValueTable.Delete(0);


9. 값 테이블의 기존 열 삭제

ValueTable.Columns.Delete(열 제거);


인덱스별

ValueTable.Columns.Delete(0);

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

10. 컬럼 이름이 변수에 포함되어 있는 경우 값 테이블을 채우는 방법은 무엇입니까?

NewRow = ValueTable.Add();
NewRow[ColumnName] = 값;


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

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


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

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

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

TableReceiver = TableOriginal.Copy();


옵션 2: 테이블 TableReceiver가 존재하고 열 데이터 유형에 대한 제한과 열을 잃는 것은 유감입니다. 그러나 이름이 소스 테이블의 이름과 일치하는 열에 대한 데이터를 채워야 합니다.

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

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


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

테이블에 동일한 이름의 열이 없으면 대상 테이블은 원본 테이블의 행 수만큼 null 값이 있는 행으로 끝납니다.
동일한 이름의 일부 열에 대해 원본 테이블의 데이터 값 유형이 대상 테이블 열의 허용된 유형 배열에 속하지 않으면 해당 필드에 빈 값이 표시됩니다.
세 번째 경우를 생각해보자. 동일한 이름을 가진 열의 경우 대상 테이블의 열은 원본 테이블의 열과 완전히 일치해야 합니다.

이름이 일치하는 열에 대한 전체 데이터 복사

SimilarColumns = 새로운 Array();

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

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

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

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

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

// 일치하는 열의 다음 이름을 배열에 추가합니다.
같은 이름Columns.Add(Column.Name);

EndIf;

종료 주기;

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

// 추가하다 개행대상 테이블로 이동합니다.
NewString = TableReceiver.Add();

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

종료 주기;

종료 주기;


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

13. 유형 제한이 있는 "값 테이블" 값 테이블에 열을 추가하는 방법은 무엇입니까?

열을 추가할 때 단순히 이름을 지정할 수 있으며 Add() 메서드의 두 번째 매개 변수는 건드리지 않습니다. 이 경우 열의 데이터 유형은 임의적입니다.

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

// 테이블 가져오기
선택 = Query.Execute().Select();
// 쿼리 결과의 모든 행을 순서대로 무시
동안 Selection.Next() 루프
보고서(선택.이름);
종료 주기;

//옵션 2 - 값 테이블에 업로드
Query = New Query("디렉터리에서 이름 선택. 명명법");
// 테이블 가져오기
테이블 = Query.Execute().Upload().
// 모든 라인을 우회할 수도 있습니다.
테이블 루프의 각 행에 대해
보고서(문자열.이름);
종료 주기;
//또는 임의로 문자열에 액세스
String = Table.Find("삽", "이름");

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

양식의 테이블(일반 클라이언트)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

열을 추가하려면 이 양식 속성에서 마우스 오른쪽 버튼 메뉴인 속성 열 추가 항목을 사용합니다.

그런 다음 테이블도 왼쪽으로 끕니다.

테이블에 명령 모음이 있도록 하려면 테이블 속성에서 사용법 - 명령 모음 위치 섹션에서 값을 선택합니다.

표를 Excel로 내보내기

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

이렇게하려면 마우스 오른쪽 버튼을 클릭하십시오. 자유 공간을 클릭하고 목록 표시를 선택합니다.

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