AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2004, 12:07   #1  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Регистрация: 27.02.2004
Online-взаимодействие Axapta 3.0 и 1С
Здравствуйте, господа!
Требуется организовать online-обмен данными между Axapta 3.0 (SQl Server) и 1С v 7.7. Несколько связанных справочников.
Не подскажите - как это сделать?
Через BizTalk Server ? Через COM?
Спасибо.
Старый 01.03.2004, 12:30   #2  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Цитата:
Через BizTalk Server ? Через COM?
Вариантов может быть много. Вплоть до текстовых файлов
Какой выбрать в вашем конкретном случае зависит от многих факторов. Лично я делал это через COM. Все отлично работало.
Старый 01.03.2004, 12:46   #3  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Регистрация: 27.02.2004
А какой самый оптимальный способ?
Старый 01.03.2004, 13:20   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
через COM возникают проблемы с методом Новый.
кроме того, через COM непонятно как передавать перечисления.
А в остально очень даже ничего.

Я предпочитаю работать с текстовыми файлами.
Старый 01.03.2004, 13:37   #5  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Регистрация: 27.02.2004
А какой самый оптимальный способ?
Старый 01.03.2004, 13:45   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а хрен его знает. кто как привык, тот так и работает.
или скажите ваши критерии оптимальности
Старый 01.03.2004, 14:00   #7  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Регистрация: 27.02.2004
Cool
Странно - второй такой же вопрос я не задавал .
А какова технология обмена через текстовые файлы? А как же режим online (ведь по сути создается некоторый промежуточный файл), а как передача последних изменений?
Старый 01.03.2004, 14:16   #8  
france is offline
france
Участник
 
159 / 11 (1) +
Регистрация: 24.11.2003
Адрес: Москва
для начала - определите ведущую базу: Аксапта или 1С.
Это несколько упростит вам задачу.
Если ведущая база 1С - то проблем с 1С, описанных mazzy, у вас не будет.
Для того, чтобы узнать новые элементы - можете добавить в 1С новые реквизиты - "ДатаВвода", "ДатаРедактирования"

Можно в Axapta какой нибудь batch сделать - который периодически проверяет указанный вами файл на наличие txt файла. Обработайте его - и удалите\переместите - вот вам и онлайн при использовании промежуточного файла.
Старый 01.03.2004, 14:42   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано france
Если ведущая база 1С - то проблем с 1С, описанных mazzy, у вас не будет.
Тогда будут совсем другие проблемы
http://www.axforum.info/forums/showt...&threadid=4637
Старый 01.03.2004, 15:32   #10  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Регистрация: 27.02.2004
Господа!
А кого есть пример кода, как достучаться из 1С в Axapta?
Попробовал по руководству разработчика, применительно к 1С, не получается.
Axapta Business Connector запущен. Ругается, что нет такого метода Axapta.Logon.
В чем м.б. проблема?

Процедура ПриЗаписи()

Axapta = CreateObject("AxaptaCOMConnector.Axapta");
Axapta.Logon "Admin","","","";
AxaptaQuery = Axapta.CreateObject("Query");
CustTable = 77;
CustTable_Name = 2;
AxaptaDataSource = AxaptaQuery.Call("AddDataSource", CustTable);
AxaptaRange = AxaptaDataSource.Call("AddRange", CustTable_Name);

Сообщить("Тест пройден");
КонецПроцедуры
Старый 01.03.2004, 15:41   #11  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Com connector не установлен\не запущен. Последняя вкладка конфиг утилиты.
Старый 01.03.2004, 15:43   #12  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Регистрация: 27.02.2004
Всем спасибо.
Ошибка найдена.
Старый 03.12.2004, 09:34   #13  
djoker is offline
djoker
Участник
Аватар для djoker
 
83 / 10 (1) +
Регистрация: 28.05.2004
Адрес: Красноярск
Цитата:
Изначально опубликовано isbist

Процедура ПриЗаписи()

Axapta = CreateObject("AxaptaCOMConnector.Axapta");
Axapta.Logon("Admin","","","");
AxaptaQuery = Axapta.CreateObject("Query");
CustTable = 77;
CustTable_Name = 2;
AxaptaDataSource = AxaptaQuery.Call("AddDataSource", CustTable);
AxaptaRange = AxaptaDataSource.Call("AddRange", CustTable_Name);

Сообщить("Тест пройден");
КонецПроцедуры
Вот запускаю я этот код и нифига - 1С говорит типа "Полученная строка превысит допустимые размеры" - что это значит?
Почему не работает??
__________________
Смотрим в книгу - видим фигу.
Старый 03.12.2004, 11:31   #14  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 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                 ijerr;

    
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 (
|| || err)
        
info(strfmt("Передача в 1С: новых %1, совпадений кодов %2, ошибок %3.",i,j,err));
    else
        
info("Нет данных для передачи в 1С.");

Старый 03.12.2004, 12:48   #15  
djoker is offline
djoker
Участник
Аватар для djoker
 
83 / 10 (1) +
Регистрация: 28.05.2004
Адрес: Красноярск
прогнад дебаггером 1C, оказалось, что сообщение об ошибке на этом шаге:
PHP код:
Axapta.Logon("Admin"""""""); 
чё тут неправильно не пойму?
__________________
Смотрим в книгу - видим фигу.
Старый 03.12.2004, 13:29   #16  
djoker is offline
djoker
Участник
Аватар для djoker
 
83 / 10 (1) +
Регистрация: 28.05.2004
Адрес: Красноярск
Всем спасибо ! заработало !!! были проблемы просто с некоторыми настройками Аксапты
__________________
Смотрим в книгу - видим фигу.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить глоб.переменную 1С в Axapta Tony Green DAX: Программирование 6 02.02.2011 14:50
Экспорт Основных средств (ОС) из 1С в Axapta oxbacc DAX: Администрирование 3 01.02.2006 17:17
Передача данных из 1С в Axapta 3.0 через COM Connector isbist DAX: Программирование 10 03.12.2004 10:58
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Axapta Online Maxim Gorbunov DAX: База знаний и проекты 0 28.11.2001 13:39

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:17.