<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Есть еще неперечисленный Elisy .Net Bridge, который давно представлен на Инфостарт с огромным числом примеров использования .Net framework. Думаю, что по степени интеграции с 1С и числу поддерживаемых версий 1С он превосходит все вышеперечисленные методы интеграции.
Если Вы прочтете статью внимательнее, то найдете в обзоре и этот продукт. Мы также постарались проанализировать достоинства и недостатки этого продукта. И далеко не все вышеперечисленные методы интеграции он превосходит, по нашему мнению. Но решать это, безусловно, пользователям. 🙂
(2) Хорошая достойная статья. В подтверждение своих слов ставлю «плюс». Но Elisy .Net Bridge представлен в статье одной внешней обработкой Elisy.LinqTo1CSql.81, которая составляет лишь малую часть продукта. Это меня и смутило. Основой же является Elisy.NetBridge.dll, которая позволяет из 1С обращаться ко всей функциональности .Net Framework.
неверно.
или неточно.
при пулинге соединений скорость передачи больших массивов данных не меняется.
Хорошая статья, в качестве вводного обзора для меня, как новичка в этих вопросах.
К спецам: для того и существует форум статьи, чтобы высказывать свои замечания, обсуждать неточности или делиться опытом по теме.
Выводы могу сделать такие: Enterra — лишняя в статье, так как ничего нового не несет, а дублирует доступ к 1С через КОМ. Более того, использование Enterra приведет к появлению ненужного посредника и необходимости знать две объектные модели: одну для 1С, а другую, которую вводит Enterra. 1С с КОМом до этого нормально справлялась.
Enterra не несет в себе визуальных компонентов, а опирается на .Net-контролы. В связи с этим Enterra уступает визуальным компонентам 1С, специально заточенным на свою объектную модель. Выглядит это достаточно пестро и чудно, как здесь на картинках, особенно в связке с нелокализованными на русский язык контролами сторонних производителей (для OLAP).
Не вздумайте отображать многострочные объекты 1С (например, регистры сведений), как показано в примерах. Кроме зависания это ничего не вызовет. Реализация же их вывода нормальным образом через виртуальный режим DataGridView (VirtualMode) может занять у вас остаток жизни.
(4) Да, вы правы. Возможно, не совсем аккуратно сформулировано. Имелось в виду, что использование пула положительно сказывается на скорости COM-соединения в целом (за счет экономии времени (и ресурсов) на получение соединения). Спасибо, что обратили внимание на неточность.
(6)
Enterra SDK, возможно, и не несет ничего нового, но цель не в этом. Использование компонента просто экономит ВАШЕ время на создание .NET оберток + дает некоторые рецепты обращения с 1С из .NET кода
Не совсем понятно, о какой собственной модели идет речь? Enterra SDK практически не вводит своих новых типов, модель полностью основана на объектной модели 1С
1С с КОМом нормально справляется» — сомнений нет. Идея в том – что Enterra SDK дает .NET разработчику объектную модель 1С в удобном и привычном виде, а значит, экономит время и силы на необходимость вникать в детали работы и 1С, и механизмов COM
90% визульных компонентов опирается на .NET контролы. Очень мало тех, кто создает свои собственные текстбоксы, комбобоксы и т.д. Enterra SDK таки включает некоторый минимальный набор контролов для работы с 1С сущностями, но ценность ее конечно не в контролах, а совсем в другом (см. выше)
Почему-то ни в примерах, ни при использовании компонента, зависания не наблюдалось. Так что непонятно, на основании чего Вы сделали подобный вывод.
Есть предложение переместиться с предметным обсуждением компонента в соответствующий раздел на форуме —http://infostart.ru/public/62798/forum/topic/29937/ .
Будем рады продолжить конструктивный диалог. 🙂
(8)
1C.NET Adapter (http://www.gotdotnet.ru/files/406/) экономит время и дает рецепты. А Enterra ничего нового не приносит на этом поприще.
К каким объектам 1С относятся «Session», «ConfigTreeControl», «DocumentObjectViewControl». А сразу человек узнает, что за «ValueTable» скрывается ТаблицаЗначений?
Зная .Net-разработчиков, они мягко говоря удивятся и отойдут от этого удивления не скоро от конструкции вида
Не исключаю, что Entera будет расширятся в будущем, но пока то, что есть сейчас сильно не впечатляет (см фото выше).
На основании работы с вашими примерами. Для ваших тестеров — воспроизвести проблему можно так: 1) Взять реальную базу 1С с регистром сведений с >100,0 тысяч записей 2) Открыть пример «Простой проводник по 1С» 3) Выбрать регистр сведений 4) Нажать «Загрузить»
(9) В форум меня не пускают: «У вас не достаточно прав на просмотр форума.»
Теперь Вы приглашены на форум, заходите, будем обсуждать. 🙂
Чем Enterra лучше чем web — расширение не очень понятно.
Обидно. Давайте обсудим дядю васю. Ему будет приятно.
Не пойму,что продаем? NET — он и в африке NET.
мне кажется это реклама, но для кого? для 1С-ников? врядли, может для .NET программистов? так они в другом месте бывают, например:http://gotdotnet.ru .
и забыли добавить еще один способ: когда сотрудничают два программиста, каждый делает то, что умеет.
Видимо автор про веб расширение от 1с знает понаслышке, не одним вызовом хранимых процедур и функций он хорош, их можно и в .net создать.
http://sunrise-ufa.ru , используется только ado.
Пул в 10 соединений к базе выдерживает более 100 клиентских коннектов к iis и больше, все зависит от правильности написания кода.
То, что в 8.2 доступно через веб это другое и сделано для абсолютно других целей, об этом на партнерской конференции было озвучено.
Вот пример работы веб расширения
Да веб контролы от 1с не блещут красотой и юзабельностью, но кто запрещает их не использовать в своем приложении.
(13)
Как минимум — ценой ))
К тому же, Web-расширение реализует ADO для 1С, Enterra SDK создает набор классов, идентичный структуре метаданных 1С — то есть дополнительный возможности в виде вызова тех же хранимых процедур + простота использования.
Еще одно отличие — применение Web-расширения ограничено ASP.NET, Enterra SDK таких ограничений не имеет
Мда… буря в стакане 😀
Вот вам еще один вариант:
«Интеграция 1С с сервисной шиной OpenESB»
И все, дальше рисуй мышкой BPEL процесс. Минусы текущей реализации перечислены в конце статьи.
Причем ничего инновационного в этом нет — там тот же самый COM(инновация только в попытке вывести это все на уровень BPEL’я) Равно как и ничего нового нету в подстановке в запрос реальных названий таблиц/полей — у меня такая штука оформлена в виде JDBC драйвера, ниче, работает.
Есть мысли оформить это все в виде опенсорсного проекта + добавить туда же адаптеры к различным MOM’ам.
>Enterra SDK, возможно, и не несет ничего нового, но цель не в этом. Использование компонента просто экономит ВАШЕ время на создание .NET оберток + дает некоторые рецепты обращения с 1С из .NET кода
так ли это актуально с выходом DLR и массовым грядущим цветением динамических ЯП на платформе .NET? и писать тогда строки вида:
(bool)Invoke(currentType, «СодержитТип», new object[] {doubleType})
уже не придется, вместо них будет:
currentType.СодержитТип(doubleType)
Автор статьи скромно умолчал о недостатках своего продукта, а они ровно такие же как и для COM, ибо это COM и есть.
>Стоимость: 14 500 руб. Необходимое количество лицензий определяется числом разработчиков, одновременно работающих с компонентом.
Удачи…
В целом согласен с выводами Elisy в (6).
P.S. Замечательные форум для детального обсуждения:
>У вас не достаточно прав на просмотр форума.
(17)
Да, работа с пулом, несоммненно одна из сильных сторон Web-расширения
Только вот не понимаю в чем принципиальное различие в назначении веб-форм и веб-отчетов, созданных в 8.2 и c помощью Web-расширения?
К тому же, новых релизов Web-расширения не выпускалось уже очень давно, работает оно на старой версии .NET Framework (1.1.) — кажется мне, что все это весьма недвусмысленно свидетельствует о том, что сама 1С не считает данный продукт перспективным.
(18 )>Еще одно отличие — применение Web-расширения ограничено ASP.NET, Enterra SDK таких ограничений не имеет
Я тут хочу страничку на JSP сделать, не подскажите как мне использовать Enterr’у?
В итоге, например для меня очень критично иметь пул, а никто кроме 1с веб расширения его предоставить не может, да убогое описание, да собирание инфы по крохам, тем не менее, работает и работает стабильно, кстати ну что вы прицепились к контролам от 1с, получаете запросом DataSet в которой можно хранить туеву гору таблиц и вперед использовать контролы 3.5 фреймворка, ну невозможно использовать кроме как в проектах asp .net
(21)
Обращайтесь, реализуем для вас требуемый функционал для JSP
Могу привести минусы в создании web расширений 1с — такие приложения очень затратны — и внедрение и поддержания выйдет довольно трудоемким для любой фирмы. А для мелких компаний с небольшим бюджетом простым решением служитобъединение web и 1с по средством выгрузки и загрузки заказав.
Таким образом мы сокращаем штат как минимум на системного администратора (который должен держать сервер хостин), уменьшения трафика и что самое главное уменьшения уязвимости через сеть интернет.
Хотя есть и минусы — мы теряем оперативность в обработке остатков и заказов. Но опять же не в такой мере чтобы переплачивать за решения такие деньги.
(23) Это каким же образом? 😀
(24) Если предприятие решило создать нормальную b2b систему, а не просто инет магазин, то тут уже виртуемарты и шопскрипты отпадают, когда стоит речь об оперативности данных в разрезе секунды, вот тут и надо думать как и на чем делать.
Встроенные в 8.1/8.2 веб сервисы
1с веб расширение
ну и «костыли»
Могу вас заверить что большие компании не используют 1с в качестве основного софта (т.к. 1с хотя бы просто не умеет работать шустра с большим количеством клиентов).
И когда речь идет о большой оперативности и скоростях могу вам сказать что веб приложения вас просто не спасут — проще организовать сеть на тонких клиентах… (опять же это эффективней и дешевле).
Единственный вариант когда можно задействовать веб приложения 1с или веб приложения другого софта — это удаленный склад или офис с низко пропускным каналам интернета (но и в таких ситуациях есть более комфортные решения).
Хотя поставить плюс автору за статью стоит (хотя бы за обще ознакомительный материал)!
Для полноты картины учитывайте «Корпоративную аналитику для 1С» от Инталева:
http://www.intalev.ua/index.php?id=26866
Она выгружает данные в хранилище SQL методами Integration Service, динамически строя пакеты на C##. При этом ключи GUID меняются на Int для скорости работы..
Правда для соблюдения требований 1С это делается через промежуточную базу, формируемую на ADO (структуры такой же как база 1С), но оно умеет и без…
Ну а вообще хранилище там строится для нужд OLAP но может и для другого использоваться, т.к. «очеловечено»..
Стандарт (55 000 рублей за установку на сервер)
Бизнес (130 000 рублей за установку на сервер)
(28)
Выгрузка данных в промежуточное хранилище была упомянута в статье в качестве одного из возможных вариантов.
А насчет «Корпоративной аналитики» — все-таки использование OLAP продукта для решения задач интеграции кажется не очень целесообразным…
Компонент теперь распространяется бесплатно, подробности на сайте компании Энтерраhttp://www.enterra.ru/enterra-net-sdk-1s.html
Выложили в open source Enterra .Net SDK для 1C
https://github.com/EnterraInc/1C-.Net-Adapter
Спасибо «Enterra» за open source Enterra .Net SDK для 1C
Вот бы ещё посмотреть примеры применения данного компонента.
Я посмотрел код, в компоненте применяется объект V8X.ComConnector (comcntr.dll), поставляемый с платформой 1С.
А вот было бы здорово, вовсе обойтись без «переходника» от 1С, а сразу обращаться к базе 1С.
Причем, как к файловой, так и к SQL-ной!
Как бы это сделать?
Ни где не могу найти ни одного примера использования Enterra .net в .net приложении, поделитесь кто нибудь исходником.