Перехват/обработка интерактивного копирования записи регистра сведений

1. frkbvfnjh 800 25.07.18 10:00 Сейчас в теме
Доброго времени суток! Нужно отловить интерактивное копирование записи регистра сведений в управляемых формах. Т.е. пользователь открывает фому списка регистра сведений, выделяет нужную запись регистра и наживает F9. Так вот мне нужно, как то перехватить это событие, что бы переопределить значения некоторых реквизитов и что бы в открытой форме были уже новые значения, к примеру в период подставить текущую дату, в измерение "Организация", подставить текущую организацию пользователя и т.д. На форумах ничего толкового не нашел, один бред какой-то. Прошу обратить внимание, что речь идет именно о копировании ЗАПИСИ РЕГИСТРА СВЕДЕНИЙ, а не элемента справочника или документа. Конфигурация не типовая, пишется с нуля (если это имеет значение). Заранее спасибо!
По теме из базы знаний
Найденные решения
9. singlych 25.07.18 11:59 Сейчас в теме
(8) Если не было копирования то ЗначениеЗаполнено(Параметры.ЗначениеКопирования) = Ложь
user1823210; Vyacheslide; dbachinsky; viddik; rusmil; Rabin; Anesk; FoxSPb2012; lap_soft; +9 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 25.07.18 10:34 Сейчас в теме
главное зафиксировать факт того события которые вы должны перехватить, а остальное уже не сложно

Обычно я фиксирую такие "факты" во встроенной структуре "ДополнительныеСвойства" и у набора записей регистра сведений она тоже есть. Т.е., в тех формах или обработчиках событий при копировании, добавлении вы должны вставить в ДополнительныеСвойства новый ключ, например "НеобходимаКорректировкаЗаписи". Можно добавить по этому ключу значение структуру с данными заполнения. Далее все элементарно...

// Стандартный обработчик в модуле набора записей 
// можно(даже нужно) вставить в расширение с директивой &После
Процедура ПередЗаписью(Отказ, Замещение)
	
	// .... 
	ЗначенияКорректировки = Неопределено;
	ЭтотОбъект.ДополнительныеСвойства.Свойство("НеобходимаКорректировкаЗаписи", ЗначенияКорректировки);
	Если НЕ ЗначенияКорректировки = Неопределено Тогда
		Для каждого Запись Из ЭтотОбъект Цикл
			//Запись. = ЗначенияКорректировки.Организация;
			//Запись. = ЗначенияКорректировки.;
			//...
		КонецЦикла
	КонецЕсли;
	
КонецПроцедуры
Показать
3. VmvLer 25.07.18 10:36 Сейчас в теме
а там все на клиенте еще до записи, что ж первое сообщение можно не читать и посмотреть обработчики формы
5. frkbvfnjh 800 25.07.18 10:45 Сейчас в теме
(3) Да, там все до записи. У табличного поля (списка) есть событие
СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

Соответственно по параметру "Копирование" я погу понять что запись создается копирование, но что делать дальше, не пойму, как добраться до значений новой записи, как их изменить, или как передать этот признак в форму, что бы обратиться к нему допустим при открытии формы?
4. Timur.V 79 25.07.18 10:39 Сейчас в теме
Не пробовал, но вдруг это поможет.
Попробуй создать свою форму списка - регистра сведений.
Помести на эту форму кнопку и задай сочетание клавиш для этой кнопки.
Под кнопкой напиши свой код, что нужно делать.
Не уверен, что F9 подойдет, но Ctrl + W будет работать.
7. frkbvfnjh 800 25.07.18 10:53 Сейчас в теме
(4) Да не, мне кажется должен быть какой-то "правильный", "типовой" алгоритм действий в моем случае. Разработчик платформы должны были предусмотреть такой сценарий, должно быть как-то все слишком просто и правильно...
6. lefthander 25.07.18 10:51 Сейчас в теме
Модуль менеджера РС имеет предопределенную процедуру ОбработкаПолученияФормы
В СП посмотрите, полагаю самое то для ваших целей.
8. frkbvfnjh 800 25.07.18 11:08 Сейчас в теме
(6) Да, там есть параметр через который можно добраться до значения копирования, но как изменить значения новой записи? Проще тогда получить объект копирования из обработчика ПриСозданииНаСервере (только что нарыл):
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Копирование = Ложь;
	Если Не ЗначениеЗаполнено(Параметры.ЗначениеКопирования.Период) Тогда
		Копирование = Истина; //Но это кустарный метод
	КонецЕсли;
КонецПроцедуры

Проблема в том, что не возможно точно определить, произошло копирование или нет, т.к. ЗначениеКопирования есть всегда, даже если я просто создаю запись.
9. singlych 25.07.18 11:59 Сейчас в теме
(8) Если не было копирования то ЗначениеЗаполнено(Параметры.ЗначениеКопирования) = Ложь
user1823210; Vyacheslide; dbachinsky; viddik; rusmil; Rabin; Anesk; FoxSPb2012; lap_soft; +9 Ответить
10. frkbvfnjh 800 25.07.18 12:17 Сейчас в теме
(9) аааа, это уже интересно, что то тупанул, спасибо! Ща проверю...
11. lefthander 25.07.18 15:05 Сейчас в теме
(9)Тогда уж просто Параметры.ЗначениеКопирования = Ложь... ;)
12. frkbvfnjh 800 25.07.18 15:07 Сейчас в теме
(9) Да, все верно, все работает, кроме того, как я понял, проверить новая это запись или нет можно конструкцией
ЗначениеЗаполнено(Запись.ИсходныйКлючЗаписи)

Итого:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭтоНовый = Не ЗначениеЗаполнено(Запись.ИсходныйКлючЗаписи) ; 
    Копирование = ЗначениеЗаполнено(Параметры.ЗначениеКопирования);
КонецПроцедуры
vakham; zqzq; Nicholas; user1218207; Патриот; Boulala; +6 Ответить
13. mrd_84 23.06.22 15:47 Сейчас в теме
Как же хорошо что есть этот форум! Спасибо!!!
Оставьте свое сообщение

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