Жёлтая тетрадь 📒 Блог о разработке в 1С 👨‍💻
1.13K subscribers
42 photos
69 links
В основном небольшие и нерегулярные личные заметки о разработке на платформе 1С:Предприятие.

@builin - по всем вопросам, вакансии и рекламу не размещаю.

Еще один мой канал: @kodbaza (осторожно, там Java)
Download Telegram
Получение измененных и удаленных данных узла плана обмена

К таблицам изменений планов обмена можно строить запросы. И если данные удалить, то в таблице изменений ссылка будет заполнена (<Объект не найден ...>), а в данных этой ссылки не будет (NULL). Пример запроса:
ВЫБРАТЬ
НоменклатураИзменения.Ссылка КАК Ссылка,
НоменклатураИзменения.Ссылка.Ссылка КАК Ссылка1
ИЗ
Справочник.Номенклатура.Изменения КАК НоменклатураИзменения
ГДЕ
НоменклатураИзменения.Узел = &Узел
//И НоменклатураИзменения.Ссылка.Ссылка ЕСТЬ NULL

Результат:
Первый - Первый
<Объект не найден> (92852:832900155d00f10711eb173504f418ec) - <NULL>
Четвертый - Четвертый

@yellow_pad | #ПланОбмена #интеграция #РегистрацияИзменений #запросы
Как исключить параллельное выполнение обмена

При обмене измененными данными, чтобы не произошло внезапной коллизии при выполнении обмена в одно время в разных сеансах, можно просто установить управляемую блокировку на узел плана обмена. Пример процедуры:
Процедура ЗаблокироватьСеансОбмена(УзелПланаОбмена)

НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("ПланОбмена." + УзелПланаОбмена.Метаданные().Имя);
ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелПланаОбмена);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

Блокировка.Заблокировать();

КонецПроцедуры

Если этого не сделать, то мы можем, например, в разных сеансах выгрузить одни и те же данные. А можем удалить регистрацию данных, выгружаемых другим сеансом.

@yellow_pad | #1С #обмены #ПланОбмена #блокировки #УправляемаяБлокировка #код
Изменение данных без регистрации изменений

Выполняем двусторонний обмен одних и тех же объектов с внешней системой. Например, накладная выгружается в ТСД, а после обработки загружается. Изменения данных регистрируются авторегистрацией в плане обмена.

Если не отменять регистрацию, то при загрузке накладной мы её запишем, и она зарегистрируется к обмену и выгрузится. Это лишнее.

Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;

Это приведет к тому, что список узлов, для которых должно быть зарегистрировано изменение данных, автоматически заполнен не будет. Если в процессе записи коллекция узлов-примеников останется пустой, то регистрации изменения данных не произойдет.

Подробнее на ИТС

@yellow_pad | #1С #ПланОбмена #Авторегистрация