Имя: Пароль:
1C
1C 7.7
v7: Обмен УРБД по запросу пользователя
0 tgu82
 
25.05.20
22:35
Кратенько )
У нас обмен с ПБ устроен так:
1. по нажатию кнопки в 1С программа создает файл "обмен"
2. каждые 5 минут в планировщике отрабатывает задание которое ищет в определенной папке этот файл
3. если находит то создает сигнальный файл, удаляет файлик "обмен"
4. Делает загрузку-выгрузку на ЦБ.
5. запускает рдп-файл 1-ой ПБ (в пользователе домена прописано что при его запуске его рдп отрабатывает обмен уже на 1-ой ПБ (загрузка и выгрузка)
6. после выполнения рдп с 1-ой ПБ аналогичные действия делаются с остальными
7. после отработки всех рдп на ПБ запускается еще один цикл обмена на ЦБ. Затем сигнальный файл удаляется и обмен закончен!!!

Но не нравится то что обмены на ПБ делаются последовательно а не одновременно. Решил использовать ФТП обмен. И столкнулся с тем
что цикл на ЦБ нажатие кнопки инициирует как раньше а вот дальше малость затык. Даже если я перед первым шагом (цикл обмена на ЦБ) на ФТП-сервер
повешу файлик и пусть я его планировщиком на ПБ буду искать на фтп-сервере каждые скажем 5 минут и найдя инициирую цикл обмена одновременно на каждой ПБ,
но как мне заставить программу сделать еще один цикл на ЦБ и после этого удалить сигнальный файл с ФТП-сервера ???

Как сейчас просто:
Создал сигнальный файл в папке доступной всем ПБ и ЦБ - начало обмена
- цикл обмена на цб
- цикл обмена на 1 бп
- цикл обмена на 2 пб
.............
- цикл обмена на 100 ПБ
цикл обмена на ЦБ
удаление сигнального файла - конец обмена

Просто если сделать руками одновременный обмен во всех ПБ то весь обмен быстрее получается раза в 2-3
1 tgu82
 
25.05.20
22:40
(0) если обмен не по запросу а асинхронный по таймеру то ситуация конечно упрощается но у нас именно по запросу, так вроде удобно уже много-много лет.
2 Ёпрст
 
25.05.20
22:58
Достаточно заместо файлика блокировать элемент справочника, как он освободился, начинать свой обмен
3 Ёпрст
 
25.05.20
22:59
при аварийных вылетах, блокировка сама снимается
4 Cthulhu
 
26.05.20
00:30
параллельные на пб - запускай сразу все рдп в среде, которая запускает джаваскрипт/вбскрипт/командник, который выполняет автообмен, а потом завершает сеанс.
5 tgu82
 
26.05.20
08:03
(2) Доброе утро! Вопрос в том сделать так чтобы цикл обменов закончился обменом на ЦБ,
то есть:
1. Обмен на ЦБ
2. Все обмены на ПБ
3. Обмен на ЦБ

(4) Вот это интересно а не можете чуток расшифровать Вашу идею?
А если так:
Запускаю бат-файл
1. Обмен на ЦБ
2. все обмены на ПБ через РДП
Затем команда wait, то есть будет ждать пока закончится последний обмен на ПБ
3. Обмен на ЦБ
Так пойдет?
6 tgu82
 
26.05.20
08:06
(5)+ Сейчас у меня после каждого запуска РДП стоит wait вот это наверное зря надо ставить после последнего.
Но к обмену на ФТП это не относится. А мне бы надо подобным образом обмен именно через ФТП.
7 tgu82
 
26.05.20
08:12
(5)+ Ошибся у меня в батнике кругом стоит :SLEEP а не WAIT
8 tgu82
 
26.05.20
08:30
(7)+ SLEEP - это утилита из resource kit
9 Bigbro
 
26.05.20
09:39
(6) если поставишь после последнего - будет ждать только его выполнения.
если при этом какой то из обменов стартовавших раньше не закончился, то получится не очень.
все обмены с периферийками в один cmd с ключом /wait а внутри него уже все обмены запускать без wait и дополнительно в нем организовать контроль завершения, хоть по тому же созданию чтению файла хоть как то еще. завершаем это вложенной задание когда отработал последний, вроде как получаем то что нужно было.
последовательность сохранена, обмены с ПБ прошли параллельно, проверки на окончание обменов ПБ прошли.
10 tgu82
 
26.05.20
10:24
(9) Спасибо! А почему в CMD а не в bat?
Ну да мысль такая была. Сделать два бат-файла.
начальный обмен в ЦБ по sleep ждет, а потом 2-ой батник запускается с ключом wait,
а внутри второго батника никаких доп. ключей и нет
11 Bigbro
 
26.05.20
10:25
да без разницы, нравится бат пусть будет бат
12 tgu82
 
26.05.20
11:04
(12) Давно делал забыл уже
:sleep - это ж не из винды?

Да и вообще двоеточие признак метки но SLEEP - это же программа.
Погуглил - не удовлетворился
13 tgu82
 
26.05.20
11:14
(12)+ Есть еще нюанс. Если на какой-то ПБ пропал интернет то обмен вместо того чтобы загрузить с тех ПБ что обменялись - заткнется и дальше не двинется.
14 HawkEye
 
26.05.20
11:15
(0) где-то на середине уже запутался...
у меня сделано так: по кнопке "обмен" из режима предприятие, текущая конфа забирает файл (почта, шара, фтп - не важно) и обновляет данные, если с данными пришли метаданные, то боевая конфа стартует конфу для обмена, а сама закрывается... конфа для обмена обновляет метаданные, закрывается и стартует боевую конфу...

в центре все работает по расписанию, периодически запускается батник и занимается обменом...
15 tgu82
 
26.05.20
11:17
(14) У нас запускается в центре по запросу и если на магазинах захотели запустить обмен - то пишут сигнальный файл, ЦБ его проверяет все время на наличие и если увидела то тут же запустила весь цикл обмена
16 tgu82
 
26.05.20
11:19
(15) Если захотели запустить в ЦБ то точно так же создается сигнальный файлик и бат-файл начинает цикл обмена
1. Обмен ЦБ
2. Обмен 1 ПБ
3. Обмен 2 ПБ
............
Ну и потом опять обмен ЦБ
17 tgu82
 
26.05.20
11:24
(14) А вы парсите архив обмена ведь иначе как увидеть что там есть 1сv7.md?
18 HawkEye
 
26.05.20
11:36
(15) при наличии промежуточной базы, логику можно любую закодить....
(17) смотрю лог обмена, если там есть "Загрузка измененной конфигурации не может быть произведена при доступе к Информационной Базе в разделенном режиме!" - значит пришли обновы....

    ФайлЛога = СоздатьОбъект("Текст");
    ФайлЛога.Открыть(ФайлЖурнала);
    Для к = 1 по ФайлЛога.КоличествоСтрок() Цикл
        СтрокаЛОга = ФайлЛога.ПолучитьСтроку(к);
        СтрокаПоиска = "Загрузка измененной конфигурации не может быть произведена при доступе к Информационной Базе в разделенном режиме!";
        Если Найти(СтрокаЛОга, СтрокаПоиска) > 0 Тогда
            ЗаписьЖурналаРегистрации("Пришли обновления: " + ФайлЖурнала,,,,);
19 tgu82
 
26.05.20
14:01
Хреновость обмен через запуск рдп-шек для того чтобы запустиь обмен вв ПБ - в том что из-за того что файл для загрузки вна ПБ лежит в сетевой папке ЦБ. Если в ПБ нормлаьно начался обмен а потом интернет пропал то с обмен намертво зависает и потом приходитя руками все это выправлять. Такое по счастью бывает крайне редко но бывает. Вот я и хотел приспособить ФТП для для этих целей.
1. Загрузил из ФТП в папку обмена все файлы для загрузки в ЦБ
2. Сделал обмен на ЦБ
3. Выгрузил на ФТП все файлы выгрузки для ПБ.
4. видимо в РДП в среде запуска придется прописать загрузку файлов из ФТП для ПБ в папку на ПБ. А уже потом запускать обмен на ПБ
5. выгрузить файл выгрузки с  ПБ  в ФТП.
.....
и так по всем ПБ
6. Загрузка через ФТП файлов выгрузок с ПБ в папку обмена ЦБ и обмен с ЦБ
Сеанс обмена завершен
20 HawkEye
 
26.05.20
14:12
(19) я только не понимаю, при чем тут рдп))
21 Kigo_Kigo
 
26.05.20
14:44
Скачайте, установите УРБД мастер, и не мучайтесь
22 tgu82
 
26.05.20
14:51
(20) Да при том что у меня все в впн и чтоб инициировать запуск обмена на ПБ я запускаю из ЦБ РДП где указываю пользователя домена для данной ПБ, а в среде запуска пользователя указано  что надо запустить бат-файл для обмена.
(21) Я не мучаюсь и уменя много лет все нормально пашет но вот пришел к выводу что приятнее было бы так как я описал. Хотя от запуска РДП для каждоц ЦБ вряд ли избавлюсь все равно
23 Злопчинский
 
26.05.20
21:21
(21) а что дает урбд мастер?
24 tgu82
 
27.05.20
07:50
(23) Ну вроде как он все эти заморочки обменные, транспорт обмена берет на себя.
Вот простая вещь - как с помощью ncftp проверить есть на фтп файл обмена?
25 HawkEye
 
27.05.20
08:41
(22) все равно не понятно, но бог с тобой )))
26 tgu82
 
27.05.20
08:55
(25) Да все понятно как раз. Инициируется обмен по кнопке, делается обмен на ЦБ а затем с помощью последовательного запуска рдп-файлов запускается обмен на каждой ПБ, ну и после того как все они пройдут благополучно - опять делается обмен на ЦБ - таким образом цикл обменов завершен
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn