AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

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

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

Можно в Axapta какой нибудь batch сделать - который периодически проверяет указанный вами файл на наличие txt файла. Обработайте его - и удалите\переместите - вот вам и онлайн при использовании промежуточного файла.
Old 01.03.2004, 14:42   #9  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано france
Если ведущая база 1С - то проблем с 1С, описанных mazzy, у вас не будет.
Тогда будут совсем другие проблемы
http://www.axforum.info/forums/showt...&threadid=4637
Old 01.03.2004, 15:32   #10  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Join Date: 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);

Сообщить("Тест пройден");
КонецПроцедуры
Old 01.03.2004, 15:41   #11  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Join Date: 06.08.2002
Location: Украина
Com connector не установлен\не запущен. Последняя вкладка конфиг утилиты.
Old 01.03.2004, 15:43   #12  
isbist is offline
isbist
Участник
 
12 / 10 (1) +
Join Date: 27.02.2004
Всем спасибо.
Ошибка найдена.
Old 03.12.2004, 09:34   #13  
djoker is offline
djoker
Участник
djoker's Avatar
 
83 / 10 (1) +
Join Date: 28.05.2004
Location: Красноярск
Quote:
Изначально опубликовано 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С говорит типа "Полученная строка превысит допустимые размеры" - что это значит?
Почему не работает??
__________________
Смотрим в книгу - видим фигу.
Old 03.12.2004, 11:31   #14  
raz is offline
raz
NavAx
raz's Avatar
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,500 / 1098 (40) ++++++++
Join Date: 22.07.2003
Location: МО
У меня работает так:
1. В 1С в глобальном модуле написано несколько функций, котрые принимают данные и создают документы в 1С.
2. В Axapta сделано несколько функций для передачи документов в 1С и через COM идет вызов функций из глобального модуля.

Конкретный пример (не причесаный, прямо из рабочего приложения):

В 1С добавляем функцию:
PHP Code:
// Функция предназначена для создания сотрудника через COM
// Вызывается из Axapta
Функция COMДобавитьСотрудника(Код,Название,АдресПрописка,АдресФакт,Гражданство,ДатаРегистрации,
                              
ДатаРождения,ДокументУдЛичность,ИНН,КодИМНС,МестоРождения,
                              
СтраховойНомерПФР,Телефон,Пол,СтажНепрерывный,СтажОбщий,
                              
СтажСеверныйЭкспорт

    Спр 
СоздатьОбъект("Справочник.Сотрудники");
    
Если ПустоеЗначение(Код) = 1 Тогда
        Возврат 100
;
    
Конецесли;
    
Если ПустоеЗначение(Название) = 1 Тогда
        Возврат 101
;
    
Конецесли;
    
Если Спр.НайтиПоКоду(Код,0) = 1 Тогда
        Спр
.Наименование        Название;
        
Спр.АдресПрописка       АдресПрописка;
        
Спр.АдресФакт           АдресФакт;
        
Спр.Гражданство         Гражданство;
        
Спр.ДатаРегистрации     ДатаРегистрации;
        
Спр.ДатаРождения        ДатаРождения;
        
Спр.ДокументУдЛичность  ДокументУдЛичность;
        
Спр.ИНН                 ИНН;
        
Спр.КодИМНС             КодИМНС;
        
Спр.МестоРождения       МестоРождения;
        
Спр.СтраховойНомерПФР   СтраховойНомерПФР;
        
Спр.Телефон             Телефон;

        
СпрПол СоздатьОбъект("Справочник.ОКИН");
        
СпрПол.НайтиПоНаименованию(Пол);
        
Если СпрПол.Выбран()>0 тогда
            Пол 
СпрПол.ТекущийЭлемент()
        
КонецЕсли;

        
Спр.Пол                 Пол;
        
Спр.СтажНепрерывный     СтажНепрерывный;
        
Спр.СтажОбщий           СтажОбщий;
        
Спр.СтажСеверный        СтажСеверный;
        
Спр.Записать();
        
Спр.ОсновнойЭлемент     Спр.ТекущийЭлемент();
        
Спр.Записать();

        
Возврат 102;
    
Конецесли;

    
Спр.Новый();
    
Спр.Код                 Код;
    
Спр.Наименование        Название;
    
Спр.АдресПрописка       АдресПрописка;
    
Спр.АдресФакт           АдресФакт;
    
Спр.Гражданство         Гражданство;
    
Спр.ДатаРегистрации     ДатаРегистрации;
    
Спр.ДатаРождения        ДатаРождения;
    
Спр.ДокументУдЛичность  ДокументУдЛичность;
    
Спр.ИНН                 ИНН;
    
Спр.КодИМНС             КодИМНС;
    
Спр.МестоРождения       МестоРождения;
    
Спр.СтраховойНомерПФР   СтраховойНомерПФР;
    
Спр.Телефон             Телефон;

    
СпрПол СоздатьОбъект("Справочник.ОКИН");
    
СпрПол.НайтиПоНаименованию(Пол);
    
Если СпрПол.Выбран()>0 тогда
        Пол 
СпрПол.ТекущийЭлемент()
    
КонецЕсли;

    
Спр.Пол                 Пол;
    
Спр.СтажНепрерывный     СтажНепрерывный;
    
Спр.СтажОбщий           СтажОбщий;
    
Спр.СтажСеверный        СтажСеверный;
    
Спр.Записать();
    
Спр.ОсновнойЭлемент     Спр.ТекущийЭлемент();
    
Спр.Записать();

    
Возврат 200;
КонецФункции 
В Axapta:
PHP Code:
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С.");

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Как получить глоб.переменную 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:49.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.