![]() |
![]() |
![]() |
|
Как проверить существование записи в регистр сведений? | ☑ | ||
---|---|---|---|---|
0
kuromanlich
08.10.11
✎
16:44
|
т.е. есть запись. мы ее перезаписываем. перезаписываем не программно, а мануально, из собственной формы регистра сведений. как програмно определить есть ли такая запись в программе, или же эту запись в данный момент добавили?
|
|||
1
Luhtas
08.10.11
✎
16:47
|
(0) Запрос с условием по этой записи к регистру сведений не?
|
|||
2
Один С
08.10.11
✎
16:49
|
если такая запись в регистре есть, то регистра поругается на то, что такая запись уже есть..
|
|||
3
kuromanlich
08.10.11
✎
16:54
|
(2) согласен. но как понять что запись перезаписывают или добавили новую?
|
|||
4
kuromanlich
08.10.11
✎
16:55
|
(1) весь сыр бор в том, что при перезаписи данных нет.
|
|||
5
kuromanlich
08.10.11
✎
17:27
|
апа
|
|||
6
Jaffar
08.10.11
✎
17:36
|
(3) очевидно - перед записью ее там поискать.
|
|||
7
kuromanlich
08.10.11
✎
17:38
|
(6) гы гы ) вот тут и проблема... пока он перед записью запрос у меня пустым выходит...
|
|||
8
Explorer1c
08.10.11
✎
17:42
|
(6)Странная-проблемма-зачем-это-ваабще-нужно?Заполнисначаларегистр-программно-а-потом-открой-доступ-пользователям
|
|||
9
kuromanlich
08.10.11
✎
17:43
|
(8) описываю маразм: добавлять можно, изменять уже добавленное нельзя. вот и пытаюсь реализовать.
|
|||
10
Explorer1c
08.10.11
✎
17:48
|
(9)Запрос-по-регистру-если-есть-запись-тогда-выходим-из-процедуры.Выполняем-в-одной-транзакции,т.е-блокируем-таблицу-на-время-записи
|
|||
11
Jaffar
08.10.11
✎
17:55
|
(7) чем не критерий? пустой запрос - добавление, не пустой - редактирование.
|
|||
12
Necessitudo
08.10.11
✎
18:35
|
(10) плюс 1
|
|||
13
Explorer1c
08.10.11
✎
19:00
|
(12)Всмысле?
|
|||
14
Renat11111
08.10.11
✎
20:48
|
чем не подходит?
РегистрСведенийМенеджерЗаписи.<Имя регистра сведений>.Выбран (InformationRegisterRecordManager.<Имя регистра сведений>.Selected) РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>) Выбран (Selected) Синтаксис: Выбран() Возвращаемое значение: Тип: Булево. Истина - набор не изменялся; Ложь - изменялся, в частности, если набор не считывался и не записывался, а также, если записывался с добавлением записей. Описание: Определяет, считана запись или нет. Примечание: При изменении отбора считается, что набор перестает быть считанным. Пример: Если Не Курс.Выбран() Тогда Предупреждение("Курс не считан"); КонецЕсли; |
|||
15
Renat11111
08.10.11
✎
20:49
|
+(14) это сп между прочим
|
|||
16
hhhh
08.10.11
✎
21:04
|
(7) это самый главный секрет 1С. А не заметил, что перед записью 2 раза вызывается?
|
|||
17
kuromanlich
09.10.11
✎
09:50
|
(16) заметил )
|
|||
18
kuromanlich
09.10.11
✎
11:33
|
(15) это не подходит для случая когда событие генерирует сам рег сведений. т.е. если скажем я буду пытаться применить это в модуле объекта рег.свед в процедуре "призаписи" или "передзаписью" то не я ставлю "отбор" и "прочитываю", это делает сама программа. соответственно нет возможности использовать этот операнд.
|
|||
19
kuromanlich
10.10.11
✎
16:04
|
up
|
|||
20
ptiz
10.10.11
✎
16:07
|
ТабличноеПоле (TableBox)
ПриНачалеРедактирования (OnStartEdit) Синтаксис: ПриНачалеРедактирования(<Новая строка>, <Копирование>) Параметры: <Новая строка> Тип: Булево. Признак редактирования новой строки. Имеет значение Истина, если строка была добавлена или скопирована. <Копирование> Тип: Булево. Если данный параметр имеет значение Истина, то выполняется копирование строки. Описание: Возникает при начале редактирования старой или добавленной строки табличного поля. В процедуре - обработчике события нельзя отказаться от редактирования, но могут быть выполнены действия, необходимые при вводе новой строки, например, установка начальных значений. |
|||
21
ptiz
10.10.11
✎
16:09
|
Хотя нет, там отказаться нельзя.
Но можно тут: ПередОкончаниемРедактирования |
|||
22
kuromanlich
10.10.11
✎
16:09
|
(20) уже пробывал. Но это есть не универсально. нельзя таким способом с помощью скажем подписки на события сделать для всех регистров. интересует как это сделать в "призаписи" "пеердзаписью" "проверказаполнения"
|
|||
23
ptiz
10.10.11
✎
16:19
|
Посмотрел сейчас, при перезаписи из формы "вручную" обработчики срабатывают дважды:
1 раз - удаление старого набора (в обработчике ПередЗаписью записи еще есть, ПриЗаписи - нет) 2 раз - запись нового ((в обработчике ПередЗаписью записей нет, ПриЗаписи - есть) Нам достаточно того, что при первом срабатывании, смотрим ПередЗаписью - если запись была, значит её изменяют или удаляют, ставим Отказ. |
|||
24
kuromanlich
10.10.11
✎
16:22
|
(23) тут и проблема. если есть время попробуй сделать. у меня запрос пустоту выдает ри перезуписи существующего.
|
|||
25
ptiz
10.10.11
✎
16:23
|
Давно уж сделал, почему и написал
Процедура ПодпискаНаСобытие1ПередЗаписью(Источник, Отказ, Замещение, ТолькоЗапись, ЗаписьФактическогоПериодаДействия, ЗаписьПерерасчетов) Экспорт Набор = РегистрыСведений.РС1.СоздатьНаборЗаписей(); Набор.Отбор.Период.Установить(Источник.Отбор.Период.Значение); Набор.Отбор.Работа.Установить(Источник.Отбор.Работа.Значение); Набор.Прочитать(); Сообщить("Количество записей Перед записью = " + Набор.Количество()); Если Набор.Количество() > 0 Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры |
|||
26
kuromanlich
10.10.11
✎
16:26
|
(25) хм... странно что запрос у меня пустым выходит, а то что ты показываешь нет... но с другой стороны механизмы извлечения данных могут быть разными у 1С для запроса и для чтения набора... будем пробывать. в моем случае еще правда отбор нужно заполнить весь и для всех...
|
|||
27
kuromanlich
10.10.11
✎
16:26
|
(27) спасибо за помощь )
|
|||
28
ptiz
10.10.11
✎
16:42
|
(26) Механизмы абсолютно одинаковые. Скорее всего, что-то другое передаешь в отбор.
|
|||
29
kuromanlich
10.10.11
✎
18:31
|
вот код
Процедура ДополнительныйКонтрольДоступаРегистрыСведенийПриЗаписи(Источник, Отказ, Замещение) Экспорт ТЗРС=Источник.Выгрузить(); НЗРС=РегистрыСведений.Заметки.СоздатьНаборЗаписей(); Для Каждого стр Из источник Цикл Для Каждого ИмяКолонки Из ТЗРС.Колонки Цикл Попытка НЗРС.Отбор[ИмяКолонки.имя].Использование=Истина; НЗРС.Отбор[ИмяКолонки.имя].Значение=стр[ИмяКолонки.имя]; Исключение КонецПопытки; КонецЦикла; НЗРС.Прочитать(); сообщить("ПриЗаписи "+НЗРС.Количество()); КонецЦикла; КонецПроцедуры Процедура ПодпискаНаСобытие1ПередЗаписью(Источник, Отказ, Замещение) Экспорт ТЗРС=Источник.Выгрузить(); НЗРС=РегистрыСведений.Заметки.СоздатьНаборЗаписей(); Для Каждого стр Из источник Цикл Для Каждого ИмяКолонки Из ТЗРС.Колонки Цикл Попытка НЗРС.Отбор[ИмяКолонки.имя].Использование=Истина; НЗРС.Отбор[ИмяКолонки.имя].Значение=стр[ИмяКолонки.имя]; Исключение КонецПопытки; КонецЦикла; НЗРС.Прочитать(); сообщить("ПередЗаписью "+НЗРС.Количество()); КонецЦикла; КонецПроцедуры |
|||
30
kuromanlich
10.10.11
✎
18:32
|
(29) если запись мы перезаписываем выдает:
ПередЗаписью 0 ПриЗаписи 1 если добавляем то: ПередЗаписью 0 ПриЗаписи 1 |
|||
31
kuromanlich
10.10.11
✎
18:34
|
(29)и(30) т.о. то что у тебя в (25) работает конечно, но с помощью него нельзя определить когда новую запись заносят, а когда старую редактируют
|
|||
32
kuromanlich
10.10.11
✎
18:39
|
и еще. заметил следующее: хотя перед записью и запрос и чтение набора выдают пустой результат, под другим сеансом если в этот же момент запросом получать то же самое оно получается (операйия проводится с помощью точки останова).
|
|||
33
kuromanlich
10.10.11
✎
18:49
|
ура!
нашел! ОбработкаПроверкиЗаполнения выолняется перед тем как 1С перезаписывает набор, т.о. получается, что если это новое, то записей действительно нет, а если есть, то они (записи набора) еще "не считаны" и соответственно все еще существуют. всем спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |