Синхронизация данных справочника и регистра сведений
Добрый день.
Есть необходимость отражать изменения ранее созданного элемента справочника в регистре сведений.
Сперва сделал так:
Но этот вариант подходит только в том случае, когда в справочнике меняются реквизиты, которые являются ресурсами регистра.
Надеюсь на подсказку, как реализовать удаление старой строки регистра с добавлением новой в случае изменения реквизитов, являющихся измерениями регистра, а также периодом.
Заранее спасибо.
Есть необходимость отражать изменения ранее созданного элемента справочника в регистре сведений.
Сперва сделал так:
Если РольКонтактногоЛица = Справочники.РолиКонтактныхЛиц.ПодписываетДоговор Тогда
НаборЗаписейОЛК = РегистрыСведений.A_ОтветственныеЛицаКонтрагентов.СоздатьНаборЗаписей();
НаборЗаписейОЛК.Отбор.Период.Установить(ПодписываетС);
НаборЗаписейОЛК.Отбор.КонтактноеЛицоКонтрагента.Установить(Ссылка);
НаборЗаписейОЛК.Отбор.Контрагент.Установить(Владелец);
НаборЗаписейОЛК.Прочитать();
Если НаборЗаписейОЛК.Количество() = 0 Тогда
НоваяЗаписьОЛК = НаборЗаписейОЛК.Добавить();
НоваяЗаписьОЛК.Период = ПодписываетС;
НоваяЗаписьОЛК.КонтактноеЛицоКонтрагента = Ссылка;
НоваяЗаписьОЛК.Контрагент = Владелец;
НоваяЗаписьОЛК.Должность = Должность;
НоваяЗаписьОЛК.НаОсновании = НаОсновании;
ИначеЕсли НаборЗаписейОЛК.Количество() = 1 Тогда
ЗаписьОЛК = НаборЗаписейОЛК[0];
ЗаписьОЛК.Период = ПодписываетС;
ЗаписьОЛК.КонтактноеЛицоКонтрагента = Ссылка;
ЗаписьОЛК.Контрагент = Владелец;
ЗаписьОЛК.Должность = Должность;
ЗаписьОЛК.НаОсновании = НаОсновании;
КонецЕсли;
НаборЗаписейОЛК.Записать();
КонецЕсли;
ПоказатьНо этот вариант подходит только в том случае, когда в справочнике меняются реквизиты, которые являются ресурсами регистра.
Надеюсь на подсказку, как реализовать удаление старой строки регистра с добавлением новой в случае изменения реквизитов, являющихся измерениями регистра, а также периодом.
Заранее спасибо.
По теме из базы знаний
- Функция ВыгрузитьПоПравилу - мощный инструмент расширения возможностей ваших правил конвертации. Конвертация данных 2.1
- Выгрузка и загрузка данных XML (только справочников) - метод синхронизации зависимых справочников по коду, наименованию и владельцу
- Синхронизация и обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена
- Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0. Подробно, ясно и просто.
- Как прикрутить ГУИД к регистру сведений
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Не понимаю смысла телодвижений.
Есть регистр выполняющий свои функции. Зачем мудрить с попыткой исправления ошибки пользователя.
Накосячить пользователи могут во многом, всего не предусмотришь.
Дать ему кнопку история и закрыть регистр в прошлых периодах по дате запрета.
И всего делов.
Есть регистр выполняющий свои функции. Зачем мудрить с попыткой исправления ошибки пользователя.
Накосячить пользователи могут во многом, всего не предусмотришь.
Дать ему кнопку история и закрыть регистр в прошлых периодах по дате запрета.
И всего делов.
(1) dzianis.puhach, а почему нельзя настроить/включить версионирование? именно для таких целей оно и было придумано. В отчете можно посмотреть кто что когда менял. (но есть минусы - быстро пухнет база - и версии надо чистить - у нас реализована чистка версий, которая, например, после запуска оставляет по 3 версии макс на объект )
(2)(4) В справочнике ДоговорыКонтрагентов введен новый реквизит ОтветственноеЛицоКонтрагента, которое должно выбираться из справочника КонтактныеЛицаКонтрагентов с фильтром по контрагенту и по роли контактного лица (ПодписываетДоговор).
В справочнике КонтактныеЛицаКонтрагентов созданы новые реквизиты ПодписываетС и НаОсновании.
Создан регистр сведений A_ОтветственныеЛицаКонтрагентов с измерениями ОтветственноеЛицоКонтрагента и Контрагент, и ресурсами Должность и НаОсновании.
Период регистра является датой (ПодписываетС), с которой ОтветственноеЛицоКонтрагента имеет право подписи на основании, например, доверенности.
Право подписи договора могут иметь несколько лиц одного контрагента.
Регистр заведен с целью получения последнего ответственного лица контрагента через СрезПоcледних для автозаполнения формы договора (с учетом даты договора).
Естественно, что менеджер при вводе данных в справочник может ошибиться в реквизите, который будет являться измерением или периодом регистра.
Именно поэтому хотелось бы вносить изменения в эту строку, а не создавать новую.
Надеюсь, текста не слишком много, и изъяснился я понятно :)
В справочнике КонтактныеЛицаКонтрагентов созданы новые реквизиты ПодписываетС и НаОсновании.
Создан регистр сведений A_ОтветственныеЛицаКонтрагентов с измерениями ОтветственноеЛицоКонтрагента и Контрагент, и ресурсами Должность и НаОсновании.
Период регистра является датой (ПодписываетС), с которой ОтветственноеЛицоКонтрагента имеет право подписи на основании, например, доверенности.
Право подписи договора могут иметь несколько лиц одного контрагента.
Регистр заведен с целью получения последнего ответственного лица контрагента через СрезПоcледних для автозаполнения формы договора (с учетом даты договора).
Естественно, что менеджер при вводе данных в справочник может ошибиться в реквизите, который будет являться измерением или периодом регистра.
Именно поэтому хотелось бы вносить изменения в эту строку, а не создавать новую.
Надеюсь, текста не слишком много, и изъяснился я понятно :)
ПередЗаписью получаешь существующие реквизиты справочника, сохраняешь в дополнительных свойствах. При записи имея ранее сохраненные значения реквизитов, сравниваешь их с новыми, и исходя из обстоятельств либо изменяешь существующие записи, либо удаляешь старые записи и создаешь новые
(14)(3) И все-таки сделано, как и планировалось :)
Это костяк, а остальное уже мелочи.
// Объявляю переменные модуля
Перем ИсхПодписываетС;
Перем ИсхСсылка;
Перем ИсхВладелец;
Перем ИсхДолжность;
Перем ИсхНаОсновании;
// Присваиваю им исходные реквизиты
Процедура ПриОткрытии()
Если НЕ ЭтоНовый() Тогда
ИсхПодписываетС = ПодписываетС;
ИсхСсылка = Ссылка;
ИсхВладелец = Владелец;
ИсхДолжность = Должность;
ИсхНаОсновании = НаОсновании;
КонецЕсли;
КонецПроцедуры
// Нахожу по исходным переменным запись в регистре и удаляю ее. Затем создаю новую.
Процедура ПриЗаписи(Отказ)
Если РольКонтактногоЛица = Справочники.РолиКонтактныхЛиц.ПодписываетДоговор Тогда
Удаление = РегистрыСведений.A_ОтветственныеЛицаКонтрагентов.СоздатьМенеджерЗаписи();
Удаление.Период = ИсхПодписываетС;
Удаление.КонтактноеЛицоКонтрагента = ИсхСсылка;
Удаление.Контрагент = ИсхВладелец;
Удаление.Должность = ИсхДолжность;
Удаление.НаОсновании = ИсхНаОсновании;
Удаление.Прочитать();
Удаление.Удалить();
Создание = РегистрыСведений.A_ОтветственныеЛицаКонтрагентов.СоздатьМенеджерЗаписи();
Создание.Период = ПодписываетС;
Создание.КонтактноеЛицоКонтрагента = Ссылка;
Создание.Контрагент = Владелец;
Создание.Должность = Должность;
Создание.НаОсновании = НаОсновании;
Создание.Записать();
КонецЕсли;
КонецПроцедуры
ПоказатьЭто костяк, а остальное уже мелочи.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот