[Генератор внешних событий] Внешняя компонента для 1С




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

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

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

<?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='\

81 Comments

  1. Душелов

    Написана по просьбе Че…

    Для каких целей это используется, я не представляю 🙂

    Reply
  2. Арчибальд

    А что, потом ОбработкаВнешнегоСобытия сработает? Если так, то мне как раз это надо!

    Reply
  3. Душелов

    (2) Конечно, для этого и сделано.

    Reply
  4. Арчибальд

    Большое ЧЕ ловеческое спасибо!

    Reply
  5. Душелов

    При добавлении события с уже существующим именем происходит остановка раннего события и замещения его на новое, с новыми параметрами.

    Reply
  6. Арчибальд

    (5) Ну прямо в точку, чего хотелось. В декабре. Но и сейчас не поздно.

    Reply
  7. Abadonna

    Оно, конечно, круто отдельную ВК для внешних событий, но осмелюсь заметить

    (и Арчибальду тоже), что в http://infostart.ru/projects/3142/ (лежит с декабря)

    есть метод DoEvent(Событие,Данные)

    Reply
  8. Душелов

    (7) Ну эт как бы не просто сгенерить, а с заданным интервалом ;))))

    Reply
  9. Abadonna

    (8) бе-бе-бе 😉 а 1С никак нисся по таймеру вызывать? ;)))

    Reply
  10. Душелов

    (9) Не комильфо! 🙂

    Reply
  11. Арчибальд

    (7)А я скачал. Правда, тогда забыл плюсик поставить. Исправился. Но таки не сообразил, как смоделировать несколько параллельных ОбработокОжидания.

    Reply
  12. Abadonna

    (11)>не сообразил, как смоделировать несколько параллельных ОбработокОжидания.

    Уговорил 😉 В новой версии Miracle таймеров можно насоздавать, как у дурака махорки. Хотя можно обойтись и одной ОбработкойОжидания, достаточно в качестве процедуры подцепить что-нибудь типа «ДиспетчерОбработок», а уж в нем рулить как хошь

    Reply
  13. Душелов

    (12) Обработка ожидания не наш метод! По-моему в 1С-ке только один экземпляр обработки ожидания можно создавать (в 7-ке точно так было)?

    Reply
  14. Abadonna

    (13) Ну дык я про то же:

    «достаточно в качестве процедуры подцепить что-нибудь типа «ДиспетчерОбработок», а уж в нем рулить как хошь»

    Я еще в младенчестве так выполнял разные и с разным интервалом 😉

    Reply
  15. Арчибальд

    (12)Да выкрутиться-то всегда можно. Даже на машине Тьюринга. Я и выкрутился уже, но коряво получилось — таблица состояний системы, варианты переходов — черт ногу сломит. Душа красоты просит…

    Reply
  16. Арчибальд

    (13) Именно не наш. Мало того, что один экземпляр, он еще и полсекунды не понимает.

    Reply
  17. vip

    (13) Обработка ожидания наш метод.

    FormEx (и класс Таймер в 1С++) позволяют создавать сколько угодно таймеров с интервалом от 1мс (это и для (16) и для (12) ответ).

    Работают и в модальном окне, и при свернутом окне 1С.

    Процессор не грузят, так как их обработка идет в idle-time.

    А тов. Че, как всегда, идет своим путем.

    Reply
  18. Abadonna

    (16)>он еще и полсекунды не понимает.

    Из хэлпа ВК всех времен и народов (Formex ;))

    ОбработкаОжидания(<?>,)

    Синтаксис:

    ОбработкаОжидания(<Имя>,<Интервал>)

    Назначение:

    Вызывает глобальную процедуру с заданным интервалом в милисекундах.

    Параметры:

    <Имя> — строка с именем глобальной процедуры (если в качестве параметра передается

    ‘пустая строка’, то ранее запущенный процесс прекращается);

    <Интервал> — интервал вызова в миллисекундах (если в качестве параметра передается

    ‘пустая строка’ или 0, то ранее запущенный процесс прекращается).

    Пример:

    Сервис = СоздатьОбъект(«Сервис»);

    Сервис.ОбработкаОжидания(«глПолучитьНовыеЗаявки»,200);

    Reply
  19. vip

    (18) > Из хэлпа ВК всех времен и народов (Formex ;))

    Ё!!! Как согласуется с «Программы бывают двух видов — мои и куевые»?

    Reply
  20. Abadonna

    (19) Исключения только подтверждаю правила, чи ты не в курсе? :))))

    Reply
  21. Душелов

    Вот придет Че и все расставит на свои места :)))

    Reply
  22. vip

    (20) А вообще приятно слышать (видеть) такое от мэтра 😉

    ЗЫ. Ты для меня тоже входишь в первую тройку исключений.

    А фраза «Программы бывают…» должна быть аксиомой для настоящего неперенумератора.

    Reply
  23. Abadonna

    (21) Если кто и изобретет вечный двигатель, так это тот, кто физику не учил, и не знает, что нельзя;)

    Reply
  24. Душелов

    А может я API расширил, в отличии от FormEx’а, типа управлять можно событиями и статусы ловить 🙂

    Reply
  25. Abadonna

    (24) А мы разве про тебя? :)))

    Ты тут с какого бока? Мы про Че ;))))))))

    Reply
  26. vip

    (24) Статусы в смысле обрабатываешь очередь событий?

    Reply
  27. Душелов

    (26) Да и это можно добавить при желании-то 🙂

    Reply
  28. vip

    (27) А сейчас, без добавления, что ты имел ввиду?

    Reply
  29. Душелов

    Как бы посмотреть активные или нет хотя бы 😉

    Reply
  30. Арчибальд

    (18)Я в 16 об 1С говорил. Мне что, хелп от 1С процитировать?

    Reply
  31. vip

    (30) А для меня давно уже 1С без 1С++ и FormEx это не 1С.

    (29) Тов. Че похоже идет опять своей дорогой. Подозреваю, что он рассчитывает на юзера, сканирующего что-то с космической скоростью.

    Так вроде сам механизм асинхронной обработки событий предполагает очередь.

    Reply
  32. Арчибальд

    (31)Похоже, 1С существует вне Вашего сознания. Ничего, они за это поплатятся!

    Reply
  33. artbear

    Для 77 мой Таймер позволяет работать асинхронно и в качестве обработчика назначать почти все что угодно 🙂 — процедуру глобальника, процедуру модуля формы, метод любого объекта, в т.ч. и объектов классов 1С++, и т.д.

    Reply
  34. Арчибальд

    (21)Воистину без Че не разберешься.

    Мне такая фишка нужна была, чтобы смоделировать асинхронный поток событий от внешних устройств (в том числе, пока что физически не существующих), на этой основе оценить защищенность будущей системы «от дурака» и сделать вывод о работоспособности в онлайновом режиме. Сама система работает с 2001 г., т.е. без формекса, миракля и ++. Другие решения, как приведенные в обсуждении, так и не приведенные, тоже способны решить задачу. Решение Душелова — подходит сразу.

    Reply
  35. CheBurator

    (17) Товарищ Че идет своим путем только потому, что не имеет в «доступном» виде репозитарий материалов по 1С++, а шарить по форуммам месяц, чтобы самому все сделать как оно должно быть по уму — у меня хватает пока работы и без этого 😉

    Попавший ко мне в руки около года назад репозитарий классов и обработок 1С++ — редкостное гуано (сорри!) — валится на синтакисческих ошибках и представляет из себя именно «кучу»… может с тех пор что-то и изменилось…? сорри, мне как больше прикладнику — необходимы готовые и относительно вылизанные инструментарии… Василий готовую к работе ВК сваял по моему запросу практически мгновенно — вот в чем преимущество… И! очень большой вес имеет то, что контакт с разработчиком — живой!

    Reply
  36. CheBurator

    Угумс, мне это нужно было для решения некоторых специфических задач:

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

    — обработку ожидания, которая могла бы решить проблемы периодического слива сканов в базу — применить не удалось из-за особенностей работы с формой (на тот момент);

    — юзеры сканирую с приличной скоростью (с расчетом того, что сервер — это и не сервер вообще)…

    Reply
  37. CheBurator

    Ну не доходят у меня руки до 1С++ в полной мере — не доходят…

    Reply
  38. CheBurator

    На данный момент у меня, например, есть весьма востребованная для меня задача (обсуждал я ее уже):

    — требуется одному терминальному сеансу 1Ски получить «сообщение» о событии из другого терминального сеанса 1Ски, при этом: минимум исправлений в структуре конфиги; запрет на использование ОбработкиОжидания.. ну и еще по мелочи…

    Reply
  39. CheBurator

    (34) > Решение Душелова — подходит сразу.

    потому что оно — жизненно! т.е. решает явную задачу…

    Reply
  40. Abadonna

    (35-39) А где плюс-то твой? 😉

    Reply
  41. CheBurator

    (40) мне вот непонятна эта ваша тяга к регалиям…

    😉

    Reply
  42. Abadonna

    (41) А я тут при чем? Сделано для тебя, быстро, устраивает — поощряй.

    Пиво, ктр. ты поставишь Василию, никто не увидит, а плюсик — все 😉

    Reply
  43. CheBurator

    как это «пиво никто не увидит» — а сам Василий???

    Reply
  44. Душелов

    Увижу, увижу 🙂

    Reply
  45. artbear

    (35) Ты различай прикладные решения по 1С++ и саму ВК 1С++ — это разные вещи.

    Проблемы прикладных решений не являются проблемами 1С++ !

    Сама ВК 1С++ достаточно документирована и отлажена/проверена/протестирована.

    А вот у прикладных решений, например, тот же репозитарий классов 1С++, могут быть и есть проблемы, к моему сожалению.

    Юзай 1С++ в чистом виде, пиши свои классы и нет никаких проблем.

    Reply
  46. Abadonna

    (45)>пиши свои классы и нет никаких проблем.

    Сейчас Серега спросит:

    «пап, а ты с кем разговаривал?» 😉

    Reply
  47. biv75

    Ну вы ещё подеритесь, настоящие финские парни )))

    Reply
  48. CheBurator

    (45) спок! я различаю! 😉

    смысл в том, что 1С++ и прикладные решения на этой основе можно рассматривать по аналогии как 1С и типовые конфигурации. Соответственно, голая «платформа» сама по себе мало что дает, точно так же мало что дает набор кривых ублюдочных решений (я утрирую, так что не обижайтесь 😉

    Reply
  49. artbear

    (48) Вот как раз подобная аналогия и не очень верна 🙁

    Тем более, что все-таки существует огромная куча решений сторонних разработчиков, не 1С, в коде 1С, никак не связанных с типовыми конфами.

    Еще — эта ВК Василия также идет без доп. решений, примеров и т.д. Если утрировать (при этом никому не нагрубив), ты ее также не можешь применять.

    ЗЫ прошу больше не применять утрированных выражений типа «ублюдочных, гуано» и т.д. к решениям, которые ты не юзаешь, а многие другие успешно и не первый год юзают 🙁 — например, 1С++ и т.п.

    Иначе обижусь сильно 🙂

    Reply
  50. CheBurator

    (49) спакуха! я 1с++ тоже юзаю, и помогает иногда очень сильно.

    так что не обижайтесь!

    А Василий, кстати, все свои ВК иллюстрирует содержательными показательными примерами!

    ..а

    аналогия, в какой-то мере, не очень верна, но весьма похожа. В том числе и в плане «в коде 1С, никак не связанных с 1С» — как раз в том плане, что ряд разработок всяких контор уже можно считать «типовыми», а остальное — одноразовые решения, которые для использования в другом месте — или надо драчевым енапильником обрабатывать, или проще сразу пристрелить и свое написать.. 😉

    Reply
  51. Арчибальд

    (39)И я ж о том. МОЮ задачу решает — от меня плюс. Это при том, что в системе использоваться не будет — только при оценке рисков.

    Жаль, что с пивом для Василия у меня проблемы…

    Reply
  52. CheBurator

    (51) деньги на пиво для Василия можешь кинуть мне на вебмани (в профиле), а я уже при встрече Василию проставлюсь

    Reply
  53. Арчибальд

    (52)Смотрел профиль, не нашел ничего. Кинь номер в личку что ли. Ну бестолковый я, может быть…

    Reply
  54. alevnev

    (34) > Решение Душелова — подходит сразу.

    Подтверждаю! Хотя применял и для другой задачи! 😉

    Reply
  55. Душелов

    Добавил:

    — ДобавитьПоВремени(ИмяСобытия, Данные, ДатаВремя) //ДатаВремя — строка, вида «Дата Время»

    Срабатываеп единожды по таймеру.

    Reply
  56. Cthulhu

    (55): Строка ДатаВремя (д/77 интересуюсь) в каком формате?.. неплохо бы ГГГГММДДhhmmss, а?.. ну или в настраиваемом?..

    а «ДобавитьПоТаймауту(ИмяСобытия,Данные,ТаймаутМилисекунд)» — не было мыслей?..

    Reply
  57. Cthulhu

    ЗЫ: и в (7) ссылка в никуда…

    Reply
  58. Душелов

    (56) Формат сейчас «20.09.2009 12:59:27».

    Настраиваемое — все можно. Но не считаю нужным, да и времени нет свободного.

    (57) У Абадонны все разработки удалены.

    Reply
  59. Abadonna

    (58)> Но не считаю нужным, да и времени нет свободного.

    Одобряю! 😉 Хотельщики пусть сами пишут.

    Поэтому «У Абадонны все разработки удалены.»

    Reply
  60. skalistratov

    Доброго времени суток.

    Пробовал использовать ВК для передачи событий из одного сеанса ИБ в другой — не сработало. У кого-нибудь получалось?

    Reply
  61. CheBurator

    (60) и не сработает, но решения — есть

    Reply
  62. CheBurator

    Василий, установлена мелкая трабла в компоненте:

    глГенераторСобытий.Добавить(«WMSЗАКРЫТЬПОНЕАКТИВНОСТИ»,»wms_ПАРОЛЬ»,600000); //10 мин

    глГенераторСобытий.Старт(«WMSЗАКРЫТЬПОНЕАКТИВНОСТИ»);

    — вот так не срабатывает, если интервал уменьшить до 300000 — т.е. 5 мин — то ок. Типа где-то что-то «переполняется».

    .

    настоятельно призываю вернуть компоненту к жизни — с меня угощение на тусняке!

    Reply
  63. Душелов

    (60) http://infostart.ru/public/19355/

    (62) Это уже мне придется писать заново, так что как время появится, с коим у меня пока проблема…

    Reply
  64. CheBurator

    (63) по (60) у Садовникова сделано можно без серверного приложения — но надо заниматься «поддержкой» — пример на РиКцентре есть.. на NetaInet сделано.

    Reply
  65. CheBurator

    (63) по (62) — я в курске, я ж не задарма! — пиво с закусем по-любому обломится 😉 по факту готовности сабжа (когда время будет) — готов даже красивую доку написать, еще бы конечно без привязки a фреймворку это все работало (но это уже сверхотелка)

    Reply
  66. Душелов

    (64) С серверном лучше, проще и дешевле всего, ибо не нужен инет.

    (65) Без фреймворка — неее, C# основан на нем, на другом принципиально не пишу, а по остальному — вполне.

    Reply
  67. CheBurator

    (66) ну так короче — я побежал пиво в холодильник ставить?

    Reply
  68. Душелов

    (67) Ну, грубо говоря, да 🙂

    Reply
  69. Elisy

    (62) Посмотрите http://infostart.ru/public/60232/

    Весь код включен в обработку и легко настраивается через 1С.

    Reply
  70. CheBurator

    (69) я не сторонник тянуть слона если нужен всего его хвостик 😉 но спасибо, посмотрю поплдробнее…

    Reply
  71. dimasavangard

    Объясните, на уровне “ЦерковноПриходскойШколы“ как сгенерить внешнее событие в одной базе ,дабы другая его восприняла?

    Reply
  72. unknown181538

    А можно ли заставить ее работать на Упр.формах?

    Вызываю весь код на клиенте, выдает ошибку «Ошибка создания объекта внешней компоненты: «

    Reply
  73. Spacer
    unknown181538 пишет:

    А можно ли заставить ее работать на Упр.формах?

    Вызываю весь код на клиенте, выдает ошибку «Ошибка создания объекта внешней компоненты: «

    У меня тоже возник такой вопрос. И вот как я его решил:

    1. Делаем управляемую форму (описывать процесс не буду, думаю вы в курсе что и как);

    2. Добавляем макет типа «Двоичные данные»;

    3. В макет загружаем zip-архив, в котором должны быть 2 файла:

    — внешняя компонента Dushelov.ExtEventGen.dll

    — файл манифеста manifest.xml

    4. В форме обработки в процедуре «ПриОткрытии» пишем примерно такой код:

    &НаКлиенте
    Перем ГенераторСобытий;
    
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    
    ИмяВК=»AddIn.ExtEventGen»;
    
    Попытка
    УстановитьВнешнююКомпоненту(«ВнешняяОбработка.Тест.Макет.ExtEventGen»);
    ПодключитьВнешнююКомпоненту(«ВнешняяОбработка.Тест.Макет.ExtEventGen», «ГенераторВнешнихСобытий», ТипВнешнейКомпоненты.COM);
    Исключение
    Сообщить(«Не удалось подключить компоненту » + ИмяВК);
    КонецПопытки;
    
    Попытка
    ГенераторСобытий = Новый(ИмяВК);
    Исключение
    Сообщить(«Ошибка создания объекта внешней компоненты: «+ИмяВК);
    КонецПопытки;
    
    КонецПроцедуры

    Показать

    Обратите внимание на объявление переменной в модуле управляемой формы.

    В прикрепленном файле образец переделанной мной обработки.

    Ну вот собственно и все.

    Reply
  74. Spacer

    Еще вопрос к автору разработки —

    можно ли как то устанавливать свое имя источника события в этой внешней компоненте?

    Подозреваю что пока что нельзя. Но было бы очень здорово если бы вы сделали такую возможность.

    Reply
  75. KokAN

    Оченно пригодилась!

    Reply
  76. dudarev

    классика , очень занимательно

    Reply
  77. a_mironov

    Скачал, прокомментирую после анализа. Надеюсь, поможет. Вообще, я ищу шаблон внешней компоненты для c#, чтобы форма c# вызывалась как дочерняя 1С, а не как отдельное окно

    Reply
  78. acrk

    Нужна такая обработка.

    Попробовал зарегистрировать в Windows 7, получил ошибку

    RegAsm : Error RA0000 » Не удалось найти входную сборку «Dushelov.ExtEventGen.dll» или одну из ее зависимых сборок

    Через regsvr32 выдает что «Модуль … загружен, но точка входаDLLRegisterServer не найдена. Проверьте, что … является правильным DLL или OCX и повторите попытку

    Windows 7 Prof 64 Bit

    Соответственно при запуске Тест.epf из 1С выдает

    Ошибка создания объекта внешней компоненты: AddIn.ExtEventGen

    Что делать?

    Reply
  79. zesava

    Исходник на c# всего этого безобразия

    вдруг кому то пригодится

    https://drive.google.com/open?id=1E9moeRE7qgrz3ykNDkPP2aQFK91OGDTN

    Reply
  80. CheBurator

    (79) А откуда исходники достались? в наследство от Василия?

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

    а так — можно это же все по идее получить «штатным» Формексом — есть и объект «таймер» и генерация внешних событий.

    Reply
  81. vdv2701

    Название статьи не соответствует действительности, так как генерятся не внешние события, а внутренние, которые видны только внутри того клиента 1С, который их сгенерировал. Только в заблуждение вводит. То же самое можно через «Оповещение» сделать.

    Reply

Leave a Comment

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