NavAx
Регистрация: 22.07.2003
Адрес: МО
|
У меня работает так:
1. В 1С в глобальном модуле написано несколько функций, котрые принимают данные и создают документы в 1С.
2. В Axapta сделано несколько функций для передачи документов в 1С и через COM идет вызов функций из глобального модуля.
Конкретный пример (не причесаный, прямо из рабочего приложения):
В 1С добавляем функцию:
PHP код:
// Функция предназначена для создания сотрудника через COM
// Вызывается из Axapta
Функция COMДобавитьСотрудника(Код,Название,АдресПрописка,АдресФакт,Гражданство,ДатаРегистрации,
ДатаРождения,ДокументУдЛичность,ИНН,КодИМНС,МестоРождения,
СтраховойНомерПФР,Телефон,Пол,СтажНепрерывный,СтажОбщий,
СтажСеверный) Экспорт
Спр = СоздатьОбъект("Справочник.Сотрудники");
Если ПустоеЗначение(Код) = 1 Тогда
Возврат 100;
Конецесли;
Если ПустоеЗначение(Название) = 1 Тогда
Возврат 101;
Конецесли;
Если Спр.НайтиПоКоду(Код,0) = 1 Тогда
Спр.Наименование = Название;
Спр.АдресПрописка = АдресПрописка;
Спр.АдресФакт = АдресФакт;
Спр.Гражданство = Гражданство;
Спр.ДатаРегистрации = ДатаРегистрации;
Спр.ДатаРождения = ДатаРождения;
Спр.ДокументУдЛичность = ДокументУдЛичность;
Спр.ИНН = ИНН;
Спр.КодИМНС = КодИМНС;
Спр.МестоРождения = МестоРождения;
Спр.СтраховойНомерПФР = СтраховойНомерПФР;
Спр.Телефон = Телефон;
СпрПол = СоздатьОбъект("Справочник.ОКИН");
СпрПол.НайтиПоНаименованию(Пол);
Если СпрПол.Выбран()>0 тогда
Пол = СпрПол.ТекущийЭлемент()
КонецЕсли;
Спр.Пол = Пол;
Спр.СтажНепрерывный = СтажНепрерывный;
Спр.СтажОбщий = СтажОбщий;
Спр.СтажСеверный = СтажСеверный;
Спр.Записать();
Спр.ОсновнойЭлемент = Спр.ТекущийЭлемент();
Спр.Записать();
Возврат 102;
Конецесли;
Спр.Новый();
Спр.Код = Код;
Спр.Наименование = Название;
Спр.АдресПрописка = АдресПрописка;
Спр.АдресФакт = АдресФакт;
Спр.Гражданство = Гражданство;
Спр.ДатаРегистрации = ДатаРегистрации;
Спр.ДатаРождения = ДатаРождения;
Спр.ДокументУдЛичность = ДокументУдЛичность;
Спр.ИНН = ИНН;
Спр.КодИМНС = КодИМНС;
Спр.МестоРождения = МестоРождения;
Спр.СтраховойНомерПФР = СтраховойНомерПФР;
Спр.Телефон = Телефон;
СпрПол = СоздатьОбъект("Справочник.ОКИН");
СпрПол.НайтиПоНаименованию(Пол);
Если СпрПол.Выбран()>0 тогда
Пол = СпрПол.ТекущийЭлемент()
КонецЕсли;
Спр.Пол = Пол;
Спр.СтажНепрерывный = СтажНепрерывный;
Спр.СтажОбщий = СтажОбщий;
Спр.СтажСеверный = СтажСеверный;
Спр.Записать();
Спр.ОсновнойЭлемент = Спр.ТекущийЭлемент();
Спр.Записать();
Возврат 200;
КонецФункции
В Axapta:
PHP код:
public void EmployersTo1C()
{
COM v77;
COM ref;
COM obj;
int res;
str Param;
counter i, j, err;
EmplTable EmplTable;
RO_Logins1C RO_Logins1C;
RPayTaxParameters rPayTaxParameters = RPayTaxParameters::find();
RHRMVirtualNetworkTable rhrmVirtualNetworkTable;
RpayHRMOrganization RpayHRMOrganization;
Addressing Address()
{
Addressing addressing;
if(! emplTable.AddressMap_RU::isEmptyAdress())
addressing = emplTable.AddressMap_RU::makeAddress(rPayTaxParameters.PensionFundAddressFormatId);
else if(! rhrmVirtualNetworkTable.AddressFactMap_RU::isEmptyAdress())
addressing = rhrmVirtualNetworkTable.AddressFactMap_RU::makeAddress(rPayTaxParameters.PensionFundAddressFormatId);
else if(! emplTable.AddressFactMap_RU::isEmptyAdress())
addressing = emplTable.AddressFactMap_RU::makeAddress(rPayTaxParameters.PensionFundAddressFormatId);
else
addressing = "";
return addressing;
}
Addressing AddressFact()
{
Addressing addressing;
if(! rhrmVirtualNetworkTable.AddressFactMap_RU::isEmptyAdress())
addressing = rhrmVirtualNetworkTable.AddressFactMap_RU::makeAddress(rPayTaxParameters.PensionFundAddressFormatId);
else if(! emplTable.AddressFactMap_RU::isEmptyAdress())
addressing = emplTable.AddressFactMap_RU::makeAddress(rPayTaxParameters.PensionFundAddressFormatId);
else
addressing = "";
return addressing;
}
;
while select RpayHRMOrganization where RpayHRMOrganization.hrmOrganizationId == RO_OrgMain
join RO_Logins1C where RO_Logins1C.MainOrganization == RpayHRMOrganization.hrmOrganizationId
{
progressDlg.setText(strfmt("Передаем данные компании '%1'",RpayHRMOrganization.hrmOrganizationId));
progressDlg.update(true);
if (!winapi::pathExists(RO_Logins1C.PathTo1C))
{
info(strfmt("С вашего компьютера не доступна 1С:ЗиК компании '%1'.",RpayHRMOrganization.description));
continue;
}
Param = strfmt("/d\"%1\" /N%2 /P%3",RO_Logins1C.PathTo1C,RO_Logins1C.UserName1C,RO_Logins1C.Password1C);
info(strfmt("----- Начинаем использовать компанию '%1' ------",RpayHRMOrganization.description));
v77 = new COM("v77.Application");
res = v77.initialize(v77.RMtrade(),Param,"NO_SPLASH_SHOW");
if( !res ) throw error("Ошибка открытия 1С");
ttsbegin;
while select forupdate EmplTable
where EmplTable.RO_1CUpdated == NoYes::No &&
EmplTable.RO_OrgMain == RpayHRMOrganization.hrmOrganizationId
join rhrmVirtualNetworkTable
where rhrmVirtualNetworkTable.EmplId == EmplTable.EmplId
{
Param = "COMДобавитьСотрудника(" +
"\"" + (EmplTable.RO_1C_Code ? EmplTable.RO_1C_Code : EmplTable.EmplId) + "\"," +
"\"" + strrem(EmplTable.Name,"\"\n") + "\"," +
"\"" + "," + strrem(Address(),"\"\n") + "\"," +
"\"" + "," + strrem(AddressFact(),"\"\n") + "\"," +
"\"" + Country::find(RHRMVirtualNetworkTable::findEmplId(EmplTable.EmplId).citizenship).RO_1C_Code + "\"," +
"\"" + strfmt("%1",EmplTable.rhrmCreateDate) + "\"," +
"\"" + strfmt("%1",EmplTable.BirthDate) + "\"," +
"\"" + strrem(EmplTable.RO_IdentityCardFull_RU(),"\"\n") + "\"," +
"\"" + EmplTable.PayInn_RU + "\"," +
"\"" + EmplTable.PayGniCode_RU + "\"," +
"\"" + strrem(strfmt("0,%4,%3,%2,%1",Country::find(EmplTable.rhrmCountryBirthId).AddrFormat,
EmplTable.rhrmStateBirth,EmplTable.rhrmCountyBirth,EmplTable.rhrmTownBirth),"\"\n") + "\"," +
"\"" + strrem(EmplTable.PayInnPf_RU,"\"\n") + "\"," +
"\"" + strrem(EmplTable.Phone,"\"\n") + "\"," +
"\"" + strfmt("%1",RHRMVirtualNetworkTable::findEmplId(EmplTable.EmplId).gender) + "\"," +
"\"" + EmplTable.continuityDate_RU(false,'') + "\"," +
"\"" + EmplTable.seniorityDate_RU(false,'') + "\"," +
"\"" + EmplTable.northSeniorityDate_RU(false,'') + "\"" +
")";
strrem(Param,"\n");
res = v77.evalexpr(Param);
switch (res)
{
case 100 :
info("Ошибка. Не указан табельный номер.");
err++;
break;
case 101 :
info("Ошибка. Не указаны ФИО.");
err++;
break;
case 102 :
info(strfmt("Сотрудник с табельным '%1' обновлен в 1С.",EmplTable.EmplId));
EmplTable.RO_1C_Code = EmplTable.RO_1C_Code ? EmplTable.RO_1C_Code : EmplTable.EmplId;
EmplTable.RO_1CUpdated = NoYes::Yes;
EmplTable.doUpdate();
j++;
break;
case 200 :
info(strfmt("Сотрудник '%1' %2 передан в 1С.",EmplTable.EmplId,EmplTable.Name));
EmplTable.RO_1C_Code = EmplTable.RO_1C_Code ? EmplTable.RO_1C_Code : EmplTable.EmplId;
EmplTable.RO_1CUpdated = NoYes::Yes;
EmplTable.doUpdate();
i++;
break;
}
}
ttscommit;
v77 = null;
info(strfmt("----- Закончили использовать компанию '%1' ------",RpayHRMOrganization.description));
}
if (i || j || err)
info(strfmt("Передача в 1С: новых %1, совпадений кодов %2, ошибок %3.",i,j,err));
else
info("Нет данных для передачи в 1С.");
}
|