#0
by bolobol
Приветствую! Что-то никак мне не решить задачку: Есть план обмена в котором регаются изменения по регистру сведений. Периодически, запросом по таблице изменений выгружаю данные насторону. Пока выгружаю, новая партия данных поступает в рег и к выполнению команды ПланыОбмена.УдалитьРегистрациюИзменений(Узел) - удаляются и те изменения, что я выгрузил и те, что во время выгрузки появились новые. У меня SQL, блокировки по записям. Делал: - бесполезняк, данные добавляются, таблица изменений наполняется Делал 2: НачатьТранзакцию; Запрос... Выбрать МАКСИМУМ(ЗначенияНаВыгрузкуИзменения.НомерСообщения) ДЛЯ ИЗМЕНЕНИЯ - но толку тоже никакого - данные _добавляются_ - таблица изменений наполняется Как же заблочить всю таблицу Изменений или весь РегистрСведений, шоб аж добавить ничего нельзя было до конца транзакции?
#1
by Maxus43
>>Периодически, запросом по таблице изменений выгружаю данные насторону. что мешает делать классически, не изобретая велосипеды?
#3
by Maxus43
ВыбратьИзменения и т.д., проставляется номер сообщения, удаление регистрации происходит по номеру сообщения а не всё что там есть, короче стандартно
#4
by bolobol
Номер сообщения всегда 0. Удаляя по номеру сообщения 0 - удаляются также все записи. И те что добавились за время выгрузки - тоже. А как заставить план обмена генерить номера сообщений не НОЛЬ - не ясно, кстати, ещё актуальный вопрос.
#7
by bolobol
Икс... Узелов два... две... двое)) Но причём здесь хмл? Без него (не создав его) нельзя корректно пользоваться планом? С какой стороны курить-то это?
#8
by Maxus43
ну курить надо хотя бы проф разработку, главу по планам обмена, раз вобще не в зуб ногой)
#9
by bolobol
Ну, это не ответ)) А по сути вопроса? План обмена есть, изменения заполняются. А выбрать изменения на текущий момент, так чтоб их отрегить от плана - никак что ли?
#10
by SUA
1) ПланыОбмена.ВыбратьИзменения с нумерацией сообщений или 2) Фоновый (2й) узел обмена - начало обмена -> запросом выбрать изменения из 1го, перенести во 2й, удалить из 1го -> обменяться со 2м узлом (с удалением регистрации при успешном обмене оттуда)
#12
by hhhh
выкинуть ПланыОбмена.УдалитьРегистрациюИзменений(Узел) удалять регистрацию по каждому объекту.
#13
by bolobol
1) - изменения выбираются, и пока я этот список отправляю, в таблице изменений появляются ещё изменения, которые тоже с номером НОЛЬ! Под конец, удаление по номеру НОЛЬ - очищает _всю_ таблицу изменений. 2) Здесь не понял, чем это отличается от 1 - пока перегружаю, так там всего понадобавляется... Пообъектно регистрацию не удалить, т.к. пока я выгружаю один этот объект и перехожу к строке - удалить из изменений этот объект = пользователь снова может записать изменение этого объекта! И, получается, выгрузил я старую запись, а регистрацию удалил и по обновлённому. Вот где собака порылась!
#15
by Maxus43
Для этого и сделан механизм НУМЕРАЦИИ сообщений, чтоб были согласованные данные, я не понимаю о чем тут речь господа, всё написано давно и давно реализовано во всех типовых и так далее
#16
by bolobol
Данная вероятность в день отрабатывает на 30%. Забить != правильно. А надобно именно правильно и максимально прозрачно. Что с этим механизмом? Изменения регистрируются платформой, а увеличить с определённого момента номер сообщения-то как платформу заставить? Отсюда и речи, что ответа нет, а вопрос есть! И в типовых механизмах ежедневно приходится по одному-двум объектам повторно регать изменения - вот и думаю, не косяк ли там тот же закрался(?)
#17
by Maxus43
>>И в типовых механизмах ежедневно приходится по одному-двум объектам повторно регать изменения что за ересь то? >>Изменения регистрируются платформой, а увеличить с определённого момента номер сообщения-то как платформу заставить? Синтаксис: Описание: Формирует выборку измененные данные для передачи их в тот или иной узел плана обмена. При этом в процессе выборки изменений в записи регистрации изменений проставляется номер сообщения обмена данными, в котором должны передаваться изменения. Номер сообщения в записи регистрации проставляется для того, чтобы при подтверждении приема сообщения, в котором передавались изменения соответствующие записи регистрации изменений были удалены и в дальнейшем изменения больше не передавались.
#18
by Maxus43
+ номер проставится только у тех, которые на данный момент будут в Выборке. Если в процессе кто-то запишет тот же элемент - номер сообщения у него сбросится, и при удалениии регистрации при получении ответа - он не удалится, и будет послан с обменом ещё раз. Так же если заключить всё в транзакцию - скорей всего юзер и не сможет записать элемент во время выполнения выгрузки
#21
by Maxus43
а почему странно? это стандартный механизм планов обмена, платформенный. Получив ответ от другой базы о загрузке - сама и удалит всю регистрацию правильно
#22
by bolobol
Не в этом смысле "Странно". Я пишу: Выб= ПланыОбмена.ВыбратьИзменения(Узел, 1); И у меня в таблицах все записи стали с номером 2... А: - нормально работает, номера НОЛЬ сменились на 2 и все двойки остались. В общем, прикол с 1 - не понял, ну да ладно))
#23
by ilya_i
интересно становиться когда надо дозировать выгрузку, например по времени. Было такое что накопилось изменений на два дня непрерывной выгрузки, а 1С столько работать не может, то ключ потеряет, то соединение.
#24
by SUA
вариант 2 - выбираешь изменения (например объекты #1-#5) - регистрируешь во 2й план обмена (объекты #1-#5) - удаляешь из 1го (объекты #1-#5) - делаешь что угодно со 2м после п1 (известен состав объектов к переносу в фон) - в 1й план обмена может добавляться что угодно работает но за номерацией следить самостоятельно
#25
by bolobol
Вот, кстати, да - теперь понятно применение второго варианта, Спасибо! Однако... ВыбратьИзменения(<Узел>, <НомерСообщения>, <ФильтрВыборки>) <ФильтрВыборки> - это как раз то, чем и можно размер порции ограничить. Отобрал всё из узла в сообщение №2, получил первые Н объектов пакета и отобрал их в сообщение №3, третье и отправил. И так до тех пор, пока объектов для обмена не будет меньше Н, что уйдут за один приём. Вроде, должно взлетать)
#26
by ilya_i
Проблема в удалении регистрации, удаляя регистрацию сообщения номер 3, удалиться регистрация всех младших сообщений.
#28
by ProgAL
Проверил на таблицах sql сервера как регистрируются данные при отправке. Вам подойдет следующий код. Взято из книги Гончарова. Ключевой момент - после записи выходного файла выполняется ПланыОбмена.УдалитьРегистрациюИзменений(ВыбУзел, НомерСообщения); . Удалятся изменения только для тех элементов, которые содержали номера сообщений не превосходящие номер сообщения, сгенерированный во время метода ВыбратьИзменения, и не будут удалены те, которые за время выгрузки приобрели NULL в качестве номера сообщения (т . е. за время выгрузки были еще раз изменены). Процедура КнопкаВыполнитьНажатие(Кнопка)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Таблицы, таблицы, таблицы... Будь они неладны
- Блокировка ячейки строки табличной части документа в зависимости от другой...
- Блокировка "Регламентированный отчет"
- Как имея ссылку на строку таблицы значений получить название самой таблицы
- реструктуризация таблицы регистрации изменений
- Отличие "Блокировка регламентных заданий включена" и "Блокировка начала сеансов"
- Передача таблицы таблицы значений с сервера на клиент
В этой группе 1С
- В СКД обрабатывать документы только с заполненной табличной частью, как ?
- Выражение представления заголовка ресурса в СКД
- Ошибка разбора SOAP сообщения: неверная версия сообщения.
- v8: ОбменДаннымиXML нужно управлять выгрузкой удаления объекта
- Управление торговлей 11.1 Платежный ордер:Поступление
- v7: Получить значение периодической константы по ее идентификатору
- Дебиторка с отсрочкой по договорам одним запросом.
- БП 20. Печать НД с PDF417. Ошибка при вызове метода контекста (Prewiev File 1C)
- 1C + Asterisk
- СКД, расшифровка по регистратору
- Ошибка использования операции "ОБЪЕДИНИТЬ" ("UNION"). Допустимо объединение 256
- Ошибка преобразования данных XDTO: Текст: false
- 1с 8.2: как активизировать окно формы 1с поверх остальных программ?
- Подключение внешней компоненты веб-клиент
- как узнать в управляемых формах что документ создан путем копирования?
- СКД: программная установка ограничения доступности полей
- v8: Правильная организация структуры по расчетам
- Как в запросе указать условие по типу регистратора?
- 1С 8.3 Как вывести в панель навигации то что в все функции- Стандартные???
- как из конфигуратора запустить отладку от имени другого юзера