Имя: Пароль:
1C
 
Как проставить номер сообщения в план обмена?
0 Полотенчик
 
15.04.17
00:02
Если в плане обмена выбираешь измененные объекты методом ВыбратьИзменения(), то у него вторым параметром как раз указывается номер сообщения, который будет проставлен у выбранных данных. Но я хочу получить измененные данные с помощью запроса к таблице изменений, т.к. помимо самих данных в запросе надо получить еще дополнительные сведения. Как в таком случае проставить у измененных данных номер сообщения чтобы потом, после подтверждения загрузки данных, я мог убрать из плана обмена данный с этим номером сообщения?
1 Полотенчик
 
15.04.17
12:27
Ап. Неужели никто с обменами не работал?
2 Фрэнки
 
15.04.17
12:31
в самой таблице изменений не должно быть номера сообщения обмена. Там есть просто изменения, которые сами себя перезатирают, когда изменения происходят вновь
3 Фрэнки
 
15.04.17
12:32
узел обмена есть. А номера сообщения не должно быть
4 Полотенчик
 
15.04.17
13:54
(2) Как это не должны быть? А как тогда понять что уже было отправлено чтобы после подтверждения удалить?

Вот таблица изменений до отправления, номер сообщения:
https://yadi.sk/i/H2XC4bdy3GzdnF

Вот выбрал изменения с помощью метода ВыбратьИзменения(), присвоил номер сообщения 1 (для примера. мне надо проставлять номер сообщения без метода ВыбратьИзменения()):
https://yadi.sk/i/H2XC4bdy3GzdnF

Далее когда удаленный сервер пришлет подтверждение, что сообщение номер 1 успешно загружено, я удалю все изменения с номером 1, и они передаваться не будут.
5 Полотенчик
 
15.04.17
13:55
Зачем вообще тогда запросы к таблицам изменений, если проставлять номера сообщений можно только выборкой методом ВыбратьИзменения()?
6 Полотенчик
 
15.04.17
13:57
(4) вторая ссылка: https://vk.cc/6w0B1t
7 Мимохожий Однако
 
15.04.17
14:23
(5) зачем тебе этот несчастный номер?
8 Полотенчик
 
15.04.17
16:22
(7) затем, чтобы сначала пометить то, что было отправлено в другое место, а затем, при получении подтверждения успешной загрузки, то, что отправлено убрать из списка изменений
именно таким же образом работают планы обмена..
9 Beuenj
 
15.04.17
16:37
>> Но я хочу получить измененные данные с помощью запроса к таблице изменений, т.к. помимо самих данных в запросе надо получить еще дополнительные сведения

Извини глупый вопрос, но непонятно, что тебе надо. Нужны дополнительные данные? Ну получи их отдельным запросом?
10 Полотенчик
 
15.04.17
17:03
(9) Пример: есть контрагент, есть его адреса, контакты, хранящиеся в регистрах. В 1С добавляют нового контрагента или меняют адрес или еще что-то - надо передать этим данные в другое место (левая база, не 1С; формирую xml в нужном формате, и его отдаю через веб-сервис).
Для этого регистрирую в плане обмена изменение контрагента, затем когда сторонняя база делает запрос на веб-сервис "ДайНовыхКонтрагентов()" я в 1С делаю запрос:
    "ВЫБРАТЬ
    |    КонтрагентыИзменения.Ссылка,
    |    КонтрагентыИзменения.Ссылка.Наименование КАК Наименование,
    |    КонтрагентыИзменения.Ссылка.ИНН КАК ИНН,
    |    КонтрагентыИзменения.Ссылка.ОсновнойБанковскийСчет.Банк.Нименование КАК БанкНаименование,
    |    КонтрагентыИзменения.Ссылка.ОсновнойБанковскийСчет.НомерСчета КАК НомерСчета,
    |КонтактнаяИнформация.Представление  КАК Адрес
    |ИЗ
    |    Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |        ПО КонтрагентыИзменения.Ссылка = КонтактнаяИнформация.Объект";

В результате у меня есть и измененные элементы, и все доп. данные, которые необходимы.
Осталось перебрать результат запроса, сформировать xml и сказать плану обмена: установи у такого-то узла у элемента Выборка.Ссылка номер сообщения "1". Но такого, видимо, нет...
Надо отдельно делать выборку изменений:
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(МойУзел, МойУзел.НомерОтправленного + 1);
    Пока ВыборкаИзменений.Следующий() Цикл
        ....
    КонецЦикла;

Но здесь же в цикле я не буду получать доп. данные, т.к. запросы в цикле - бред.. Получается единственный вариант - выгрузить результат предыдущего запроса в таблицу значений, а в этом цикле искать строку с измененными данными в этой таблице, и уже тогда формировать xml, которую передавать на сторонний сервер.

Но зачем делать две выборки изменений когда в запросе уже все получено?
Понятно?
11 Полотенчик
 
15.04.17
17:07
Зачем вообще нужен запрос к таблице изменений, если потом это никак нельзя состыковать с регистрацией изменений и отправкой сообщений в удаленную базу?
12 Фрэнки
 
15.04.17
19:34
(11) возьми старую версию какого-нибудь Бит-Финанс (для примера) и увидишь там весь этот ужас, который тебе сейчас покоя не дает. Если сравнишь это с текущей версией, то там это видно через регистры сведений с префиксом Удалить...

А подробно обсуждать лень. Но я бы с такой трактовкой обмена не заморачивался.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.