Не работает опреатор Insert current

ПНР и сопровождение

Модераторы: m0p3e, edward_K, Модераторы

Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Не работает опреатор Insert current

Сообщение Zver »

Уважаемые форумчане, нужна помощь!

Перешли на версию 5.4.41.0 с 5.4.38.5.

После перехода на новую версию в одном из алгоритмов перестал работать оператор Insert current.

Во время выполнения алгоритма появляется окно с сообщением
"Внутренняя ошибка интерфейса доступа к базе данных".

В логе ms70drv.log для каждого поля таблицы, в которую производится вставка, появилась запись вида:

42000: [Microsoft][ODBC SQL Server Driver][SQL Server]The column name 'F$CADOC' is specified more than once in the SET clause. A column cannot be assigned more than one value in the same SET clause. Modify the SET clause to make sure that a column is updated only once. If the SET clause updates columns of a view, then the column name 'F$CADOC' may appear twice in the view definition.

База данных - MS SQL server 2008 R2.

С чем это может быть связано?
Программист-самоучка
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Den »

в принципе в сообщении сказано в чем причина вроде однозначно

это нужно Ваш код в студию..а еще после перехода chmssql запускали ?
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Zver »

Спасибо за совет, попробуем запустить chmssql.

Сам исходный код довольно большой, и большая его часть не относится к рассматриваемой проблеме,
поэтому приведу только блок, в котором возникает ошибка, чтобы не перегружать излишней информацией.

snKatSopr.buffer := bufKatSopr; // это переменная типа type$KatSopr, которая предварительно заполняется из XML-файла.

Insert snKatSopr set // вот здесь возникает ошибка
snKatSopr.dSopr = bufKatSopr.dSopr
,snKatSopr.Nsopr = bufKatSopr.Nsopr
,snKatSopr.VhodNal = bufKatSopr.VhodNal
,snKatSopr.cNote = bufKatSopr.cNote;
Программист-самоучка
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Не работает опреатор Insert current

Сообщение edward_K »

А вы уверены что здесь? В сообщении говорится о поле CADOC.
Да и проверьте изменилось ли версия namssql (при смене атлантиса это нужно всегда проверять), через msinst ее надо подкладывать на сервер в папку bin SQL. Возможно также причина в тригере на katsopr на сервере - не правили на сервере чего? Если делать обычную работу с накладными сообщение появляется?
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Masygreen »

вот так проваславнее будет не ?

Код: Выделить всё

snKatSopr.buffer := type$KatSopr(bufKatSopr);
Время ведет!
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Zver »

Вот весь код целиком,

chmssql запустили на выходных, когда ни один пользователь не работал - не помогло,
namssql тоже был поставлен новый при обновлении,
snKatSopr.buffer := type$KatSopr(bufKatSopr) - это действительно правильней, но видимо дело не в этом, но код стал лучше, спасибо.

Есть ещё какие-либо рекомендации по направлению поиска путей устранения этой ошибки?

Выкладываю весь код интерфейса, надеюсь, что он не слишком большой.

Заранее благодарен за помощь.

Код: Выделить всё


#include KatSoprTransfer.vih
#include TransferHelper.vih
#include LinkGrPl.vih
#include ExtAttr.vih
#include SystemHelper.vih
#include GetKau.vih
#include TuneAssistent.vih
#include MsgDlg.vih

Interface KatSoprTransfer;

Const
  SAVE_MODE  : byte = 0;
  LOAD_MODE  : byte = 1;
  FORMAT_DATE: string[10] = 'DD/MM/YYYY';
  SEPARATOR  : string[1] = ';';
end;

var
  XMLPathName : string;
  PathComent  : string;
  Action_mode : byte;
  isCanceled  : boolean;
  KatSoprNrec : comp;
  noteStatus  : word;
  noteName    : string;
  sDBName     : string;
  cDBFilial   : comp;


  domDocument                 // ссылка на дом-документ
 ,rootNode                    // ссылка на корневой узел
 ,KatSoprsNode : longint;               // ссылка на узел корневого элемента <KatSoprs>
  cDog         : comp;  // ссылка на договор

  XML_NAME     : string;
#include ExtAttr.var
#include LinkGrPl.var
#include Getkau.var


create view vTransfer
from
 KatSopr
,SpSopr   (SPSOPR02)
,KatSopr  snKatSopr
,SpSopr   snSpSopr
,KatNotes
,KatNotes snKatNotes
,Dogovor
,KatMc
,ObjAccT
,ObjAccT snObjAccT
where
 ((
        KatSoprNrec   == KatSopr.Nrec
   and  KAtSopr.Nrec  == SpSopr.cSopr
   and  KatSopr.cNote == KatNotes.Nrec
   and  100           == snKatNotes.Viddoc
   and  noteStatus    == snKatNotes.Status
   and  noteName      == snKatNotes.Name
   and  cDog          == Dogovor.Nrec
   and  toKatSopr     == ObjAccT.TypeOwn
   and  KatSopr.Nrec  == ObjAccT.cOwner
   and  word(1)       == ObjAccT.KindRec
   and  toZClient     == ObjAccT.TypeObj
 )) ;


Procedure SaveToDsk; forward;
Procedure LoadFromDsk;  forward;


Window wSetSaveLoadPath '', Dialog, EscClose;
Show at (,,50, 5);

Screen scSetSaveLoadPath;
fields
 PathComent  : skip, {font = { bold = true}};
 XMLPathName : noProtect, PickButton;
buttons
  cmOk     ,,,;
  cmCancel ,,,;
<<
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

      <. Продолжить .>       <. Отменить  .>
>>

end;

HandleEvent
cmInit :
{
  isCanceled := true;

  case Action_mode of
  SAVE_MODE :
  {
    PathComent := 'Сохранять данные в папку:';
    SetWindowTitle(wSetSaveLoadPath, 'Выбор пути к сохраняемым данным');
  }
  LOAD_MODE:
  {
    PathComent := 'Загружать данные из папки:';
    SetWindowTitle(wSetSaveLoadPath, 'Выбор пути к загружаемым данным');
  }
  end;

  LoadFromDsk;
}

cmOk :
{
  if (Trim(XMLPathName) = '')
  {
     Message('Необходимо выбрать путь к данным', Warning) ;
      Abort;
       Exit;
  }

  isCanceled := false;
  SaveToDsk;
  CloseWindow(wSetSaveLoadPath);
}

cmPick :
{
  Case CurField of
    #XMLPathName :
     {
       Set XMLPathName  := GetDirName('Выберите путь к данным') ;
     }

  end;
}

end;

end; // Window


Function IsAllowedGroupMC(p_KodGr: string): boolean;
var deniedGroup
   ,tmpS        : string;
    i           : integer;
{
   result := true;

   if (not ExistTune('KATSOPRTRANSFER.MASK_GROUPMC'))
      exit;

   deniedGroup := Trim(sGetTune('KATSOPRTRANSFER.MASK_GROUPMC'));

   deniedGroup += SEPARATOR; // если в настройке не поставили разделитель - ставим, иначе будет некорректно работать ExtractDelimitedWord
   for (i := 1; ; i++)
   {
     if (deniedGroup = '' or deniedGroup = SEPARATOR)
        break;

      tmpS := Trim(ExtractDelimitedWord(deniedGroup, i, SEPARATOR));

      deniedGroup := Trim(SubStr(deniedGroup, length(tmpS) + 1, length(tmpS)));

      if (tmpS = '')
         continue;

      if (Pos(tmpS, p_KodGr) = 1)
      {
         result := false;
         break;
      }
   }

}

Procedure LoadFromDsk;
{
  ReadMyDSK (XMLPathName, 'KatSoprTransfer_XMLPathName', false);

  if (Trim(XMLPathName) = '')
  {
    Set XMLPathName := GetStringParameter('Files','OutputFilesDirectory',0);
  }
}


Procedure SaveToDsk;
{
  SaveMyDSK (XMLPathName, 'KatSoprTransfer_XMLPathName' );
}

Procedure SetAttribute(element :Longint; nameAttr, valueAttr:string);
{
    XMLDOMElement_SetAttribute(element, nameAttr, valueAttr)
}

Procedure AddSpSoprNode(SpSoprsNode: longint);
{
 var
   SpSoprNode : longint;

   SpSoprNode := XMLDOMDoc_CreateElement(domDocument, 'SpSopr');
   rootNode   := XMLDOMNode_AppendChild(SpSoprsNode, SpSoprNode);

   SetAttribute(SpSoprNode, 'ID'     , SpSopr.Nrec) ;
   SetAttribute(SpSoprNode, 'cMcUsl' , SpSopr.cMcUsl) ;
   SetAttribute(SpSoprNode, 'prMC'   , SpSopr.prMC) ;
   SetAttribute(SpSoprNode, 'Price'  , DoubleToStr(SpSopr.Price  , '[|-]3666666666666666666.8888888888888888')) ;
   SetAttribute(SpSoprNode, 'KolFact', DoubleToStr(SpSopr.KolFact, '[|-]3666666666666666666.8888888888888888')) ;
   SetAttribute(SpSoprNode, 'Kol'    , DoubleToStr(SpSopr.Kol    , '[|-]3666666666666666666.8888888888888888')) ;
   SetAttribute(SpSoprNode, 'Npp'    , SpSopr.Npp) ;
   SetAttribute(SpSoprNode, 'cOtpEd' , SpSopr.cOtpEd) ;

   XMLDOMNode_Release(SpSoprNode);
}

Procedure AddClaimNode(ClaimsNode: longint);
{
 var
   ClaimNode : longint;
   ClaimNode := XMLDOMDoc_CreateElement(domDocument, 'Claim');
   rootNode  := XMLDOMNode_AppendChild(ClaimsNode, ClaimNode);
   SetAttribute(ClaimNode, 'ID'     , ObjAccT.cObject) ;
   XMLDOMNode_Release(ClaimNode);
}

Procedure AddKatSoprNode;
{
 var
   KatSoprNode
 , ChildNode : longint;

   KatSoprNode := XMLDOMDoc_CreateElement(domDocument, 'KatSopr');
   rootNode    := XMLDOMNode_AppendChild(KatSoprsNode, KatSoprNode);

   SetAttribute(KatSoprNode, 'ID'     , KatSopr.Nrec) ;
   SetAttribute(KatSoprNode, 'VidSopr', KatSopr.VidSopr) ;
   SetAttribute(KatSoprNode, 'TipSopr', KatSopr.TipSopr) ;
   SetAttribute(KatSoprNode, 'dSopr'  , DateToStr(KatSopr.dSopr, FORMAT_DATE)) ;
   SetAttribute(KatSoprNode, 'nSopr'  , KatSopr.nSopr) ;
   SetAttribute(KatSoprNode, 'VhodNal', KatSopr.VhodNal);
   SetAttribute(KatSoprNode, 'OrgName', KatSopr.cOrg -> Name);


   if (getFirst KatNotes = tsOk)
    {
      SetAttribute(KatSoprNode, 'Note' , KatNotes.Status +'|'+ KatNotes.Name + '|') ;
    }

   if (getFirst SpSopr = tsOk)
    {
     ChildNode := XMLDOMDoc_CreateElement(domDocument, 'SpSoprs');
     rootNode  := XMLDOMNode_AppendChild(KatSoprNode, ChildNode);

      _Loop SpSopr
      {
         if (SpSopr.PrMc != toMc)
         {
            Message('Услуги не экспортируются!', Warning);
             continue;
         }

        AddSpSoprNode(ChildNode);
      }

      XMLDOMNode_Release(ChildNode);
   }
  if (getFirst ObjAccT = tsOk)
   {
     ChildNode := XMLDOMDoc_CreateElement(domDocument, 'Claims');
     rootNode   := XMLDOMNode_AppendChild(KatSoprNode, ChildNode);
     _Loop ObjAccT
      {
        AddClaimNode(ChildNode);
      }
     XMLDOMNode_Release(ChildNode);
   }

  XMLDOMNode_Release(KatSoprNode);
}


Function CreateXML(lMarker : longint): boolean;
var
  iCount
 ,Iterator        : word;
  node                        // вспомогательные
 ,nodeChild       : longint;  // узлы
{
  result := false;

  iCount := GetMarkerCount(lMarker);

  domDocument := XMLDOMDoc_New;

  if (domDocument = 0)
    Exit;

  node      := XMLDOMDoc_CreateProcessingInstruction(domDocument, 'xml', 'version="1.0" encoding="UTF-8" standalone="yes"');
  nodeChild := XMLDOMNode_AppendChild(domDocument, node);
  XMLDOMNode_Release(node);
  XMLDOMNode_Release(nodeChild);

  node             := XMLDOMDoc_CreateComment(domDocument, '"ЭП-Аудит". Экспорт сопроводительных документов');
  nodeChild        := XMLDOMNode_AppendChild(domDocument, node);
  XMLDOMNode_Release(node);
  XMLDOMNode_Release(nodeChild);

  KatSoprsNode    := XMLDOMDoc_CreateElement(domDocument, 'KatSoprs');
  rootNode        := XMLDOMNode_AppendChild(domDocument , KatSoprsNode);
  SetAttribute(KatSoprsNode, 'Database', SystemHelper::GetDatabaseName());
  SetAttribute(KatSoprsNode, 'Filial', GetCurrentBranch());

  StartNewVisual(vtIndicatorVisual, vfTimer, 'Создание XML-файла...', iCount);

  for (Iterator := 0; Iterator < iCount; Iterator++)
  {
     NextVisual;

     if (not GetMarker(lMarker, Iterator, KatSoprNrec))
       continue;

     if ( getFirst KatSopr = tsOk )
     {
       AddKatSoprNode;
     }

  }

  result := XMLDOMDoc_Save(domDocument, XMLPathName+XML_NAME);

  XMLDOMNode_Release(KatSoprsNode);
  XMLDOMNode_Release(rootNode);
  XMLDOMDoc_Done(domDocument);

  var  CliPath : string;

  if (IfDefServerApp)
  {
     PutSrvFileToClient(XMLPathName+XML_NAME, sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS')+XML_NAME, true)
  }

  StopVisual('', 0);
}

Function LoadXML: boolean;
var AttrItem,
    AttrMap,
    lNodeList: longint;
    Iterator,
    iLength  : integer;
{
  result := false;

  domDocument := XMLDOMDoc_New;

  if (domDocument = 0)
    Exit;


  result := XMLDOMDoc_Load(domDocument, XMLPathName+XML_NAME);

  if (not result)
  {
    Message('Не удалось загрузить данные из xml-файла', Error)
  }
  else
  {
    result := false;

    lNodeList := XMLDOMDoc_GetElementsByTagName(domDocument, 'KatSoprs');

    if (lNodeList = 0)
    {
      Message('Неверный формат DOM-документа!'#13'' +
              'Корневой элемент "KatSoprs" не найден.', Error);
       Exit;
    }

    iLength := XMLDOMNodeList_get_Length(lNodeList);

    if ( iLength != 1)
    {
      XMLDOMNode_Release(lNodeList);
      Message('Некорректный DOM-документ:'#13'' +
              'найдено более одного корневого элемента "KatSoprs".', Error);
       Exit;

    }

    AttrMap := XMLDOMNode_get_Attributes(XMLDOMNodeList_get_Item(lNodeList, 0));
    iLength := XMLDOMNamedNodeMap_get_Length(AttrMap) ;

    sDBName   := '';
    cDBFilial := 0h;

    for (Iterator := 0; Iterator < iLength; Iterator++)
    {
      AttrItem := XMLDOMNamedNodeMap_get_Item(AttrMap, Iterator);

      if (LoCase(XMLDOMNode_get_NodeName(AttrItem)) != 'database')
        continue;

      sDBName := XMLDOMAttribute_get_NodeValue(AttrItem);
      break;
    }

    for (Iterator := 0; Iterator < iLength; Iterator++)
    {
      AttrItem := XMLDOMNamedNodeMap_get_Item(AttrMap, Iterator);

      if (LoCase(XMLDOMNode_get_NodeName(AttrItem)) != 'filial')
        continue;

      cDBFilial := comp(XMLDOMAttribute_get_NodeValue(AttrItem));
      break;
    }

    XMLDOMNode_Release(lNodeList);
    XMLDOMNode_Release(AttrMap);
    XMLDOMNode_Release(AttrItem);

    if (sDBName = '')
    {
      Message('Некорректный DOM-документ:'#13'' +
              'Не удалось определить значение атрибута Database корневого элемента', Error);
       Exit;
    }

    if (not TransferHelper::DataBaseIsPermitted(sDBName, cDBFilial))
    {
       Message('Не разрешен импорт накладных из БД "' + sDBName + '"'
                + if (cDBFilial = 0, '', ' (филиал: ' + string(cDBFilial,0,0) + ')')
                + ', не задана или задана неверно закупочная организация', Warning);
        Exit;
    }

    if (TransferHelper::GetPurchOrg(sDBName, cDBFilial) = 0)
    {
       Message('Для БД "' + sDBName + '"' + if (cDBFilial = 0, '', ' (филиал: ' + string(cDBFilial,0,0) + ')')
                 + ' не задана или задана неверно закупочная организация', Warning);
        Exit;
    }

    lNodeList := XMLDOMDoc_GetElementsByTagName(domDocument, 'KatSopr');

    if (lNodeList = 0)
    {
      Message('Нет данных для загрузки!', Information);
       Exit;
    }

    iLength := XMLDOMNodeList_get_Length(lNodeList);

    XMLDOMNode_Release(lNodeList);

    if ( iLength = 0)
    {
      Message('Нет данных для загрузки!', Information);
       Exit;
    }
    result := true;
  }
}


Function GetKatSopr(KSAttrMap : longint; var p_bufKatSopr : type$KatSopr) : boolean;
var
 iCount
,Iterator   : integer;
 AttrItem   : longint;
 AttrName
,AttrValue  : string;
 OrgName    : string;
// tuneAssist : TuneAssistent;
{
  result := false;

  ClearAdvRecord(p_bufKatSopr);

  if (KSAttrMap = 0)
    exit;

  iCount := XMLDOMNamedNodeMap_get_Length(KSAttrMap) ;

  if (iCount = 0) // в этом случае непонятно что грузить в катсопр
    exit;

  OrgName := '';

  for (Iterator := 0; Iterator < iCount; Iterator++)
  {
    AttrItem := XMLDOMNamedNodeMap_get_Item(KSAttrMap, Iterator);
    AttrName := LoCase(XMLDOMNode_get_NodeName(AttrItem));
    AttrValue:= XMLDOMAttribute_get_NodeValue(AttrItem);

    Case AttrName of

       // дата
      'dsopr'  :
          {
             p_bufKatSopr.dSopr   := StrToDate(AttrValue, FORMAT_DATE) ;
             p_bufKatSopr.dPrice  := StrToDate(AttrValue, FORMAT_DATE) ;
          }

      // номер
      'nsopr'  : p_bufKatSopr.nSopr   := AttrValue;

      // входимость налогов
      'vhodnal': p_bufKatSopr.VhodNal := word(AttrValue);

      // статус
      'note'   :
        {
          if ( tuneAssist.LoadSoprStatus != 0h )
            p_bufKatSopr.cNote := tuneAssist.LoadSoprStatus;
          else
          {
             noteStatus := word(ExtractDelimitedWord(AttrValue, 1, '|'));
             noteName   := ExtractDelimitedWord(AttrValue, 2, '|');

             if (GetFirst fastFirstRow snKatNotes  = tsOK)
             {
               p_bufKatSopr.cNote := snKatNotes.Nrec
             }
          }
        }
      'orgname' :
        {
           OrgName := AttrValue;
        }
    end;
  }

  XMLDOMNode_Release(KSAttrMap);

  // проверяем, можно ли загружать накладную с таким контрагентом
  if (not TransferHelper::OrgIsPermitted(OrgName))
  {
     Message('Накладная ' + #_SDOC(p_bufKatSopr.nSopr,p_bufKatSopr.dSopr) + ' не может быть загружена'#13''+
             'Неверный контрагент: "' + OrgName + '"', Warning
            );
      Exit;
  }

  p_bufKatSopr.Nrec      := GetNextNrec(#KatSopr, 0);
  p_bufKatSopr.VidSopr   := 101;   // приходные
  p_bufKatSopr.TipSopr   := 1;
  p_bufKatSopr.YearSopr  := Year(p_bufKatSopr.dSopr) ;

  p_bufKatSopr.cOrg      := TransferHelper::GetPurchOrg(sDBName,cDBFilial); //coGetTune('REPHLOGISTICS.PURCH_ORG') ;  // контрагент
  p_bufKatSopr.cGruzFrom := TransferHelper::GetPurchOrg(sDBName,cDBFilial); //coGetTune('REPHLOGISTICS.PURCH_ORG') ;  // грузоотправитель
  p_bufKatSopr.cOrgBase  := TransferHelper::GetPurchOrg(sDBName,cDBFilial); //coGetTune('REPHLOGISTICS.PURCH_ORG') ;  // контрагент взаиморасчетов
  p_bufKatSopr.cGruzTo   := coGetTune('MYORG') ;  // грузополучатель

  p_bufKatSopr.Descr     := sGetTune('USER.DESCR');
  p_bufKatSopr.DesGr     := sGetTune('USER.DESGR');

  p_bufKatSopr.cPayment  := coGetTune('OPER.BUY.NAKL.CPAYMENT');

  // договор из атрибута "Договор с Холдингом " собственной организации

  if (piExtAttr.ValueExists(coKatOrg,  coGetTune('MYORG'), 'Договор с Холдингом') )
  {
    cDog := piExtAttr.coGetAttr(coKatOrg, coGetTune('MYORG'), 'Договор с Холдингом');

    if (getFirst fastFirstRow Dogovor = tsOk)
    {
      p_bufKatSopr.cDogovor     := if (Dogovor.TidK = 400, Dogovor.Nrec, Dogovor.cDogovor);
      p_bufKatSopr.cAppDogovor  := if (Dogovor.TidK = 400, 0           , Dogovor.Nrec);
    }
  }

  result := true;

}

Function GetSpSopr(SSAttrMap : longint; var p_bufSpSopr : type$SpSopr) : boolean;
var
 iCount
,Iterator    : integer;
 AttrItem    : longint;
 AttrName
,AttrValue   : string;
{
  result := false;

  ClearAdvRecord(p_bufSpSopr);

  if (SSAttrMap = 0)
    exit;

  iCount := XMLDOMNamedNodeMap_get_Length(SSAttrMap) ;

  if (iCount = 0) // в этом случае непонятно что грузить в spsopr
    exit;

  for (Iterator := 0; Iterator < iCount; Iterator++)
  {
    AttrItem := XMLDOMNamedNodeMap_get_Item(SSAttrMap, Iterator);
    AttrName := LoCase(XMLDOMNode_get_NodeName(AttrItem));
    AttrValue:= XMLDOMAttribute_get_NodeValue(AttrItem);

    Case AttrName of

       // ссылка на услуг / мц
      'cmcusl'  : p_bufSpSopr.cMcUsl := comp(AttrValue) ;

      // признак МЦ / услуга
      'prmc'    : p_bufSpSopr.PrMc   := word(AttrValue) ;

      // цена
      'price'   :
          {
             p_bufSpSopr.Price   := double(AttrValue);
             p_bufSpSopr.RPrice  := double(AttrValue);
          }
      //количество фактической
      'kolfact' : p_bufSpSopr.KolFact:= double(AttrValue);

      // количество
      'kol'     : p_bufSpSopr.Kol    := double(AttrValue);

      // номер по порядку
      'npp'     : p_bufSpSopr.Npp    := word(AttrValue);

      // отпускная единица измерения
      'cotped'  : p_bufSpSopr.cOtpEd := comp(AttrValue);

      // группа налогов
      'cgrnal'  : p_bufSpSopr.cGrNal := comp(AttrValue);



   end;
  }

  XMLDOMNode_Release(SSAttrMap);

  result := true;

}

Function GetClaim(ClaimMap : longint; var p_bufObjAccT : type$ObjAccT) : boolean;
var
 iCount
,Iterator    : integer;
 AttrItem    : longint;
 AttrName
,AttrValue   : string;
{
  result := false;

  ClearAdvRecord(p_bufObjAccT);

  if (ClaimMap = 0)
    exit;

  iCount := XMLDOMNamedNodeMap_get_Length(ClaimMap) ;

  if (iCount = 0) // в этом случае непонятно что грузить в spsopr
    exit;

  p_bufObjAccT.TypeObj := toZClient;
  p_bufObjAccT.KindRec := 1;
  p_bufObjAccT.NumSort := comp(100000);

  for (Iterator := 0; Iterator < iCount; Iterator++)
  {
    AttrItem := XMLDOMNamedNodeMap_get_Item(ClaimMap, Iterator);
    AttrName := LoCase(XMLDOMNode_get_NodeName(AttrItem));
    AttrValue:= XMLDOMAttribute_get_NodeValue(AttrItem);

    Case AttrName of
       // ссылка на услуг / мц
      'id'  : p_bufObjAccT.cObject := comp(AttrValue) ;
    end;
  }

  XMLDOMNode_Release(ClaimMap);
  result := true;
}

function SetSpSopr_defFieldsFromKatSopr(p_bufKatSopr: type$KatSopr; var p_bufSpSopr : type$SpSopr) : boolean;
{
  p_bufSpSopr.cSopr    := p_bufKatSopr.Nrec;
  p_bufSpSopr.VidSopr  := p_bufKatSopr.VidSopr;
  p_bufSpSopr.dSopr    := p_bufKatSopr.dSopr;


  // 08.11.10 14:47:17 проверка на архивную МЦ
  if (p_bufSpSopr.PrMc = toMc)
  {
    var b_check : boolean;

    do
    {
      if (getFirst KatMc where ((p_bufSpSopr.cMcUsl == KatMc.Nrec))
            != tsOk
          )
       {
          p_bufSpSopr.cMcUsl := 0;
          break;
       }
      else
       {
           if (KatMc.isArch != 0 or (not IsAllowedGroupMC(KatMc.kGroupMC)))
            {
                var l_cMcUsl : comp;
                var s : string;
                l_cMcUsl := 0;

                s := if (not IsAllowedGroupMC(KatMc.kGroupMC), ' ссылается на МЦ с запрещенной группой'#13'', ' ссылается на архивную МЦ'#13'');

                if (Message('Поз. спец-ии №'  + p_bufSpSopr.Npp + s          +
                            'Наименование: "' + if (length(KatMc.Name) > 25, SubStr(KatMc.Name, 1, 25) + '...', KatMc.Name)  + '"'#13'' +
                            'Баркод: "'       + KatMc.Barkod                 + '"'#13''    +
                            'Обозначение: "'  + if (length(KatMc.Obozn) > 25, SubStr(KatMc.Obozn, 1, 25) + '...', KatMc.Obozn)  + '"'#13'' +
                            'Код группы:  "'  + KatMc.kGroupMC  + '"'#13#13'' +
                            'Заменить МЦ? (иначе пропустить)', Confirmation + YesNo
                      ) != cmYes)
                {
                    p_bufSpSopr.cMcUsl := 0;
                    break;
                }
                else
                {
                    iGetKau.GetCodeKau(cgiNo, cgKau_KatMC, l_cMcUsl);
                    p_bufSpSopr.cMcUsl := l_cMcUsl;
                    continue;
                }
            }
           break; // выход, если все проверки прошли
       }
     }
     while (true)
   }
   result := p_bufSpSopr.cMcUsl > 0;
}

Procedure ReCalcNalUch(_cSopr: comp);
{
   if (boGetTune('Oper.NalUch') )
   {
     var sumNalUch, sumNalUchUsl : double;

     _Loop snSpSopr where ((_cSopr == snSpSopr.cSopr))
     {
       RunInterface(L_Sklad::ViewNalUch, snSpSopr.nRec, sumNalUch, sumNalUchUsl, false);
       snSpSopr.priceN:= sumNalUch/snSpSopr.kolFact;
       snSpSopr.vPriceN:= sumNalUchUsl/snSpSopr.kolFact;
       update current snSpSopr;
     }
   }
}

Procedure InsertSpSopr(p_itemNode: longint; p_bufKatSopr: type$KatSopr);
var
 p_nodeList : longint;
 p_count    : word;
 p_bufSpSopr: type$SpSopr;
{
  ClearAdvRecord(p_bufSpSopr);
  p_nodeList :=  XMLDOMNode_get_ChildNodes(p_itemNode);

  if (p_nodeList = 0)
    exit;

  p_count := XMLDOMNodeList_get_Length(p_nodeList);

  if (p_count = 0 ) // нет позиций спецификации
   {
     XMLDOMNode_Release(p_nodeList);
     exit;
   }

  var i : integer;
  // создаем позиции SpSopr
  for (i := 0; i < p_count; i++)
  {
    p_itemNode := XMLDOMNodeList_get_Item(p_nodeList, i);

    if (XMLDOMNode_get_NodeName (p_itemNode) != 'SpSopr' )
    {
      XMLDOMNode_Release(p_itemNode);
       exit;
    }
    else
      if (GetSpSopr( XMLDOMNode_get_Attributes(p_itemNode), p_bufSpSopr))
      {
        if (not SetSpSopr_defFieldsFromKatSopr(p_bufKatSopr, p_bufSpSopr))
            exit;

        snSpSopr.buffer := p_bufSpSopr;
        if (insert current snSpSopr != tsOk)
           #Log('Ошибка вставки в SpSopr')
      }
    XMLDOMNode_Release(p_itemNode);
  }
}

Procedure InsertObjAccT(p_itemNode: longint; p_bufKatSopr: type$KatSopr);
var
 p_nodeList  : longint;
 p_count     : word;
 p_bufObjAccT: type$ObjAccT;
{
  ClearAdvRecord(p_bufObjAccT);
  p_nodeList :=  XMLDOMNode_get_ChildNodes(p_itemNode);

  if (p_nodeList = 0)
    exit;

  p_count := XMLDOMNodeList_get_Length(p_nodeList);

  if (p_count = 0 )
   {
     XMLDOMNode_Release(p_nodeList);
     exit;
   }

  var i : integer;

  for (i := 0; i < p_count; i++)
  {
    p_itemNode := XMLDOMNodeList_get_Item(p_nodeList, i);

    if (XMLDOMNode_get_NodeName (p_itemNode) != 'Claim' )
    {
      XMLDOMNode_Release(p_itemNode);
       exit;
    }
    else
      if (GetClaim( XMLDOMNode_get_Attributes(p_itemNode), p_bufObjAccT))
      {
        p_bufObjAccT.TypeOwn := toKatSopr;
        p_bufObjAccT.cOwner  := p_bufKatSopr.Nrec;
        p_bufObjAccT.VidSopr := p_bufKatSopr.VidSopr;

        snObjAccT.buffer := p_bufObjAccT;
        if (insert current snObjAccT != tsOk)
           #Log('Ошибка вставки в ObjAccT')
      }
    XMLDOMNode_Release(p_itemNode);
  }
}

Procedure ParseDom;
 var KSNodeList
    ,SSNodeList
    ,ItemNode
    ,KSChildNodes   : longint;
 var	
     iCountKS
    ,iCountSS
    ,Iterator    : integer;
 var
    bufKatSopr   : type$KatSopr;
    bufSpSopr    : type$SpSopr;
{
   KSNodeList := XMLDOMDoc_GetElementsByTagName(domDocument, 'KatSopr') ;

   iCountKS := XMLDOMNodeList_get_Length(KSNodeList);

   StartNewVisual(vtIndicatorVisual, vfTimer, 'Идет разбор DOM-документа...', iCountKS);

   for (Iterator := 0; Iterator < iCountKS ; Iterator++)
   {
     NextVisual;

     ItemNode := XMLDOMNodeList_get_Item(KSNodeList, Iterator);

     if (ItemNode = 0)
       continue;

     if ( GetKatSopr( XMLDOMNode_get_Attributes(ItemNode), bufKatSopr) )
     {
       // ищем в базе накладную с таким номером и датой, если есть - спрашиваем, чего делать
       if ( RecordExists KatSopr where ((
                                            101              == KatSopr.VidSopr
                                        and bufKatSopr.dSopr == KatSopr.dSopr
                                        and bufKatSopr.nSopr == KatSopr.nSopr
                                     ))
             = tsOk
          )
         if (Message('Уже существует накладная №'+ bufKatSopr.nSopr +
                     ' от ' + DateToStr(bufKatSopr.dSopr, FORMAT_DATE)+'.'#13'' +
                     'Все равно загрузить?'
                     , Confirmation | YesNo
                     ) != cmYes
             )
               continue;

       snKatSopr.buffer := type$KatSopr(bufKatSopr);
[b]
       if (insert current snKatSopr <> tsOk)
        {
          Message('Ошибка вставки KatSopr');
        }
        else[/b]
        {

         KSChildNodes := XMLDOMNode_get_ChildNodes(ItemNode);
         XMLDOMNode_Release(ItemNode);

         if (KSChildNodes = 0) // нет спецификации и ссылок на заявки
           continue;

         iCountSS := XMLDOMNodeList_get_Length(KSChildNodes);

         if (iCountSS > 2 ) // дочерних узлов больше двух, чего быть не может
          {
            XMLDOMNode_Release(KSChildNodes);
            continue;
          }

         var i : integer;
         for (i := 0; i < iCountSS; i++)
          {
             ItemNode := XMLDOMNodeList_get_Item(KSChildNodes, i);
             case (XMLDOMNode_get_NodeName (ItemNode)) of
              'SpSoprs' : InsertSpSopr (ItemNode, snKatSopr.buffer);
              'Claims'  : InsertObjAccT(ItemNode, snKatSopr.buffer);
             end;
             XMLDOMNode_Release(ItemNode);
          }
         XMLDOMNode_Release(KSChildNodes) ;

         // кооректируем накладные

         iGrPl.InsSpGrPlD_Default(snKatSopr.VidSopr, snKatSopr.nRec, snKatSopr.cOrg);

         var resultCheckSum : boolean;
         RunInterface(
             iChkSum
             ,snKatSopr.Nrec                      //сопроводительный документ
             ,0                                   //по всем позициям
             ,FALSE                               //выполнить только пересчет позиции (true)
             ,if (snKatSopr.cVal = 0, 10, 20)     //метод пересчета суммы в валюте по текущему курсу
             ,resultCheckSum                      //резутьтат выполнения (был ли пересчет) [возвращаемый]
         );
         // пересчет для налогового учета
         //ReCalcNalUch(snKatSopr.Nrec);
       }

     }
   }
   StopVisual('', 0);
   XMLDOMNode_Release(KSNodeList);
   XMLDOMDoc_Done(domDocument);
}

procedure ObjKatSoprTransfer.SaveToXML(lMarker: longint);
var
  iCount
 ,Iterator : word;
{
  Action_mode := SAVE_MODE;

  if (lMarker = 0) // ссылка на маркер нулевая
     Exit;

  if (GetMarkerCount(lMarker) = 0) // ничего не выбрано
     Exit;

  XMLPathName := if (IfDefServerApp()
                    , ConvertClientPathToSrv (sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS'))
                    , sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS')
                    );

  if (Trim(XMLPathName) = '')
    RunWindowModal(wSetSaveLoadPath);

  if (isCanceled)
    Exit;

  if (not VerifyPathName(XMLPathName, true))
  {
    Message('Указанный путь не существует.', Error);
     Exit;
  }

  if (CreateXML(lMarker))
  {
    Message('Файл успешно создан!', Information);
  }
  else
  {
    Message('Не удалось создать файл!', Error);
  }

}

procedure ObjKatSoprTransfer.LoadFromXML;
{
  Action_mode := LOAD_MODE;

  XMLPathName := sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS');

  if (Trim(XMLPathName) = '')
    RunWindowModal(wSetSaveLoadPath);

  if (isCanceled)
    Exit;

  if (not VerifyPathName(XMLPathName, false))
  {
    Message('Указанный путь не существует.', Error);
     Exit;
  }

  if (not FileExist (XMLPathName + XML_NAME) )
  {
    Message('По указанному пути нет данных для загрузки накладных.'#13''+
             'Файл "'+XMLPathName + XML_NAME+'" не найден.', Information);
     Exit;
  }

  if (IfDefServerApp())
  {
     if (GetFileFromClient(XMLPathName+XML_NAME, true) != 0)
      {
         Message('Файл не найден'#13'' + XMLPathName+XML_NAME, Warning);
          Exit;
      }

     XMLPathName := ConvertClientPathToSrv (sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS'));

  }

  if (not LoadXML)
    exit;

  ParseDom;

  if (boGetTune('REPHLOGISTICS.NEEDDEL_FILE_KATSOPRS'))
  {
    DeleteFile(XMLPathName + XML_NAME) ;
  }

  Message('Загрузка накладных завершена', Information);

}

Procedure ObjKatSoprTransfer.SetXML_NAME(_XML_Name : string) ;
{
  XML_NAME := _XML_Name;
}

HandleEvent
cmOnVipLoad:
 {
    XML_NAME := 'KatSoprTransfer_' + SystemHelper::GetDataBaseName() + '.xml'
 }
end

end.
Программист-самоучка
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Den »

Попробовал несколько урезанный код Ваш (по понятным причинам) и на 2000 и на 2005 и на 2008 сервере...вставка в katsopr, в принципе, проходит при Ваших методах работы с буфером katsopr.
Попробуйте посмотреть с помощью Profailer что за код пытается выполнить SQL Server ...
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Zver »

Запустил Profiler, в нём видно, что эти запросы обрабатываются.

Тем не менее в Галактике при выполнении запроса возвращается ошибка вставки в таблицу.
Программист-самоучка
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Den »

Zver писал(а):Запустил Profiler, в нём видно, что эти запросы обрабатываются.

Тем не менее в Галактике при выполнении запроса возвращается ошибка вставки в таблицу.
42000: [Microsoft][ODBC SQL Server Driver][SQL Server]

Странно немного все же...это сообщение от сервера что ему не удалось выполнить успешно какую то директиву на вставку по указанным причинам.
А Вы пишите "видно, что эти запросы обрабатываются" это значит что реально вставка в таблу проходит ? Вам нужно попинать Execute ( средствами самого sql сервера) тех вызовов процедур текстов запросов которые сыпятся в профайлер при выполнении Вашего алгоритма. По идее, какой то из них должен выкинуть ошибку аналогичную.
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Zver »

Den,

Стал разбираться глубже, что происходит при исполнении запроса.
В Profiler был сгенерирован вот такой запрос для выполняемой операции:

Код: Выделить всё

exec sp_executesql N'DECLARE @CurDT DATETIME, @AtlDate INT, @AtlTime INT
SELECT @CurDT=GETDATE()
SELECT @AtlDate=dbo.ToAtlDate(@CurDT), @AtlTime=dbo.ToAtlTime(@CurDT)
INSERT INTO T$KATSOPR(F$ATL_LASTUSER,F$ATL_OWNER,F$ATL_BRANCH,F$ATL_ORIGINOFFICE,F$ATL_LASTDATE,F$ATL_LASTTIME,F$NREC,F$FILIALNO,F$NAME,F$DESCR,F$DESGR,F$CORG,F$SUMMA,F$CVAL,F$SUMVAL,F$VHODNAL,F$DPRICE,F$CCOMPL,F$KOLKOMPL,F$RNDR,F$RNDV,F$CNAZNA,F$CDOGOVOR,F$CAPPDOGOVOR,F$CCALPLAN,F$CPERSON,F$CDOVER,F$NDOVER,F$DDOVER,F$SDOVER,F$CDOVFIO,F$STATUS,F$CNOTE,F$CPAYMENT,F$CTRANSP,F$NVAGON,F$NKVIT,F$NSERTIF,F$CMASED,F$CMASVID,F$NETTO,F$MTARA,F$CSTEPDOC,F$TIPSOPR,F$DSOPR,F$YEARSOPR,F$NSOPR,F$VIDSOPR,F$CPODRFROM,F$CPODRTO,F$CMOLFROM,F$CMOLTO,F$CGRUZFROM,F$CGRUZTO,F$CORGBASE,F$DOPR,F$CHOZOPER,F$SOPRHOZ,F$RESERVED,F$SROKRES,F$CKATSOPR,F$CVALUT,F$CSCHFACT,F$USERFIELD,F$CGRSOPR,F$SNALOGS,F$SVNALOGS,F$TRANSP,F$CNZAKAZ,F$COTGORDER,F$WADOC,F$CADOC,F$CIZD,F$WCIZD,F$CZAKAZ,F$CPRICEALG,F$TYPEDOC,F$CCELLVAL,F$CNMOVECELL,F$TARAVOZ,F$CORGPLAT,F$TIPOTVPODR,F$COTVPODR,F$CUKS,F$CADOC,F$CAPPDOGOVOR,F$CCALPLAN,F$CCELLVAL,F$CCOMPL,F$CDOGOVOR,F$CDOVER,F$CDOVFIO,F$CGRSOPR,F$CGRUZFROM,F$CGRUZTO,F$CHOZOPER,F$CIZD,F$CKATSOPR,F$CMASED,F$CMASVID,F$CMOLFROM,F$CMOLTO,F$CNAZNA,F$CNMOVECELL,F$CNOTE,F$CNZAKAZ,F$CORG,F$CORGBASE,F$CORGPLAT,F$COTGORDER,F$COTVPODR,F$CPAYMENT,F$CPERSON,F$CPODRFROM,F$CPODRTO,F$CPRICEALG,F$CSCHFACT,F$CSTEPDOC,F$CTRANSP,F$CUKS,F$CVAL,F$CVALUT,F$CZAKAZ,F$DDOVER,F$DESCR,F$DESGR,F$DOPR,F$DPRICE,F$DSOPR,F$FILIALNO,F$KOLKOMPL,F$MTARA,F$NAME,F$NDOVER,F$NETTO,F$NKVIT,F$NSERTIF,F$NSOPR,F$NVAGON,F$RESERVED,F$RNDR,F$RNDV,F$SDOVER,F$SNALOGS,F$SOPRHOZ,F$SROKRES,F$STATUS,F$SUMMA,F$SUMVAL,F$SVNALOGS,F$TARAVOZ,F$TIPOTVPODR,F$TIPSOPR,F$TRANSP,F$TYPEDOC,F$USERFIELD,F$VHODNAL,F$VIDSOPR,F$WADOC,F$WCIZD,F$YEARSOPR) (SELECT @P1,@P2,@P3,@P4,@AtlDate,@AtlTime,@P5,@P6,@P7,@P8,@P9,@P10,@P11,@P12,@P13,@P14,@P15,@P16,@P17,@P18,@P19,@P20,@P21,@P22,@P23,@P24,@P25,@P26,@P27,@P28,@P29,@P30,@P31,@P32,@P33,@P34,@P35,@P36,@P37,@P38,@P39,@P40,@P41,@P42,@P43,@P44,@P45,@P46,@P47,@P48,@P49,@P50,@P51,@P52,@P53,@P54,@P55,@P56,@P57,@P58,@P59,@P60,@P61,@P62,@P63,@P64,@P65,@P66,@P67,@P68,@P69,@P70,@P71,@P72,@P73,@P74,@P75,@P76,@P77,@P78,@P79,@P80,@P81,@P82,@P83,@P84,@P85,@P86,@P87,@P88,@P89,@P90,@P91,@P92,@P93,@P94,@P95,@P96,@P97,@P98,@P99,@P100,@P101,@P102,@P103,@P104,@P105,@P106,@P107,@P108,@P109,@P110,@P111,@P112,@P113,@P114,@P115,@P116,@P117,@P118,@P119,@P120,@P121,@P122,@P123,@P124,@P125,@P126,@P127,@P128,@P129,@P130,@P131,@P132,@P133,@P134,@P135,@P136,@P137,@P138,@P139,@P140,@P141,@P142,@P143,@P144,@P145,@P146,@P147,@P148,@P149,@P150,@P151,@P152,@P153,@P154,@P155,@P156,@P157,@P158,@P159 FROM T$KATSOPR WHERE F$NREC=@P160)
IF @@ERROR=0 AND @@ROWCOUNT>0 SELECT Sys#UL FROM T$KATSOPR WHERE F$NREC=@P161',N'@P1 binary(8),@P2 binary(8),@P3 binary(8),@P4 int,@P5 binary(8),@P6 int,@P7 varchar(81),@P8 varchar(21),@P9 varchar(5),@P10 binary(8),@P11 float,@P12 binary(8),@P13 float,@P14 int,@P15 int,@P16 binary(8),@P17 float,@P18 float,@P19 float,@P20 binary(8),@P21 binary(8),@P22 binary(8),@P23 binary(8),@P24 binary(8),@P25 binary(8),@P26 varchar(21),@P27 int,@P28 varchar(81),@P29 binary(8),@P30 int,@P31 binary(8),@P32 binary(8),@P33 binary(8),@P34 varchar(21),@P35 varchar(21),@P36 varchar(21),@P37 binary(8),@P38 binary(8),@P39 float,@P40 float,@P41 binary(8),@P42 int,@P43 int,@P44 int,@P45 varchar(41),@P46 int,@P47 binary(8),@P48 binary(8),@P49 binary(8),@P50 binary(8),@P51 binary(8),@P52 binary(8),@P53 binary(8),@P54 int,@P55 binary(8),@P56 int,@P57 int,@P58 int,@P59 binary(8),@P60 binary(8),@P61 binary(8),@P62 varchar(81),@P63 binary(8),@P64 float,@P65 float,@P66 int,@P67 binary(8),@P68 binary(8),@P69 int,@P70 binary(8),@P71 binary(8),@P72 int,@P73 binary(8),@P74 binary(8),@P75 int,@P76 binary(8),@P77 binary(8),@P78 int,@P79 binary(8),@P80 int,@P81 binary(8),@P82 binary(8),@P83 binary(8),@P84 binary(8),@P85 binary(8),@P86 binary(8),@P87 binary(8),@P88 binary(8),@P89 binary(8),@P90 binary(8),@P91 binary(8),@P92 binary(8),@P93 binary(8),@P94 binary(8),@P95 binary(8),@P96 binary(8),@P97 binary(8),@P98 binary(8),@P99 binary(8),@P100 binary(8),@P101 binary(8),@P102 binary(8),@P103 binary(8),@P104 binary(8),@P105 binary(8),@P106 binary(8),@P107 binary(8),@P108 binary(8),@P109 binary(8),@P110 binary(8),@P111 binary(8),@P112 binary(8),@P113 binary(8),@P114 binary(8),@P115 binary(8),@P116 binary(8),@P117 binary(8),@P118 binary(8),@P119 binary(8),@P120 binary(8),@P121 binary(8),@P122 int,@P123 varchar(21),@P124 varchar(5),@P125 int,@P126 int,@P127 int,@P128 int,@P129 float,@P130 float,@P131 varchar(81),@P132 varchar(21),@P133 float,@P134 varchar(21),@P135 varchar(21),@P136 varchar(41),@P137 varchar(21),@P138 int,@P139 float,@P140 float,@P141 varchar(81),@P142 float,@P143 int,@P144 int,@P145 int,@P146 float,@P147 float,@P148 float,@P149 int,@P150 int,@P151 int,@P152 int,@P153 int,@P154 varchar(81),@P155 int,@P156 int,@P157 int,@P158 int,@P159 int,@P160 binary(8),@P161 binary(8)',0x8001000000000367,0x8001000000000367,0x8001000000000002,1,0x800100000003E41A,0,' ДO № 03-228 от 04/10/2007','MAL','ZAK',0x80010000000017B2,14,0x8000000000000000,0,2,131533316,0x8000000000000000,0,0,0,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,' ',0,' ',0x8000000000000000,1,0x8000000000000003,0x8000000000000000,0x8000000000000000,' ',' ',' ',0x8000000000000000,0x8000000000000000,0,0,0x8001000000001F0D,1,131533316,2007,'03-228',101,0x8000000000000000,0x800100000000036E,0x8000000000000000,0x8000000000000000,0x80010000000017B2,0x80010000000017B9,0x80010000000017B2,131533316,0x80010000000001B5,0,0,0,0x8000000000000000,0x8000000000000000,0x8000000000000000,' ',0x8000000000000000,0,0,0,0x8000000000000000,0x8000000000000000,0,0x8000000000000000,0x8000000000000000,0,0x8000000000000000,0x8000000000000000,0,0x8000000000000000,0x8000000000000000,2,0x80010000000010F1,0,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x800A000000000003,0x80010000000017B9,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000003,0x8000000000000000,0x800A000000000003,0x800A000000000003,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8001000000000001,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0x8000000000000000,0,'ZVE','CHT',0,131924487,131924487,0,0,0,' ',' ',0,' ',' ','017782',' ',0,0,0,' ',0,0,0,0,0,0,0,0,0,1,0,0,' ',2,101,0,0,2013,0x80010000000033AE,0x800100000003E41A
При выполнении его получился список описанных в первом сообщении ошибок.
Программист-самоучка
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Den »

Ну вот он и баг
в списке полей в конструкции INSERT INTO T$KATSOPR.....дважды почему то F$CADOC.
Хм...
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Zver »

При анализе кода обнаружилось, что в сгенерированном запросе в разделе insert Into () ряд полей в выражении используются больше одного раза.

Похоже, что запрос, генерится в Галактике с ошибками.

Может ли это помочь с направлением поиска?
Программист-самоучка
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Masygreen »

Не???

snKatSopr.buffer := type$KatSopr(bufKatSopr);
set snKatSopr.nrec := comp(0);
if (insert current snKatSopr <> tsOk)
Время ведет!
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Zver »

Masygreen,

К сожалению, не помогло.
Программист-самоучка
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не работает опреатор Insert current

Сообщение Den »

а так тоже не подсобит
....
clearbuffer(#snKatSopr);
snKatSopr.buffer := type$KatSopr(bufKatSopr);
?

попробовать, конечно бы, обычным присвоением буфера таблицы со вставкой,если Вам не лень переписывать немнога кода ,ради эксперимента... )
Ответить