Перехват/обработка интерактивного копирования записи регистра сведений
Доброго времени суток! Нужно отловить интерактивное копирование записи регистра сведений в управляемых формах. Т.е. пользователь открывает фому списка регистра сведений, выделяет нужную запись регистра и наживает F9. Так вот мне нужно, как то перехватить это событие, что бы переопределить значения некоторых реквизитов и что бы в открытой форме были уже новые значения, к примеру в период подставить текущую дату, в измерение "Организация", подставить текущую организацию пользователя и т.д. На форумах ничего толкового не нашел, один бред какой-то. Прошу обратить внимание, что речь идет именно о копировании ЗАПИСИ РЕГИСТРА СВЕДЕНИЙ, а не элемента справочника или документа. Конфигурация не типовая, пишется с нуля (если это имеет значение). Заранее спасибо!
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
главное зафиксировать факт того события которые вы должны перехватить, а остальное уже не сложно
Обычно я фиксирую такие "факты" во встроенной структуре "ДополнительныеСвойства" и у набора записей регистра сведений она тоже есть. Т.е., в тех формах или обработчиках событий при копировании, добавлении вы должны вставить в ДополнительныеСвойства новый ключ, например "НеобходимаКорректировкаЗаписи". Можно добавить по этому ключу значение структуру с данными заполнения. Далее все элементарно...
Обычно я фиксирую такие "факты" во встроенной структуре "ДополнительныеСвойства" и у набора записей регистра сведений она тоже есть. Т.е., в тех формах или обработчиках событий при копировании, добавлении вы должны вставить в ДополнительныеСвойства новый ключ, например "НеобходимаКорректировкаЗаписи". Можно добавить по этому ключу значение структуру с данными заполнения. Далее все элементарно...
// Стандартный обработчик в модуле набора записей
// можно(даже нужно) вставить в расширение с директивой &После
Процедура ПередЗаписью(Отказ, Замещение)
// ....
ЗначенияКорректировки = Неопределено;
ЭтотОбъект.ДополнительныеСвойства.Свойство("НеобходимаКорректировкаЗаписи", ЗначенияКорректировки);
Если НЕ ЗначенияКорректировки = Неопределено Тогда
Для каждого Запись Из ЭтотОбъект Цикл
//Запись. = ЗначенияКорректировки.Организация;
//Запись. = ЗначенияКорректировки.;
//...
КонецЦикла
КонецЕсли;
КонецПроцедуры
Показать
(3) Да, там все до записи. У табличного поля (списка) есть событие
Соответственно по параметру "Копирование" я погу понять что запись создается копирование, но что делать дальше, не пойму, как добраться до значений новой записи, как их изменить, или как передать этот признак в форму, что бы обратиться к нему допустим при открытии формы?
СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Соответственно по параметру "Копирование" я погу понять что запись создается копирование, но что делать дальше, не пойму, как добраться до значений новой записи, как их изменить, или как передать этот признак в форму, что бы обратиться к нему допустим при открытии формы?
Не пробовал, но вдруг это поможет.
Попробуй создать свою форму списка - регистра сведений.
Помести на эту форму кнопку и задай сочетание клавиш для этой кнопки.
Под кнопкой напиши свой код, что нужно делать.
Не уверен, что F9 подойдет, но Ctrl + W будет работать.
Попробуй создать свою форму списка - регистра сведений.
Помести на эту форму кнопку и задай сочетание клавиш для этой кнопки.
Под кнопкой напиши свой код, что нужно делать.
Не уверен, что F9 подойдет, но Ctrl + W будет работать.
(6) Да, там есть параметр через который можно добраться до значения копирования, но как изменить значения новой записи? Проще тогда получить объект копирования из обработчика ПриСозданииНаСервере (только что нарыл):
Проблема в том, что не возможно точно определить, произошло копирование или нет, т.к. ЗначениеКопирования есть всегда, даже если я просто создаю запись.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Копирование = Ложь;
Если Не ЗначениеЗаполнено(Параметры.ЗначениеКопирования.Период) Тогда
Копирование = Истина; //Но это кустарный метод
КонецЕсли;
КонецПроцедуры
Проблема в том, что не возможно точно определить, произошло копирование или нет, т.к. ЗначениеКопирования есть всегда, даже если я просто создаю запись.
(9) Да, все верно, все работает, кроме того, как я понял, проверить новая это запись или нет можно конструкцией
Итого:
ЗначениеЗаполнено(Запись.ИсходныйКлючЗаписи)
Итого:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтоНовый = Не ЗначениеЗаполнено(Запись.ИсходныйКлючЗаписи) ;
Копирование = ЗначениеЗаполнено(Параметры.ЗначениеКопирования);
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот