Имя: Пароль:
1C
 
8.2 как правильно заполнить ТЧ на форме значением по имолчанию?
0 RomaH
 
naïve
15.12.09
10:21
У услуги есть "типовой" набор используемых материалов

надо при выборе в документе оказанной услуги заполнить таблицу на управляемой форме набором материалов для последующего редактирования (исправить количество, добавить строки/удалить) (набор потом записывается в ТЧ документа)

как это правильно сделать? что разместить на форме? как заполнить?
1 NcSteel
 
15.12.09
10:23
Вызываешь из формы серверную процедуру, получаешь материалы и заполняешь объект.
2 RomaH
 
naïve
15.12.09
10:27
материалы отображать именно как ТЧ документа?

как заполнить таблицу из запроса? что во что преобразовывать? обход по строкам или можно в таблицу (элемент управляемой формы) запихнуть сразу ТЗ или результат запроса?
3 NcSteel
 
15.12.09
10:37
ТЗ не поддерживает управляемая форма. Проще всего ТЧ , если надо передать ТЗ на клиента то использую Массив структур.
4 TitanLuchs
 
15.12.09
10:43
(3) Эээээй, ты что такое говоришь, неправильно. При выборе услуги вызывать серверную процедуру, в ней получить нужную информацию запросом, затем просто выгрузить в ТЧ:

Объект.ТЧ.Загрузить(Запрос.Выполнить().Выгрузить());
5 RomaH
 
naïve
15.12.09
10:44
... другими словами
на форму кладу таблицу с источником данных "табличная часть документа"
потом на сервере выполняю запрос для получения таблицы материалов (например Материал/Количество)
как запихнуть полученный результат запроса в таблицу?
6 RomaH
 
naïve
15.12.09
10:45
(4) а потом просто перечитать/обновить объект на форме?
7 TitanLuchs
 
15.12.09
10:46
(6) Само обновится
8 RomaH
 
naïve
15.12.09
10:52
&НаСервере
Процедура ПолучитьТаблицуМатериалов()

Документ = РеквизитФормыВЗначение"Объект");

Документ.Материалы.Загрузить(...);

ЗначениеВРеквизитФормы(Документ,"Объект");

КонецПроцедуры


(пример из книги Радченко)
так?
9 NcSteel
 
15.12.09
11:00
(4) В каком месте я не правильно сказал.
10 TitanLuchs
 
15.12.09
11:25
(8) Я делал без строк

Документ = РеквизитФормыВЗначение"Объект");
ЗначениеВРеквизитФормы(Документ,"Объект");

Просто Объект.Материалы.Загрузить(...);

(9) Твой вариант сработает, но нет смысла конвертить ТЗ в массив структур и заполнять ТЧ из него построчно на клиенте. Лучше все сразу сделать на сервере. То есть твой вариант имеет место быть, но он неоптимален. Оговорюсь, что сам прибегал к подобному алгоритму, но это было исключение, так как просто загрузкой нужный функционал не получалось реализовать.
11 NcSteel
 
15.12.09
12:15
(10) ПОчитай 1,2,3

Я предложил сперва заполнить объект (тобишь ТЧ), но автор захотел в ТЗ все иметь , вот и родилось 3.
12 TitanLuchs
 
15.12.09
12:52
(11) Ну он неоптимально захотел, а ты неоптимально предложил )
13 RomaH
 
naïve
15.12.09
13:36
т.е. то что нарисовано в (8) в принципе работает
только не понятно ... если надо править именно сам объект - то можно вроде и так писать Объект.материалы.загрузить()

а вот если объявлен реквизит формы ... ну например ФИО - то к нему уже через реквизитФормыВЗначение ?
14 TitanLuchs
 
15.12.09
13:48
(13) Нет, к реквизиту формы из модуля формы обращаешься как к обычной переменной, без "Объект." и "РеквизитФормыВЗначение".
Ошибка? Это не ошибка, это системная функция.