|
|
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
поставлена задача сделать выгрузку данных из 8ки в Navision. Без промежуточного файла. т.е. напрямую в sql таблицу. Как выбрать данные в 1с я знаю. а вот дальше затык. Надо подключиться к Navision используя ADO (либо иначе)? Где про это можно почитатьа также Интересен пример, как из 1с помещать данные в SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 23:28 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
rasswetпоставлена задача сделать выгрузку данных из 8ки в Navision. Без промежуточного файла. т.е. напрямую в sql таблицу. Как выбрать данные в 1с я знаю. а вот дальше затык. Надо подключиться к Navision используя ADO (либо иначе)? Где про это можно почитатьа также Интересен пример, как из 1с помещать данные в SQL Ой чета я очкую Славик в Аксапте ( Навижен думаю такая же байда) есть тема с уникальными/ ключевыми полями, которые генерируются ( каким макаром тупо влом сидеть курить) системой. Как вариант - сделать рядом стоящую SQL базу. В нее вливать данные ( ADO) А Навижен пущай из нее сосет данные. Хотя если не очкуете завалить целостность данных ( например в Навижене это временные таблицы), то чистый ADO con ADOConnection ... cmd.Execute ("Insert into ...") и т.д. Но лично я за - хранимки. Ими вливать проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 03:17 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
rasswetпоставлена задача сделать выгрузку данных из 8ки в Navision. Без промежуточного файла. т.е. напрямую в sql таблицу. начать лучше с мыслей о том, как вы планируете контролировать корректность данных с точки зрения навжина. насколько я помню, там куча проверок данных на корректность, и выполняются они на уровне приложения, а не БД (написаны не на sql, а на языке навижина). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 09:42 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
У нас SAP стоит (база на Oracle). Никому в голову не приходило напрямую данные в базу пихать. Действительно, много нюансов - проверка целостности, дублирование в разные таблицы и пр. - и за всеми не уследишь. Это все на уровне [функционала, методов] системы делается. Для массовой загрузки чего-либо используем типовые механизмы (IDOC, LSMW и пр.). Уверен, что в Navision тоже есть такие. PS А вот считывать данные из Oracle считываем. Не редно это эффективнее раличных отчетов и ABAP-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 10:16 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
rasswet, С такими вопросами Вам надо на форум Мази . По опыту рядом сидящих коллег, могу сказать, что они напрямую не льют даже в случае Nav-Nav. Люьт в темповые таблицы и из них учитывают. С ключевыми полями особых проблем нету, но есть СИФТы и прочие подводные камешки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 11:01 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
AHDP, значить буду лить в темповые. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 14:31 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
Вот пример работы с ADO через OLEDB и ODBC провайдеров там есть примеры чтения и записи данных с поддержкой транзакций все для 1с 8.2 - если надо кину конфигурацию // Процедура создания соединения с БД Procedure CreateConnection(Form) export // создаем соединение c БД if isnull(Form.Connection) then try Form.Connection = Новый COMОбъект("ADODB.Connection"); if isnull(Form.ConnectionString) = true then if Form.Provider = "SQLNCLI" then if Form.Trusted_Connection = false then Form.ConnectionString = "Provider = SQLNCLI;DRIVER=SQL Native Client;server="+Form.server+";uid="+Form.uid+";pwd="+Form.pwd+";Database="+Form.database+";Trusted_Connection=no;"; else Form.ConnectionString = "Provider = SQLNCLI;DRIVER=SQL Native Client;server="+Form.server+";Database="+Form.database+";Trusted_Connection=yes;"; endif; else Form.Provider = "SQLOLEDB"; if Form.Trusted_Connection = false then Form.ConnectionString = "Provider=SQLOLEDB;Driver=SQL Server;server="+Form.server+"; uid="+Form.uid+";pwd="+Form.pwd+";Database="+Form.database+";Trusted_Connection=no;"; else Form.ConnectionString = "Provider=SQLOLEDB;Driver=SQL Server;server="+Form.server+";Database="+Form.database+";Trusted_Connection=yes;"; endif; endif; endif; Form.Connection.ConnectionTimeout = 10; Form.Connection.CommandTimeout = 0; Form.Connection.CursorLocation = 3; except Form.Connection = NULL; Предупреждение("Невозможно создать соединение. " + ОписаниеОшибки(),0,"Внимание !"); endtry; endif; endprocedure // Процедура соединения с БД Procedure Connect(Form) export if not isnull(Form.Connection) then // проверяем соединение if Form.Connection.State = 0 and not isnull(Form.ConnectionString) then try // Соединяемся с БД Form.Connection.Open(Form.ConnectionString); except Form.Connection = NULL; Предупреждение("Невозможно установить соединение. " + ОписаниеОшибки(),0,"Внимание !"); endtry; endif; endif; endprocedure // Проседура разрыва соединения Procedure Disconnect(Form,DWP) export // разрываем соединение при закрытии окна if Form.CloseConnection = true then if not isnull(DWP.Recordset.Source) then DWP.Recordset.close(); endif; if not isnull(Form.Connection) then try Form.Connection.close(); except Предупреждение("Невозможно разорвать соединение. "+ОписаниеОшибки(),0,"Внимание !"); endtry; endif; endif; Form.Connection = NULL; DWP.Recordset = NULL; endprocedure Procedure RollbackSQLTransaction(Connection) export cnt = 0; ТЗ = Выполнить_Запрос_SQL("select @@TRANCOUNT",Connection,false); if ТЗ.count() > 0 then if ТЗ.ВыгрузитьКолонку(0)[0] > 0 then Connection.Execute("Rollback"); endif; endif; endprocedure Procedure BeginSQLTransaction(Connection) export Connection.Execute("BEGIN TRANSACTION"); endprocedure Procedure CommitSQLTransaction(Connection) export cnt = 0; ТЗ = Выполнить_Запрос_SQL("select @@TRANCOUNT",Connection,false); if ТЗ.count() > 0 then if ТЗ.ВыгрузитьКолонку(0)[0] > 0 then Connection.Execute("Commit"); endif; endif; endprocedure // Функция выполняет SQL запрос без параметров и возвращает Таблицу Значений Function Выполнить_Запрос_SQL(val ТекстЗапроса,Connection,Transactional) export ТаблицаЗначенийРезультата = Новый ТаблицаЗначений; if isnull(ТекстЗапроса) or isnull(Connection) then return ТаблицаЗначенийРезультата; endif; try ADODBError = false; Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = Connection; Cmd.CommandText = ТекстЗапроса; if isnull(Cmd.CommandType) then Cmd.CommandType = КонстантаCommandType("adCmdUnknown"); endif; RecordSet = Новый COMОбъект("ADODB.RecordSet"); if Transactional then Connection.Execute("BEGIN TRANSACTION"); Connection.Execute("set implicit_transactions off"); endif; RecordSet = Cmd.Execute(); //Выполнение и получение набора данных if Transactional then Connection.Execute("Commit"); endif; if RecordSet.State = 1 then // заполняем ТЗ for i = 0 to RecordSet.Fields.Count - 1 do //Создание и добавление колонок ColumnName = RecordSet.Fields.Item(i).Name; ColumnType = GetTypeColumn(RecordSet.Fields.Item(i).Type,RecordSet.Fields.Item(i).ActualSize); if isnull(ColumnType) then ТаблицаЗначенийРезультата.Колонки.Добавить(ColumnName); else ТаблицаЗначенийРезультата.Колонки.Добавить(ColumnName,ColumnType); endif; enddo; while RecordSet.EOF = 0 do // Заполнение созданной таблицы НоваяСтрока = ТаблицаЗначенийРезультата.Добавить(); for НомерСтолбца = 0 По RecordSet.Fields.Count - 1 do НоваяСтрока.Установить(НомерСтолбца,RecordSet.Fields(НомерСтолбца).Value); enddo; RecordSet.MoveNext(); enddo; RecordSet.close(); endif; Cmd = NULL; RecordSet = NULL; except ADODBError = true; if Transactional then RollbackSQLTransaction(Connection); endif; Предупреждение("Невозможно выполнить запрос: "+ТекстЗапроса+". " + ОписаниеОшибки(),0,"Внимание !"); Message("Невозможно выполнить запрос: "+ТекстЗапроса); endtry; return ТаблицаЗначенийРезультата; endfunction // Функция выполняет SQL запрос с параметрами и возвращает Таблицу Значений Function Выполнить_Запрос_SQL_Параметры(val ТекстЗапроса,Connection,Параметры) export ТаблицаЗначенийРезультата = Новый ТаблицаЗначений; if isnull(ТекстЗапроса) or isnull(Connection) then return ТаблицаЗначенийРезультата; endif; try ADODBError = false; Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = Connection; Cmd.CommandText = ТекстЗапроса; if isnull(Cmd.CommandType) then Cmd.CommandType = КонстантаCommandType("adCmdUnknown"); endif; if Параметры.Count() > 0 then ПараметрЗапроса = Новый COMОбъект("ADODB.Parameter"); for each КлючИЗначение in Параметры do if isnull(КлючИЗначение.Значение) then Cmd = NULL; return ТаблицаЗначенийРезультата; endif; P = ParameterADO(КлючИЗначение); ПараметрЗапроса = Cmd.CreateParameter(P.Name,P.Type,P.Direction,P.Size,P.Value); Cmd.Parameters.Append(ПараметрЗапроса) enddo; endif; RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = Cmd.Execute(); //Выполнение и получение набора данных // заполняем ТЗ if RecordSet.State = 1 then for i = 0 to RecordSet.Fields.Count - 1 do //Создание и добавление колонок ColumnName = RecordSet.Fields.Item(i).Name; ColumnType = GetTypeColumn(RecordSet.Fields.Item(i).Type,RecordSet.Fields.Item(i).ActualSize); if isnull(ColumnType) then ТаблицаЗначенийРезультата.Колонки.Добавить(ColumnName); else ТаблицаЗначенийРезультата.Колонки.Добавить(ColumnName,ColumnType); endif; enddo; while RecordSet.EOF = 0 do // Заполнение созданной таблицы НоваяСтрока = ТаблицаЗначенийРезультата.Добавить(); for НомерСтолбца = 0 По RecordSet.Fields.Count - 1 do НоваяСтрока.Установить(НомерСтолбца,RecordSet.Fields(НомерСтолбца).Value); enddo; RecordSet.MoveNext(); enddo; RecordSet.close(); endif; Cmd = NULL; RecordSet = NULL; except ADODBError = true; Предупреждение("Невозможно выполнить запрос: "+ТекстЗапроса+". " + ОписаниеОшибки(),0,"Внимание !"); Message("Невозможно выполнить запрос: "+ТекстЗапроса); endtry; return ТаблицаЗначенийРезультата; endfunction ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 15:04 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
oleg_shishkin, мегареспект! буду на выходных прорабоатывать. если можно, то скиньте на dimabdn(ат)gmail.com я так понимаю наиболее простым на данном этапе для меня будет создать на скуле базу с одной таблицей. и вливать из 1с в неё. а далее пусть тот, кто навижином занимается, из этой таблицы всё забирает себе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 15:17 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
rasswet, Пусть тогда лучше навиженцы из вашей базы читают. А то как будете разбираться, какие данные откатить в Навижене, когда 1Ску из резервной копии восстановите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 15:25 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
AHDP, прежде чем они смогут читать, мне нужно им данные подготовить. т.е. выбрать из базы проводки преобразовать их многократно, заменяя там аналитику по определенным правилам и т.п. в 1с готовых данных нет, которые бы они могли раз и взять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 15:31 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
rasswet, Тогда с тем же успехом можно создать регистр в 1с-е, чтобы с АДО не заморачиваться, и туда данные лить, а (не)навиженцы будут напрямую оттуда тянуть данные куда им вздумается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 16:27 |
|
||
|
из 1с 8.1 в Navision с чего начать?
|
|||
|---|---|---|---|
|
#18+
Послал конфигурацию - что непонятно - пишите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 19:49 |
|
||
|
|

start [/forum/search_topic.php?author=Enio-&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 723ms |
| total: | 952ms |

| 0 / 0 |
