Имя: Пароль:
1C
1С v8
КД 2 ошибки
0 breezee
 
16.12.17
10:57
Добрый день!
Нужно логировать ошибки обмена в конвертации при загрузке и получать успешно загруженные данные, чтобы удалять их из узлов обмена.
Подскажите, пожалуйста:
1)Можно как-то в конвертации данных понять, что объект был записан успешно? Записан успешно - значит при записи не выпал в исключение
2)Можно в конвертации после загрузки получить список загруженных объектов?
3)Можно в конвертации после загрузки получить список ошибок, по объектам, которые были записаны не успешно? Посмотрел в обработке загрузки данных - там ошибки пишутся в файл. Файл парсить не хочу, ибо не знаю структуру, да и сложно это(наверное)
1 breezee
 
16.12.17
11:18
ап)
2 breezee
 
16.12.17
11:26
Почему над темой появилась стрелка вниз? Не могу поднимать тему?
3 jsmith82
 
16.12.17
11:48
2. Добавь в параметры коллекцию (таблицу значений), в правиле После загрузки объекта в Конвертации добавляй туда элементы (строки) НовСтр = Параметры.Таблица.Добавить(); НовСтр.Объект = Объект;
4 tty12
 
16.12.17
11:53
(0)
1. Да можно. Сделать Объект.Записать(). Только зачем?!
2. Можно. В конвертации в обработчике ПослеЗагрузкиОбъекта своим кодом формируй список с загруженными объектами.
3. Самый простой вариант, кмк, это как-раз парсить лог. Там и парсить особо нечего. По умолчанию туда только информация по ошибкам и попадает. Ах да, еще информация о начали и окончании выгрузки.
5 tty12
 
16.12.17
11:56
"1. Да можно. Сделать Объект.Записать()" - делать в попытке.
6 breezee
 
16.12.17
12:01
(4) (5) Спасибо! Так и сделаю.
На вопрос "Зачем" - мне надо собрать список объектов, которые выгрузились и передать в источник. Если объект выгрузился - удаляю из узла регистрацию объекта. Вот только не знаю, "после загрузки" отработает ли для удаения объекта из базы
7 tty12
 
16.12.17
12:12
(6)
По сути тебе нужно парсить лог на ошибки и сравнить со списком, который сформируешь при помощи (3). Это чтобы не делать лишних Объект.Записать()...
8 breezee
 
16.12.17
12:26
(7) Это лог надо смотреть, структуру его и разделители. Я с логами технологического намучался уже)
9 breezee
 
16.12.17
12:29
(8) еще знать где он храниться, что делать, если он уже открыт - кароче геморно)
10 tty12
 
16.12.17
12:52
Если без логов, тогда, на вскидку, но мне не очень такой вариант:

как выше писали формируешь тз с загруженными объектами и через попытку для каждой строки делаешь Объект.Записать(), если попал в исключение, то удалить строку из ТЗ. В итоге у тебя останутся только загруженные объекты.
11 h-sp
 
16.12.17
13:38
(6) используй план обмена. Он как раз это и делает.
12 breezee
 
16.12.17
16:39
(11) Но там есть возможность записать только номер сообщения. Или я что-то не понимаю. Вот мой алгоритм, как его перевести на плане обмена?
1)В источнике запускаю программно обработку обмена данными
2)В источнике, в обработке обмена данными указываю правила и вызываю выгрузку
3)В источнике по правилам выбираются все изменения по узлу обмена и как-то обрабатываются, согласно правилам. Формируется файл с данными.
4)В источнике, согласно правилам обработчика "После выгрузки" получаю файл, который выгрузил.
5)Вызываю веб-сервис базы-приемника
6)В веб-сервисе базы приемника читаю файл
7)В базе приемника, по обработчике правил "после загрузки" вызваю "объект.Записать()" при успешной записи = сохраняю в массив успешной записи
8)В базе приемника в правилах после загрузки данных вызывается обращение к веб-сервису источника. В обращении передаю массив загруженных данных
9)В базе источника удаляю изменения в узле обмена по данным.
Вот так все вышло и как использовать планы обмена на стороне приемника я не знаю(
Алгоритм сыроват, не знаю, как передавать удаление обратно и может незначительно измениться при реализации и тестировании
13 hhhh
 
16.12.17
20:11
(12) ну это вы вручную решили, а план обмена это делает автоматом. у ваших изменений есть номер сообщения, когда приходит ответ от приемника, все объекты с этим номером снимаются с регистрации. Поэтому выкиньте свои 12 пунктов и перестаньте изобретать велосипед.
14 breezee
 
17.12.17
09:33
(13) А не для РИБа тоже работает? У меня разные метаданные могут быть в приемнике и источнике
15 rozer76
 
17.12.17
11:17
(14) смотрите в сторону БСП обмен по правилам. Хоч на кд2 хоч ED если кд3 более знакомо а велосипедить в наше время негоже. Также и коллизии и ошибки проведения все учтено цже в бсп... в ютубе набери в поисках "neti бсп"
16 h-sp
 
17.12.17
11:39
(14) причем тут метаданные? У вас таблица зарегистрированных изменений. У каждого есть номер сообщения. Например вы делаете выгрузку сообщения № 17. В нее попадают все изменения с этим номером. Когда приходит ответ (при загрузке) - всё нормально, изменения с номером 17 автоматически снимаются с регистрации. А в следующую выгрузку уже попадают изменения с номером 18. И плану обмена абсолютно по барабану, какие там метаданные.
17 breezee
 
17.12.17
13:42
(16) Посмотрел пример здесь Книга знаний: УРБД на v8 за четыре шага.
Там не то что мне надо. Вот насоздавал юзер 100 элемнтов справочника за 10 минут. Каждые 10 минут запускается обмен. Из этих 100 элементов 1 был заблокирован, не записался. Если я правльно понял -   ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); вывалиться с ошибкой на этом элементе. Мне 100 элементов заново загружать надо? Я не понимаю, как внутри система применят изменения и как мне сообщить источнику о том что все ок(99 элементов передались без ошибок0 и что делать, если не все ок(ошибка по  элементу была(? Может, скинете статью, где все разжевано?
18 h-sp
 
17.12.17
13:54
(17) ну пусть 100 элементов загружает, это нормальная ситуация.чего то вы фигней страдание. Такая ситуация может произойдёт раз в год, а вы из-за неё сейчас кучу ненужного кода присобачите.
19 breezee
 
17.12.17
13:56
(18) А ведь вы правы, спасибо! Завтра согласую с начальником, буду настаивать на вашем варианте)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.