![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
1С OLE запись - в полях значения "<>"
pogi © (2008-08-08 12:48:00)Помогите разобраться плиз!
При записи документа в 1С через OLE все успешно записываем, но потом в интерфейсе 1С в форме документа некоторые поля-справочники заполняются значением "<>". Не "<Объект не найден>", а просто "<>".
В эти поля значение вообще не передается.
Причем происходит это только у закзачика, в тестовой среде все отображается как надо.
Откуда берутся эти "<>" и как от них избавиться?
1С v.7.7 + MS SQL 2000 sp4
pogi (2008-08-11 15:01:00) [1]Разобрался с помощью добрых людей.
В некоторых справочниках были значения пустые строки. Соответственно, там где проверки на пустоту не было, 1С находил в справочнике пустую строку и успешно ссылался на нее. А символами "<>" в форме показываются вот такие поля - где значение выбрано, но 1С не может показать его.
pogi (2008-08-11 14:28:00) [2]Объект 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 " - и у меня и у заказчика одинаково.
Сергей М. (2008-08-08 13:58:00) [3]И если [6] соответствует действительности, то это означает, что среды не полностью идентичны - конфигурации (метаданные) одинаковые, а данные отличаются.
Сергей М. (2008-08-08 13:54:00) [4]
> просто "<>"
Если не ошибаюсь, это означает , что ссылка на объект валидна, и этот объект имеет в атрибуте "Название" (или как его там ?) пустую строку.
Сергей М. (2008-08-08 13:47:00) [5]
> и в объект 1С в соответствующем поле ничего не заполняю
А запись в объекте-документе кто и как создает, перед тем как начинает работать твоя ф-ция AddValFromSpr ?
И еще:
> hSprObj := Unassigned; // <- это что, контрольный в голову что ли ? Зачем ?!
> hSprObj := ConnectTo1C_Object(Handle1C, 'Справочник.'+nmSpr);
>
pogi (2008-08-08 13:34:00) [6]Просто эти поля не заполнялись в форме. Там код записи примерно такой:
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:23:00) [7]
> в объекте для данных полей значение ВООБЩЕ не выставляется
Это ради проверки сделано ? Или ты сознательно игнорируешь ссылочную целостность ?
А конфигурации в тестовой среде и у заказчика совпадают один-в-один ?
pogi (2008-08-08 13:01:00) [8]То что отличается - это понятно.
а при чем здесь локали? ведь это поля-справочники. а потом в объекте для данных полей значение ВООБЩЕ не выставляется.
Причем это относиться не ко всем подобным полям, а только к определенным.
Сергей М. (2008-08-08 12:53:00) [9]Значит тестовая среда чем-о отличается от рабочей среды у Заказчика.
Например, локали разные..