• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Работа со спецификацией

Автор Sergey, 01.09.09, 13:39:55

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

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

Maxagg

Как изменить стиль пока сам незнаю а вот все остальное

http://delphivs.ucoz.ru/load/ehksperimenty_s_specifikaciej/1-1-0-3

sorockinalex1

посмотрел пример по ссылке выше.
по-моему неправильно работает, а именно:
1. создаётся файл, стиль №1. справа пишется, что 17... или я что-то не понимаю. объясните!
2. для созданного стиля №1 заходим сервис-библиотеки стилей-стили спецификаций-выбираем с номером №1-редавтировать-вкладка 'разделы'-выбираем раздел 'документация'-чуть ниже нажимаем 'редактировать'-вкладка 'колонки'
Смотрим: колонки 'зона' и 'позиция' отмечены значком замка - на них не стоит галочка 'колонка в разделе заполняется'.
А справа снизу в примере на все колонки стоит свойство edit:1.... Хотя, для колонок 'зона' и 'позиция' должен стоять 0... Как всё же выцепить эти нолики?????
-----
добавил позже:
понял в чём дело - свойство edit везде 1, так как как бы для всех разделов в сумме. То есть для первого раздела эти поля не заполняются, а для другого заполняются, вот и получается что как бы заполняются, но ведь для первого раздела они не заполняются! А нужно выцепить свойство редактируемости колонки КОНКРЕТНОГО раздела в отдельности! как это сделать?

sorockinalex1

УРАААА! случайно получилось ))))))
Заменил
arr2:=ksdynamicarray(spcstlpar.GetArrColumn);
на
arr2:=ksdynamicarray(spcstlsecpar.GetArrColumn);

Maxagg

№17 и №18 это не стиль спецификации а стиль оформления 1листа спецификации и последующих
Ответ с edit ами разделов нашли правильно.

sorockinalex1

насчёт 17 и 18 - где эти числа в компасе можно посмотреть? просто не понимаю про что речь...

sorockinalex1

ребят, помогите!
не получается получить styleId открытой спецификации!
    ConnectToKompas();
    spcDoc:= ksSpcDocument(Kompas.SpcDocument);
    spcDoc.ksOpenDocument(FileName, 0);    //Открыть документ-спецификацию.
    //ищем все разделы спецификации
    //берем в работу текущий лист спецификации
    spec:=ksspecification(spcdoc.GetSpecification);
    //структура параметров спецификации
    spcstlpar:=ksSpcStyleParam(kompas.GetParamStruct(ko_SpcStyleParam));
    //инициация
    spcstlpar.Init;
    //структура параметров раздела спецификации
    spcstlsecpar:=ksSpcStyleSectionParam(kompas.GetParamStruct(ko_SpcStyleSectionParam));
    //инициация
    spcstlsecpar.Init;
    //структура параметров колонок спецификации
    spcstlcolpar:=ksSpcStyleColumnParam(kompas.GetParamStruct(ko_SpcStyleColumnParam));
    //инициация
    spcstlcolpar.Init;

    spcdescrpar:=ksSpcDescrParam(kompas.GetParamStruct(ko_SpcDescrParam));
    spcdescrpar.Init;
    showmessage(inttostr(spcdescrpar.styleId));


showmessage в последней строке выдаёт 0... в чём дело?

sorockinalex1

как узнать при переборе объектов в спецификации при поиске и базовых и вспомогательных (2) - базовый он или вспомогательный???

sorockinalex1

и ещё очень важный вопрос. подскажите как при считывании строк из спецификации считывать символы переноса строки? А то я заполняю StringGrid, беру строки из спецификации, а при вставке в StringGrid символа переноса как будто и не было.... ((((

sorockinalex1

Друзья, помогите пожалуйста!

sorockinalex1

возникла проблема при чтении групповой спецификаций с исполнениями... Указываю исполнение при записи спецификации, а в документ ничего не пишется...

sorockinalex

вопрос:
Если стиль спецификации GRAPHIC.LYT лежит в сети, то при переборе объектов спецификации, при чтениии ячеек постоянно работает винчестер, процесс сильно затормаживается... В чём дело? Зачем каждый раз при переборе объектов обращаться к стилю??? В программе стиль указывается только при создании итератора...

и ещё вопрос:
как собрать массив TEXT_LINE_ARR для использования совместно с ksSetSpcObjectColumnTextEx?
так, как я сделал не работает - пустые строчки получаются... поправьте код, пожалуйста! очень нужно!!!

function BuildSpecificationInKompas:bool;
var
  piserparam:ksuserparam;
  pitem:ksltvariant;
  parr:ksdynamicarray;
  i,j,k,m,n:integer;
  ZeroRow:bool;
  s,s1:String;

textlinepar:ksTextLineParam;
textitempar:ksTextItemParam;
cellstring:ksDynamicArray;
linearr:ksDynamicArray;
begin

  //?enoei oaaeeoo io ionouo no?ie
  DeleteEmtyRows;
  //I?euaai niaoeoeeaoe? a eiiiana
  ClearCurrentSpecification;
  For i:=0 to (Specification[0].SectionsCount-1) do
  begin
    For k:=1 to (Specification[0].StringGrid[i].RowCount-1) do
    begin
      spec.ksSpcObjectCreate(Specification[0].SpcLayoutName, Specification[0].SpcStyleId, Specification[0].Section[i].SectionNumber, 0, 0, 0);
      For j:=1 to Specification[0].Section[i].EditableColonsCount do
      begin
      spec.ksSetSpcObjectColumnText(Specification[0].Section[i].Colon[j].ColonType,Specification[0].Section[i].Colon[j].ColonNumberOfType,0,Specification[0].StringGrid[i].Cells[j,k]);


      textlinepar:=ksTextLineParam(kompas.GetParamStruct(ko_TextLineParam));
      textlinepar.Init;
      textitempar:=ksTextItemParam(kompas.GetParamStruct(ko_TextItemParam));
      textitempar.Init;
      cellstring:=ksDynamicArray(kompas.GetDynamicArray(TEXT_LINE_ARR));
      s1:=Specification[0].StringGrid[i].Cells[j,k];

      while AnsiPos(Chr(13)+Chr(10),s1)<>0 do
      begin
        s:=AnsiMidStr(s1, 1, AnsiPos(Chr(13)+Chr(10),s1)-1);
        s1:=AnsiMidStr(s1, AnsiPos(Chr(13)+Chr(10),s1)+2, Length(s1));
        showmessage('s:'+s+#13#10+'s1:'+s1);
        for m:=0 to (Length(s)-1) do
        begin
          textitempar.s:=MidStr(s, m+1, 1);
          showmessage('textitempar.s:'+textitempar.s);
          linearr:=ksDynamicArray(kompas.GetDynamicArray(TEXT_ITEM_ARR));
          linearr.ksAddArrayItem(m, textitempar);
        end;
        textlinepar.SetTextItemArr(linearr);
        cellstring:=ksDynamicArray(kompas.GetDynamicArray(TEXT_LINE_ARR));
        cellstring.ksAddArrayItem(n,textlinepar);
        n:=n+1;
      end;

      spec.ksSetSpcObjectColumnTextEx(Specification[0].Section[i].Colon[j].ColonType,Specification[0].Section[i].Colon[j].ColonNumberOfType,0,cellstring);
      end;
      spec.ksSpcObjectEnd;
    end;
  end;
end;

sorockinalex

сделал без использования массива:
        s:=StringReplace(s1, #13#10, #10,[rfReplaceAll]);
а дальше spec.ksSetSpcObjectColumnText

sorockinalex

вот с этим вопросом реально не могу разобраться (((
помогите, а?
как при чтении объектов спецификации узнать базовый это объект или вспомогательный?

sorockinalex1

Блин, не дождался ответа. временно сделал таким образом:
1. Прошёлся итератором по документу в поиске базовых объектов (0), записал динамический массив записей номер объекта, тип объекта - базовый
2. Прошёлся итератором по документу в поиске вспомогательных объектов (1), продолжил динамический массив записей номер объекта, тип объекта - вспомогательный
теперь общим итератором (2 - базовые и вспомогательные) читаю объекты и сравниваю номера с номерами в массиве, забираю тип объекта из массива...

НовичЁк

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

Slaviation

См. ksDocument2D::ksSpecificationOnSheet

НовичЁк

А не можешь поделиться немного кодом, как ее использовать.....)))))

Slaviation

См. ...SDK\C++\VisualcAUTO\step10\step10.cpp, к примеру функция void CreateDet( ksDocument2D& doc )
В конце функции добавляешь еще одну строку: doc.ksSpecificationOnSheet(1)

НовичЁк


НовичЁк

как он узнает какую именно спецификацию он должен отобразить на чертеже, если она например находится в отдельном файле???