Интеграция Terrasoft 3.02 и 1С 7.7, ошибка.

procedure UploadCompanyDictEntry(Entry, GroupID)
var sqComp, dsComp, JurAddr, PhysAddr, CompID;

Message("Экспорт компании '" + Entry.Code + "' " + Entry.Description);
CompID = GetCompanyID(Entry.Code);
if (CompID > 0) then
Message("Запись уже существует - id: " + CompID);
else
CompID = TS.GenGUID();
JurAddr = TrimAll(Entry.ЮридическийАдрес);
PhysAddr = TrimAll(Entry.ФизическийАдрес);

sqComp = TS.Services.GetNewItemByUSI("sq_Account");
ClearFilters(sqComp);
dsComp = sqComp.Open();
dsComp.Append();

ID = dsComp.DataFields.ItemsByName("ID");
ID.Value = CompID;
Name = dsComp.DataFields.ItemsByName("Name");
Name.Value = TrimAll(Entry.Description);
OfficialName = dsComp.DataFields.ItemsByName("OfficialName");
OfficialName.Value = Entry.ПолнНаименование;
OwnerID = dsComp.DataFields.ItemsByName("OwnerID");
OwnerID.Value = TS.CurrentUser.ID;
IntegrationID = dsComp.DataFields.ItemsByName("Integration_ID");
IntegrationID.Value = Entry.Code;
if (EmptyValue(JurAddr) = 0) then
fldJurAddr = dsComp.DataFields.ItemsByName("Address");
fldJurAddr.Value = TrimAll(JurAddr);
fldJurAddrType = dsComp.DataFields.ItemsByName("AddressTypeID");
fldJurAddrType.Value = ADDR_TYPE_JUR;
else
if (EmptyValue(PhysAddr) = 0) then
fldPhysAddr = dsComp.DataFields.ItemsByName("Address");
fldPhysAddr.Value = TrimAll(PhysAddr);
fldJurAddrType = dsComp.DataFields.ItemsByName("AddressTypeID");
fldJurAddrType.Value = ADDR_TYPE_PHYS;
endif;
endif;
if (EmptyValue(TrimAll(Entry.Телефоны)) = 0) then
Phone1 = dsComp.DataFields.ItemsByName("Communication1");
Phone1.Value = TrimAll(Entry.Телефоны);
Phone1Type = dsComp.DataFields.ItemsByName("Communication1TypeID");
Phone1Type.Value = PHONE_TYPE_OFFICE;
endif;
// EDRPOU = dsComp.DataFields.ItemsByName("OKPO");
// EDRPOU.Value = Entry.ЕДРПОУ;

dsComp.Post();

if (EmptyValue(TrimAll(Entry.Телефоны)) = 0) then
AddCommunication(CompID, TrimAll(Entry.Телефоны), PHONE_TYPE_OFFICE, "Company");
endif;
if (EmptyValue(JurAddr) = 0) then
AddAddress(CompID, JurAddr, ADDR_TYPE_JUR, "Company");
endif;
if (EmptyValue(PhysAddr) = 0) then
AddAddress(CompID, PhysAddr, ADDR_TYPE_PHYS, "Company");
endif;
AddObjToGroup(CompID, GroupID, "Company");
endif;
endprocedure


При запуске переноса Юр. лиц (ответственная выше написанная процедура ) выдаёт данную ошибку:

dsComp.Post();
{F:\1C\1С\SYNC_1C.ERT(522)}: TSMSSQLEngineLibrary.MSSQLDataset: Ошибка сохранения записи. Оригинальное сообщение об ошибке: '' is not a valid GUID value

Нравится

5 комментариев

Советую отключить события датасета перед заполнением, мало ли что там в обработчике.
Попробуйте вывести dsComp.Values('ID') перед Post()
TS - точно объект коннектора?
Вы сами код интеграции писали ?
з.ы сложно такой код читать без тегов

Так поле ID не заполняется. Заполните его свежесгенеренным GUID-ом.
Upd: Или таки заполняется? Вроде строк жирным шрифтом не было когда писал пост.

Дело в том что записи екпорируютса и выбиватет только на некоторых записях.( Менял базы, разные по содержимому, никакого эффекта)

Обработку в студию. :smile:

Вам надо проверить перед Post следующие поля:
IntegrationID.Value
fldJurAddrType.Value
Phone1Type.Value

Скорее всего в одном из этих полей записана пустая строка, вместо null или корректного GUID

Показать все комментарии