Имя: Пароль:
1C
 
Как правильно организовать работу с планом обмена?
,
0 DTX 4th
 
18.09.20
12:24
Пишу модуль, который будет выгружать изменения номенклатуры на сайт.

Создал план обмена, добавил номенклатуру и справочник упаковок с авторегистрацией.

В момент выгрузки нужно понять номер последнего отправленного сообщения на сайт, выбрать все изменения после него, по этому списку получить список номенклатуры (выгружать надо измененную номенклатуру + номенклатуру, у который изменены упаковки).

В моей голове выглядит так:
1. Получаем номер последнего отправленного сообщения: N
2. Выгружаем все изменения от N + 1 и дальше
2.1. Получать изменения запросом или через ПрочитатьИзменения (или что там у плана обмена есть, не помню)?
2.2. Нужно иметь в виду, что в момент выгрузки могут появиться новые изменения, и важно не затереть их в следующем шаге
3. Выгружаем все это дело на сайт. Если сайт сказал, что он принял изменения, мы удаляем из плана обмена все эти изменения от N+1 до последнего на момент получения (с учетом 2.2.)
3.1. Каким образом это правильно сделать?

Для хранения номера последнего отправленного сообщения, если я правильно понимаю, отдельный регистр не нужно. Вроде в плане обмена можно хранить эту инфу.

Прокомментируйте пожалуйста, чтобы я понимал, куда двигаться дальше.
Спасибо
1 ДенисЧ
 
18.09.20
12:26
А чем просто ВыбратьИзменения() не катит?
2 DTX 4th
 
18.09.20
12:34
(1) Видимо, катит.
Года пол назад последний раз работал с планом обмена - уже успел все забыть.

Т.е. я в ВыбратьИзменения() передаю номер сообщения, которое сейчас будет выгружено. Откуда мне взять это номер?
И как потому удалить все изменения с этим номером? Что-то не вижу в СП
3 Timon1405
 
18.09.20
12:37
читать "проф. разработка: Глава 19. Обмен данными" до полного просветления
4 Web00001
 
18.09.20
12:37
(2)Там вроде как получить изменения и возвращает этот номер увеличивая его.
5 Web00001
 
18.09.20
12:38
(3)+1 там очень подробно написано. Напиши на почту, кину в тебя pdfкой.
6 VladZ
 
18.09.20
12:46
(0) "В моей голове выглядит так:" - корявенько всё выглядит в твое голове.

Должно быть так:
1. Получаем список зарегистрированных объектов.
2. Выгружаем.
3. В случае успешной загрузки - очищаем изменения по узлу.

Всё! В топку все заморочки с "номер последнего отправленного сообщения".
7 DTX 4th
 
18.09.20
12:47
(3) Так тут инфы то на лист А4 в виде презентации.. Разве нет?

(4) Не, выборку возвращает. Нужно передавать номер сообщения, которым будут помечены выгружаемые данные

(5) Написал
8 DTX 4th
 
18.09.20
12:48
(6) Ну конечно
Каким образом предлагаешь изменения по узлы очищать? Если по ссылкам, то см. пункт 2.2.
9 ДенисЧ
 
18.09.20
13:05
ЗАчем читать профразработку? В СП есть

<НомерСообщения> (обязательный)
Тип: Число.
Номер сообщения обмена данными, в *который будут помещены выбранные изменения*.
10 hhhh
 
18.09.20
13:07
(8) в типовых обменах всё это реализовано. И пункт 2.2 тоже. Зачем тебе свой велосипед придумывать?
11 Dmitry1c
 
18.09.20
13:08
(6) угу, и теряем объекты, попавшие в план обмена за время выгрузки
12 DTX 4th
 
18.09.20
13:12
(10) Да потому что типовой модуль выгрузки в битрикс - то еще извращение. Проще за пару часов что-то подобное наколбасить

(9) Все вижу, на запись доступно, спасибо
13 hhhh
 
18.09.20
13:22
(12) это кажется что проще. А по факту сам еще больше извратишься в итоге. Проверено.
14 DTX 4th
 
18.09.20
13:25
(13) Да я уже поковырял однажды обмен с битриксом. Плевался долго.
А тут с прогом битрикса обсудили, что подобная выгрузка не помешает.
Выбрать все из плана обмена, засунуть в JSON, отправить на сайт. Пару часов чистыми.
15 VladZ
 
18.09.20
13:26
Упс. Сорян. Действительно, потеряются данные.
16 zippygrill
 
18.09.20
13:31
(15)         ИначеЕсли ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1 Тогда
            
            // Для всех изменений которые были в плане обмена отменяем регистрацию.
            ПланыОбмена.УдалитьРегистрациюИзменений(Элемент.Ключ, Элемент.Значение.НомерСообщения);
17 DTX 4th
 
18.09.20
13:56
(16) То что нужно, спасибо
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.