![]() |
|
Не работает УФ ИзменитьРеквизиты при вызове из модуля | ☑ | ||
---|---|---|---|---|
0
tciban
14.06.16
✎
14:17
|
Уважаемые коллеги! подскажите в чем может быть дело! 1С 8.3.8.1747
разместил в форме процедуру &НаСервере Процедура ДобавитьКолонкиВалютыКурсаВТаблицуНаСервере(Форма, ИмяТаблицы) ДобавляемыеРеквизиты = Новый Массив; // Добавить реквизит. ТипыРеквизита = Новый Массив; ТипыРеквизита.Добавить(Тип("СправочникСсылка.Валюты")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита); НовыйРеквизит = Новый РеквизитФормы("исхВалюта", // имя ОписаниеТиповДляРеквизита,// тип "Объект."+ИмяТаблицы, // путь "", // заголовок Ложь); // сохраняемые данные ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); // Добавить реквизит. ТипыРеквизита = Новый Массив; ТипыРеквизита.Добавить(Тип("Число")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита); НовыйРеквизит = Новый РеквизитФормы("исхКурс", // имя ОписаниеТиповДляРеквизита,// тип "Объект."+ИмяТаблицы, // путь "", // заголовок Ложь); // сохраняемые данные ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); КонецПроцедуры Вызываю ее ПриСозданииНаСервере. Все хорошо. Перенес ее в серверный модуль (т.к. она понадобиться еще во многих формах). Отрабатывается без ошибки, но после колонок исхВалюта и исхКурс в таблице не оказывается! Что не так?! |
|||
1
Fedor-1971
14.06.16
✎
14:27
|
(0)"Не так" - место вызова, скорее всего вызываешь прямо из процедуры/функции НаКлиенте (доступ к контексту формы недостаточен для его модификации). Пробуй сначала перейти в процедуру НаСервере (получишь серверный контекст формы), а потом вызывай свой модификатор.
|
|||
2
tciban
14.06.16
✎
14:41
|
Перепроверил. Вызываю так:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбработкаТабличныхЧастей.ДобавитьКолонкиВалютыКурсаВТаблицуНаСервере(ЭтаФорма, "Спецификация"); ОбработкаТабличныхЧастей.ЗаполнитьРасчетныеКолонки(ЭтаФорма, "Спецификация"); КонецПроцедуры Все работает. Но если вызываю процедуру ДобавитьКолонкиВалютыКурсаВТаблицуНаСервере в начале процедуры ЗаполнитьРасчетныеКолонки, то не работает. Процедура ЗаполнитьРасчетныеКолонки(Форма, ИмяТаблицы, ЗначениеПустогоКоличества = 0) Экспорт Объект = Форма.Объект; ДобавитьКолонкиВалютыКурсаВТаблицуНаСервере(Форма, ИмяТаблицы); Для Каждого СтрокаТаблицы Из Объект[ИмяТаблицы] Цикл Если СтрокаТаблицы.Свойство("исхВалюта") Тогда СтрокаТаблицы.исхВалюта = СтрокаТаблицы.Валюта; СтрокаТаблицы.исхКурс = СтрокаТаблицы.Курс; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
3
tciban
14.06.16
✎
14:42
|
СтрокаТаблицы.Свойство("исхВалюта") = ложь почему то
|
|||
4
tciban
14.06.16
✎
14:47
|
И до кучи еще вопрос знатокам: как проверить что в ТЧ, которую я передаю в ЗаполнитьРасчетныеКолонки(Форма, ИмяТаблицы) есть колонка Валюта? Что бы не добавлять исхВалюта если Валюты нет.
|
|||
5
tciban
14.06.16
✎
14:48
|
Ответ на первый вопрос нашел - поменял местами первые 2 строки процедуры ЗаполнитьРасчетныеКолонки
|
|||
6
Cyberhawk
14.06.16
✎
14:49
|
Я что-то не вижу, чтобы ты какую-то колонку добавлял в ЭУ. Ты добавил только в реквизиты, а нужно еще и ЭУ нарисовать с путем к этому реквизиту
|
|||
7
tciban
14.06.16
✎
14:51
|
Мне не нужна видимость колонки, нужен только реквизит - колонка, для хранения исх. значений, которые я туда пишу при открытии формы документа :)
|
|||
8
Cyberhawk
14.06.16
✎
15:01
|
А, ясно.
Проверять существование реквизита / колонки реквизита где хочешь - на клиенте или на сервере? |
|||
9
tciban
14.06.16
✎
15:02
|
На сервере
|
|||
10
Cyberhawk
14.06.16
✎
15:07
|
Ну тогда или метод в лоб (через попытку) тебе в помощь, или так:
РеквизитФормыКоллекция.Очистить(); ТЗ = РеквизитФормыКоллекция.Выгрузить(); #Если _ Тогда ТЗ = Новый ТаблицаЗначений; #КонецЕсли КоллекцияКолонокТЗ = ТЗ.Колонки; |
|||
11
Cyberhawk
14.06.16
✎
15:07
|
Само собой, коллекцию передавать по значению
|
|||
12
Cyberhawk
14.06.16
✎
15:09
|
+ еще у строки коллекции есть метод Свойство(), но это прокатит, если кол-во строк у тебя в коллекции есть...
|
|||
13
tciban
14.06.16
✎
15:12
|
Через свойство сразу не стал делать, т.к. строк может не быть. Сделал так:
Об = Форма.РеквизитФормыВЗначение("Объект"); Если ОбщегоНазначенияЕИС.ЕстьРеквизитТабЧастиДокумента("Валюта", Об.Метаданные(), ИмяТаблицы) Тогда ДобавитьКолонкиВалютыКурсаВТаблицуНаСервере(Форма, ИмяТаблицы); КонецЕсли; Т.е. через попытку, классическим способом. Но это как то громоздко, может есть другой спсоб? |
|||
14
tciban
14.06.16
✎
15:13
|
В принципе можно через свойство. Добавить строку, проверить, удалить строку...
|
|||
15
Cyberhawk
14.06.16
✎
16:18
|
"через попытку, классическим способом. Но это как то громоздко, может есть другой спсоб?"
Я вроде уже описал его выше |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |