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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *