условные наименования исполнений в графе "Код" (групповая спецификация)

Автор chum, 30.06.14, 17:38:09

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

chum

Добрый день, форумчане.

Создаю программно групповую спецификация (вариант Б)
ГОСТ 2.113-75 Ф.1, 1а. (номер 17).
Вопрос касается заполнения штампа. С основной надписью проблем нет, а вот с заполнением ячеек "Код" и "Лит." для каждого исполнения  - возникли... (Эти ячейки расположены на первом листе под колонками "Кол. на исполнение")
Мои действия:
1. Сначала вручную заполняю эти эти ячейки, при этом записывая макрос, чтобы посмотреть номера граф штампа.
Получилось, что для основного исполнения номера такие:
  "Код" = 2001 и три ячейки для "Лит." 2002, 2003, 2004
Для первого исполнения:
  "Код" = 2011 и три ячейки для "Лит." 2012, 2013, 2014
Для второго исполнения:
  "Код" = 2021 и три ячейки для "Лит." 2022, 2023, 2024 и т.д.

2. Теперь, зная номера нужных мне граф, записываю в них значения программно.
Пробовалось два варианта, но нужного результата не дали:
  if (OpenStampEx(1) > 0) then
  begin
    if ColumnNumber(2001) = 1 then //номер 2001 - для графы "Код" для основного исполнения
    begin
      if TextLine(NEW_LINE, 0, nil, PAnsiChar('АБВГ')) = 1 then
        //сюда попадаем, но текст в ячейке "Код" для основного исполнения не появляется
    end;
    CloseStamp();
  end;

Может быть, надо в TextLine первые два параметра изменить, чтобы заработало?

Вторым вариантом было "повторение" действий из макроса, только на Delphi:
procedure  TfrmMain.FillStampCell(colnum, iSNumb: integer; value: AnsiString);//colnum - номер графы, iSNum - номер спецсимвола
var
  TextLinePar: ksTextLineParam;
  TextItemArr: ksDynamicArray;
  TextItemPar: ksTextItemParam;
  TextItemFontPar: ksTextItemFont;
begin
  if Kompas = nil then
    exit;
  if Stamp = nil then
    exit;
  Stamp.ksColumnNumber(colnum);
  TextLinePar := ksTextLineParam(Kompas.GetParamStruct(ko_TextLineParam));
  TextLinePar.Init();
  TextLinePar.style := 32768;

  TextItemArr := ksDynamicArray(Kompas.GetDynamicArray(4));

  TextItemPar := ksTextItemParam(Kompas.GetParamStruct(ko_TextItemParam));
  TextItemPar.Init();
  TextItemPar.iSNumb := iSNumb;
  TextItemPar.s := value;
  TextItemPar.type_ := 0;

  TextItemFontPar := ksTextItemFont(TextItemPar.GetItemFont());
  TextItemFontPar.Init();
  TextItemFontPar.bitVector := 4096;
  TextItemFontPar.color := 0;
  TextItemFontPar.fontName := 'GOST type A';
  TextItemFontPar.height := 5.0;
  TextItemFontPar.ksu := 1.0;

  TextItemArr.ksAddArrayItem(-1, TextItemPar);
  TextLinePar.SetTextItemArr(TextItemArr);
  Stamp.ksTextLine(TextLinePar);

  TextItemArr.ksDeleteArray;
  TextItemFontPar := nil;
  TextItemPar := nil;
  TextLinePar := nil;
end;


И, соответственно, перед вызовом FillStampCell(2001, 0, 'АБВГ') делаю
  Stamp := ksStamp(spcDoc.GetStamp());
  Stamp.ksOpenStamp();

..................
а после вызова - Stamp.ksCloseStamp();

Этим способом заполняются ячейки основной надписи, но в те, которые нужно заполнить мне, значения не попадают.
Да и макрос, отрабатывает без ошибок, но ячейки - пустые...
Была мысль, что, может быть, они относятся не к штампу, но смутило, что вручную их, так же, как и ячейки штампа, можно заполнить только в режиме разметки страниц... да и в записанном макросе идет обращение к штампу....

Во вложении скрин с групповой спецификацией, где показано, какие колонки надо заполнить