Имя: Пароль:
1C
 
Проверить при записи в регистр сведений
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)+ ну и проверять Отбор.Контрагент.Использование и т.п.