Вход | Регистрация
 
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 человек.
Рекламное место пустует