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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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