Полная регистрация изменений для узла Код 1C v 8.х Процедура ПолнаяРегистрацияДанныхПоУзлу(Узел, РегистрироватьВсе) Экспорт
// Регистрация изменений всех данных для узла производится в случае
// значения параметра РегистрироватьВсе = Истина или
// значение склада в узле не установлено
Сообщение = Новый СообщениеПользователю();
Если РегистрироватьВсе Или Узел.Склад.Пустая() Тогда
Сообщение.Текст = "Регистрация всех данных по узлу " + Узел;
Сообщение.Сообщить();
ПланыОбмена.ЗарегистрироватьИзменения(Узел);
Иначе
Сообщение.Текст = "Регистрация данных по узлу " + Узел + " -----------";
Сообщение.Сообщить();
ПланОбмена = Узел.Метаданные();
Состав = ПланОбмена.Состав;
Для Каждого ЭлементСостава Из Состав Цикл
Сообщение.Текст = " Регистрация данных " + ЭлементСостава.Метаданные + " по узлу " + Узел;
Сообщение.Сообщить();
Если ЭлементСостава.Метаданные = Метаданные.Документы.РасходнаяНакладная Тогда
// Для документов РасходнаяНакладная регистрация изменений
// для узла производится только при совпадении складов узла и накладной
// Выбираем документы РасходнаяНакладная по складу узла
Запрос = Новый Запрос("ВЫБРАТЬ
|Ссылка
|ИЗ
|Документ.РасходнаяНакладная
|ГДЕ
|Склад = &Склад");
Запрос.УстановитьПараметр("Склад", Узел.Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// регистрируем изменение документа для узла
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка);
КонецЦикла;
ИначеЕсли ЭлементСостава.Метаданные = Метаданные.РегистрыНакопления.УчетНоменклатуры Тогда
// Выбираем всех различных регистраторов регистра
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
|Регистратор
|ИЗ
|РегистрНакопления.УчетНоменклатуры
|ГДЕ
|Склад = &Склад");
Запрос.УстановитьПараметр("Склад", Узел.Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Создаем набор записей регистра с отбором по регистратору
НаборЗаписей = РегистрыНакопления.УчетНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
// регистрируем изменения набора записей для узла
ПланыОбмена.ЗарегистрироватьИзменения(Узел, НаборЗаписей);
КонецЦикла;
Иначе
// Регистрация изменений всех данных объекта для узла
ПланыОбмена.ЗарегистрироватьИзменения(Узел, ЭлементСостава.Метаданные);
КонецЕсли;
КонецЦикла; // обход состава плана обмена
КонецЕсли;
КонецПроцедуры
В случае если в качестве второго параметра передается значение Ложь, расходные накладные и записи регистра накопления регистрируются как измененные только в случае совпадения склада со складом, определенным в узле плана обмена. Все остальные данные регистрируются обычным образом.
Категория:
Конвертация данных, Обмен, Перенос Ручная регистрации изменений для узла Для ручной регистрации изменений можно в модуле объекта (документа) определить следующий обработчик события
Код 1C v 8.х Процедура ПередЗаписью(Отказ)
Узел=ПланыОбмена.УдаленныеСклады.НайтиПоКоду("Оптовый");
Объект.ОбменДанными.Получатели.Удалить(Узел);
КонецПроцедуры
В глобальном общем модуле определим следующую процедуру:
Код 1C v 8.х Процедура ВключитьРегистрацию(ОбменДанными, Склад) Экспорт
//Получение узлов для конкретного склада
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| УдаленныеСклады.Ссылка
|ИЗ
| ПланОбмена.УдаленныеСклады КАК УдаленныеСклады
|
|ГДЕ
| (УдаленныеСклады.Склад = &Склад ИЛИ
| УдаленныеСклады.Склад = &ПустойСклад) И
| УдаленныеСклады.Ссылка <> &ЭтотУзел";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ПустойСклад",
Справочники.Склады.ПустаяСсылка());
Запрос.УстановитьПараметр("ЭтотУзел",
ПланыОбмена.УдаленныеСклады.ЭтотУзел());
Выборка = Запрос.Выполнить().Выбрать();
// Регистрация изменений для выбранных узлов
Пока Выборка.Следующий() Цикл
ОбменДанными.Получатели.Добавить(Выборка.Ссылка);
КонецЦикла;
КонецПроцедуры
Обе рассмотренные процедуры одновременно решают две задачи:
Регистрируют изменения для узла, у которого реквизит Склад совпадает со складом, указанным в документе.
Производят проверку (для ранее существовавших документов), не изменился ли склад.
Если склад изменился, то производится регистрация изменения для узла, значение реквизита Склад которого соответствует старому значению документа (хранимому на момент проверки в информационной базе). Далее в момент выгрузки изменений данная регистрация может быть «подменена» на объект УдалениеОбъекта, что приведет к удалению накладной, «не свойственной» узлу.
Категория:
Конвертация данных, Обмен, Перенос Как получить вид объекта по переданной ссылке? Код 1C v 8.х
// Возвращает вид объекта по переданной ссылке - строку "Справочник", "Документ" и т.д.
// Не обрабатываются точки маршрутов бизнес-процессов.
Функция ВидОбъектаПоСсылке(Ссылка) Экспорт
ТипСсылки = ТипЗнч(Ссылка);
Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "Справочник";
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "Документ";
ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "БизнесПроцесс";
ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "ПланВидовХарактеристик";
ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "ПланСчетов";
ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "ПланВидовРасчета";
ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "Задача";
ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "ПланОбмена";
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат "Перечисление";
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Категория:
Полезные, Универсальные Функции