Инциализация ТЗ в коде формы

1. Dobropool 09.09.22 13:39 Сейчас в теме
Доброго времени суток. Пытаюсь перевести обработку с обычных форм на управляемые и столкнулся с проблемой. В не процедур и функций была инициализирована таблица значений
ТаблицаВидов=Новый ТаблицаЗначений;
ТаблицаВидов.Колонки.Добавить("НомерВида");
ТаблицаВидов.Колонки.Добавить("Объект");
ТаблицаВидов.Колонки.Добавить("Документ");
ТаблицаВидов.Колонки.Добавить("Вид");


Но на управляемых выдает ошибку:

Тип не определен (ТаблицаЗначений)
ТаблицаВидов=Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)

Не смог найти ответы в интернете, подскажите пожалуйста как с этим работать и правильно инициализировать ТЗ.
Найденные решения
4. nomad_irk 72 09.09.22 13:50 Сейчас в теме
(3)Добавлять нужно в виде реквизита формы
Кодом на клиенте создать нельзя, можно только на сервере.
5. comptr 31 09.09.22 13:55 Сейчас в теме
Управляемые формы "живут" на клиенте и на сервере. Клиент ничего не знает про ТаблицаЗначений, такой тип объекта существует только на сервере.
Процедуры в модуле формы объявляются с дерективами компиляции (&НаКлиенте, &НаСервере и т.д.), что определяет, где будут выполняться эти процедуры и какой контекст им будет доступен. Таблица значений может существовать только на стороне сервера, а значит и процедура по работе с ней должна быть серверной.
Простой пример:

&НаКлиенте
Процедура ПолучитьМассив()
    СписокДокументов = ПолучитьМассивИзТЗНаСервере()
КонецПроцедуры

&НаСервере
Функция ФункцияПолучитьДокументыИзТЗНаСервере()
    МояТаблица = Новый ТаблицаЗначений;
    МояТаблица .Колонки.Добавить("НомерВида");
    МояТаблица .Колонки.Добавить("Объект");
    МояТаблица .Колонки.Добавить("Документ");
    МояТаблица .Колонки.Добавить("Вид");
    
    НоваяСтрока = МояТаблица.Добавить();
    
    Возврат МояТаблица.ВыгрузитьКолонку("Документ");
КонецФункции
Показать


Для ознакомления можно почитать вот это:
https://chelyabinsk.1cbit.ru/blog/upravlyaemye-formy-1s-8-3/
https://xn----1-bedvffifm4g.xn--p1ai/news/2017-03-09-how-server-call-works/
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. comptr 31 09.09.22 13:45 Сейчас в теме
ТаблицаВидов=Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)

Открываем справку про ТаблицаЗначений и видим:
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
3. Dobropool 09.09.22 13:46 Сейчас в теме
(2) Справку я видел, но не совсем понял. Поэтому и спрашиваю как правильно. Или на управляемых формах ее нельзя объявить вне процедур и функций?
4. nomad_irk 72 09.09.22 13:50 Сейчас в теме
(3)Добавлять нужно в виде реквизита формы
Кодом на клиенте создать нельзя, можно только на сервере.
6. comptr 31 09.09.22 19:50 Сейчас в теме
(3) если не указать дерективу компиляции перед процедурой, она будет считаться серверной. С переменными, насколько я помню, так же. Т.е. объявить её можно будет, она будет существовать только на сервере и будет очищаться между серверными вызовами, т.е. хранить в ней данные получится только в пределах одной цепочки серверных вызовов.
Если нужно хранить данные дольше, то нужен реквизит формы. Его, кстати, можно добавить программно, если форма на поддержке и хочется по минимуму в неё вмешиваться.
5. comptr 31 09.09.22 13:55 Сейчас в теме
Управляемые формы "живут" на клиенте и на сервере. Клиент ничего не знает про ТаблицаЗначений, такой тип объекта существует только на сервере.
Процедуры в модуле формы объявляются с дерективами компиляции (&НаКлиенте, &НаСервере и т.д.), что определяет, где будут выполняться эти процедуры и какой контекст им будет доступен. Таблица значений может существовать только на стороне сервера, а значит и процедура по работе с ней должна быть серверной.
Простой пример:

&НаКлиенте
Процедура ПолучитьМассив()
    СписокДокументов = ПолучитьМассивИзТЗНаСервере()
КонецПроцедуры

&НаСервере
Функция ФункцияПолучитьДокументыИзТЗНаСервере()
    МояТаблица = Новый ТаблицаЗначений;
    МояТаблица .Колонки.Добавить("НомерВида");
    МояТаблица .Колонки.Добавить("Объект");
    МояТаблица .Колонки.Добавить("Документ");
    МояТаблица .Колонки.Добавить("Вид");
    
    НоваяСтрока = МояТаблица.Добавить();
    
    Возврат МояТаблица.ВыгрузитьКолонку("Документ");
КонецФункции
Показать


Для ознакомления можно почитать вот это:
https://chelyabinsk.1cbit.ru/blog/upravlyaemye-formy-1s-8-3/
https://xn----1-bedvffifm4g.xn--p1ai/news/2017-03-09-how-server-call-works/
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот