PDA

Просмотр полной версии : Как сделать отбор в справочнике?



EVoronova
20.11.2015, 09:23
Здравствуйте,

пытаюсь реализовать автоматическую подстановку реквизита, при изменении элемента формы.

Ошибки не выдает, но и реквизит не подставляет.

Я только учусь, поэтому не судите строго:blush::blush::blush:

1591

avm3110
20.11.2015, 09:35
Ошибки не выдает, но и реквизит не подставляет.
А как он может вернуть? Почитать в "букваре" - а есть ли в контексте "Клиент" такие объекты как "справочник ссылка"?
Т.е. хинт "а наподумать" - Процедура на стороне сервера "это" возвращает, теперь вопрос - а может ли это воспринять "на прямую" процедура в контексте "на клиенте"?

EVoronova
20.11.2015, 10:46
А как это реализовать? я пыталась с помощью метода справочника "Выбрать", получить выборку и с помощью отбора получить нужный объект, и у него взять нужный реквизит и отправить его в процедуру на клиенте.

Но я не понимаю почему метод "Выбрать", возвращает выборку с неопределенными значениями, если я не накладываю значение отбора, он ведь должен вернуть все объекты справочника ?

Подскажите пожалуйста, как реализовать эту задачу? " на подумать" я уже потратила много времени=) но у меня ничего не выходит........(
1592

EVoronova
20.11.2015, 10:46
А как это реализовать? я пыталась с помощью метода справочника "Выбрать", получить выборку и с помощью отбора получить нужный объект, и у него взять нужный реквизит и отправить его в процедуру на клиенте.

Но я не понимаю почему метод "Выбрать", возвращает выборку с неопределенными значениями, если я не накладываю значение отбора, он ведь должен вернуть все объекты справочника ?

Подскажите пожалуйста, как реализовать эту задачу? " на подумать" я уже потратила много времени=) но у меня ничего не выходит........(
1592

avm3110
20.11.2015, 13:02
А как это реализовать? я пыталась с помощью метода справочника "Выбрать", получить выборку и с помощью отбора получить нужный объект
В качестве совета - минимизируйте на 8-ке использование "объектной модели" програмирования (это несёт довольно существенные издержки на платформу "лишними действиями"). Сделайте запрос и вытаскивайте им (в контексте сервера) все что нужно.
Ну и небольшая выдержка из "букваря"

7.2.2. Преобразование данных прикладных объектов в данные формы и обратно
Для конвертирования прикладных объектов в данные формы и обратно существует набор глобальных методов:

? ЗначениеВДанныеФормы(),

? ДанныеФормыВЗначение(),

? КопироватьДанныеФормы().

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

Во время конвертирования данных формы в прикладной объект нужно учитывать их совместимость.

? ЗначениеВДанныеФормы() – преобразует объект прикладного типа в данные формы.

? ДанныеФормыВЗначение() – преобразует данные формы в объект прикладного типа.

? КопироватьДанныеФормы() – производит копирование данных формы, обладающих совместимой структурой. Возвращает значение Истина, если копирование произведено, или Ложь, если структура объектов несовместима.

При преобразовании данных формы в прикладные объекты и обратно используется кеширование объектов, но при этом выполняется проверка актуальности версии объекта в кеше.


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

Копировать в буфер обмена

&НаСервере
Процедура ПриСозданииНаСервере(Отка� �, СтандартнаяОбработка)
ОбъектТовар = Товары.НайтиПоНаименовани� �("Кофейник").ПолучитьОбъект();
ЗначениеВДанныеФормы(Объе� �тТовар, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Записать()
ЗаписатьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНаСервере()
ОбъектТовар = ДанныеФормыВЗначение(Объе� �т, Тип("СправочникОбъект.Товары"));
ОбъектТовар.Записать();
КонецПроцедурыТакже у объекта УправляемаяФорма существуют методы, доступные на сервере:

? ЗначениеВРеквизитФормы() – выполняет преобразование объекта прикладного типа в заданный реквизит формы.

? РеквизитФормыВЗначение() – преобразует реквизит данных формы в объект прикладного типа.

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

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

ВНИМАНИЕ! Колонки реквизитов, не связанные с данными (см. здесь), не участвуют в преобразовании значений между данными формы и объектами информационной базы и обратно. Колонки, отсутствующие в данных объекта, очищаются при преобразовании в данные формы.

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

Приведем пример использования этих методов.

Копировать в буфер обмена

&НаСервере
Процедура ПересчитатьНаСервере()
// Преобразует реквизит Объект в прикладной объект.
Документ = РеквизитФормыВЗначение("Объект");
// Выполняет пересчет методом, определенным в модуле документа.
Документ.Пересчитать();
// Преобразует прикладной объект обратно в реквизит.
ЗначениеВРеквизитФормы(До� �умент, "Объект");
КонецПроцедуры