Перенос независимого регистра сведений
Есть номенклатура, у нее есть комплектующие, состав которых регистров сведений регулируется. Вопрос, как его переносить?
В настоящий момент делаю в ПВД запрос по регистру с отбором по номенклатуре, затем пока Результат.Следующий() - выгружаю по правилу выгрузки этого регистра.
Проблема в том, что если записи регистра удаляют, выгружаем заново карточку - в базе приемнике выгруженные ранее записи не очищаются.
Кто-нибудь сталкивался с такой проблемой? Как победить?
В настоящий момент делаю в ПВД запрос по регистру с отбором по номенклатуре, затем пока Результат.Следующий() - выгружаю по правилу выгрузки этого регистра.
Проблема в том, что если записи регистра удаляют, выгружаем заново карточку - в базе приемнике выгруженные ранее записи не очищаются.
Кто-нибудь сталкивался с такой проблемой? Как победить?
По теме из базы знаний
- Версионирование справочников, документов и регистров сведений на SQL-сервере
- Быстрое копирование независимых регистров сведений между схожими базами данных
- История данных независимых регистров сведений
- Передача удаления записей независимого регистра сведений через типовой обмен
- Произвольная корректировка независимых регистров сведений, имеющих в том числе в своей структуре поля с типом данных УникальныйИдентификатор
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вообще это нормально: как конвертация сообразит, что в источнике удалена запись и что ей соответствует такая-то запись в приемнике и ее нужно тоже удалить? Если есть РС СоответствияОбъектовДляОбмена, то можно оттуда сравнивать объекты и, если у реквизита ОбъектИсточника пустое значение, то удалять и запись приемника. Либо передавать записи вместе с пометкой удаления и одновременно удалять из обоих баз. Либо при выгрузке делать таблицу значений, в которую передавать выгруженные записи РС комплектующих и после загрузки сравнивать записи этой таблицы значений с записями регистра приемника; на основании сравнения уже принимать решения об удалении. Примерно выглядит так:
1) у номенклатуры "Товар" есть Комплект1 и Комплект2
2) перенесли номенклатуру в приемник
3) удалили Комплект1
4) перенесли номенклатуру "Товар" и соответствующие ей записи
5) в ТЗ попала запись Товар | Комплект2
6) в приемнике видим, что для номенклатуры "Товар" в ТЗ нет Комплект1 ---> помечаем на удаление Комплект1 в приемнике
З.Ы. данный способ действует, если при удалении записи о комплекте регистрируется на выгрузку все остальные записи о комплектах для данной номенклатуре или же каждый раз выгружается весь РС с комплектами (если он у вас насильно запихан в ПВД, то, конечно же, будет все время грузиться весь регистр в соответствии с ограничениями, если вы вводили таковые). Надеюсь, навел на подходящую идею))
1) у номенклатуры "Товар" есть Комплект1 и Комплект2
2) перенесли номенклатуру в приемник
3) удалили Комплект1
4) перенесли номенклатуру "Товар" и соответствующие ей записи
5) в ТЗ попала запись Товар | Комплект2
6) в приемнике видим, что для номенклатуры "Товар" в ТЗ нет Комплект1 ---> помечаем на удаление Комплект1 в приемнике
З.Ы. данный способ действует, если при удалении записи о комплекте регистрируется на выгрузку все остальные записи о комплектах для данной номенклатуре или же каждый раз выгружается весь РС с комплектами (если он у вас насильно запихан в ПВД, то, конечно же, будет все время грузиться весь регистр в соответствии с ограничениями, если вы вводили таковые). Надеюсь, навел на подходящую идею))
Эх, если бы была ТЧ у номенклатуры, там проблем нет, конвертация перед загрузкой легко ТЧ очищает.
А вот с регистром так не получится. Я вижу как, перед загрузкой сделали отбор по владельцу, очистили, загрузили записи регистра сведений. Только как это лучше реализовать?
Выгрузка то не набором записей идет, а каждой записи отдельно. Если бы существовало в конвертации событие ПКД перед загрузкой, то не было бы проблем. В ПКО очистку этого регистра некорректно ставить, т.к. оно будет при загрузке каждой записи регистра отрабатываться.
В настоящий момент в ПВД после выгрузки я делаю:
Возможно я мудрю и можно набор записей выгружать? Тогда как? И при загрузке уже записей регистра перед загрузкой очищать все по владельцу?
А вот с регистром так не получится. Я вижу как, перед загрузкой сделали отбор по владельцу, очистили, загрузили записи регистра сведений. Только как это лучше реализовать?
Выгрузка то не набором записей идет, а каждой записи отдельно. Если бы существовало в конвертации событие ПКД перед загрузкой, то не было бы проблем. В ПКО очистку этого регистра некорректно ставить, т.к. оно будет при загрузке каждой записи регистра отрабатываться.
В настоящий момент в ПВД после выгрузки я делаю:
Если (НЕ Объект.ЭтоГруппа) И (НЕ Объект.ПометкаУдаления) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура КАК Номенклатура,
| Комплектующая КАК Комплектующая,
| Количество КАК Количество,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ДоляСтоимости КАК ДоляСтоимости
|ИЗ
| РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
|
|ГДЕ
| Номенклатура = &Объект";
Запрос.УстановитьПараметр("Объект", Объект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Сообщить("Вместе с карточкой будет выгружено записей комплектующих: " + Выборка.Количество());
Пока Выборка.Следующий() Цикл
Если ТипЗнч(Выборка.Комплектующая) = ТипЗнч(Справочники.КР_ЕНС.ПустаяСсылка()) Тогда
ВыгрузитьПоПравилу(Выборка,,,, "КомплектующиеНоменклатуры");
Иначе
Сообщить("Комплектующая не является ЕНС, выгрузка отменена!");
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоказатьВозможно я мудрю и можно набор записей выгружать? Тогда как? И при загрузке уже записей регистра перед загрузкой очищать все по владельцу?
(3) insurgut, помечай на удаление в базе-источнике комплекты и переноси пометку удаления в приемник. А затем начинай фантазировать: в "После выгрузки файл" пропиши процедуру удаления помеченных на удаление комплектов из источник; и подобную процедуру пропиши в "После загрузки". Таким образом у тебя при обмене система попытается и в источнике удалить эти файлы, и в приемнике. В этом случае спокойно выгружаешь номенклатуру, измененные комплекты, а конвертация в соответствии с процедурами будет удалять помеченные на удаление объекты. Есть еще правила очистки данных, но с ними тебе придется разбираться самостоятельно: я никогда не имел с ними дело) Вроде как там все вышеописанное мной должно быть автоматизированно))
На счет ПВД...там дело происходит так: если выборка стандартная, то конвертация выбирает все записи и по одной последовательно выгружает; если же надо ограничить набор записей для выгрузки, ставишь "способ выборки - произвольный алгоритм" и формируешь свою выборку в виде запроса.
На счет ПВД...там дело происходит так: если выборка стандартная, то конвертация выбирает все записи и по одной последовательно выгружает; если же надо ограничить набор записей для выгрузки, ставишь "способ выборки - произвольный алгоритм" и формируешь свою выборку в виде запроса.
(4) RocKeR_13, комплектующие - это таже самая номенклатура, которая может продаваться отдельно, ее помечать на удаление не можем. Соответственно - изменяя состав, мы удаляем записи регистров, тут возможно и нужны правила очистки данных, но ни разу не приходилось ими озадачиваться и работать с ними.
По поводу выгрузки произвольным алгоритмом, так и делаю - запрос по всем записям с отбором. Только результат в целом (набором записей) у меня не захотел выгружаться. Возможно нужно не запросом, а менеджером как то данные отбирать и подсовывать их правилам выгрузки данных?
По поводу выгрузки произвольным алгоритмом, так и делаю - запрос по всем записям с отбором. Только результат в целом (набором записей) у меня не захотел выгружаться. Возможно нужно не запросом, а менеджером как то данные отбирать и подсовывать их правилам выгрузки данных?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот