|
v7: Не понял код функции "глПредставлениеДокумента" | ☑ | ||
---|---|---|---|---|
0
zelenprog
19.09.12
✎
12:17
|
Вот первые строки кода:
Функция глПредставлениеДокумента(Документ) Экспорт Если (ТипЗначения(Документ)=12) и (ПустоеЗначение(Документ)=0) Тогда не понятно зачем здесь проверяется "ПустоеЗначение(Документ)=0"? ведь уже есть проверка на тип, значит это уже точно документ. Какой смысл выдавать пустую строку для документа даже если он еще не записан? |
|||
1
GLazNik
19.09.12
✎
12:20
|
Пустое значение может быть как определенного типа так и неопределенного. Т.ч. условие вполне нормальное.
|
|||
2
zelenprog
19.09.12
✎
12:22
|
(1) это понятно, но тип уже проверяется. ясно что это документ.
зачем для незаписанного документа выдавать пустую строку? |
|||
3
Фокусник
19.09.12
✎
12:23
|
(2) Документ есть, но он не выбран, т.е. пустая ссылка :)
|
|||
4
Сияющий Асинхраль
19.09.12
✎
12:23
|
Скажем входящий параметр может быть реквизитом чего угодно типа типа документ, , но незаполненным, или значением из ТЗ, определенного типа, тогда, тип определены будет правильно, но самого документа не будет...
|
|||
5
GLazNik
19.09.12
✎
12:25
|
(2) Возможно вызов процедуры предназначен для другого использования? Например для представления в отчете.
|
|||
6
dk
19.09.12
✎
12:26
|
а почему именно для незаписанного?
|
|||
7
GLazNik
19.09.12
✎
12:27
|
+(5) пустое значение и не записанный документ это разные вещи. В случае не записанного документа необходимо передавать контекст формы документа
|
|||
8
Сияющий Асинхраль
19.09.12
✎
12:31
|
Значение на пустоты проверяется хотя бы даже для того, чтобы впоследствии всегда корректно сработал код, допустим:
Документ.НомерДокВходящий из этой же процедуры, если Документ окажется неопределен, то Документ.НомерДокВходящий вернет тебе просто ошибку... |
|||
9
Сияющий Асинхраль
19.09.12
✎
12:33
|
+(8) И соответственно, если Документ будет определен, но это не документ, то скорее всего Документ.НомерДокВходящий и Документ.НомерДок опять таки вернут тебе ошибку, потому что такие реквизиты наблюдаются только у документов
|
|||
10
Aleksey
19.09.12
✎
12:34
|
Для универсальности
Например Док=СоздатьОбъект("Документ"); глПредставлениеДокумента(Док) Как раз тот случай, когда ПустоеЗначение(Документ)=1 |
|||
11
GLazNik
19.09.12
✎
12:36
|
(9) НомерДокВходящий наблюдается не во всех документах. :)
|
|||
12
Aleksey
19.09.12
✎
12:37
|
Хотя судя по коду оно здесь лишнее
Функция глНазваниеДокументаВЖурнале(Док) Экспорт Если ПустоеЗначение(Док)=1 Тогда Возврат(""); КонецЕсли; .... КонецФункции Функция глПредставлениеДокумента(Документ) Экспорт Если (ТипЗначения(Документ)=12) и (ПустоеЗначение(Документ)=0) Тогда Возврат глНазваниеДокументаВЖурнале(Документ) + " №" + СокрЛП(Документ.НомерДок) + " от " + Документ.ДатаДок; КонецЕсли; Возврат "" КонецФункции // глПредставлениеДокумента() |
|||
13
zelenprog
19.09.12
✎
12:37
|
хм..
|
|||
14
Сияющий Асинхраль
19.09.12
✎
12:38
|
(11) Именно поэтому в этой процедурке проверяется наличие реквизита НомерДокВходящий у документа, а вот если реквизита этого у документа нет, то используется реквизит НомерДок уже без проверки на наличие его, что правильно именно для документа...
|
|||
15
Сияющий Асинхраль
19.09.12
✎
12:38
|
(12) Не лишнее, см. (8-9)
|
|||
16
zelenprog
19.09.12
✎
12:39
|
В следующем коде эта функция выдает пустую строку, хотя документ есть в базе:
Док = СоздатьОбъект("Документ"); Док.ВыбратьДокументы(, дПоследняяДата); Пока Док.ПолучитьДокумент() = 1 Цикл Сообщить("док: " + глПредставлениеДокумента(Док)); |
|||
17
zelenprog
19.09.12
✎
12:40
|
а если обращаться к реквизитам: Док.НомерДок, то все ОК
|
|||
18
zelenprog
19.09.12
✎
12:41
|
то есть вполне можно сформировать представление для этого случая, но функция возвращает пустую строку
|
|||
19
Сияющий Асинхраль
19.09.12
✎
12:41
|
Сообщить("док: " + глПредставлениеДокумента(Док.ТекущийДокумент()));
|
|||
20
Сияющий Асинхраль
19.09.12
✎
12:42
|
Здесь надо обращаться как в (19)
|
|||
21
zelenprog
19.09.12
✎
12:43
|
(20) обращение как в (19) - это лишнее обращение к базе,
и если я перебираю все документы для вывода в отчет например - будет заметное замедление |
|||
22
zelenprog
19.09.12
✎
12:46
|
этого надо по возможности избегать
|
|||
23
Сияющий Асинхраль
19.09.12
✎
12:46
|
Хотя (12) прав, я бы написал так:
Если (ТипЗначения(Документ)=12) Тогда Если (ПустоеЗначение(Документ)=0) Тогда Иначе КонецЕсли; КонецЕсли; (21) Это может быть и замедление, но для 1С 7.7 это как раз правильный вариант, а вот (16) неправильный |
|||
24
Светлый Гений
19.09.12
✎
12:46
|
(21)В твоем случае Док - объект, а Док.ТекущийДокумент() - ссылка
|
|||
25
zelenprog
19.09.12
✎
13:04
|
программно можно определить ссылка это или объект?
|
|||
26
Cthulhu
19.09.12
✎
13:11
|
(25): ?(ЗначениеВСтрокуВнутр(тДок)<>ЗначениеВСтрокуВнутр(тДок.ТекущийДокумент()),"НЕ ","")+"ССЫЛКА!.."
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |