|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Планируется разработка учетной системы (Delphi7+MSSQL2000), в которой есть достаочно большая учетно-финансовая часть (ведение прейскурантов, договоров, выписка счетов, контроль платежей, ведение лицевых счетов и т.д.). Собственно вопрос: есть ли смысл писать все это самим или же попытаться релизовать все это на 1С. Есть один нюанс - получается очень много двунаправленных связей между нашей программой и 1С. Т.е. надо не только выгружать данные в 1С, но и постоянно обращаться к даным 1С. Я, собственно говоря, боюсь, что написание нужной конфигурации будет более сложным и менее надежным, чем полностью самописное произведение. Может быть у кого-то есть опыт решение подобных проблем? Была бы очень благодарна за комментарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 11:48 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
на чтении данных из 1С никаких проблем нет, кроме разве что периодических реквизитов в 7.7 Прямую запись в таблицы 1С не рисковали делать (1С-кие ID...), если требовалась загрузка то через промежуточный слой, загрузка из которого средствами 1С ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 12:06 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
iscrafmна чтении данных из 1С никаких проблем нет, кроме разве что периодических реквизитов в 7.7 и с периодическими тоже нет iscrafmПрямую запись в таблицы 1С не рисковали делать (1С-кие ID...), если требовалась загрузка то через промежуточный слой, загрузка из которого средствами 1С уже давно 1С-ими умельцами написаны функции создания ID на T-SQL, саое трудно это механизмы УРБД и Рекистры, с остальным все более или менее просто на счет промежуточного слоя - плохой подход, т.к. если все поля в 1С и в программе источнике изменить, то при загрузке элемент не сможет быть найден, если же делать синхронизацию по ID - то элемент всегда будет найден корректно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 13:24 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
2 автор вопрос сложный, все зависит от ваших знаний и умений в осбласти Delphi+MSSQL и 1С+MSSQL я бы делал все на 1С+MSSQL, т.к. лучше это знаю в вашем случае оцените сроки и силы на реализацию на том и на др. продуктах и там уже смотрите по обстоятельством, что будет эффективнее ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 13:26 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Сергей84на счет промежуточного слоя - плохой подход, т.к. если все поля в 1С и в программе источнике изменить, то при загрузке элемент не сможет быть найден, если же делать синхронизацию по ID - то элемент всегда будет найден корректно Возможно. Делалось только разово. Для постоянного обмена скорее всего пришлось конечно бы делать синхронизацию по ID. Кстати, нет ссылки на разработки по формированию ID в T-SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 14:14 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
iscrafmна чтении данных из 1С никаких проблем нет, кроме разве что периодических реквизитов в 7.7 Прямую запись в таблицы 1С не рисковали делать (1С-кие ID...), если требовалась загрузка то через промежуточный слой, загрузка из которого средствами 1С Судя по всем речь шла о прямом доступе к таблицам. Есть еще один достаточно надежный способ - OLE. Подключаетесь через компоненту v7plus.dll и обращаетесь к данным методами 1С. Никаких проблем в получением периодических значений (речь про 7.7., в 8.0 периодических реквизитов нету) Что касается самой задачи. Зависит от количества документов и операций, объемов справочников и т.д. Как вариант (подумав о производительности, масштабируемости) написать все самим "с нуля" на 1С 8.0. (подсматривая или целиком копируя из конфигурацйи подходящие блоки). Написание конфигурации вряд ли будет сложнее чем самописное произведение, поскольку большинство сущностей реальных бизнес процессов уже заложено в систему (справочники, подчиненные справочники, документы с множемтвенными табличными частями, регистры, планы счетов и т.д.). Все таки меньше времени уйдет на прямую реализацию бизнес-модели, чем проектирование такого рода сущностей и реализацию бизнес-модели. Большинство проблем и несовместимостей и несправедливых наездов на 1С-овцев это "кривость конфигураций", которая результат "быстрой разработки". Но такая кривость встречается везде и повсюду и в большой степени зависит от квалификации и системности проектировщиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 14:16 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Dinamo Судя по всем речь шла о прямом доступе к таблицам. Есть еще один достаточно надежный способ - OLE. Подключаетесь через компоненту v7plus.dll и обращаетесь к данным методами 1С. Никаких проблем в получением периодических значений (речь про 7.7., в 8.0 периодических реквизитов нету) Да, нужен был прямой доступ чтобы забрать полностью всю БД. Где Вы раньше были.. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 14:23 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
iscrafmДа, нужен был прямой доступ чтобы забрать полностью всю БД. Где Вы раньше были.. :) В этом плане вам OLE не собо помог бы, поскольку для обращения в метаданным нужно знать их структуру и свойства. OLE полезен для синхронизации разных баз в он-лайне. Но в свою очередь такое соединение ограничено "техническими возможностями 1С". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 14:29 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
К сожалению писать все на 1С не получится - . Рален ли такой вариант: взять клиент-серверную 1С и работать напрямую с её таблицами из своего приложения? Я так поняла, что реален. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 14:42 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
NissaК сожалению писать все на 1С не получится - . Рален ли такой вариант: взять клиент-серверную 1С и работать напрямую с её таблицами из своего приложения? Я так поняла, что реален. реален, но трудоемок, т.к. для его реализации нужно знать процессы 1С на низком уровне, на изучение которых может уйти достаточно много времени. 2 iscrafm http://www.sinor.ru/~my1c/knowhow/SQLcnvID.html ID в 1С имеет длину 9 символов первые 6-ть это 36-ий код представляющий из себя инкремент правые 3-и символа - это код ИБ создания объетка теперь пишем 2 ХР используя эти знания и все работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 14:58 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Вопрос не снят :-) - стоит ли связываться, или ну его на фиг? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 15:13 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Сергей84 NissaК сожалению писать все на 1С не получится - . Рален ли такой вариант: взять клиент-серверную 1С и работать напрямую с её таблицами из своего приложения? Я так поняла, что реален. реален, но трудоемок, т.к. для его реализации нужно знать процессы 1С на низком уровне, на изучение которых может уйти достаточно много времени. 2 iscrafm http://www.sinor.ru/~my1c/knowhow/SQLcnvID.html ID в 1С имеет длину 9 символов первые 6-ть это 36-ий код представляющий из себя инкремент правые 3-и символа - это код ИБ создания объетка теперь пишем 2 ХР используя эти знания и все работает :) спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 15:24 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Не дождавшись благих вестей от 1С, народ принялся хакать формат хранения. Первые попытки зафиксированы 5-7 лет назад :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2006, 19:05 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Ну_почему_жеНе дождавшись благих вестей от 1С, народ принялся хакать формат хранения. Первые попытки зафиксированы 5-7 лет назад :) А не дешевле бухгалтерию самим написать?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2006, 12:45 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Dogen Ну_почему_жеНе дождавшись благих вестей от 1С, народ принялся хакать формат хранения. Первые попытки зафиксированы 5-7 лет назад :) А не дешевле бухгалтерию самим написать?.. Написать может и дешевле. Только поддержка дело гемморойное. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2006, 13:18 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
NissaВопрос не снят :-) - стоит ли связываться, или ну его на фиг? А почему на 1с не получится, какие то требования? Если 1с не пролезает, почему не посмотреть вокруг и не рассмотреть известные и менее известные готовые инструментарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2006, 14:00 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
NissaВопрос не снят :-) - стоит ли связываться, или ну его на фиг? Мне кажется, что вы сами должны посчитать и понять, что для Вас приемлемо, а что - нет, поскольку всей информацией владеете только Вы (и что-то не спешите ею с нами делиться :)) : Во-первых, какие ресурсы отведены Вами под систему, сколько пользователей будет работать с интерфейсами Дельфи и сколько - с 1С? Вы в курсе, что при увеличении рабочих мест под 1С для работы с общими БД придется создавать неслабую терминальную систему? Во-вторых, насколько хорошо Вами изучены возможности стандартных конфигураций 1С? В-третьих, в какой предметной области будет работать Ваша учетная система? В политике 1С очень четко прослеживается мысль - "ВСЕ должно быть сделано на 1С, а все остальное - превращается в костыли и сильно усложнит жизнь". Кстати, на мой взгляд, это - "красная нить" ЛЮБОЙ системы: все системы тяжело переживают попытки "скрещивания". Есть два варианта: либо ВСЕ делать на 1С, либо использовать 1С в качестве приложения для печати документации после соотв. выгрузки данных - и не более того (ввод каких-либо данных через 1С запретить полностью или свести к минимуму). Совмещение 1С и чего-то еще (по-крайней мере по моему опыту) идет по следующим сценариям: 1. Работа останавливается и для ее запуска приходится вводить новую должность - "администратор справочников" - это такие девочки, которые постоянно что-то вводят в 1С 2. Самописная система вытесняет 1С в комнату бухов и, в конце-концов, превращает 1С в "печатальщик" накладных, счетов и прочей официальной бумаженцией 3. Система продолжает работать при нечеловеческих усилиях группы техподдержки под постоянные телефонные трели. P.S. Принципиально, для УЧЕТНОЙ системы возможностей 1С "самой-по-себе" должно хватить, но при попытке создания интегрированной в бизнес-процессы ИНФОРМАЦИОННОЙ системы с помощью 1С ресурсы потребуются очень значительные. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2006, 11:21 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
procedure LoadDefaultRulesOfExchange1C(); var dsc: TDSDesc; begin if not CheckPassw('Требуются привилегии на загрузку правил обмена. Пароль:', '999') then begin SMsg('Неверный пароль ! Обратитесь к администратору.'); Exit; end; try try Dsc := DscQueryCreate('Exchange1C'); Dsc.Clear; Dsc.Add('DELETE FROM #TABLE'); Dsc.ExecSQL; Dsc.Close; CloseDsc(Dsc); Dsc := MakeInsertDscQuery('Exchange1C'); // >> контрагенты Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'Name'); Dsc.PBN('Field1C', ftString, 'Наименование'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'PASSPORTS'); Dsc.PBN('Field1C', ftString, 'ДокументСерия'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'PASSPORTN'); Dsc.PBN('Field1C', ftString, 'ДокументНомер'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'PASSPORTG'); Dsc.PBN('Field1C', ftString, 'ДокументКемВыдан'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'PASSPORTD'); Dsc.PBN('Field1C', ftString, 'ДокументДатаВыдачи'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'FName'); Dsc.PBN('Field1C', ftString, 'ПолнНаименование'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'Address'); Dsc.PBN('Field1C', ftString, 'ПочтовыйАдрес'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'JAddress'); Dsc.PBN('Field1C', ftString, 'ЮридическийАдрес'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'Telf'); Dsc.PBN('Field1C', ftString, 'Телефоны'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 1); Dsc.PBN('FieldE2', ftString, 'INN'); Dsc.PBN('Field1C', ftString, 'ИНН'); Dsc.ExecSQL; // << контрагенты // >> сотрудники Dsc.PBN('Sbk', ftInteger, 2); Dsc.PBN('FieldE2', ftString, 'Name'); Dsc.PBN('Field1C', ftString, 'Наименование'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 2); Dsc.PBN('FieldE2', ftString, 'PASSPORTS'); Dsc.PBN('Field1C', ftString, 'ДокументСерия'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 2); Dsc.PBN('FieldE2', ftString, 'PASSPORTN'); Dsc.PBN('Field1C', ftString, 'ДокументНомер'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 2); Dsc.PBN('FieldE2', ftString, 'PASSPORTG'); Dsc.PBN('Field1C', ftString, 'ДокументКемВыдан'); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 2); Dsc.PBN('FieldE2', ftString, 'PASSPORTD'); Dsc.PBN('Field1C', ftString, 'ДокументДатаВыдачи'); Dsc.ExecSQL; // << сотрудники // >> Перечисление.Налоги Dsc.PBN('Sbk', ftInteger, 118); Dsc.PBN('FieldE2', ftString, 'Name'); Dsc.PBN('Field1C', ftString, ''); Dsc.ExecSQL; Dsc.PBN('Sbk', ftInteger, 118); Dsc.PBN('FieldE2', ftString, 'FName'); Dsc.PBN('Field1C', ftString, ''); Dsc.ExecSQL; // << Перечисление.Налоги // >> Места хранения Dsc.PBN('Sbk', ftInteger, 116); Dsc.PBN('FieldE2', ftString, 'Name'); Dsc.PBN('Field1C', ftString, 'Наименование'); Dsc.ExecSQL; // << Перечисление.Налоги SMsg('Загрузка правил обмена с 1С по умолчанию завершена успешно.') finally Dsc.CommitDB; CloseDsc(Dsc); end; except SMsg('Загрузка правил обмена с 1С по умолчанию завершена не успешно.') end; end; ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2006, 13:17 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
procedure Imp1CDirect(ClickSbk: string); // ИМПОРТ var V77, V77Obj, V77RS, V77Bank, V77P: OleVariant; aSubk, aMSubk, rules: TEraList; Kod, cnt, i, k: integer; ObjName, PName, fields: string; IsDict: boolean; // Является ли данный тип 1C справочником или перечислением FieldsE2, Fields1C: TStringList; finded: boolean; wc: string; Sbk: integer; T_Dsc, dscMSubk: TDSDesc; I_MSubk: TErQuery; begin try MeterOpen('Импорт данных из 1С...'); V77 := Open1C(False); ClickSbk := SindGetStrings(ClickSbk); wc := 'SBK IN ('+ClickSbk+')'; aSubk := erLoadDF('Subk', wc, ''); aSubk.First(); // Удаляем поля с пустыми строками в TYPESUBK_1C while not aSubk.eof do begin ObjName := aSubk.fbn('TYPESUBK_1C').AsString; IsDict := (Pos(UpperCase('Справочник'), UpperCase(ObjName)) > 0) or (Pos(UpperCase('Перечисление'), UpperCase(ObjName)) > 0); if not IsDict then aSubk.Del else aSubk.Next; end; aSubk.First(); while not aSubk.eof do begin Sbk := aSubk.fbn('Sbk').Value; ObjName := aSubk.fbn('TYPESUBK_1C').AsString; IsDict := Pos(UpperCase('Справочник'), UpperCase(ObjName)) > 0; if not IsDict then PName := copy(ObjName, 14, length(ObjName)); // Название вида перечисления rules := erLoadDF('Exchange1C', 'Sbk='+ITS(Sbk)); if rules.Count <= 0 then begin fields := 'Name;FName'; FieldsE2 := TStringList.Create; Fields1C := TStringList.Create; FieldsE2.Add('Name'); Fields1C.Add('Наименование'); // ??? GRN 13.07.2004 FieldsE2.Add('FName'); Fields1C.Add('Наименование'); // ??? GRN 13.07.2004 end else begin rules.First(); fields := ''; FieldsE2 := TStringList.Create; Fields1C := TStringList.Create; while not rules.eof do begin fields := fields + rules.fbn('FieldE2').AsString + ';'; FieldsE2.Add(rules.fbn('FieldE2').AsString); if Trim(rules.fbn('Field1C').AsString) <> '' then Fields1C.Add(rules.fbn('Field1C').AsString); rules.Next; end; end; if Sbk = 1 then fields := fields + 'DefRS;NAMEBANK;BANKCITY;BIK;KS'; FreeAndNil(rules); aMSubk := erLoadDF('MSubk', 'SBK='+ITS(Sbk), 'Ako;'+fields); cnt := 1; if IsDict then begin V77Obj := V77.CreateObject(ObjName); V77Obj.SelectItems; V77Obj.SelectGroup(0); if Sbk = 1 then V77RS := V77.CreateObject('Справочник.РасчетныеСчета'); while V77Obj.GetItem > 0 do // Выборка begin Kod := V77Obj.GetAttrib('Код'); if V77Obj.IsGroup('') = 1 then begin MeterMove('- ' + NumStr(Kod, 4)); Continue; end; finded := aMSubk.FindKey(Kod); if finded then begin MeterMove('Выборка субконто ' + ITS(Sbk) + ' :' + ITS(cnt)); inc(cnt); Continue; end else aMSubk.Insert; aMSubk.FBN('Ako').Value := Kod; for i := 0 to FieldsE2.Count-1 do if aMSubk.FBN(FieldsE2.Strings ).DataType = ftString then aMSubk.FBN(FieldsE2.Strings).Value := Trim(V77Obj.GetAttrib(Fields1C.Strings)) else aMSubk.FBN(FieldsE2.Strings).Value := V77Obj.GetAttrib(Fields1C.Strings); if Sbk = 1 then begin V77RS.ИспользоватьВладельца(V77Obj.Текущийэлемент); V77RS.ВыбратьЭлементы; while V77RS.ПолучитьЭлемент = 1 do begin if V77RS.ПометкаУдаления = 1 then Continue; aMSubk.FBN('DefRS').Value := V77RS.Номер; if (V77.ПустоеЗначение(V77RS.БанкОрганизации) = 0) then begin V77Bank := V77RS.БанкОрганизации; aMSubk.FBN('NAMEBANK').Value := V77Bank.Наименование; aMSubk.FBN('BANKCITY').Value := V77Bank.Местонахождение; aMSubk.FBN('BIK').Value := V77Bank.Код; aMSubk.FBN('KS').Value := V77Bank.КоррСчет; Break; end; end; end; aMSubk.Post; MeterMove('Выборка субконто ' + ITS(Sbk) + ' :' + ITS(cnt)); inc(cnt); end; end else begin V77Obj := V77.EvalExpr('Перечисление.ПолучитьАтрибут("'+ PName + '")'); for k := 1 to V77Obj.КоличествоЗначений('') do begin V77P := V77Obj.ЗначениеПоНомеру(k); Kod := V77P.ПорядковыйНомер(''); finded := aMSubk.FindKey(Kod); if finded then begin MeterMove('Выборка субконто ' + ITS(Sbk) + ' :' + ITS(cnt)); inc(cnt); Continue; end else aMSubk.Insert; aMSubk.FBN('Ako').Value := Kod; aMSubk.FBN('Name').Value := Trim(V77P.Идентификатор); aMSubk.FBN('FName').Value := Trim(V77P.Идентификатор); aMSubk.Post; MeterMove('Выборка субконто ' + ITS(Sbk) + ' :' + ITS(cnt)); inc(cnt); end; end; try T_Dsc := DscQueryCreate('MSUBK'); T_Dsc.StartTransaction; dscMSubk := OpenDsc('MSUBK'); dscMSubk.LoadNewOrderClause(' '); dscMSubk.LoadWhereClause('A.SBK=:SBK AND A.AKO=:AKO'); dscMSubk.GenerateQuery; I_MSubk := MakeInsertErQuery('MSUBK'); if I_MSubk = nil then Exit; aMSubk.First; cnt := 1; while not aMSubk.eof do with aMSubk do begin MeterMove('Сохранение в БД: ' + ITS(cnt)); Kod := fbn('Ako').Value; dscMSubk.PBN('SBK', ftInteger, Sbk); dscMSubk.PBN('AKO', ftInteger, Kod); dscMSubk.FastReopen; if not dscMSubk.DataSet.EOF then // Уже есть такая запись begin Next; Inc(cnt); Continue; end; I_MSubk.PBN('SBK', ftInteger, Sbk); I_MSubk.PBN('AKO', ftInteger, Kod); for i := 0 to Fields.Count-1 do I_MSubk.PBN(Fields.FieldName, Fields.DataType, fbn(Fields.FieldName).Value); I_MSubk.ExecSQL; aMSubk.Next; Inc(cnt); end; // I_MSubk.CommitDB; T_Dsc.Commit; finally T_Dsc.Rollback; CloseDsc(dscMSubk); CloseDsc(T_Dsc); I_MSubk.Free; end; FreeAndNil(FieldsE2); FreeAndNil(Fields1C); aSubk.Next; end; SMsg('Импорт завершен успешно!'); finally v77 := UnAssigned; V77Obj := UnAssigned; V77RS := UnAssigned; V77Bank := UnAssigned; FreeAndNil(aSubk); FreeAndNil(aMSubk); if rules <> nil then FreeAndNil(rules); if FieldsE2 <> nil then FreeAndNil(FieldsE2); if Fields1C <> nil then FreeAndNil(Fields1C); MeterClose; end; end; ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2006, 13:18 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
procedure Exp1CDirect(ClickSbk: string; // Список субконто справочника ReplaceData: boolean // Заменять существующие данные в 1С или оставить без изменения ); // ЭКСПОРТ function Key1S(kod: integer): string; begin result := LPad(ITS(kod), 9); end; var V77, V77Obj, V77RS, V77Bank: OleVariant; aSubk, aMSubk, rules: TEraList; Kod, kod2, cnt, i, kodPC: integer; ObjName, fields: string; IsDict: boolean; // Является ли данный тип 1C справочником или перечислением FieldsE2, Fields1C: TStringList; wc: string; Sbk: integer; begin try MeterOpen('Экспорт данных в 1С...'); V77 := Open1C(False); ClickSbk := SindGetStrings(ClickSbk); wc := 'SBK IN ('+ClickSbk+')'; aSubk := erLoadDF('Subk', wc, ''); aSubk.First(); // Удаляем перечисления и поля с пустыми строками в TYPESUBK_1C while not aSubk.eof do begin ObjName := aSubk.fbn('TYPESUBK_1C').AsString; IsDict := Pos(UpperCase('Справочник'), UpperCase(ObjName)) > 0; if not IsDict then aSubk.Del else aSubk.Next; end; aSubk.First(); while not aSubk.eof do begin Sbk := aSubk.fbn('Sbk').Value; ObjName := aSubk.fbn('TYPESUBK_1C').AsString; rules := erLoadDF('Exchange1C', 'Sbk='+ITS(Sbk)); if rules.Count <= 0 then begin fields := 'Name'; FieldsE2 := TStringList.Create; Fields1C := TStringList.Create; FieldsE2.Add('Name'); Fields1C.Add('Наименование'); end else begin rules.First(); fields := ''; FieldsE2 := TStringList.Create; Fields1C := TStringList.Create; while not rules.eof do begin fields := fields + rules.fbn('FieldE2').AsString + ';'; FieldsE2.Add(rules.fbn('FieldE2').AsString); if Trim(rules.fbn('Field1C').AsString) <> '' then Fields1C.Add(rules.fbn('Field1C').AsString); rules.Next; end; end; if Sbk = 1 then fields := fields + 'DefRS;NAMEBANK;BANKCITY;BIK;KS'; FreeAndNil(rules); aMSubk := erLoadDF('MSubk', 'SBK='+ITS(Sbk), 'Ako;'+fields); if aMSubk.Count <= 0 then begin FieldsE2.Free; Fields1C.Free; aSubk.Next; Continue; end; cnt := 1; aMSubk.First(); V77Obj := V77.CreateObject(ObjName); V77Obj.SelectItems; V77Obj.SelectGroup(0); while not aMSubk.eof do // Выборка begin Kod := aMSubk.fbn('Ako').Value; if v77Obj.FindByCode(Key1S(Kod)) then begin if ReplaceData then begin for i := 0 to FieldsE2.Count-1 do V77Obj.SetAttrib(Fields1C.Strings , aMSubk.fbn(FieldsE2.Strings).AsString); v77Obj.Write; end; end else begin v77Obj.New; V77Obj.Код := Kod; for i := 0 to FieldsE2.Count-1 do V77Obj.SetAttrib(Fields1C.Strings, aMSubk.fbn(FieldsE2.Strings).AsString); v77Obj.Write; end; { if Sbk = 1 then begin if Trim(aMSubk.fbn('DefRS').AsString) <> '' then begin V77RS := V77.CreateObject('Справочник.РасчетныеСчета'); V77RS.ИспользоватьВладельца(V77Obj.ТекущийЭлемент); kodPC := 1; while V77RS.НайтиПоКоду(ITS(kodPC)) > 0 do inc(kodPC); V77RS.Новый; V77RS.Код := kodPC; V77RS.Наименование := 'Основной'; V77RS.Номер := aMSubk.fbn('DefRS').AsString; V77Bank := V77.CreateObject('Справочник.Банки'); V77Bank.Новый; V77Bank.Наименование := aMSubk.fbn('NAMEBANK').AsString; V77Bank.Местонахождение := aMSubk.fbn('BANKCITY').AsString; V77Bank.КоррСчет := aMSubk.fbn('KS').AsString; try kod2 := STI(aMSubk.fbn('BIK').Value); except kod2 := -1; end; if kod2 <> -1 then V77Bank.Код := kod2; // V77RS.БанкОрганизации := V77Bank; // ??????????? КАК ????? // ПроверкаБанка() V77Bank.Записать; V77RS.Записать; end; end; } aMSubk.Next; MeterMove('Выгрузка в 1С субконто ' + ITS(Sbk) + ' :' + ITS(cnt)); inc(cnt); end; FreeAndNil(FieldsE2); FreeAndNil(Fields1C); aSubk.Next; end; SMsg('Экспорт завершен успешно!'); finally v77 := UnAssigned; V77Obj := UnAssigned; V77RS := UnAssigned; V77Bank := UnAssigned; FreeAndNil(aSubk); FreeAndNil(aMSubk); if rules <> nil then FreeAndNil(rules); if Assigned(FieldsE2) then FreeAndNil(FieldsE2); if Assigned(Fields1C) then FreeAndNil(Fields1C); MeterClose; end; end; ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2006, 13:21 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Работаем так года 4-ре 1 - В 1С блокируем добавление новых контраагентов, персонал, мест хранения и пр 2 - ввод новых идет только в наших программах 3 - модуль экспорта приведен выше 4 - структуры для связи с 1С имеют вид Subk Номер субконто, Имя субконто, Имя субконто в 1С MSubk Номер субконто. Код аналитики, Имя, .......... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2006, 13:29 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
PS: При некртрой смекалке проблем больших не возникает. Проблема одна - скорость записи в 1С. На чтение скорость более -менее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2006, 13:33 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
GRNPS: При некртрой смекалке проблем больших не возникает. Проблема одна - скорость записи в 1С. На чтение скорость более -менее. Используется v7plus.dll ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2006, 17:58 |
|
Интеграция самописной системы с 1С
|
|||
---|---|---|---|
#18+
Валентин К GRNPS: При некртрой смекалке проблем больших не возникает. Проблема одна - скорость записи в 1С. На чтение скорость более -менее. Используется v7plus.dll ??? Если COM-сервер находится в ней , то. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 19:23 |
|
|
start [/forum/topic.php?fid=33&fpage=61&tid=1549444]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
280ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
154ms |
get tp. blocked users: |
4ms |
others: | 229ms |
total: | 711ms |
0 / 0 |