Перенос независимого регистра сведений

1. insurgut 207 07.02.13 10:19 Сейчас в теме
Есть номенклатура, у нее есть комплектующие, состав которых регистров сведений регулируется. Вопрос, как его переносить?

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

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

Кто-нибудь сталкивался с такой проблемой? Как победить?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RocKeR_13 1329 07.02.13 12:27 Сейчас в теме
Вообще это нормально: как конвертация сообразит, что в источнике удалена запись и что ей соответствует такая-то запись в приемнике и ее нужно тоже удалить? Если есть РС СоответствияОбъектовДляОбмена, то можно оттуда сравнивать объекты и, если у реквизита ОбъектИсточника пустое значение, то удалять и запись приемника. Либо передавать записи вместе с пометкой удаления и одновременно удалять из обоих баз. Либо при выгрузке делать таблицу значений, в которую передавать выгруженные записи РС комплектующих и после загрузки сравнивать записи этой таблицы значений с записями регистра приемника; на основании сравнения уже принимать решения об удалении. Примерно выглядит так:
1) у номенклатуры "Товар" есть Комплект1 и Комплект2
2) перенесли номенклатуру в приемник
3) удалили Комплект1
4) перенесли номенклатуру "Товар" и соответствующие ей записи
5) в ТЗ попала запись Товар | Комплект2
6) в приемнике видим, что для номенклатуры "Товар" в ТЗ нет Комплект1 ---> помечаем на удаление Комплект1 в приемнике

З.Ы. данный способ действует, если при удалении записи о комплекте регистрируется на выгрузку все остальные записи о комплектах для данной номенклатуре или же каждый раз выгружается весь РС с комплектами (если он у вас насильно запихан в ПВД, то, конечно же, будет все время грузиться весь регистр в соответствии с ограничениями, если вы вводили таковые). Надеюсь, навел на подходящую идею))
3. insurgut 207 07.02.13 15:36 Сейчас в теме
Эх, если бы была ТЧ у номенклатуры, там проблем нет, конвертация перед загрузкой легко ТЧ очищает.

А вот с регистром так не получится. Я вижу как, перед загрузкой сделали отбор по владельцу, очистили, загрузили записи регистра сведений. Только как это лучше реализовать?
Выгрузка то не набором записей идет, а каждой записи отдельно. Если бы существовало в конвертации событие ПКД перед загрузкой, то не было бы проблем. В ПКО очистку этого регистра некорректно ставить, т.к. оно будет при загрузке каждой записи регистра отрабатываться.

В настоящий момент в ПВД после выгрузки я делаю:

Если (НЕ Объект.ЭтоГруппа) И (НЕ Объект.ПометкаУдаления) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
	|	Номенклатура                  КАК Номенклатура,
	|	Комплектующая                 КАК Комплектующая,
	|	Количество                    КАК Количество,
	|	ЕдиницаИзмерения              КАК ЕдиницаИзмерения,
	|	ДоляСтоимости                 КАК ДоляСтоимости
	|ИЗ
	|	РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
	|
	|ГДЕ
	|	Номенклатура = &Объект";
	Запрос.УстановитьПараметр("Объект", Объект.Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	Сообщить("Вместе с карточкой будет выгружено записей комплектующих: " + Выборка.Количество());
	Пока Выборка.Следующий() Цикл
		Если ТипЗнч(Выборка.Комплектующая) = ТипЗнч(Справочники.КР_ЕНС.ПустаяСсылка()) Тогда
			ВыгрузитьПоПравилу(Выборка,,,, "КомплектующиеНоменклатуры");
		Иначе
			Сообщить("Комплектующая не является ЕНС, выгрузка отменена!");
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
Показать


Возможно я мудрю и можно набор записей выгружать? Тогда как? И при загрузке уже записей регистра перед загрузкой очищать все по владельцу?
4. RocKeR_13 1329 13.02.13 11:38 Сейчас в теме
(3) insurgut, помечай на удаление в базе-источнике комплекты и переноси пометку удаления в приемник. А затем начинай фантазировать: в "После выгрузки файл" пропиши процедуру удаления помеченных на удаление комплектов из источник; и подобную процедуру пропиши в "После загрузки". Таким образом у тебя при обмене система попытается и в источнике удалить эти файлы, и в приемнике. В этом случае спокойно выгружаешь номенклатуру, измененные комплекты, а конвертация в соответствии с процедурами будет удалять помеченные на удаление объекты. Есть еще правила очистки данных, но с ними тебе придется разбираться самостоятельно: я никогда не имел с ними дело) Вроде как там все вышеописанное мной должно быть автоматизированно))
На счет ПВД...там дело происходит так: если выборка стандартная, то конвертация выбирает все записи и по одной последовательно выгружает; если же надо ограничить набор записей для выгрузки, ставишь "способ выборки - произвольный алгоритм" и формируешь свою выборку в виде запроса.
5. insurgut 207 13.02.13 12:14 Сейчас в теме
(4) RocKeR_13, комплектующие - это таже самая номенклатура, которая может продаваться отдельно, ее помечать на удаление не можем. Соответственно - изменяя состав, мы удаляем записи регистров, тут возможно и нужны правила очистки данных, но ни разу не приходилось ими озадачиваться и работать с ними.

По поводу выгрузки произвольным алгоритмом, так и делаю - запрос по всем записям с отбором. Только результат в целом (набором записей) у меня не захотел выгружаться. Возможно нужно не запросом, а менеджером как то данные отбирать и подсовывать их правилам выгрузки данных?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот