У вас есть 2 пути:
1 - через маркировку записей показывать/скрывать
2 - Сделать форму на временной таблице, показывать/срывать записи через удаление/добавление записей или через фильтры
2ой вариант более надежен, пользователь ничего не поломает.
Создаете форму, предположим, на 37 таблице.
В свойствах указываете SourceTableTemporary = Yes
Первым полем надо сделать +/-. Я бы для этого использовал некое поле в 37, например "Allow Item Charge Assignment".
Добавляем на форму в табличную часть PictureBox, в его свойствах указываем Source Expression = "Allow Item Charge Assignment",
Bitmap List - 46,47
Затем добавляем поля Тип документа, Номер Документа, Код Товара, Описание, Кол-во
При открытии формы необходимо заполнить таблицу данными:
Код:
Sales.Header.RESET;
SalesHeader.SETCURRENTKEY(...);
SalesHeder.SETRANGE("Customer No.", 'C00001');
SalesHeder.SETRANGE(...);
IF SalesHeader.FINDSET THEN
REPEAT
Clear(rec);
"Document Type" := SalesHeader."Document Type";
"Document No." := SalesHeader."No.";
"Line No." := -1;
"Allow Item Charge Assignment" := TRUE;
INSERT(FALSE); // Никаких тригеров не должно быть!
SalesLine.RESET;
SalesLine.SETRANGE("Document type", SalesHeader."Document Type");
SalesLine.SETRANGE("Document No.", SalesHeader."No.");
IF SalesLine.FINDSET THEN
REPEAT
Rec := SalesLine;
"Allow Item Charge Assignment" := FALSE;
Insert(FALSE);
UNTIL SalesLine.NEXT = 0;
UNTIL SalesHeader.NEXT = 0;
Остается только запрограммировать открытие/скрытие записей.
Для этого можно использовать еще одно поле 37, на которое предварительно наложили фильтр.
Те записи, которые необходимо отобразить, должны будут в этом поле иметь значение, удовлетворяющее фильтру.
К примеру, код раскрытия/скрытия может быть примерно следующим:
Код:
IF "Line No." <> -1 THEN
EXIT;
Rec2.COPY(Rec); // Rec2 - тоже 37
RESET;
SETRANGE("Document Type", "Document Type");
SETRANGE("Document No." "Documnt No.");
SETFILTER("Line No.", '>0');
IF FINDSET(TRUE) THEN
REPEAT
"Поле Видимости" := NOT Rec2."Allow Item Charge Assignment";
MODIFY;
UNTIL NEXT = 0;
Rec.COPY(Rec2);
"Allow Item Charge Assignment" := NOT "Allow Item Charge Assignment";
MODIFY;
CurrForm.UPDATE(FALSE);
Если захочется, чтобы у строк вообще не было +/-, то BitMap List должен быть 1001,46,47, в качестве Source Expression должна быть переменная типа integer.