Re: Как добавить учетную карточку?

вот на этой строчке

BalanceNmkCards.ClassificatorID:= 92;

несоответствие типов? точно? текст ошибки

Re: Как добавить учетную карточку?

С несоответствием типов я может погорячился...
Текст ошибки:

Project ... raised exception class EMSError with message Syntax error converting the varchar value sa to a column of data type int.
Exception. Нужно задать классификатор <KeyErr>. Process stopped...

Re: Как добавить учетную карточку?

AlexB писал(а):
С несоответствием типов я может погорячился...
Текст ошибки:

Project ... raised exception class EMSError with message Syntax error converting the varchar value sa to a column of data type int.
Exception. Нужно задать классификатор <KeyErr>. Process stopped...

это означает, что ClassificatorID =92 не существует!

Re: Как добавить учетную карточку?

А как можно получить ID классификатора, зная ID цеха?

Re: Как добавить учетную карточку?

Никак.
Для чего Вам нужно знать идентификатор классификатора номенклатуры, которой нет в списке?

TechnologiCS Help писал(а):
IBalanceNmkCards.ClassificatorID (PropertyGet)
Возвращает: идентификатор классификатора учетной карточки, если в текущем цехе/участке в списке номенклатуры нет текущей номенклатуры, то -1

Re: Как добавить учетную карточку?

В общем и целом мне нужно добавить карточку к номенклатуре, исходя из примера в справке я делаю тоже самое в Delphi. Пример:

Sub Test()
    Dim NMks
    Dim NMkId
    Dim DepartmentID
    Dim BalanceNmkCards
    Dim I
    Dim CardClassificator
    Dim CardClassificatorID
    Dim Number, Comment, Price, NmkPartID, SerialNumberID, ShowDialog, DialogCaption
    If TCSApp.NmkClasses.RunModuleForSelect("Выберите класс", False) Then   
        Set NMks = TCSApp.Nomenclatures(TCSApp.NmkClasses.Properties("ID").AsInteger)
        
        If NMks.RunModuleForSelect("Выберите номенклатуру", False) Then

            NMkId = NMks.Properties("ID").AsInteger
    
            If TCSApp.PlantDepartments.RunModuleForSelect("Выберите цех/участок", False) Then

                DepartmentID = TCSApp.PlantDepartments.Properties("ID").AsInteger
                
                Set BalanceNmkCards = TCSApp.Inventory.BalanceNmkCards( DepartmentID, NMkId )
                BalanceNmkCards.Refresh

                If BalanceNmkCards.ClassificatorID = -1 Then 'если у цеха нет такой номенклатуры
                    
                    Set CardClassificator = TCSApp.Inventory.BalanceNmkCardClassificator( DepartmentID )
                    If CardClassificator.ShowModal("Выберите классификатор") = 1 Then
                        BalanceNmkCards.ClassificatorID = CardClassificator.DbTree.Selected.NodeId
                    Else
                        Exit Sub
                    End If
                    Set CardClassificator = Nothing
                
                End If
                
                Number = ""
                Comment = ""
                Price = 0
                NmkPartID = -1
                SerialNumberID = -1
                ShowDialog = 0
                DialogCaption = ""
                DateOpening = Date()
                                    
                I = BalanceNmkCards.AddNmkCard( Number, Comment, Price, NmkPartID, SerialNumberID, ShowDialog, DialogCaption, DateOpening )
                     
                I = BalanceNmkCards.ShowModal("Учетные карточки")
            
                Set BalanceNmkCards = Nothing

            End If
        
        End If

    End If

End Sub

Все замечательно, я переписал код, но мне нужно, чтобы классификатор выбирался без участия пользователя, т.е. примерно так:

BalanceNmkCards.ClassificatorID = Число

Вот и хочется узнать: как получить это самое Число исходя из ID цеха. Надеюсь Вы меня поняли.

Re: Как добавить учетную карточку?

В данном случае классификатор представляет из себя дерево для фильтрации (как в номенклатурном справочнике), которое не зависит от содержания грида.
Я складываю новые карточки в голову дерева:

Set ICardClassificator = TCSapp.Inventory.BalanceNmkCardClassificator(DepartmentID)
BalanceNmkCards.ClassificatorID = ICardClassificator.DbTree.RootNodes.Item(0).NodeId

Либо самостоятельно создавайте новую веточку дерева и туда складывайте.

Re: Как добавить учетную карточку?

Вот это и было нужно, спасибо.
Еще пару вопросов, не связанных с темой:
1. У меня в Delphi почему то время от времени вываливается вот такая ошибка:

Project ... raised exception class EOutOfMemory with message 'Out of memory'. Process stopped. Use Step or Run to continue.

На строчке:

if Login then ...

Функция Login выглядит вот так:

function Login(): Boolean;
begin
  CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
  try
    TCS:= CreateOLEObject('CSDN.TCS') as ITCS;
    if Assigned(TCS) then
      App:= TCS.LoginEx('name', 'passwd');
  except
    on E: Exception do
    begin
      MessageDlg('Не могу соеденится с ТКС', mtError, [mbOk], 0);
      frmMain.Close;
    end;
  end;
  Result:= True;
end;

Не пойму почему она появляется, причем не только в этом проекте. Может сталкивались с таким?
2. Если заменить строчку

App:= TCS.LoginEx('name', 'passwd');

на

App:= TCS.LoginCurrent;

Запустить ТКС и потом программу то появляется вот такая ошибка:

 Project ... raised exception class ENipCouldNotBindSocket with message 'Could not bind socket. Address and port are alredy in use.'

Может и такое было или я что то не то делаю?

Re: Как добавить учетную карточку?

не используйте многопоточность

Re: Как добавить учетную карточку?

CoInitialize(nil);

не помогает  :(

Re: Как добавить учетную карточку?

AlexB писал(а):

CoInitialize(nil);

не помогает  :(

не используйте многопоточность совсем

Re: Как добавить учетную карточку?

А по второму вопросу?

Re: Как добавить учетную карточку?

а это все к одному и тому же

Re: Как добавить учетную карточку?

С

App:= TCS.LoginCurrent;

что то не получается.

Re: Как добавить учетную карточку?

AlexB писал(а):
С

App:= TCS.LoginCurrent;

что то не получается.

т.е. Вы хотите сказать, что в API не работает LoginCurrent?

Re: Как добавить учетную карточку?

Нет, в скомпилированном проекте все работает, а когда запускаешь из Delphi появляется ошибка. Вот и хотел спросить, может кто сталкивался с такой проблемой. Просто когда пишешь программу, при отладке удобнее запускать ее из делфи и присоединяться к текущему сеансу.

Re: Как добавить учетную карточку?

сталкивался :( но не придумал как её победить

Re: Как добавить учетную карточку?

Ясно, спасибо всем ответившим, тему в принципе можно закрывать.

Re: Как добавить учетную карточку?

а Вы не пробовали ли "продолжить" после появления ошибки?

Re: Как добавить учетную карточку?

Пробовал, если нажать OK, пару раз F8, после перехода в редактор. После этого ошибка "проглатывается" и выполнение идет дальше.

Re: Как добавить учетную карточку?

AlexB писал(а):
пару раз F8

можно 1 раз ф9 smile
соответственно при должном желании можно автоматизировать этот процесс...но это к "использованию ТКС АПИ" отношения не имеет...

Re: Как добавить учетную карточку?

Все можно... ;)

Re: Как добавить учетную карточку?

кстати, есть в дэлфЕ Debugger Options  - там можно галочку снять и ошибка эта Вас больше не побеспокоит...
но так не интересно smile

Re: Как добавить учетную карточку?

Вы имеете ввиду галочку Stop on Delphi Exceptions?

Re: Как добавить учетную карточку?

ага...её самую smile