Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Интеграция самописной системы с 1С / 25 сообщений из 27, страница 1 из 2
16.02.2006, 11:48
    #33548537
Nissa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Планируется разработка учетной системы (Delphi7+MSSQL2000), в которой есть достаочно большая учетно-финансовая часть (ведение прейскурантов, договоров, выписка счетов, контроль платежей, ведение лицевых счетов и т.д.). Собственно вопрос: есть ли смысл писать все это самим или же попытаться релизовать все это на 1С. Есть один нюанс - получается очень много двунаправленных связей между нашей программой и 1С. Т.е. надо не только выгружать данные в 1С, но и постоянно обращаться к даным 1С. Я, собственно говоря, боюсь, что написание нужной конфигурации будет более сложным и менее надежным, чем полностью самописное произведение. Может быть у кого-то есть опыт решение подобных проблем? Была бы очень благодарна за комментарии.
...
Рейтинг: 0 / 0
16.02.2006, 12:06
    #33548601
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
на чтении данных из 1С никаких проблем нет, кроме разве что периодических реквизитов в 7.7
Прямую запись в таблицы 1С не рисковали делать (1С-кие ID...), если требовалась загрузка то через промежуточный слой, загрузка из которого средствами 1С
...
Рейтинг: 0 / 0
16.02.2006, 13:24
    #33548911
Сергей84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
iscrafmна чтении данных из 1С никаких проблем нет, кроме разве что периодических реквизитов в 7.7
и с периодическими тоже нет
iscrafmПрямую запись в таблицы 1С не рисковали делать (1С-кие ID...), если требовалась загрузка то через промежуточный слой, загрузка из которого средствами 1С
уже давно 1С-ими умельцами написаны функции создания ID на T-SQL, саое трудно это механизмы УРБД и Рекистры, с остальным все более или менее просто
на счет промежуточного слоя - плохой подход, т.к. если все поля в 1С и в программе источнике изменить, то при загрузке элемент не сможет быть найден, если же делать синхронизацию по ID - то элемент всегда будет найден корректно
...
Рейтинг: 0 / 0
16.02.2006, 13:26
    #33548921
Сергей84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
2 автор
вопрос сложный, все зависит от ваших знаний и умений в осбласти Delphi+MSSQL и 1С+MSSQL
я бы делал все на 1С+MSSQL, т.к. лучше это знаю
в вашем случае оцените сроки и силы на реализацию на том и на др. продуктах и там уже смотрите по обстоятельством, что будет эффективнее
...
Рейтинг: 0 / 0
16.02.2006, 14:14
    #33549096
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Сергей84на счет промежуточного слоя - плохой подход, т.к. если все поля в 1С и в программе источнике изменить, то при загрузке элемент не сможет быть найден, если же делать синхронизацию по ID - то элемент всегда будет найден корректно
Возможно. Делалось только разово. Для постоянного обмена скорее всего пришлось конечно бы делать синхронизацию по ID.
Кстати, нет ссылки на разработки по формированию ID в T-SQL?
...
Рейтинг: 0 / 0
16.02.2006, 14:16
    #33549115
Dinamo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
iscrafmна чтении данных из 1С никаких проблем нет, кроме разве что периодических реквизитов в 7.7
Прямую запись в таблицы 1С не рисковали делать (1С-кие ID...), если требовалась загрузка то через промежуточный слой, загрузка из которого средствами 1С

Судя по всем речь шла о прямом доступе к таблицам.

Есть еще один достаточно надежный способ - OLE. Подключаетесь через компоненту v7plus.dll и обращаетесь к данным методами 1С. Никаких проблем в получением периодических значений (речь про 7.7., в 8.0 периодических реквизитов нету)

Что касается самой задачи. Зависит от количества документов и операций, объемов справочников и т.д. Как вариант (подумав о производительности, масштабируемости) написать все самим "с нуля" на 1С 8.0. (подсматривая или целиком копируя из конфигурацйи подходящие блоки).
Написание конфигурации вряд ли будет сложнее чем самописное произведение, поскольку большинство сущностей реальных бизнес процессов уже заложено в систему (справочники, подчиненные справочники, документы с множемтвенными табличными частями, регистры, планы счетов и т.д.). Все таки меньше времени уйдет на прямую реализацию бизнес-модели, чем проектирование такого рода сущностей и реализацию бизнес-модели.

Большинство проблем и несовместимостей и несправедливых наездов на 1С-овцев это "кривость конфигураций", которая результат "быстрой разработки". Но такая кривость встречается везде и повсюду и в большой степени зависит от квалификации и системности проектировщиков.
...
Рейтинг: 0 / 0
16.02.2006, 14:23
    #33549150
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Dinamo
Судя по всем речь шла о прямом доступе к таблицам.

Есть еще один достаточно надежный способ - OLE. Подключаетесь через компоненту v7plus.dll и обращаетесь к данным методами 1С. Никаких проблем в получением периодических значений (речь про 7.7., в 8.0 периодических реквизитов нету)

Да, нужен был прямой доступ чтобы забрать полностью всю БД. Где Вы раньше были.. :)
...
Рейтинг: 0 / 0
16.02.2006, 14:29
    #33549173
Dinamo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
iscrafmДа, нужен был прямой доступ чтобы забрать полностью всю БД. Где Вы раньше были.. :)

В этом плане вам OLE не собо помог бы, поскольку для обращения в метаданным нужно знать их структуру и свойства. OLE полезен для синхронизации разных баз в он-лайне.
Но в свою очередь такое соединение ограничено "техническими возможностями 1С".
...
Рейтинг: 0 / 0
16.02.2006, 14:42
    #33549228
Nissa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
К сожалению писать все на 1С не получится - . Рален ли такой вариант: взять клиент-серверную 1С и работать напрямую с её таблицами из своего приложения? Я так поняла, что реален.
...
Рейтинг: 0 / 0
16.02.2006, 14:58
    #33549297
Сергей84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
NissaК сожалению писать все на 1С не получится - . Рален ли такой вариант: взять клиент-серверную 1С и работать напрямую с её таблицами из своего приложения? Я так поняла, что реален.
реален, но трудоемок, т.к. для его реализации нужно знать процессы 1С на низком уровне, на изучение которых может уйти достаточно много времени.

2 iscrafm
http://www.sinor.ru/~my1c/knowhow/SQLcnvID.html
ID в 1С имеет длину 9 символов
первые 6-ть это 36-ий код представляющий из себя инкремент
правые 3-и символа - это код ИБ создания объетка

теперь пишем 2 ХР используя эти знания и все работает :)
...
Рейтинг: 0 / 0
16.02.2006, 15:13
    #33549345
Nissa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Вопрос не снят :-) - стоит ли связываться, или ну его на фиг?
...
Рейтинг: 0 / 0
16.02.2006, 15:24
    #33549399
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Сергей84 NissaК сожалению писать все на 1С не получится - . Рален ли такой вариант: взять клиент-серверную 1С и работать напрямую с её таблицами из своего приложения? Я так поняла, что реален.
реален, но трудоемок, т.к. для его реализации нужно знать процессы 1С на низком уровне, на изучение которых может уйти достаточно много времени.

2 iscrafm
http://www.sinor.ru/~my1c/knowhow/SQLcnvID.html
ID в 1С имеет длину 9 символов
первые 6-ть это 36-ий код представляющий из себя инкремент
правые 3-и символа - это код ИБ создания объетка

теперь пишем 2 ХР используя эти знания и все работает :)
спасибо
...
Рейтинг: 0 / 0
16.02.2006, 19:05
    #33550259
Интеграция самописной системы с 1С
Не дождавшись благих вестей от 1С, народ принялся хакать формат хранения.
Первые попытки зафиксированы 5-7 лет назад :)
...
Рейтинг: 0 / 0
17.02.2006, 12:45
    #33551662
Dogen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Ну_почему_жеНе дождавшись благих вестей от 1С, народ принялся хакать формат хранения.
Первые попытки зафиксированы 5-7 лет назад :)
А не дешевле бухгалтерию самим написать?..
...
Рейтинг: 0 / 0
17.02.2006, 13:18
    #33551855
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Dogen Ну_почему_жеНе дождавшись благих вестей от 1С, народ принялся хакать формат хранения.
Первые попытки зафиксированы 5-7 лет назад :)
А не дешевле бухгалтерию самим написать?..
Написать может и дешевле. Только поддержка дело гемморойное.
...
Рейтинг: 0 / 0
17.02.2006, 14:00
    #33552071
Интеграция самописной системы с 1С
NissaВопрос не снят :-) - стоит ли связываться, или ну его на фиг?
А почему на 1с не получится, какие то требования? Если 1с не пролезает, почему не посмотреть вокруг и не рассмотреть известные и менее известные готовые инструментарии.
...
Рейтинг: 0 / 0
18.02.2006, 11:21
    #33553768
Комсомолка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
NissaВопрос не снят :-) - стоит ли связываться, или ну его на фиг?
Мне кажется, что вы сами должны посчитать и понять, что для Вас приемлемо, а что - нет, поскольку всей информацией владеете только Вы (и что-то не спешите ею с нами делиться :)) :

Во-первых, какие ресурсы отведены Вами под систему, сколько пользователей будет работать с интерфейсами Дельфи и сколько - с 1С? Вы в курсе, что при увеличении рабочих мест под 1С для работы с общими БД придется создавать неслабую терминальную систему? Во-вторых, насколько хорошо Вами изучены возможности стандартных конфигураций 1С? В-третьих, в какой предметной области будет работать Ваша учетная система?

В политике 1С очень четко прослеживается мысль - "ВСЕ должно быть сделано на 1С, а все остальное - превращается в костыли и сильно усложнит жизнь". Кстати, на мой взгляд, это - "красная нить" ЛЮБОЙ системы: все системы тяжело переживают попытки "скрещивания".

Есть два варианта: либо ВСЕ делать на 1С, либо использовать 1С в качестве приложения для печати документации после соотв. выгрузки данных - и не более того (ввод каких-либо данных через 1С запретить полностью или свести к минимуму). Совмещение 1С и чего-то еще (по-крайней мере по моему опыту) идет по следующим сценариям:
1. Работа останавливается и для ее запуска приходится вводить новую должность - "администратор справочников" - это такие девочки, которые постоянно что-то вводят в 1С
2. Самописная система вытесняет 1С в комнату бухов и, в конце-концов, превращает 1С в "печатальщик" накладных, счетов и прочей официальной бумаженцией
3. Система продолжает работать при нечеловеческих усилиях группы техподдержки под постоянные телефонные трели.

P.S. Принципиально, для УЧЕТНОЙ системы возможностей 1С "самой-по-себе" должно хватить, но при попытке создания интегрированной в бизнес-процессы ИНФОРМАЦИОННОЙ системы с помощью 1С ресурсы потребуются очень значительные.
...
Рейтинг: 0 / 0
19.02.2006, 13:17
    #33554381
GRN
GRN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
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;
...
Рейтинг: 0 / 0
19.02.2006, 13:18
    #33554383
GRN
GRN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
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;
...
Рейтинг: 0 / 0
19.02.2006, 13:21
    #33554387
GRN
GRN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
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;
...
Рейтинг: 0 / 0
19.02.2006, 13:29
    #33554391
GRN
GRN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Работаем так года 4-ре

1 - В 1С блокируем добавление новых контраагентов, персонал, мест хранения и пр
2 - ввод новых идет только в наших программах
3 - модуль экспорта приведен выше
4 - структуры для связи с 1С имеют вид

Subk
Номер субконто, Имя субконто, Имя субконто в 1С
MSubk
Номер субконто. Код аналитики, Имя, ..........
...
Рейтинг: 0 / 0
19.02.2006, 13:33
    #33554394
GRN
GRN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
PS: При некртрой смекалке проблем больших не возникает.
Проблема одна - скорость записи в 1С.
На чтение скорость более -менее.
...
Рейтинг: 0 / 0
20.02.2006, 17:58
    #33556701
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
GRNPS: При некртрой смекалке проблем больших не возникает.
Проблема одна - скорость записи в 1С.
На чтение скорость более -менее.
Используется v7plus.dll ???
...
Рейтинг: 0 / 0
22.02.2006, 19:23
    #33561749
GRN
GRN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Валентин К GRNPS: При некртрой смекалке проблем больших не возникает.
Проблема одна - скорость записи в 1С.
На чтение скорость более -менее.
Используется v7plus.dll ???

Если COM-сервер находится в ней , то.
...
Рейтинг: 0 / 0
13.03.2006, 23:38
    #33598139
serge_b77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграция самописной системы с 1С
Валентин К
Используется v7plus.dll ???

v7plus.dll для COM не используется.Это расширение для работы с XML Parser
и еще кое чего...
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Интеграция самописной системы с 1С / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]