|
Как проверить на существование СтрокаТабличнойЧасти? | ☑ | ||
---|---|---|---|---|
0
sapravka
30.12.14
✎
03:17
|
Здравствуйте.
В форму документа в табличную часть добавил два реквизита: плотность и литры. И возник вопрос в общем модуле в обработке табличных частей: Процедура РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, ЗначениеПустогоКоличества = 0) Экспорт СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * ?(СтрокаТабличнойЧасти.Количество = 0, ЗначениеПустогоКоличества, СтрокаТабличнойЧасти.Количество); КонецПроцедуры // РассчитатьСуммуТабЧасти() Как там проверить на существование данных табличных частей? Примерно думаю сделать так, но ни как не пойму что написать в проверку, что бы получилось что то типа этого: Если (СтрокаТабличнойЧасти.Плотность И СтрокаТабличнойЧасти.Литры) существуют Тогда Сообщить("Существует") Иначе Сообщить("Не существует") КонецЕсли; |
|||
1
sapravka
30.12.14
✎
03:21
|
Просто там где нет данных табличных частей выходит ошибки на подобии:
{ОбщийМодуль.ОбработкаТабличныхЧастей.Модуль(52)}: Поле объекта не обнаружено (Литры) е = СтрокаТабличнойЧасти.Литры; |
|||
2
Andrewww123
30.12.14
✎
03:21
|
(0) Проверить заполнены ли эти реквизиты?
Если да, то "Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Плотность) Тогда" |
|||
3
Andrewww123
30.12.14
✎
03:23
|
(1) "РассчитатьСуммуТабЧасти()" вызывается из формы документа или из модуля?
|
|||
4
SeraFim
30.12.14
✎
03:28
|
Если СтрокаТабличнойЧасти = Неопределено Тогда
Возврат; КонецЕсли; |
|||
5
sapravka
30.12.14
✎
03:31
|
(3) формы документа
(4)Пробывал так: Если СтрокаТабличнойЧасти.Литры = Неопределено Тогда но выскакивала ошибка: {ОбщийМодуль.ОбработкаТабличныхЧастей.Модуль(52)}: Поле объекта не обнаружено (Литры) е = СтрокаТабличнойЧасти.Литры; |
|||
6
Andrewww123
30.12.14
✎
03:35
|
(5) Форма управляемая?
|
|||
7
sapravka
30.12.14
✎
03:38
|
(6) нет
БП 2.0 |
|||
8
Andrewww123
30.12.14
✎
03:40
|
(7) А на форму вывел плотность и литры?
|
|||
9
sapravka
30.12.14
✎
03:47
|
(8) вывел, НО
там условие еще есть вот ни как не пойму, как прописать условие в Процедура РассчитатьСуммуТабЧасти |
|||
10
SeraFim
30.12.14
✎
03:53
|
||||
11
GreyK
30.12.14
✎
03:55
|
(9) А зачем тебе "Процедура РассчитатьСуммуТабЧасти"? Тебе не нужна такая процедура, тебе нужен покой :)
|
|||
12
Andrewww123
30.12.14
✎
03:58
|
(9) Тогда куда-то не туда добавил реквизиты :)
|
|||
13
SeraFim
30.12.14
✎
03:59
|
Иди проспись лучше
|
|||
14
Web00001
30.12.14
✎
04:06
|
ты случайно не про функцию
Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Экспорт ТабЧасть = МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти); Если ТабЧасть = Неопределено Тогда // Нет такой таб. части в документе Возврат Ложь; Иначе Если ТабЧасть.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецЕсли; КонецФункции // ЕстьРеквизитТабЧастиДокумента() |
|||
15
Andrewww123
30.12.14
✎
04:09
|
А.. В форму добавил реквизиты, а у объекта метаданных не добавил, а в процедуру приходит СтрокаТабличнойЧасти - это именно строка объекта, а не таблицы формы. Так что ли?
|
|||
16
Andrewww123
30.12.14
✎
04:16
|
+ (15) Даже так: "ЭлементыФормы.Товары.ТекущиеДанные" там используются, а в дереве метаданных у документа реквзитов "плотность" и "литры" нет. Угадал же?
Кто-то спрашивал как мозг разминать по утрам, вот лучшая разминка - гадать, почти не имея информации :) |
|||
17
anaed
30.12.14
✎
06:37
|
(14) тоже про нее подумал, ТС она кстати в общем модуле ОбщегоНазначения. А то ведь догадаешься свою написать :)
(0) Если проблема в том что изменения для одного документа в общем модуле приводят к ошибкам, когда обрабатываются те документы где новых реквизитов нет, то можно пойти двумя путям: а) по тупому - проверять в общем модуле тип документа и в зависимости от типа работать с реквизитами табличной части б) по православному - проверять наличие реквизита через метаданные, т.е. использовать функцию из (14) |
|||
18
sapravka
30.12.14
✎
08:51
|
Утром вечером мудренее, решил в общем модуле ничего не трогать, а сделать все в форме документ:
Процедура ТоварыЦенаПриИзменении(Элемент) СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные; // Рассчитать реквизиты табличной части. Если СтрокаТабличнойЧасти.Литры = NULL Или СтрокаТабличнойЧасти.Литры = 0 Тогда СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * ?(СтрокаТабличнойЧасти.Количество = 0, ЗначениеПустогоКоличества, СтрокаТабличнойЧасти.Количество); Иначе СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Литры; КонецЕсли; ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); КонецПроцедуры // ТоварыЦенаПриИзменении() но тогда при проверке выходит ошибка: {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(1764,101)}: Переменная не определена (ЗначениеПустогоКоличества) СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * ?(СтрокаТабличнойЧасти.Количество = 0, <<?>>ЗначениеПустогоКоличества, СтрокаТабличнойЧасти.Количество); (Проверка: Толстый клиент (обычное приложение)) |
|||
19
Любопытная
30.12.14
✎
08:52
|
А что такое "ЗначениеПустогоКоличества"?
|
|||
20
Фокусник
30.12.14
✎
09:23
|
(18) "Утром вечером мудренее"
Правильно так: "Утро вечера мудренее" ;)
|
|||
21
anaed
30.12.14
✎
09:28
|
(0) А какой смысл литрами пытаться подменить количество? Для чего?
|
|||
22
Serg_1960
30.12.14
✎
09:30
|
(18) Ответ на вопрос (0):
Если ЭлементыФормы.Товары.ТекущаяСтрока = Неопределено Тогда |
|||
23
Serg_1960
30.12.14
✎
09:33
|
(18) Проще проверять типа так:
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Литры) И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Цена) И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Количество) Тогда |
|||
24
ktvladimir
30.12.14
✎
09:36
|
(22,23) не совсем так. Насколько я понимаю ТС добавил новые реквизиты в ТЧ, при этом в ОБЩЕЙ процедуре добавляет проверки на эти реквизиты. В остальных документах, использующих эти же процедуры естественно этих реквизитов нет, отсюда и конфликт. Отсюда смотри (14) там уже все указано т.е. проверка следующая
Если ЕстьРеквизитТабЧастиДокумента("Литры", МетаданныеДокумента, ИмяТабЧасти) И ЕстьРеквизитТабЧастиДокумента("Плотность", МетаданныеДокумента, ИмяТабЧасти) Тогда Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Литры) .... КонецЕсли; те сперва тебе нужно проверить есть ли вообще в тч такие реквизиты и если они есть то уже с ними работать |
|||
25
Фокусник
30.12.14
✎
09:37
|
(22) Ему нужно было проверить наличие реквизита в метаданных, т.к. пытался в общей процедуре забубенить частную доработку :)
Отловить ситуацию, когда в СтрокаТабличнойЧасти НЕ существует реквизит "Литры". |
|||
26
Serg_1960
30.12.14
✎
09:39
|
(22) Метаданные тут ни при чём.
Две фразы автора "В форму документа в табличную часть добавил два реквизита: плотность и литры."(0) и строка алгоритма "... = ЭлементыФормы.Товары.ТекущиеДанные" - не совместимы между собой. Значения элементов формы объекта могут быть не связаны с данными объекта (и соответственно отсутствовать в метаданных объекта). |
|||
27
anaed
30.12.14
✎
09:48
|
(22) см (1) там именно с метаданными косяк, а то что пишет автор совсем не то что ему нужно :)
|
|||
28
Serg_1960
30.12.14
✎
09:53
|
(27) я несколько об другом :(
Если автор только добавил реквизиты на форму(!) и не связал их с данными документа (или вообще не добавлял их в ТЧ документа), то проверять их наличие в ОбщийМодуль.ОбработкаТабличныхЧастей не имеет смысла - они отсутствуют по определению. |
|||
29
anaed
30.12.14
✎
09:56
|
(28) ну тогда вердикт один:
тс пригласите специалиста :) |
|||
30
Serg_1960
30.12.14
✎
10:04
|
Вот как это могло бы сработать в УПП:
ИмяТабличнойЧасти = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти); МетаданныеДокумента = ДокументОбъект.Метаданные(); Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Литры", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда |
|||
31
DrZombi
гуру
30.12.14
✎
10:45
|
(1) Самый Быстрый способ, проверять через "Попытку"
Самый медленный, через "СтрокаТЗ.Владелец()". И далее анализируешь структуру таблицы, чт ов сущности Медленно и для 1С неважно. Рекомендую использовать "Попытку" :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |