Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.04;
Скачать: CL | DM;

Вниз

1С OLE запись - в полях значения "<>"   Найти похожие ветки 

 
pogi   (2008-08-08 12:48) [0]

Помогите разобраться плиз!

При записи документа в 1С через OLE все успешно записываем, но потом в интерфейсе 1С в форме документа некоторые поля-справочники заполняются значением "<>". Не "<Объект не найден>", а просто "<>".
В эти поля значение вообще не передается.

Причем происходит это только у закзачика, в тестовой среде все отображается как надо.

Откуда берутся эти "<>" и как от них избавиться?

1С v.7.7 + MS SQL 2000 sp4


 
Сергей М. ©   (2008-08-08 12:53) [1]

Значит тестовая среда чем-о отличается от рабочей среды у Заказчика.
Например, локали разные..


 
pogi   (2008-08-08 13:01) [2]

То что отличается - это понятно.
а при чем здесь локали? ведь это поля-справочники. а потом в объекте для данных полей значение ВООБЩЕ не выставляется.
Причем это относиться не ко всем подобным полям, а только к определенным.


 
Сергей М. ©   (2008-08-08 13:23) [3]


> в объекте для данных полей значение ВООБЩЕ не выставляется


Это ради проверки сделано ? Или ты сознательно игнорируешь ссылочную целостность ?

А конфигурации в тестовой среде и у заказчика совпадают один-в-один ?


 
pogi   (2008-08-08 13:34) [4]

Просто эти поля не заполнялись в форме. Там код записи примерно такой:
if Loss.fNM_REASON <> "" then
 AddValFromSpr(Handle1CObj, "ПричинаОтказа", Loss.fNM_REASON, "ПричинаОтказа");
           
function AddValFromSpr(Handle1CObj: OleVariant; nmSpr, nmFind, nmField: string): Boolean;
var hSprObj:  OleVariant;
   str: string;
begin
 Result := False;
 LogMessage("Begin TfrmLossInit.AddValFromSpr", 6);
 hSprObj := Unassigned;
 hSprObj := ConnectTo1C_Object(Handle1C, "Справочник."+nmSpr);
 LogMessage("Справочник."+nmSpr, 6);
 if not VarIsEmpty(hSprObj) then
 begin
   if (hSprObj.FindByDescr(Trim(nmFind), 0, 0)=1) then
   begin
     LogMessage("Справочник."+nmSpr + " - Нашли значение", 6);
     Handle1CObj.SetAttrib(nmField, hSprObj.CurrentItem);
     Result := True
   end;
 end;
 DisconnectFrom1C_Object(hSprObj);
 LogMessage("End TfrmLossInit.AddValFromSpr", 6);
end;


Соответственно если пол не заполнили, то и в объект 1С в соответствующем поле ничего не заполняю.

Конфигурации 1-в-1.


 
Сергей М. ©   (2008-08-08 13:47) [5]


> и в объект 1С в соответствующем поле ничего не заполняю


А запись в объекте-документе кто и как создает, перед тем как начинает работать твоя ф-ция AddValFromSpr ?

И еще:


>  hSprObj := Unassigned; // <- это что, контрольный в голову что ли ? Зачем ?!
>  hSprObj := ConnectTo1C_Object(Handle1C, "Справочник."+nmSpr);
>


 
Сергей М. ©   (2008-08-08 13:54) [6]


> просто "<>"


Если не ошибаюсь, это означает , что ссылка на объект валидна, и этот объект имеет в атрибуте "Название" (или как его там ?) пустую строку.


 
Сергей М. ©   (2008-08-08 13:58) [7]

И если [6] соответствует действительности, то это означает, что среды не полностью идентичны - конфигурации (метаданные) одинаковые, а данные отличаются.


 
pogi   (2008-08-11 14:28) [8]

Объект 1С создается так:
 try
   if VarIsNull(Handle1C) or VarIsEmpty(Handle1C) then
     Handle1C := ConnectTo1C_Application("V77S.Application", //имя сервера автоматизации
                                       // строка инициализации
                                       "/D"" + GetPath1C + """,//директория, где Б.Д., с которой соединяемся
                                       //" /N" + ResStrE("LOGIN") +        //пользователь (имя)
                                       //" /P" + ResStr(OwnClsId,"PWD"),           //пароль
                                       "");                              //не грузится заставка
   if VarIsEmpty(Handle1C)  then
   begin
     MessageDlg(ResStrE("MES.1CNOSTART", "LOSS"), mtInformation, [mbOk], 0);
     Exit;
   end else
   try
     Handle1CObj := ConnectTo1C_Object(Handle1C, "Документ.<ИмяДокумента>");
     if VarIsEmpty(handle1CObj) then
     begin
       MessageDlg(ResStrE("MES.NODOC", "LOSS"), mtInformation, [mbOk], 0);
       Exit;
     end
     else
     begin
       LogMessage("TfrmLossInit.SaveOle1C Создали документ", 6);
       try
         prNeedCreateNew := true;
         NumDoc := Loss.NUM;
         DtDoc := Loss.DT;
         if Trim(Loss.ID_LOSS_1C) <> "" then
           if (Handle1CObj.FindByNum(NumDoc, DtDoc)=1) then
           begin
             prNeedCreateNew := false;
           end;
         if prNeedCreateNew then
         begin
           Handle1CObj.New;
         end;


В базу 1С в эти поля пишутся значения вида "   0     " - и у меня и у заказчика одинаково.


 
pogi   (2008-08-11 15:01) [9]

Разобрался с помощью добрых людей.

В некоторых справочниках были значения пустые строки. Соответственно, там где проверки на пустоту не было, 1С находил в справочнике пустую строку и успешно ссылался на нее. А символами "<>" в форме показываются вот такие поля - где значение выбрано, но 1С не может показать его.



Страницы: 1 вся ветка

Текущий архив: 2009.10.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
15-1248939658
SKIPtr
2009-07-30 11:40
2009.10.04
Хранение ip адресов


15-1249298834
13.12
2009-08-03 15:27
2009.10.04
Элита программистов


2-1248864742
Tneduts
2009-07-29 14:52
2009.10.04
Отображение полей с одинаковыми именами из разных таблиц


1-1218088634
ormada
2008-08-07 09:57
2009.10.04
xml rpc + wordpress


2-1249308906
DevilDevil
2009-08-03 18:15
2009.10.04
Не получается сделать контекстное меню