Имя: Пароль:
1C
 
Как в 1С отслеживать изменение внешнего файла
0 АртемП
 
05.03.21
13:33
Прошу помочь советом, как отслеживать изменение внешнего файла.
Ситуация следующая.
Подключаемся к системе быстрых платежей Сбера - P2P. Сбер дал утилиту обмена и пример связи ее с 1С.
Если кратко - с помощью WScript.Shell запускается exe-файл в который передаются параметры для отправки денег.
проблема в том, что этот файл не возращает результат.
Т.е. появилось окно отправки, вы подтверждаете, а результат пишется в текстовый лог файл.
Человек при отправке видит результат - успешно/отказ и причина отказа.
но надо записать это в 1С. А 1С об этом не знает - потому что результат записан в файл лога.
В Сбере сказали - так сделано, потому что 1С не смогли подружить со своей утилитой.
Получается надо постоянно опрашивать этот лог файл - изменился ли он?
Других нет вариантов?

Если только путем опроса этого файла, то как лучше сделать?
Не буду же я каждую секунду опрашивать? А как часто ?
На транзакцию со Сбером дается 9 минут.
Вероятно нужно запускать регламент в момент запуска exe и в течении 9 минут вести опрос ?
1 polosov
 
05.03.21
13:36
Используй ЗапуститьПриложениеАсинх или ЗапуститьПриложение с параметром ДождатьсяЗавершения
2 ДенисЧ
 
05.03.21
13:36
Можно изучить АПИ ОС и написать ВК, которая будет вешать хук на файловую систему и вызывать событие при изменении файла...
3 АртемП
 
05.03.21
13:43
(2)не подходит
4 АртемП
 
05.03.21
13:44
(1)спасибо попробую
5 МихаилМ
 
05.03.21
13:52
откройте для себя wmi подписки
6 АртемП
 
05.03.21
13:57
(5)где это в 1С ?
Что за дурацкая привычка говорить намеками.
Сказали A - говорите Б
7 polosov
 
05.03.21
14:01
(5) А если у человека Linux или MacOS?
8 Масянька
 
05.03.21
14:02
(6) Вот хамить не надо.
9 МихаилМ
 
05.03.21
14:03
(6)я пишу для специалистов, которые что-то падзабылми, упустили. к Вам мой пост не относился.он для тех , кто будет искать подобные темы. ВЫ их найти не смогли.
10 Базис
 
naïve
05.03.21
14:06
(6) Это можно.
А-Б.
АртемП - Б(в общем, не так много вариантов).
11 Garikk
 
05.03.21
14:11
(7) есть аналог хуков файловой системы и в этих ОС
p.s. правда там свои приколы, как минимум в линуксе
12 МихаилМ
 
05.03.21
14:14
(7) в (0) был указан "WScript.Shell". а он - только в вин
13 АртемП
 
05.03.21
14:37
да запускается WScript.Shell
вот так
   WshShell = Новый COMОбъект("WScript.Shell");
   oE = WshShell.Run(ДиректорияПрограммы + " /new """ + ордер + """")
14 АртемП
 
05.03.21
14:41
(1)>> Используй ЗапуститьПриложениеАсинх или ЗапуститьПриложение с параметром ДождатьсяЗавершения

А как это сделать для кода

WshShell = Новый COMОбъект("WScript.Shell");
оE = WshShell.Run(ДиректорияПрограммы + " /new """ + ордер + """")
15 mistеr
 
05.03.21
14:49
(0) СБП она же вроде для физлиц. Зачем ее к 1С подключать?

Обнальные схемы мутите? :)
16 arsik
 
гуру
05.03.21
15:07
(0) Мне кажется этот скрипт с утилитой, только лишь для тестирования. На самом деле там все отправляется через http. Вам к этому http нужно апи, и через это апи прикрутить в 1С напрямую, без прокладок.
17 АртемП
 
05.03.21
17:34
(16)нет. общался с программистом сбера и жаловался, что нет события возврата.
Он сказал в прошлом году был возврат ответа в 1с. но плохо работало. решили писать в лог.
А программисты 1с пусть как хотят - так и парсят
18 АртемП
 
05.03.21
17:35
(15) какие обнальные. Офицально подключаем - сбер дал. Тока там почти нет поддержки.
Небольшая консультация у программиста Сбера.
Куча документации - не асилил
и убогий пример кода для 1с.

А отлавливания событий и парсера - ничего нет - сами напишите.
тока пример кода отправки транзакции по каналу
19 Kassern
 
05.03.21
17:40
(14) А в СП уже прочитал, что ЗапуститьПриложениеАсинх делает и какие у него параметры? Мне кажется, если бы прочитал, то не писал бы дальше про WshShell = Новый COMОбъект("WScript.Shell");
20 АртемП
 
05.03.21
17:44
т.е. напрямую запускать приложение ? Без WshShell = Новый COMОбъект("WScript.Shell") ?
Это программист Сбера рекомендовал.
Но сказал, что плоховато знает 1с.
Возможно и можно обойтись без WScript.Shell
21 Dzenn
 
гуру
05.03.21
17:44
Рассчитывай контрольную сумму файла и запоминай её. Как только она меняется - пора считывать изменения.

Функция КонтрольнаяСумма(ДвоичныеДанные)
    
    Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
    Хеширование.Добавить(ДвоичныеДанные);
    КонтрольнаяСумма = СтрЗаменить(Строка(Хеширование.ХешСумма), " ", "");
    Возврат КонтрольнаяСумма;
    
КонецФункции
22 АртемП
 
05.03.21
17:45
(21)спасибо! Да в принципе можно по дате времени файла сравнивать.
23 Dzenn
 
гуру
05.03.21
17:49
(22) можно и по дате/времени, конечно, но дата/время - это всё-таки относительный показатель, а контрольная сумма - абсолютный
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший