![]() |
|
Проверить при записи в регистр сведений | ☑ | ||
---|---|---|---|---|
0
Триша
24.11.10
✎
08:45
|
Как узнать новая это информация или перезапись старой? И если перезапись, то какие поля перезаписываются.
Регистр сведений непериодический независимый. |
|||
1
Ненавижу 1С
гуру
24.11.10
✎
08:48
|
например в событии перед записью набора записей запросом получить аналогичный набор и сравнить с текущим
|
|||
2
Триша
24.11.10
✎
08:49
|
(1) Я так делаю, но почему-то запрос никогда ничего не находит.
|
|||
3
butterbean
24.11.10
✎
08:51
|
(2) код покажи
|
|||
4
Триша
24.11.10
✎
08:53
|
Процедура ПередЗаписью()
Если ЭтотОбъект.Количество() > 0 тогда Сообщить(ЭтотОбъект[0].Квитанция); Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | КвитанцииКонтрагентовАлеф.Контрагент, | КвитанцииКонтрагентовАлеф.Квитанция, | КвитанцииКонтрагентовАлеф.НомерПлатежа, | КвитанцииКонтрагентовАлеф.ППВ |ИЗ | РегистрСведений.КвитанцииКонтрагентовАлеф КАК КвитанцииКонтрагентовАлеф |ГДЕ | КвитанцииКонтрагентовАлеф.Контрагент = &контр | И КвитанцииКонтрагентовАлеф.Квитанция = &квит | И КвитанцииКонтрагентовАлеф.НомерПлатежа = &ном"; Запрос.УстановитьПараметр("контр",ЭтотОбъект[0].Контрагент); Запрос.УстановитьПараметр("квит",ЭтотОбъект[0].Квитанция); Запрос.УстановитьПараметр("ном",ЭтотОбъект[0].НомерПлатежа); Результат = Запрос.Выполнить().Выбрать(); Сообщить("Результат = "+Результат.Количество()); Если Результат.Следующий() тогда Сообщить("ППВ = "+Результат.ППВ); Иначе Сообщить("Это новаязапись", СтатусСообщения.Внимание); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
5
patapum
24.11.10
✎
08:55
|
какие записи перезаписываются, зависит от установленного на набор записей отбора:
ЭтотОбъект.Отбор |
|||
6
patapum
24.11.10
✎
08:57
|
+ (5) а также признака, затирать ли старые - сходу не знаю где в модуле РС посмотреть
|
|||
7
Триша
24.11.10
✎
09:05
|
(5) Разве Отбор показывает не по каким значениям отбираются записи, а наличие или отсутствие этой информации в регистре. И еще он не покажет какие реквизиты изменились?
Мне при записи в РС нужно знать, если информация заноситься впервые, то какие реквизиты заполнены. Если перезаписывается, то какое значение у реквизитов было до изменения |
|||
8
Ненавижу 1С
гуру
24.11.10
✎
09:06
|
уже сомнительно то, что ПередЗаписью() у вас не имеет параметров и где она расположена у вас?
|
|||
9
Триша
24.11.10
✎
09:07
|
(8) В модуле регистра. Какие должны быть параметры?
|
|||
10
hhhh
24.11.10
✎
09:07
|
(4) счетчик поставь. Если новая то ПриЗаписи() вызывается один раз, если перезапись старой, то ПриЗаписи() вызывается 2 раза - 1. При удалении старой записи, 2. При добавлении новой.
|
|||
11
Триша
24.11.10
✎
09:10
|
(10) спасибо, это интересно. А при удалении записи сколько раз вызывается?
|
|||
12
patapum
24.11.10
✎
09:17
|
(7) отбор показывает, какие записи он затрет (не пробовал, правда, указать отбор, не соответствующий записям набора...)
а какие измерения перезаписываются - сама анализируй. и кто тебе скажет, какие измерения перезаписываешь, если например, ты стираешь 5 записей, а записываешь 3? |
|||
13
Триша
24.11.10
✎
09:26
|
(12) да нет, событие передЗаписью и приЗаписи работает для каждой записи, которую добавляют или изменяют, или удаляют. Там в наборе не больше 1 записи.
Вот юзер открыл форму списка регистра и руками что-то там изменяет. При переходе на другую строку или при нажатии Enter срабатывают эти события. А мне нужно знать точно, что он сделал. |
|||
14
Souvenire
24.11.10
✎
09:34
|
(13) "Вот юзер открыл форму списка регистра и руками что-то там изменяет".
Тут что-то не так... |
|||
15
Триша
24.11.10
✎
09:39
|
(14) Вы к словам придираетесь или хотите что-то по делу сказать? Сформулируйте, пожалуйста, свою мысль
|
|||
16
patapum
24.11.10
✎
09:43
|
(13) ага, сегодня у тебя так. а через два месяца приспичит записать большой набор записей чем-нибудь. так что написав анализ, подумай, а что он у тебя выдаст на нескольких записях
|
|||
17
Souvenire
24.11.10
✎
09:50
|
(15) Придираюсь к юзеру. Чо он в регистр свои руки пихает?
Создай регистр с теми же измерениями/ресурсами, и просто копируй изменяемую запись из твоего регистра. Уже будет история. Дальше по желанию всякие условия, отборы, отчеты и пр. |
|||
18
patapum
24.11.10
✎
09:52
|
кстати, как вариант, сделай форму записи РС. и в ее ПередЗаписью, возможно, все будет проще
|
|||
19
Триша
24.11.10
✎
09:53
|
(16) У меня сегодня не только так, но и по-другому. Все равно события срабатывают для каждой конктетной ОДНОЙ записи. Даже если я буду записывать 15 записей программно, все равно события будут выполняться для каждой записи, т.е. 15 раз.
Проблема в (0) остается. |
|||
20
Триша
24.11.10
✎
09:58
|
(18) Как вариант, не пройдет, потому что у меня в этот регистр запись осуществляется не только руками юзеров, но и несколькими обработками, и регламентным заданием.
(17) Ага, понятно. А второй регистр какой? Периодический? Собственно, у меня 2 РС. В первом регистре мне нужно отслеживать изменения в записях, чтобы эти изменения писать во второй РС. |
|||
21
butterbean
24.11.10
✎
10:02
|
(20) зачем такие сложности?? просто ПередЗаписью набора получить текущие значения и проанализировать нельзя что-ли??
|
|||
22
Триша
24.11.10
✎
10:13
|
(21) Вот я как раз и хочу проанализировать! Не получается! Я и спрашиваю: как это сделать?
Проблема у меня такая: из базы не1С регламентным задание в базу 1С заносятся данные о выписанных контрагентам квитанциях. В базе 1С юзеры разносят оплату по этим квитанциям. Ежедневно нужно передавать обратно в базу не1С информацию об оплате по квитанциям. Квитанции записаны в 1 РС. Там и неоплаченные и оплаченные. Как только у квитанции появляется оплаты в 1 РС, ее нужно сразу же записать в 2 РС, из которого регламентное задание раз в сутки переносит эти данные в базу не1С. Так вот, пока оплаты нет, во 2 РС этой квитанции тоже быть не должно. Однако бывает довольно часто, что оплату ставят не на ту квитанцию, потом оплату убирают с этой квитанции и ставят на другую. Значит в 2 РС должно появиться 2 строки: одна - для первой квитанции с минусом, втрорая - для второй квитанции с плюсом. |
|||
23
butterbean
24.11.10
✎
10:18
|
(22) проще анализировать состояние 2-го регистра - в модуле набора 1-го регистра пробегаться по записям и делать запрос ко 2-му
|
|||
24
butterbean
24.11.10
✎
10:20
|
(23)+ если во 2-м есть запись - то добавлять корректировочную, а если нет - просто добавлять новую
|
|||
25
Триша
24.11.10
✎
10:22
|
(23) Идея была 2 РС очищать после каждого обмена с другой базой. Очень много этих квитанций. Поэтому, если вчера туда попала оплата, ночью прошел обмен, сегодня в 2 РС пусто, запрос ничего не найдет.
|
|||
26
Триша
24.11.10
✎
10:27
|
(24) Как узнать какие записи нужно передавать, а какие нет?
|
|||
27
butterbean
24.11.10
✎
10:28
|
(25) ну тогда можно в запрос к 1-му регистру передавать значения из отбора, а не из 1-й записи набора:
Запрос.УстановитьПараметр("контр",Отбор.Контрагент.Значение); Запрос.УстановитьПараметр("квит",Отбор.Квитанция.Значение); и т.п. |
|||
28
butterbean
24.11.10
✎
10:29
|
(27)+ ну и проверять Отбор.Контрагент.Использование и т.п.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |