powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Объединить 1C и фирменное ПО
19 сообщений из 19, страница 1 из 1
Объединить 1C и фирменное ПО
    #34859041
гость1010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть самописное специализированное ПО по учету заказов и покупок товаров нашей фирмой через INet. Ведется простенький реестр учета купленных товаров. В настоящее время возникла необходимость динамично заливать данные из нашего ПО в 1С: Предприниматель 7.7. т.е. формировать документы (получать печатные формы) ПоступлениеТМЦ, Реализация, Счет, С/Ф выданный, при этом производить проверку данных справочников номенклатуры, контрагентов, ... Остановлись на следующем варианте:
Delphi:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  
  // ole соединение
  ref1C:=...

  // Для подготовки параметров
  param:=ref1C.CreateObject('СписокЗначений');

  // готовим данные документа
  doc  :=ref1C.CreateObject('ТаблицаЗначений');  
  doc.NewColumn('col1');
  ...
  doc.NewColumn('colx');

  // заносим данные документа
  doc.NewLine;
  doc.SetValue( 1 , 'Значение1');
  ...
  doc.SetValue(x, 'Значениеx');

  param.AddValue('ДобавитьДокументРеализации'  , 'Операция');
  param.AddValue(doc, 'Документ');

  // Вызываем 1С обработку для формирования нового документа
  // передаем параметры документа
  ref1C.OpenForm('Отчет', param, 'ОбработкаФормированияДокумента.ert');

1С (ОбработкаФормированияДокумента.ert):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Процедура ПриОткрытии()
    Перем Парам, Операция, Док;

    Парам = Форма.Параметр;
    Операция = Парам.Получить("Операция");
    Док = Парам.Получить("Документ");

    Если Операция = "ДобавитьДокументРеализации" Тогда
        // формируем новый документ по ТаблЗначений Док
        ...
    Иначе
        ...
    КонецЕсли;
    СтатусВозврата( 0 );
	
КонецПроцедуры

Этот вариант работает, но очень не стабильно и очеееень медленно. Работа через Ole с 1С вообще одна большая ошибка. Господа программисты поделитесь практическим опытом, кто как организовывает такие вещи. Спасибо.
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34859061
йцукен2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А слабо через ОЛЕ сразу документ нужного типа создать и значениями его заполнить и провести?
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34859117
гость1010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йцукен2А слабо через ОЛЕ сразу документ нужного типа создать и значениями его заполнить и провести?
Почему не слабо:
- Отлаживать обработку легче чем delphi приложение
- При каких либо изменениях, поправках, доработках в документах мне не нужно компилить приложение заново, в конфигураторе поправил ert.

От Delphi требуется слить данные из DataSet в ТаблЗначений и передать в обработку, а уж что я буду с этими данными в обработке делать ....

Мой вопрос принципиальный, как еще организовать динамичную связь с 1С? через ole документ формирую или в обработке это не суть то и важно, тоже самое только в профиль. Еще интересует именно работоспособность связи, мы через OLE попробовали - получился не рабочий вариант
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34859150
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чудак человек. у 1С етсь замер производительности.. сделай скриншот и нам
дай.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34859401
йцукен2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гость1010От Delphi требуется слить данные из DataSet в ТаблЗначений и передать в обработку, а уж что я буду с этими данными в обработке делать ....

Уважаемый, неужели не видно, что при реализованной Вами схеме использование ОЛЕ нужно как собаке пятая нога?
Неужели не видно, что таблицу значений можно легко заменить на "файл на диске"?
Мое имхо заключается в вопросах:
1)А можно ли данный DataSet получить напрямую из 1С?
2)А почему Вы уверены, что тормозит именно 1С?
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34860649
гость1010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йцукен2Уважаемый, неужели не видно, что при реализованной Вами схеме использование ОЛЕ нужно как собаке пятая нога?
Неужели не видно, что таблицу значений можно легко заменить на "файл на диске"?

Инциатором создания документов в 1С является Delphi программа для этого и нужно OLE, чтобы не только ТаблЗначений сформировать, но сказать 1С - загружай эти данные. В случае "файл на диске" нужно выносить операцию загрузки этого файла либо в ручную загрузку, либо во внешнюю компоненту "прослушивание каталога".

йцукен21)А можно ли данный DataSet получить напрямую из 1С?
Можно, только нафиг этот DataSet нужен в 1С (см выше)

йцукен22)А почему Вы уверены, что тормозит именно 1С?
Это четко видно пользуясь Delphi отладчиком, но скорость работы в данной ситуации вторична, глючнотось Ole работы с 1С - вот главная фишка.

Резюмирую: все работают через OLE или ручных загрузок/выгрузок и все работает прекрасно.
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34860700
Terv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гость1010 В случае "файл на диске" нужно выносить операцию загрузки этого файла либо в ручную загрузку, либо во внешнюю компоненту "прослушивание каталога".

зачем вам нужна внешняя компонента, что мешает "прослушивать каталог" 1С ?

йцукен22)А почему Вы уверены, что тормозит именно 1С?
Это четко видно пользуясь Delphi отладчиком, но скорость работы в данной ситуации вторична, глючнотось Ole работы с 1С - вот главная фишка.


как определили "глючнотось Ole работы с 1С" ?

"Это четко видно пользуясь Delphi отладчиком" - и что вы там могли увидеть?
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34860713
фыз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гость1010 йцукен2Уважаемый, неужели не видно, что при реализованной Вами схеме использование ОЛЕ нужно как собаке пятая нога?
Неужели не видно, что таблицу значений можно легко заменить на "файл на диске"?

Инциатором создания документов в 1С является Delphi программа для этого и нужно OLE, чтобы не только ТаблЗначений сформировать, но сказать 1С - загружай эти данные. В случае "файл на диске" нужно выносить операцию загрузки этого файла либо в ручную загрузку, либо во внешнюю компоненту "прослушивание каталога".


Формирем файл на диске, после чего по ОЛЕ в 7.7 вызываем процедуру загрузки из файла
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34860847
йцукен2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гость1010Инциатором создания документов в 1С является Delphi программа для этого и нужно OLE, чтобы не только ТаблЗначений сформировать, но сказать 1С - загружай эти данные. В случае "файл на диске" нужно выносить операцию загрузки этого файла либо в ручную загрузку, либо во внешнюю компоненту "прослушивание каталога".

Ну например, так:
1) Делфи формирует файл на диске
2) Делфи запускает 1С с определнным параметром командной строки либо под определенным пользователем
3) 1с = модуль "ПриНачалеРаботыСистемы" определяет параметры командной строки/ имя пользователя и в случае совпадения - запускает обработку формирования документов из файл, сформированного дельфами

гость1010Можно, только нафиг этот DataSet нужен в 1С (см выше)
А он нужен для того, чтобы не возится с разными программами посредниками.

гость1010Это четко видно пользуясь Delphi отладчиком, но скорость работы в данной ситуации вторична, глючнотось Ole работы с 1С - вот главная фишка.
Всегда думал, что для определения тормознутости профайлеры существуют, а не отладчики... И еще насчет тормознутости - сформированный документ проводите?
гость1010Резюмирую: все работают через OLE или ручных загрузок/выгрузок и все работает прекрасно.
Эт Вы типа съязвили, да?
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34860986
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- Отлаживать обработку легче чем delphi приложение
- При каких либо изменениях, поправках, доработках в документах мне не нужно компилить приложение заново, в конфигураторе поправил ert.


И смысл тогда писать на дельфях?
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34861221
гость1010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йцукен2И еще насчет тормознутости - сформированный документ проводите?
Да провожу, основные тормоза как раз на данной операции

йцукен2Всегда думал, что для определения тормознутости профайлеры существуют, а не отладчики... отладчиком можно увидеть на какой операции прога подвисает на минуту-другую и какой процесс жреть память и ЦП

йцукен2Эт Вы типа съязвили, да? да какой там съязвил, написал все, отладил 4 месяца все ок было, сейчас пошли проблемы. Понял что такая канитель постоянно будет. Система требует постоянного контроля
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34861571
йцукен2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гость1010 йцукен2И еще насчет тормознутости - сформированный документ проводите?
Да провожу, основные тормоза как раз на данной операции

В таком случае зачем на ОЛЕ наезжать? Оптимизируйте алгоритм формирования движений.

гость1010 йцукен2Всегда думал, что для определения тормознутости профайлеры существуют, а не отладчики... отладчиком можно увидеть на какой операции прога подвисает на минуту-другую и какой процесс жреть память и ЦП

А профайлером это еще лучще можно увидеть. Более того, результат будет гораздо более достоверный нежели чем "отладчиком посмотреть".
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34867391
mini_root
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гость1010
Этот вариант работает, но очень не стабильно и очеееень медленно. Работа через Ole с 1С вообще одна большая ошибка. Господа программисты поделитесь практическим опытом, кто как организовывает такие вещи. Спасибо.

Если коротко - НИКАК. Одинэс не предназначен для интеграции с чем либо кроме как через жо. Я так посмотрел, местные обитатели предлагают заливать файлы... ну-ну, когда потребуется интегрировать одинэс не с одной софтиной, а с несколькими, я на вас посмотрю господа одинэсеры: "Ой, а че эт у меня не залилось", "Ой а тут вот данные старые". Прибавьте сюда отствие штатного журнала (да да - самого банального - который в файлик пишет).
Ладно, неконструктивные наезды закончились, теперь по сущетсву. Интегрироваться с поделкой на чтение довольно просто, по крайней мере с семеркой - нужен DDS парсер и макропроцессор, который запрос вида:
select * from $SC_НОМЕНКЛАТУРА
переведет в
select * from SC104
Можно объединить это все в одном флаконе, например ввиде JDBC драйвера, чтобы все было можно было сразу писать запросы в человеческом виде (подо всем этим должен лежать реальный драйвер к MSSQL). Это работает только на 7.7, на 8.0 я так и не понял как можно автоматически вытаскивать DDS. Кроме того это работает только на чтение - писать средствами SQL что-то в одинэсную базу - это чистое самоубийство.
Второй варинт (подходит для восьмерки), реализуется по тому же принципу который вы использовали - через COM. Вы его использовали для одного частного случая, но можно ведь и сделать универсальную вещь, по схеме:
1Cv8 <-> COM <-> ЗатычкаНаДельфи <- сеть -> КлиентНаЖабе <-> JDBCИнтерфейсКклиенту
Такая схема позволяет работать с 1с как с обычным источником данных (в данном случае в качестве источника выступает внешняя информационная система), только язык запросов там будет не SQL, а либо 1СQL (для селектов):
ВЫБРАТЬ
ЗоныЦен.Цена КАК PRICE, ЗоныЦен.ДТС как DTS
ИЗ
Справочник.Номенклатура.ЦеныПродажи КАК ЗоныЦен, Справочник.Номенклатура КАК Номра
ГДЕ
(Номра.Ссылка = ЗоныЦен.Ссылка) и (Номра.Код<1000) и ((ЗоныЦен.ЗонаЦен.Код>0) )
УПОРЯДОЧИТЬ ПО ЗоныЦен.ДТС Убыв


либо встроенный язык 1С (для модификации аля insert/update/delete):
#EXECUTE ~
НачатьТранзакцию()~
спрСсылка = Справочники.Номенклатура.НайтиПоКоду(124)~
Если спрСсылка <> Справочники.Номенклатура.ПустаяСсылка() Тогда
спрОбъект = спрСсылка.ПолучитьОбъект()~
спрОбъект.Наименование = "1с - отстой"~
спрОбъект.Записать()~
КонецЕсли~
ЗафиксироватьТранзакцию()~

Если удалось сделать такую конструкцию для JDBC, очевидно можно и для ADO.NET. Такая схема позволит обращаться как на чтение так и на запись. Только вот надежностью здесь и не пахнет. Затычка будет периодически вылетать, хреновато работают транзакции (по крайней мере у нас на данном этапе), так что использовать ее массово не получится в принципе (в лучшем случае для каких-то служебных вещей).
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34867732
1Эснег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё получится, токмо нужно действовать через серви з ы и с версии 8.1 и выше, SOA новомодная вещь, кто тут хочет посметь не следовть моде?
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34867882
Reder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini_rootИнтегрироваться с поделкой на чтение довольно просто, по крайней мере с семеркой - нужен DDS парсер
Не совсем верно. из DDS не вытащишь id периодических реквизитов и id перечислений. Так что только DDS парсером не обойтись.
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34870819
mini_root
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1ЭснегВсё получится, токмо нужно действовать через серви з ы и с версии 8.1 и выше, SOA новомодная вещь, кто тут хочет посметь не следовть моде?

Я посмею
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34872989
Murash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторИнциатором создания документов в 1С является Delphi программа для этого и нужно OLE, чтобы не только ТаблЗначений сформировать, но сказать 1С - загружай эти данные.

И нафига тут ОЛЕ
В Дельфях достаточно создать данные определенного формата (как насчет ХМL? ) и дать команду 1С запуститься и принять данный файл.
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34873592
гость1010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Murash
И нафига тут ОЛЕ
В Дельфях достаточно создать данные определенного формата (как насчет ХМL? ) и дать команду 1С запуститься и принять данный файл.
Ну так дать команду 1С можно либо из командной строки или через Ole. Если таких операция много то лучше через оле чтобы не грузить 1С постоянно, а пользовать созданный. В результате получилось следующее:
Создаем dbf

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function Execute1C(ADbf: String; NStart: Integer =  0 ): OleVariant;
begin
  Result:=Unassigned;
  try
    // Если ref1C инициализирован то следующий код выполнится иначе пойдет по except
    Result:=ref1C.EvalExpr('глВыполнить("'+ADbf+'")');

    // Покажем 1С
    Show1C(SW_SHOWMAXIMIZED); 
  except
    // Если второй не удачный Execute1C считаем это ошибкой
    if nstart= 1  then MessageDlg('Ошибки', mtError, [mbOk],  0 );
     else 
      begin
         CreateOle(); // создание ref1C
         Result:=Execute1C(ADbf,  1 ); // Повторный запуск
      end;
end;

в 1C в функции "глВыполнить" открываем dbf и выполняем по нему какие либо операции
...
Рейтинг: 0 / 0
Объединить 1C и фирменное ПО
    #34969859
bmt2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще вариант. Запускать из Delphi (через OLE) обработку на 1С, которая через ODBC будет соединяться с БД вашего приложения и загружать все необходимые данные.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Объединить 1C и фирменное ПО
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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