![]() |
|
v7: Почему сбоит метод ПустоеЗначение() | ☑ | ||
---|---|---|---|---|
0
sidalexsandr
14.01.13
✎
15:37
|
У меня обработка: проверяет Заполнен ли реквизит шапки у документов.
Название документа и реквизита вводится в форме обработке. Вот текст обработки: Процедура Сформировать() Д = СоздатьОбъект("Документ."+СокрЛП(НазваниеДокумента)); РеквизитЗаполнен = "Нет"; КоличествоДокументов = 0; Д.ВыбратьДокументы(НачДата, КонДата); Пока Д.ПолучитьДокумент() = 1 Цикл Если ПустоеЗначение(Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки))) = 0 Тогда РеквизитЗаполнен = "Да"; Сообщить("Дата "+Д.ДатаДок+" Номер "+Д.НомерДок); КоличествоДокументов = КоличествоДокументов + 1; КонецЕсли; Состояние("Шурстим документы. Откинтесь на спинку кресла."); КонецЦикла; Если РеквизитЗаполнен = "Нет" Тогда Сообщить("Ни у оного документа не заполнен реквизит "+СокрЛП(ВыбРеквизитШапки)+"."); Иначе Сообщить("Есть "+КоличествоДокументов+" документов у которых заполнен реквизит "+СокрЛП(ВыбРеквизитШапки)+"."); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() НачДата = '01.01.80'; КонДата = ТекущаяДата(); КонецПроцедуры |
|||
1
sidalexsandr
14.01.13
✎
15:38
|
Вопрос: Почемуу одного документа пустой реквизит, а метод ПустоеЗначение() выдает, что реквизит заполнен?
|
|||
2
sidalexsandr
14.01.13
✎
15:39
|
Извизите за опечатку модераторы. Смените пожалуйста название темы на Почему сбоит метод ПустоеЗначение()
|
|||
3
1Сергей
14.01.13
✎
15:39
|
реквизит какого типа/вида?
|
|||
4
sidalexsandr
14.01.13
✎
15:41
|
Тип Справочники.Склады
|
|||
5
viktor_vv
14.01.13
✎
15:42
|
(4) Может элемент справочника с пустым наименованием ?
|
|||
6
1Сергей
14.01.13
✎
15:43
|
(5) +1
посмотри Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки)).Код |
|||
7
viktor_vv
14.01.13
✎
15:44
|
Для проверки выведи
ЗначениеРеквизита = Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки)) ; Если ПустоеЗначение(ЗначениеРеквизита) = 0 Тогда РеквизитЗаполнен = "Да"; Сообщить("Дата "+Д.ДатаДок+" Номер "+Д.НомерДок + " "+ ЗначениеРеквизита.Код + " "+ЗначениеРеквизита.Наименование); КоличествоДокументов = КоличествоДокументов + 1; КонецЕсли; |
|||
9
Ёпрст
гуру
14.01.13
✎
15:46
|
Проверять последний документ в выборке на наличие заполненности реквизита таким способом.. это п..ц
|
|||
10
1Сергей
14.01.13
✎
15:47
|
(9) он не последний проверяет, а ищет нет ли пустых
|
|||
11
Ёпрст
гуру
14.01.13
✎
15:48
|
(10) да похрен, всё равно п..ц
:)) |
|||
12
sidalexsandr
14.01.13
✎
15:49
|
(7) Вот сообщить и пишет на документ где не заполен реквизит
|
|||
13
Ёпрст
гуру
14.01.13
✎
15:50
|
Ладно, на вопрос (1) ответ таков-
если реквизит ВыбРеквизитШапки агрегатного типа - то там битая ссылка, а вот ПустоеЗначение вернет 0, ибо это <Объект не найден> |
|||
14
1Сергей
14.01.13
✎
15:50
|
(12) ну, а код какой говорит?
|
|||
15
sidalexsandr
14.01.13
✎
15:51
|
(12) Не понял вопроса? Если про ошибки то ничего при исполнении нет.
|
|||
16
sidalexsandr
14.01.13
✎
15:51
|
(13)А как узнать, что у документа тогда битая ссылка?
|
|||
17
Ёпрст
гуру
14.01.13
✎
15:52
|
(16) проверить на Выбран()
|
|||
18
Ёпрст
гуру
14.01.13
✎
15:52
|
+ ПустоеЗначение одновременно
|
|||
19
Ёпрст
гуру
14.01.13
✎
15:53
|
Если .Выбран()=0 и ПустоеЗначение() = 0 - битая ссылка..
т.е какой то му удалил объект непосредственно, без контроля ссылочной целостности |
|||
20
КонецЦикла
14.01.13
✎
15:54
|
Если (ПустоеЗначение(Док.Докум) = 0) и (Док.Докум.Выбран() = 0) Тогда
Сообщить("В документе " + Док + " есть битая ссылка"); КонецЕсли; |
|||
21
viktor_vv
14.01.13
✎
15:54
|
А если просто открыть этот документи и посмотреть че там у него в этом реквизите.
На битой написал бы про "Объект не найден". |
|||
22
sidalexsandr
14.01.13
✎
15:55
|
Сделал так:
Если Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки) <> ПолучитьПустоеЗначение("Справочник.Склад") Тогда Ничего не изменилось. |
|||
23
sidalexsandr
14.01.13
✎
15:55
|
(21) Спасибо. Нет такого.
|
|||
24
viktor_vv
14.01.13
✎
15:57
|
(23) А если нажать кнопку выбора, где курсор стоит ?
|
|||
25
КонецЦикла
14.01.13
✎
15:57
|
(23) Нужно писать "откиньтесь", может в этом трабла?
Можно еще добавить "двигатели прогреты, начинаем отсчет" |
|||
26
viktor_vv
14.01.13
✎
15:57
|
(22) Тебе ж про метод Выбран() писали.
|
|||
27
sidalexsandr
14.01.13
✎
15:57
|
(20) Спасибо. Попробую.
|
|||
28
Надсмотрщик
14.01.13
✎
15:58
|
(0) А мозх включить не предлагать?
|
|||
29
prog0101
14.01.13
✎
16:02
|
нужно приводить к строке и делать сокрлп
|
|||
30
oslokot
14.01.13
✎
16:07
|
(0) Зачем городить огород, когда все уже есть
глВсеРеквизитыДокументаЗаполнены(Конт,СписокРеквизитов) (в конфах ТиС и КА) |
|||
31
sidalexsandr
14.01.13
✎
16:12
|
(20) Если верит синтаксис-помощнику, то ты проверяеш два раза одно и тоже, вот синтаксис помощник:
Функция определяет, является ли пустым переданное в параметре значение. Возвращает число: 1- если значение пустое и 0 - если нет. При этом применяется следующее правило: ......... - значения следующих типов: ''справочник''... проверяются как в методах Выбран для соответствующего типа объекта.; |
|||
32
Ёпрст
гуру
14.01.13
✎
16:14
|
(31) пустоезначение проверяет само значение,не лезя при этом на сервер, выбран - тащит объект с ИБ с сервера на клиент, если его нет - возвращает 0
|
|||
33
sidalexsandr
14.01.13
✎
16:53
|
Вопрос ещё актуален.
|
|||
34
Ёпрст
гуру
14.01.13
✎
16:57
|
дык ты (20) то проверил ?
|
|||
35
sidalexsandr
14.01.13
✎
17:13
|
(34) Проверил не помогло.
|
|||
36
sidalexsandr
14.01.13
✎
17:13
|
Спасибки всем. Предполагаю что поможет только тестирование в конфигураторе.
|
|||
37
Ёпрст
гуру
14.01.13
✎
17:14
|
т.е битых ссылок нема ? Не верю.
|
|||
38
Ёпрст
гуру
14.01.13
✎
17:15
|
если база дбф, то достаточно реиндекс
|
|||
39
Torquader
15.01.13
✎
01:07
|
Я бы сначала спросил бы тип реквизита, то есть
Сообщить("Тип:"+Метаданные.Документ(НазваниеДокумента).РеквизитШапки(СокрЛП(ВыбРеквизитШапки)).Тип); Сообщить("Вид:"+Метаданные.Документ(НазваниеДокумента).РеквизитШапки(СокрЛП(ВыбРеквизитШапки)).Вид); просто, если получится, что в реквизите строка, то если в ней неразрывный пробел, то будет пустое поле, которое, на самом деле, не пустое. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |