Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Почему сбоит метод ПустоеЗначение()

v7: Почему сбоит метод ПустоеЗначение()
Я
   sidalexsandr
 
14.01.13 - 15:37
У меня обработка: проверяет Заполнен ли реквизит шапки у документов.
Название документа и реквизита вводится в форме обработке.
Вот текст обработки:
Процедура Сформировать()
    
    Д = СоздатьОбъект("Документ."+СокрЛП(НазваниеДокумента));
                          
    РеквизитЗаполнен = "Нет";
    КоличествоДокументов = 0;
    Д.ВыбратьДокументы(НачДата, КонДата);
    Пока Д.ПолучитьДокумент() = 1 Цикл         
        Если ПустоеЗначение(Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки))) = 0 Тогда            
            РеквизитЗаполнен = "Да";
            Сообщить("Дата "+Д.ДатаДок+" Номер "+Д.НомерДок);
            КоличествоДокументов = КоличествоДокументов + 1;    
        КонецЕсли;     
        Состояние("Шурстим документы. Откинтесь на спинку кресла.");
    КонецЦикла;
    
    Если РеквизитЗаполнен = "Нет" Тогда
        Сообщить("Ни у оного документа не заполнен реквизит "+СокрЛП(ВыбРеквизитШапки)+".");   
    Иначе
        Сообщить("Есть "+КоличествоДокументов+" документов у которых заполнен реквизит "+СокрЛП(ВыбРеквизитШапки)+".");    
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    
    НачДата = '01.01.80'; 
    КонДата = ТекущаяДата();   
                                 
КонецПроцедуры
 
 
   sidalexsandr
 
1 - 14.01.13 - 15:38
Вопрос: Почемуу одного документа пустой реквизит, а метод ПустоеЗначение() выдает, что реквизит заполнен?
   sidalexsandr
 
2 - 14.01.13 - 15:39
Извизите за опечатку модераторы. Смените пожалуйста название темы на Почему сбоит метод ПустоеЗначение()
   1Сергей
 
3 - 14.01.13 - 15:39
реквизит какого типа/вида?
   sidalexsandr
 
4 - 14.01.13 - 15:41
Тип Справочники.Склады
   viktor_vv
 
5 - 14.01.13 - 15:42
(4) Может элемент справочника с пустым наименованием ?
   1Сергей
 
6 - 14.01.13 - 15:43
(5) +1
посмотри Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки)).Код
   viktor_vv
 
7 - 14.01.13 - 15:44
Для проверки выведи

ЗначениеРеквизита = Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки)) ;
        Если ПустоеЗначение(ЗначениеРеквизита) = 0 Тогда            
            РеквизитЗаполнен = "Да";
            Сообщить("Дата "+Д.ДатаДок+" Номер "+Д.НомерДок + "  "+ ЗначениеРеквизита.Код + "  "+ЗначениеРеквизита.Наименование);
            КоличествоДокументов = КоличествоДокументов + 1;    
        КонецЕсли;
   Ёпрст
 
9 - 14.01.13 - 15:46
Проверять последний документ в выборке на наличие заполненности реквизита таким способом.. это п..ц
   1Сергей
 
10 - 14.01.13 - 15:47
(9) он не последний проверяет, а ищет нет ли пустых
 
 Рекламное место пустует
   Ёпрст
 
11 - 14.01.13 - 15:48
(10) да похрен, всё равно п..ц
:))
   sidalexsandr
 
12 - 14.01.13 - 15:49
(7) Вот сообщить и пишет на документ где не заполен реквизит
   Ёпрст
 
13 - 14.01.13 - 15:50
Ладно, на вопрос (1) ответ таков-

если реквизит ВыбРеквизитШапки агрегатного типа - то там битая ссылка, а вот ПустоеЗначение вернет 0, ибо это
<Объект не найден>
   1Сергей
 
14 - 14.01.13 - 15:50
(12) ну, а код какой говорит?
   sidalexsandr
 
15 - 14.01.13 - 15:51
(12) Не понял вопроса? Если про ошибки то ничего при исполнении нет.
   sidalexsandr
 
16 - 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)  Тогда
    Сообщить("В документе " + Док + " есть битая ссылка");
КонецЕсли;
   viktor_vv
 
21 - 14.01.13 - 15:54
А если просто открыть этот документи и посмотреть че там у него в этом реквизите.
На битой написал бы про "Объект не найден".
   sidalexsandr
 
22 - 14.01.13 - 15:55
Сделал так:
Если Д.ПолучитьАтрибут(СокрЛП(ВыбРеквизитШапки) <> ПолучитьПустоеЗначение("Справочник.Склад") Тогда

Ничего не изменилось.
   sidalexsandr
 
23 - 14.01.13 - 15:55
(21) Спасибо. Нет такого.
   viktor_vv
 
24 - 14.01.13 - 15:57
(23) А если нажать кнопку выбора, где курсор стоит ?
   КонецЦикла
 
25 - 14.01.13 - 15:57
(23) Нужно писать "откиньтесь", может в этом трабла?
Можно еще добавить "двигатели прогреты, начинаем отсчет"
   viktor_vv
 
26 - 14.01.13 - 15:57
(22) Тебе ж про метод Выбран() писали.
   sidalexsandr
 
27 - 14.01.13 - 15:57
(20) Спасибо. Попробую.
   Надсмотрщик
 
28 - 14.01.13 - 15:58
(0) А мозх включить не предлагать?
   prog0101
 
29 - 14.01.13 - 16:02
нужно приводить к строке и делать сокрлп
   oslokot
 
30 - 14.01.13 - 16:07
(0) Зачем городить огород, когда все уже есть
глВсеРеквизитыДокументаЗаполнены(Конт,СписокРеквизитов)

(в конфах ТиС и КА)
   sidalexsandr
 
31 - 14.01.13 - 16:12
(20) Если верит синтаксис-помощнику, то ты проверяеш два раза одно и тоже, вот синтаксис помощник:
Функция определяет, является ли пустым переданное в параметре значение. Возвращает число: 1- если значение пустое и 0 - если нет. При этом применяется следующее правило:
.........
- значения следующих типов: ''справочник''... проверяются как в методах Выбран  для соответствующего типа объекта.;
   Ёпрст
 
32 - 14.01.13 - 16:14
(31) пустоезначение проверяет само значение,не лезя при этом на сервер, выбран - тащит объект с ИБ с сервера на клиент, если его нет - возвращает 0
   sidalexsandr
 
33 - 14.01.13 - 16:53
Вопрос ещё актуален.
 
 
   Ёпрст
 
34 - 14.01.13 - 16:57
дык ты (20) то проверил ?
   sidalexsandr
 
35 - 14.01.13 - 17:13
(34) Проверил не помогло.
   sidalexsandr
 
36 - 14.01.13 - 17:13
Спасибки всем. Предполагаю что поможет только тестирование в конфигураторе.
   Ёпрст
 
37 - 14.01.13 - 17:14
т.е битых ссылок нема ? Не верю.
   Ёпрст
 
38 - 14.01.13 - 17:15
если база дбф, то достаточно реиндекс
   Torquader
 
39 - 15.01.13 - 01:07
Я бы сначала спросил бы тип реквизита, то есть

Сообщить("Тип:"+Метаданные.Документ(НазваниеДокумента).РеквизитШапки(СокрЛП(ВыбРеквизитШапки)).Тип);
Сообщить("Вид:"+Метаданные.Документ(НазваниеДокумента).РеквизитШапки(СокрЛП(ВыбРеквизитШапки)).Вид);

просто, если получится, что в реквизите строка, то если в ней неразрывный пробел, то будет пустое поле, которое, на самом деле, не пустое.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Независимо от того, куда вы едете — это в гору и против ветра!
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует