Надоело повторное COM-соединение? Не помещается COM-объект в хранилище? Есть решение!




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-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='\

71 Comments

  1. jobkostya1c8

    Может стоит и попробовать прием, но опасно

    COM-объект в хранилище

    . А вдруг опять проблема с релизом платформы?

    Reply
  2. karpik666

    И такой способ реально работает?

    Reply
  3. ZhokhovM

    (2) karpik666, да.

    Reply
  4. tormozit

    В примере для 8.3 забыл про второй параметр метода ПоместитьВоВременноеХранилище

    Reply
  5. ZhokhovM

    (4) tormozit, точно. Спасибо.

    Reply
  6. kalyaka

    В 8.3 может и не сработать, см. «Особенности временного хранилища» в публикации http://infostart.ru/public/198766/

    Reply
  7. rulan87

    Есть другой способ: использовать модуль повторного использования, в котором получать функцией ком соединение. При первом обращении ком соединение кешируется

    Reply
  8. tormozit

    (7) Через 20 мин однако это значение из кэша удаляется.

    Reply
  9. ZhokhovM

    (8) tormozit, ага, конечно.

    Reply
  10. ZhokhovM

    (7) rulan87, да, на время сеанса либо COM+.

    Reply
  11. baton_pk

    Пилю out-of-process COM-класс для такого рода задач. Работает примерно так:

    R = New ComObject(«V8Pool.CacheConnector»);
    R.setCacheId(«1»);
    
    A = R.connect(«File=C:UserssbatanovDocumentsInfoBase12»);
    A.ОбщийМодуль1.SetCommonData(«abababab»);
    
    R.setCacheId(«2»);
    
    B = R.connect(«File=C:UserssbatanovDocumentsInfoBase12»);
    B.ОбщийМодуль1.SetCommonData(«dfdfdfdf»);
    
    A = Undefined;
    B = Undefined;
    
    R.setCacheId(«1»);
    C = R.connect(«File=C:UserssbatanovDocumentsInfoBase12»);
    
    Message(C.ОбщийМодуль1.GetCommonData()); // abababab
    

    Показать

    Мне нужно сохранять соединение между сеансами для работы веб-сервиса. По сути, разница с обычным КОМ-соединителем только в строке класса COM-объекта.

    Reply
  12. tormozit

    (11) baton_pk, когда планируешь допилить? Что будет если два сеанса одновременно запросят один и тот же CacheId? В какой момент уничтожается объект или он работает резидентно через COM+?

    Reply
  13. baton_pk

    (12) tormozit,


    когда планируешь допилить?

    Для моих мелочных нужд оно, в принципе, уже работает. Если приводить к более-менее коробочному виду, то к концу следующей недели думал закончить.


    Что будет если два сеанса одновременно запросят один и тот же CacheId?

    Они получат один и тот же COM-объект. Потому у меня в качестве id используется имя пользователя, а одновременная работа двух пользователей с одним именем у меня отсекается на уровне логики приложения.


    В какой момент уничтожается объект или он работает резидентно через COM+?

    С этим сейчас у меня пока творческий ступор: как сделать лучше. Это COM+ (насколько я знаком с терминологией), то есть EXE-сервер. Сейчас он выключается по истечении некоторого таймаута после отключения последнего сеанса. То есть как-то так:

    Первый подключился — запускается EXE-сервер.

    второй-третий-…-тысячный — работают с тем же EXE-сервером и с его хранилищем 1С-соединений

    как только все-все-все отсоединятся, запускается таймер-убийца (для отладки у меня 10 секунд стоит, но в боях я буду минут 10 выставлять). Если по истечении времени не было новых соединений, то EXE-сервер закрывается и закрывает все 1С-соединения. Следующее соединение уже запустит новый чистый EXE-сервер.

    Не запутаться бы, где какое соединение 🙂

    Reply
  14. baton_pk

    (12) tormozit,

    Что будет если два сеанса одновременно запросят один и тот же CacheId?

    Тут надо ещё один момент уточнить: сопоставление идёт не CacheId => ComObject, а {CacheId, ConnectionString} => ComObject.

    То есть в одном кэше два подключения к разным базам (или под разным пользователем и т.д.) — это разные объекты, разумеется.

    Reply
  15. tormozit

    (13) baton_pk, про COM+ описал правильно. Твоя реализация судя по описанию не позволяет конкурентно использовать пул внешних соединений. Про ограничение количества сеансов на одного пользователя я так понял, что в случае обслуживания операции веб-сервиса сразу от нескольких клиентов только один из них получит ответ, а остальные отказ.

    Reply
  16. baton_pk

    (15) tormozit, Нет, у меня разные клиенты под разными пользователями входят. Соответственно, у каждого свой кэш получается.

    Если тебе нужно, чтобы внутри одного сеанса хранился объект, то в качестве идентификатора кэша можно использовать имя пользователя и номер сеанса. А если всё-таки между сеансами перебрасывать, то тут либо пользователей разносить, либо какой-то механизм сессий вводить, когда ты клиенту передаёшь идентификатор при первом соединении и клиент с этим идентификатором дальше с тобой общается (типа сессий в PHP). Я пока в эту сторону думаю.

    Reply
  17. rtnm

    (11) baton_pk, а замерял на сколько падает производительность при использовании V8Pool.CacheConnector? В моей реализации подобного пула (больше похожего на то что описывал tormozit — конкурентное получение соединения из пула с фиксированным размером) производительность упала в 10-20 раз. Замерял время на сортировке, т.е. на коде который совершает много мелких вызовов. Даже осознавая присутствие маршалинга, я был сильно разочарован и «заморозил» разработку.

    Reply
  18. baton_pk

    (17) rtnm, нет, замерами не занимался. мне просто даже в голову не пришло, что поиск соединения в пуле может быть в разы медленнее, чем создание нового соединения с Комплексной Автоматизацией.

    Reply
  19. rtnm

    (18) baton_pk, причем тут поиск соединения? Речь про затраты на маршалинг.

    Reply
  20. baton_pk

    (19) rtnm, тогда я не понимаю, что с чем надо сравнивать?

    что через CacheConnector, что через родной ComConnector работа в итоге идёт через один и тот же класс внешнего соединения? Маршаллинг в любом случае присутствует.

    Reply
  21. rtnm

    (20) baton_pk, я, например, сравнивал скорость работы алгоритма сортировки (не помню какого точно), генерировал массив с воспроизводимыми псевдослучайными значениями, и запускал сортировку:

    1. в обычной среде выполнения 1С

    2. с использованием V8x.ComConnector (без учета времени подключения)

    3. с использованием своей компоненты, аналог вашей V8Pool.CacheConnector (без учета времени подключения)

    Так вот 3 получался медленнее 1 примерно в 10-20 раз. 2 тоже был медленнее 1, но не так сильно.

    Естественно для 2 и 3 речь идет о том, что сам алгоритм сортировки располагался в базе которая подключается, а не к которой подключаются.

    Маршалинг в 2 и 3 присутствует, но он разный, в случае 3 он будет межпроцессным.

    Было бы интересно увидеть ваши замеры.

    Reply
  22. baton_pk

    (21) rtnm, померял.

    Сделал две сортировки: одну «в лоб», одну «правильно».

    В лоб разница существенная: 10 секунд против 88.

    Правильно — это с сокращением количества «клиент-серверных» вызовов. Там разница 2 мс против 4 мс.

    Не вижу поводов отчаиваться, при правильно построенной логике клиент-серверного взаимодействия разница в скорости будет мала.

    Грубо говоря, вместо

    Для Каждого КомЭлемент Из КомСписок Цикл
    КомБаза.КомОбработать(КоэмЭлемент);
    КонецЦикла;
    

    Надо делать:

    КомБаза.КомОбработатьСразуСписок(КомСписок);
    

    PS. Но разницу в маршаллинге внутри процесса и между процессами зарубил себе на носу в любом случае. Спасибо.

    Reply
  23. rtnm

    (22) baton_pk, спасибо за замеры, появилась мысль «разморозить» разработку, найти бы только время 🙂

    По поводу правильно построенной логике клиент-серверного взаимодействия.

    Основная идея создания такой компоненты заключалась в том, чтобы не было необходимости снимать типовую конфигурацию с полной поддержки.

    Например, есть типовая конфигурация на полной поддержке. Необходимо сделать для нее веб-сервис(http-сервис) со следующими ограничениями:

    1. Не снимать полную поддержку с типовой конфигурации

    2. Реализовать логику работы веб-сервиса(http-сервис) средствами 1С, чтобы любой разработчик 1С мог в ней разобраться (без подключения других инструментов, например, ASP.NET)

    3. Получить в итоге адекватное время ответа от веб-сервиса(http-сервиса).

    Кстати, еще одной причиной «заморозки» моей разработки являлась анонсированная в 8.3.6 возможность расширений, в которой я думал будет возможность, например, подключать веб-сервисы и http-сервисы, но пока этого не случилось.

    Reply
  24. baton_pk

    (23) rtnm,

    снимать типовую конфигурацию с полной поддержки.

    А если попробовать через внешнее соединение подключать внешнюю обработку и всю логику запихивать туда?

    Reply
  25. rtnm

    (24) baton_pk, этот вариант нужно всегда иметь на заметке. Конкретно в моем случае, я использую pool com-конектора, и обработку надо будет постоянно загружать заново, потому что она будет выгружаться при завершении соединения и помещении его в pool. В общем тут надо подумать 🙂

    Reply
  26. Yashazz

    Мне одному кажется, что за попытку передать com-соединение на сервер надо люто минусовать этот бред?

    И что эта, простигосспади, «статья» противоречит рекомендациям 1С по разработке?

    Reply
  27. ZhokhovM
    Мне одному кажется, что за попытку передать com-соединение на сервер надо люто минусовать этот бред?

    Попробуйте создать реквизит обработки произвольного типа и хранить com-объект в нем.

    Reply
  28. Yashazz

    (27) это не ответ. Сама попытка передачи COM-соединения с клиента на сервер — это грубейшая ошибка. В 8.2 защита ещё не была доведена до ума, поэтому позволяла такие хамские вольности, в 8.3 это, к счастью, пресекли.

    Reply
  29. ZhokhovM

    (28) Yashazz, цитирую из статьи:

    Важно: получать из хранилища только на сервере (если на сервере помещали), или аналогично на клиенте.
    Reply
  30. Yashazz

    А, то есть речь о работе клиент-клиент или сервер-сервер? Тогда да, согласен, нормально.

    Reply
  31. androgin

    ай ай, как не хорошо тырить чужие идеи ))))

    http://forum.infostart.ru/forum86/topic118827/message1282941/#message1282941

    Reply
  32. androgin

    (6) kalyaka, в 8.3 все прекрасно работает!

    Reply
  33. ZhokhovM

    (31) androgin, псс-с. Всего-то помаленьку.

    Reply
  34. androgin

    (33) lf да ты стырил ВСЁ, только префиксы добавил.

    Только мой вариант более живучий, чем твой)))

    Догадайся почему))

    Reply
  35. ZhokhovM

    (34) androgin, ну я сперва начал искать ответы на разных сайтах, решил сделать статью и показать другу, как это работает в 8.3. Могу привести ссылки:

    http://forum.infostart.ru/forum86/topic118827/

    http://forum.infostart.ru/forum26/topic103575/

    http://forum-mista.pro/topic.php?id=714692/

    были еще ссылки…

    Только мой вариант более живучий, чем твой)))

    Догадайся почему))

    м.б. то что на клиенте у меня не работает или нет глобальной переменной?

    Reply
  36. androgin

    (35) Если бы ты сам писал код, то имена переменных, вплоть до расстановки знаков, не были бы идентичны

    Reply
  37. karpik666

    (36) androgin, Я просто оставлю это здесь http://infostart.ru/public/294285/

    Reply
  38. ZhokhovM

    (37) karpik666, хорош спамить.

    Reply
  39. karpik666

    (38) вообще-то это не спам, просто дополнение к вашей беседе, кто у кого и сколько скопировал=)

    Reply
  40. kalyaka

    (32) androgin, а если кластер состоит из нескольких рабочих серверов и произойдет переподключение с одного рабочего сервер на другой?

    Reply
  41. androgin

    (39) karpik666, Если ты не понял сути, то зачем встревать со своей статьей?))

    Reply
  42. dj_serega

    Спасибо за статью. Отработало как часы.

    Reply
  43. ZhokhovM

    (42) dj_serega, пожалуйста.

    Reply
  44. Гость

    Добрый день.

    А как быть с временем соединения… спустя минуту COM автоматически сбрасываться(

    (Используются серверные базы)

    Можно как-то настроить?

    Reply
  45. tormozit

    Есть еще такой метод v82Server.dll — Технология Microsoft COM+ для доступа к 1C82, но посложнее в настройке конечно и нет готовых бинарников/исходников для 8.2+

    Reply
  46. infosoftvc

    В какой-то момент времени на сервере перестал работать данный метод. Структура в хранилище сохраняется, но после чтения из хранилища данных нет ( л_Структура.COMОбъект = неопределено ).

    Проблема решилась добавлением фиксированной структуры:

    л_Структура = Новый ФиксированнаяСтруктура( Новый Структура(«COMОбъект», л_COMОбъект));

    Reply
  47. Caliban

    (46) infosoftvc, у меня сегодня внезапно тоже перестал сохраняться COM-объект в структуре. До этого больше года работало как часы. Вариант с фиксированной структурой не помог. Кто нибудь еще сталкивался с таким?

    Reply
  48. kalyaka

    (47) Caliban, не все com объекты поддерживают сериализацию. Еще, возможно, сама 1С не сериализует com, а использует ссылку на существующий объект и если происходит переподключение с одного рабочего процесса на другой, то не факт, что будет сохранен com объект.

    Reply
  49. Serginio

    Я бы на нет сделал статическое свойство (синглетон) Dictioanary<string,object> который бы по ProgID отдавал нужную ссылку и создавал её если еще не создавалась. Загруженные библиотеки не выгружаются из процесса. И этот синглетон будет жить пока рабочий процесс не перегрузится.

    Reply
  50. dj_serega

    8.3.8.1652.

    Теперь нельзя помещать во временное хранилище COM подключение (покрайней мере на клиенте) 🙁

    Reply
  51. tormozit

    (50) Доказательство?

    Reply
  52. dj_serega

    COM = Новый COMОбъект(«V83.Application»); — Все ок

    COM = Новый COMОбъект(«V83.COMConnector»); — Ошибка.

    Текст ошибки
    Reply
  53. dj_serega

    (51) Код следующий:

    COMConnector = Новый COMОбъект(«V83.COMConnector»)
    COMConnector.Connect(СтрокаПодключения);
    АдресCOMПодключения = ПоместитьВоВременноеХранилище(Новый Структура(«ПодключениеБазы», COMConnector), Новый УникальныйИдентификатор);
    Reply
  54. dj_serega

    Хотя нет… и Application туда ошибку 🙁 Сейчас наваяю обработку и приложу сюда

    Reply
  55. tormozit

    (52) это на тонком клиенте что ли?

    Reply
  56. dj_serega

    Воть.

    База: 1С:Предприятие 8.3 (8.3.8.1652)

    Пустая новая конфигурация.

    Reply
  57. dj_serega

    (55)Да. На 8.3.5.х. Работало.

    Reply
  58. Farpost

    Вот кто мне объяснит — зачем УФ и тонкий клиент на сервере где все юзеры работают по РДП или на локальной машине?

    Какое облегчение приносит применение УФ???

    Видя насколько увеличился объём кода и реально замеряя производительность системы, прихожу к выводу, что УФ в описываемых мной случаях бред полный.

    Reply
  59. fokin

    (57) Получилось побороть?

    у меня на 8.3.8.2088 аналогичная беда

    только не пойму почему все тоже самое, но &НаСервере отрабатывает без ошибок?

    Reply
  60. dj_serega

    (58)

    Какое облегчение приносит применение УФ???

    Запустите УПП на обычных формах на нетбуке.

    И, там же, запустите какое-то (правильно написанное уф) через тонкий клиент или через веббраузер.

    Reply
  61. Farpost

    (60)

    А зачем заниматься извращениями? Есть определенные требования ПО к аппаратной части — Вы же не будете запускать скажем WarCraft II на смартфоне и требовать от него такой же производительности….

    Если Ваша фирма доросла до УППырища, то уж запускать этого монстра на нетбуках — такой же бред как применение УФ в описанных мной случаях

    Reply
  62. Farpost

    (60) Вдогон…

    Вы мой пост либо недочитали, либо не осознали прочитанное — советую перечитать и вникнуть в смысл описанного… Я запускаю 1Сину НА СЕРВЕРЕ!!! Довольно мощном и доступ пользователей по РДП протоколу — и на кой хрен мне ваши УФ при таком режиме работы?

    Reply
  63. Anchoret

    (62)

    Из популярного: попробуйте запустить обычные формы в браузере

    Reply
  64. dj_serega

    (62)

    Я запускаю 1Сину НА СЕРВЕРЕ!!!

    В этом и вопрос. При правильной архитектуре и разработке сервер нужен только для хранения БД + публикация на вебсервере.

    Итого. Есть один сервер где все сложное выполняется и есть клиентская часть где выполняется только отрисовка данных + простые вычисления.

    На один сеанс клиента нужно +-500 мб памяти. При 100 пользователях объем не маленький. Все это нужно для сервера RDP. А в случае с тонким клиентом (по прямому подключению или через web) серверу нужно (в основном) только хранить подключение и выполнять запросы клиента.

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

    p.s.: предлагаю почитать эту статью. Очень хорошо описаны проблемы клиент-серверного взаимодействия. Да есть нюансы, но присмотревшись на картинки видно что в случае с обычными формами «библиотека» будет находится возле каждого клиента. А в случае с управляемыми формами «библиотека» одна и клиенты только запрашивают простые данные.

    Reply
  65. Farpost

    (64)

    И с чего это вы взяли что РДП жрет 500 мегабайт на сессию? Максимум 50 Мб… И уж если у меня будет 100 пользователей, то сервер у меня будет на порядок мощнее хотя бы для обеспечения работы СУБД… Вы сами себе противоречите — если надо экономить ресурсы сервера за счет терминальных подключений, то эта экономия сожрётся 1Синой на УФ…

    В моём случае и я уверен у многих аналогичная ситуация, когда ресурсов сервера вполне хватает на все терминальные сеансы с запасом, а интернет весьма нестабильный у удаленных клиентов (раскиданы на площади примерно равной площади Франции) запускать УФ в любом виде, что в браузере, что в варианте тонкого клиента бредятина полная — 1Сина тупит на таких соединениях безбожно. А плюс РДП в том, что оборвался коннект — и ничего — восстановился и продолжаем работу в том же сеансе на том же месте…

    Я уж не говорю про удобство доработки конф и отладки…

    Reply
  66. Farpost

    (63) А зачем? Объясните мне смысл сего действия?

    Reply
  67. dj_serega

    (65) Каждый останется при своем мнении. Прям как вкус и цвет фломастеров :-))

    Reply
  68. spacecraft

    (65) и как поживают ККМ на РДП? А если это не локальная сеть по своему кабелю? Иногда нужно директору с планшета, находясь в Америке, посмотреть пару отчетов?

    Задач много. Единого универсального решения нет. Если устраивает текущая система работы, то и работать дальше на ней. Но не стоит говорить, что это решение единственно правильное для всех.

    Reply
  69. Farpost

    (67) Еще раз убеждаюсь, что апологеты 1С или не читают вообще или не хотят ничего слышать критического…

    Мой первый вопрос был: Какое облегчение приносит применение УФ? В конкретном случае — мне например непонятна политика 1С, соответственно франчей и большинства внедренцев везде впендюрить УФ… И ведь впендюривают, даже там где от УФ больше вреда чем пользы…

    Я не спорю, есть моменты когда УФ возможно более удобны чем обычные, всякое бывает, но по своему опыту и практической работы увы вижу, что в 90% это чистый маркетинг…

    (68) Да легко — например: http://infostart.me/public/313737/ или http://infostart.ru/public/197612/ да и маппинг портов тоже никто не отменял… ПОсмотреть отчеты тоже проще по РДП — быстрее шевелиться чем УФ через кучу провайдеров, а ещё есть разработки (правда не 1С, вот например: http://bureautics.ru/ на платформе хоровод) так там это все работает на пару порядков эффективней чем УФ — вот бы 1Сники посмотрели и опыт бы переняли…

    Я к чему — да единого универсального решения нет и не будет, поэтому стремление всех запихнуть в «прокрустово ложе» идеологии 1С мне лично очень не нравится…

    Reply
  70. kote

    (0) Всё это работает ТОЛЬКО В ПРЕДЕЛАХ ОДНОГО СЕРВЕРА..

    Если у Вас кластер — то считанное на другом сервере Хранилище с СОМ-объектом не работает..

    Reply
  71. Regner

    (7) а как потом закрывать соединение?В кэше данные хранятся 20 мин, спустя это время при повторном использовании новый сом объект создатся.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *