Всем доброго здравия!
Хотелось бы поделиться в статье опытом использования «Виртуального» работника на платформе 1С версии 7.7, так как «Виртуальный» работник позволит сохранять самый ценный человеческий ресурс – время.
Под «Виртуальным» работником я понимаю отдельный сеанс (или сеансы) в 1С, под которым обрабатываются задачи, поступающие от людей – пользователей базы данных. Это позволяет запараллелить выполняемые задачи и таким образом экономить время людей. Задачи, которые выполняют «виртуальные» работники в разработанных мною базах данных я бы разделил следующим образом:
А) «Долгие отчеты»
Все сталкиваются с ситуацией, когда формирование отдельных отчетов занимает продолжительное время, в течение которого нельзя воспользоваться программой. Можно поручить формировать отчет «Виртуальному» работнику. Пример из реальной жизни – имеется форма прайса - заказник под клиента, которая формируется в формате Excel – само формирование занимает до 5 минут + используется буфер обмена (не судите строго – в этом прайсе показывается и история по покупкам и отдельно новинки, акции и основной прайс + картинки), но пользователь может выдать задание на формирование этих прайсов «Виртуальному» работнику. «Виртуальный» работник запущен в отдельном сеанс Windows на сервере и под отдельным сеансом 1С. Ниже в видео ролике покажу, как это работает на примере в тестовой базе. Далее «Виртуальный» работник видит список заданий, выбирает по хронологии, выполняет его, создает некий результат - который возвращается пользователю, сформировавшему задание.
Еще один реальный пример – автоматическое создание предложений покупателям, которым будут отгружены в будущем товары. В момент, когда менеджер создает новую заявку от покупателя – программа создает задание компьютеру на формирование предложения покупателю по специальному алгоритму – в результате которого программа проанализирует 1) текущие остатки, 2)что брал клиент, 3)что не брал и 4)что нам наиболее выгодно предложить – что опять же занимает продолжительное время и сформирует список товаров так, чтобы он вмещался на одну страницу. И в момент, когда покупателю печатают комплект документов (это через несколько дней после оформления заявки) – предложение уже сформировано, его остается только распечатать.
Б) «Статистика»
Также «Виртуального» работника можно использовать для сбора статистической информации и потом её показывать (использовать) для реальных пользователей.
Пример из жизни: собираем статистику по каждому покупателю в разрезе специализаций номенклатуры, которую покупал, графику платежей, объёмам закупок - а затем в момент, когда менеджер открывает форму для заполнения заявки от покупателя – пока программа обсчитывает текущие остатки, резервы и прорисовывает заявку от покупателя – ему в течение пары минут показываются данные по статистике покупателя.
Или например - Менеджерам для их стимулирования в режиме «реального времени» показывается форма, на которой отражается заработок, отгрузки и оплаты менеджера и коллег менеджера. Но так как сам заработок рассчитывается по сложному алгоритму, в котором учитывается много факторов, то расчёт занимает 10-15 минут. «Виртуальный» пользователь периодически делает этот расчёт, а уже готовый результат видят менеджеры – и их это подстегивает к работе – когда они в реальном времени видят то, что заработали.
В) «События»
Еще один вариант использования «Виртуального» работника это реагирование на возникновение определенных событий:
Опять же примеры из реальной жизни - главный бухгалтер проводит «Закрытие месяца» - «Виртуальный» работник пересчитывает управленческие себестоимости и себестоимости для разных видов отчетностей.
Еще пример: создают новую карточку продукции – «Виртуальный» работник определяет, что появилась новая карточка, проверяет ее на заполненность и оповещает тех пользователей - кто должен довнести информацию – технолог, бухгалтер или менеджер. Тут кажется, что проще бы было делать такую проверку при создании карточки – но карточку номенклатуры могут создать программно, и здесь уже без «Виртуального» работника трудно обойтись.
Еще пример: идут новые поступления товаров – «Виртуальный» работник проверяет изменение себестоимости и оповещает пользователей при её резком изменении. Без использования «Виртуального» работника увеличится время ожидания пользователей, выполняющих проведение новых поступлений.
Г) «Планировщик задач»
Есть также вариант использования «виртуального» работника в качестве выполнения плановых задач
- загрузка курсов, ставки рефинансирования – оповещение определенных пользователей о курсах, или о их резком изменении. Если привязку делать к определенному пользователю или группе пользователей – всегда есть вероятность – что один пользователь заболеет, другой уедет в командировку, третий будет в отпуске, а четвертый заменяющий первого не обратит внимание, что курсы не загрузились – и импортное поступление оприходуют по неправильной учетной стоимости (из реальной жизни). Но «Виртуальный» работник всегда бодр и в прекрасном самочувствии.
- пользователь указывает, какой товар его интересует – а «виртуальный» работник периодически мониторит свободные остатки и при их появлении - сигнализирует
- проверка списка номенклатуры на актуальность показа и корректировка списка показываемой номенклатуры. Например, показывать только с остатками.
Д) Обмен со сторонними программами
Можно использовать также для обмена со сторонними системами
- например, «виртуальный» работник используется в качестве сервера для обмена с терминалами рабочих – где они отчитываются о проделанной работе
- для обмена с торговыми площадками (Немного из реальной жизни: отдельный пользователь занимается рекомендуемыми розничными ценами на продукцию – с утра ее меняет, а «виртуальный» работник связывается с торговой площадкой и корректирует изменившиеся цены у себя и в интернет магазинах, сотрудничающих с производителем. Причем делает это до тех пор, пока не убедится, что цены поменялись.).
Реализация «Виртуального» работника
Для использования «Виртуального работника требуется решить ряд задач:
- обмен сообщениями и файлами между разными сеансами 1С.
Для этого создал справочник «Пользователи». Код этого справочника = Имени пользователя 1С и при запуске сеанса связываю имя пользователя с определенным элементом из этого справочника. При запуске сеанса – прописываю каталог пользователя (для каждого пользователя должна быть своя) в элементе справочника "Пользователи", ассоциированного с сеансом. Обмен сообщениями между пользователями внутри базы происходит с помощью файлов - всегда могу положить файл с сообщением в каталог пользователя. Если мне надо пользователю отправить сообщение, то в папку нужного пользователя записываю файл-сообщение. Для создания заданий лучше создать отдельный каталог – это для случая если заданий много и их должны обрабатывать несколько «виртуальных» работников. Ниже на рисунке пример такого сообщения
- информирование пользователя на каком свете его задача поставленная «виртуальному» работнику
Для этого разработал отдельную компоненту, которая отслеживает файлы с заданиями и в режиме реального времени их отображает (пока ее не выложил), как выглядит, можно увидеть на рисунке ниже
В этой компоненте отображаются только задачи поставленные живыми пользователями «Виртуальному» работнику.
- оповещение пользователя о выполнении задачи
Если задача возникает по ходу работы и не ставится пользователем - оповещение может выполняться компонентой сообщения – в которой реализован механизм обратной связи (//infostart.ru/public/1505725/). Это окно сообщения живет параллельной жизнью с программой, т.е. менеджер может выставлять счет, а сообщение о чем-то будет находиться в параллельном окне, а потом из окна сообщения можно запустить действие определенное программистом - т.е. окно сообщения обладает обратной связью
- а как воспользоваться полученным результатом?
Результат сохраняем во временную (можно самим создать внутри каталога базы данных) папку с уникальным именем, в файле ответа задания запоминаем ссылку на данный файл (все пути надо прописывать относительно к базе данных). В компонентах, описанных выше – можно указать путь к файлу ответа и в этих компонентах имеется возможность вызвать обратную связь. При вызове обратной связи мы получаем данные из файла ответа и ссылки на созданные файлы (если они создаются) – а дальше обрабатываем их по своему произволу.
- отдельная задача это гарантированная работа «виртуального» работника. («Виртуальный» работник может зависнуть, не запуститься – как минимум реальные работники должны быть проинформированы об этом, как максимум «виртуальный» работник должен перезапуститься сам)
В 95% случаев помогает батник и планировщик задач, ниже пример батника, который запускается в случае отсутствия файл-флага – внутри каталога базы данных «quit.txt» и если не запущен сеанс пользователя Computer это наличие файла 1Cv7.LCK в каталоге пользователя
chcp 1251 > nul
Set Path01="D:\Базы 1с\1С_Производство\"
if exist %Path01%"quit.txt" goto end
if exist "D:\Базы 1с\1С_Производство\Users\Computer\1Cv7.LCK" goto UserOnLine
start /wait "•" "C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe" enterprise /D%Path01% /nComputer /pEdfsas
goto end
:UserOnLine
del "D:\Базы 1с\1С_Производство\Users\Computer\1Cv7.LCK"
:end
Для более надежной работы использую связку компоненту + программу (пока ее не выкладывал) которая отслеживает зависание сеанса 1С под определенным пользователем и в случае зависания 1С – жестко завершает процесс, что позволяет батнику перезапустить «Виртуального» работника.
Плюсы и минусы использования «Виртуального» работника
Плюсы
- экономия времени живых пользователей
- «Виртуальный» работник работает без выходных, отпусков и не просит кушать
- количество «Виртуальных» работников ограничено лишь возможностями платформы
- сокращается количество живых пользователей кому надо платить
- (из реальной жизни) бухгалтера и склад пробуют себя в роли помощников менеджеров
Минусы
- более сложная реализация для программиста
- более жесткая привязка к программисту
- не может решать творческие задачи
P.S.
Если статья заинтересовала – пишите, и тогда выложу мною писанные компоненты, предназначенные для работы с «Виртуальным» работником (отражающие текущие задачи, маяк, сигнализирующий, что 1С-ка зависла, монитор появления - исчезновения файла).
Также мною была написана компонента, позволяющая на базе 1Cv7.7 создать многопоточный сервер, работающий по протоколу TCP-IP, но это будет отдельная статья.
Для уменьшения нагрузки на базу и при наличии резервного сервера – часть задач может выполнять резервный сервер (физически размещенный в другом месте).