данные формы элемент коллекции

Типы данных формы

Для представления в форме объектов конфигурации (справочники, документы и т.п.) существуют специальные типы данных:

Прикладной объект представлен либо одним, либо несколькими элементами данных формы. Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).

Таким образом форма содержит некоторую «проекцию» данных объектов в виде своих собственных типов данных и автоматически выполняет преобразование между ними при необходимости. Однако, можно и самостоятельно преобразовать объект в данные формы и обратно с использованием глобальных методов:

Аналогичные методы, предназначенные для конвертирования значений реквизитов формы в прикладные объекты и обратно, существуют и у самой управляемой формы:

Методы, работающие с прикладными объектами, доступны только в серверных процедурах формы. При выполнении стандартных действий формы с основным реквизитом (открытие формы, выполнение стандартной команды Записать() и т. д.) преобразование выполняется автоматически.

Как уже упоминалось, у формы также есть методы, позволяющие преобразовать прикладные данные в реквизит формы и наоборот. Использование данных методов обычно удобнее, так как они имеют, например, информацию о типе реквизита формы. Кроме этого, метод РеквизитФормыВЗначение() выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений.

Источник

Передача с клиента на сервер ДанныеФормыКоллекция

Подскажите как правильно передавать объекты типа ДанныеФормыКоллекция на сервер, там его изменять, а затем возвращать обратно. Пытаюсь сделать так, вылетает в ошибку:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

Объект.СсылкаНаОбъект = ОбъектыНазначенияМассив[0];
ЗаполнитьОбъект();
Ответ = Вопрос(«Документ автоматически переСОХРАНИТСЯ. «, РежимДиалогаВопрос.ОКОтмена);
Если Ответ = КодВозвратаДиалога.ОК Тогда

Окна = ПолучитьОкна();
Для Каждого Окно Из Окна Цикл
Если Найти(Окно.Заголовок, Объект.СсылкаНаОбъект) Тогда
ОбъектФормы = Окно.ПолучитьСодержимое();
РабочаяГруппа = ОбъектФормы.РабочаяГруппаТаблица;
Если ОбъектФормы.РабочаяГруппаТаблица.Количество() = 1 Тогда
РГ = ОбъектФормы.РабочаяГруппаТаблица.Добавить();
ЗаполнитьОбъектРабочаяГруппа(РГ);
КонецЕсли;
Для Каждого Элемента Из ОбъектФормы.РабочаяГруппаТаблица Цикл
Сообщить(Элемента.Участник);
КонецЦикла;
ОбъектФормы.Прочитать();

&НаСервере
Функция ЗаполнитьОбъектРабочаяГруппа(РГ)

РГ.Участник = Справочники.Пользователи.НайтиПоНаименованию(«Вася»);
РГ.Иконка = 3;

Правильно их туда не передавать.
Они для этого не предназначены.

Вообще, вызов сервера в цикле это УГ.

(1) Тогда вопрос, как объекты типа ДанныеФормыКоллекция изменять на клиенте?

На счет вызова сервера в цикле сам понимаю что УГ.

Тип: Произвольный.
Данные формы, имеющие совместимую структуру.
Описание:

Преобразует объект прикладного типа в универсальный объект данных.

Сервер, толстый клиент, мобильное приложение(сервер).

(4), (6) Это методы оставшиеся с бета версии 8.2
Если вы их используется то с большой вероятностью что-то делаете не так.

В данном случае вообще ни какого смысла в конвертации не видно.
В чем проблема просто добавить строку в коллекцию и установить значения ее полей?

Источник

Как передать ДанныеФормыЭлементКоллекции на Сервер или считать все имена ДФК?

Вопрос: Как передать ДанныеФормыЭлементКоллекции на Сервер?
Если без структуры в общем случае не обойтись, тогда

Вопрос 2: Как автоматически создать структуру по всем колонкам ДанныеФормыКоллекция?

Как программно считать все имена колонок ДанныеФормыКоллекция?

у меня получилось как-то так:

Если это УФ и ТаблицаФормы, которая программно создаётся запросом и выводится на форму, то потом считать её содержимое можно через такой вариант:
ЭтаФорма.ИмяРеквизитаТакКакВыЕгоНазвалиПриВыводеНаФорму.Выгрузить()

вы вывели на УФ вот такой процедурой какую-то таблицу созданную заранее запросом или руками:

// Делаем описание типа ТаблицаЗначений
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип(«ТаблицаЗначений»));
ОписаниеТипа = Новый ОписаниеТипов(МассивТипов);

// Создаём описание реквизита на основании этого типа
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(
Новый РеквизитФормы(«ТабРеквизит», ОписаниеТипа)
);

// Создаём этот реквизит (с именем ТабРеквизит)
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);

// Создаём элемент на форме с именем ТабНаФорме
// и связываем его с реквизитом ТабРеквизит
ТаблицаПолейВыбора = ЭтаФорма.Элементы.Добавить(«ТабНаФорме», Тип(«ТаблицаФормы»),ГруппаФормы);
ТаблицаПолейВыбора.ПутьКДанным = «ТабРеквизит»;
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;

ТаблицаПолейВыбора.УстановитьДействие(«ПриНачалеРедактирования», «ТабРеквизитПриНачалеРедактирования»);
ТаблицаПолейВыбора.УстановитьДействие(«ПередОкончаниемРедактирования», «ТабРеквизитПередОкончаниемРедактирования»);

// реквизит ТабРеквизит и соответствующий
// ему элемент формы ТабНаФорме созданы
// нами программно выше

// 1. добавляем колонки из ТабВкоде в реквизит ТабРеквизит

НовыеРеквизиты = Новый Массив;

Для Каждого Колонка Из ТабВКоде.Колонки Цикл
НовыеРеквизиты.Добавить(
Новый РеквизитФормы(
Колонка.Имя, Колонка.ТипЗначения,
«ТабРеквизит»
)
);
КонецЦикла;

// 2. добавляем колонки из ТабВКоде в элемент ТабНаФорме

Для Каждого Колонка Из ТабВКоде.Колонки Цикл
НовыйЭлемент = ЭтаФорма.Элементы.Добавить(
«ТабРеквизит» + «_» + Колонка.Имя, Тип(«ПолеФормы»), ЭтаФорма.Элементы[«ТабНаФорме»]
);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = «ТабРеквизит» + «.» + Колонка.Имя;

Если Колонка.Имя = «ВРезервеПоСпецификации» Тогда

// 3. наконец, передаём данные из ТабВКоде в ТабРеквизит

Источник

ДанныеФормыКоллекция.Выгрузить() Метод недоступен на клиенте

Доброго всем дня!
Передаю из обычной формы в общий модуль (стоят галки Сервер, Вызов сервера) ДанныеФормыСтруктура, в которой есть ДанныеФормыКоллекция
При попытке использовать методы ДанныеФормыКоллекция.Выгрузить() и ДанныеФормыКоллекция.Загрузить() пишет «Метод недоступен на клиенте».
При этом всё остальное работает как на сервере. Недовольны только эти два метода.
Видимо, я что-то глобальное недопомнимаю или пора на море. Кто может помочь?

Функция вызова в обычной форме:

Если Модифицированность() Тогда
Ответ = Вопрос(«Перед созданием документа ЯХ счет должен быть записан! Записать?»,РежимДиалогаВопрос.ДаНет,60,КодВозвратаДиалога.Да,»Записать?»);
Если Ответ = КодВозвратаДиалога.Да Тогда
Записать();
Иначе
Возврат;
КонецЕсли;
КонецЕсли;

Форма = ПолучитьФорму(«Документ.ЯХПеремещение.Форма.ФормаДокумента»);
ДанныеФормы = Форма.Объект;
ЯХ.СоздатьДокументЯХПеремещениеНаОснованииСчета(ДанныеФормы, Ссылка);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();

Функция обработки в общем модуле:

Функция СоздатьДокументЯХПеремещениеНаОснованииСчета(ДокументЯХ, ДокументОснование) Экспорт

ЯХОтбора = ПоискЯчейкиОтбора(Контрагент);
ДокументЯХ.ЯХОтбора = ЯХОтбора;

ДокументЯХ.Дата = ТекущаяДата();
ДокументЯХ.ДокументОснование = ДокументОснование;
ДокументЯХ.Контрагент = Контрагент;

ТЗРеализации = ДокументОснование.Товары.Выгрузить();
ТЗЯХ = ДокументЯХ.Товары.Выгрузить(); //ругается

РезультатПодбора = НайтиЯХИсточники(ТЗРеализации, ТЗЯХ, ДокументЯХ.ЯХОтбора, Истина);
ТЗЯХ.ЗаполнитьЗначения(ЯХОтбора, «ЯХПриемник»);

Структура данных для моделирования данных, редактируемых в управляемой форме

Источник

реквизит Объекта (тип ТаблицаЗначений) преобразовывает в тип ДанныеФормыКоллекция

(1) egorover, там на клиенте есть похожие методы.

Вам какого не хватило?

(2) ture, ооо приветствую Вас.
переделываю с 8.2 на 8.3, в модуле формы прописана расшифровка из таблицы, заполнение расшифровок этой таблицы в модуле объекта

РасшПериод = тт_пер.Скопировать(); //копирую ТаблицуЗначений тт_пер в РасшПериод

теперь в модуле формы хочу обратится к реквизиту объекта РасшПериод, но он уже ДанныеФормыКоллекция

и методы типа фф=РасшПериод.Найти(Отб.Период); уже не действуют

(13) Boneman,
ТекущаяТаблица = Новый ТаблицаЗначений;
ТекущаяТаблица = РеквизитФормыВЗначение(«Объект.Расш»);

так то же пустая ТекущаяТаблица

(3) Meteorage, да я уже с клиента обращаюсь к реквизиту РасшПериод, 1С уходит в исключение

&НаСервере
Функция тт_расшНайтиСтроки(Знач СтруктураНайти)

ТекущаяТаблица = РеквизитФормыВЗначение(«ОбъектРасш»);// т.е. «ОбъектРасш» реквизит формы, который Объект.Расш

по причине:
Недопустимое значение параметра (параметр номер ‘1’)

А вот, если будешь программно к объекту обращатся, то там уже будут только реквизиты объекта и все.

(26) Boneman, заполняю в модуле объекта с директивой
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
черт там же функция

(32) egorover, ты хоть вчитайся что тебе пишут, и как нужно применять методы.
Иван в (30) уже тебе кодом написал, как сделать мои 3 пункта.

Данные формы, в модуле объекта, ты не получишь никогда, потому-что формы там просто нет и не может быть.
Туда ты должен передавать готовые для переваривания объекты.

(25) egorover, если нет обратного преобразования, то надо использовать:

+ (28) точнее надо использовать название переменной объекта, с помощью которой вызывался метод модуля объекта: например,

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *