Имя: Пароль:
1C
 
Заполнение Таблицы Значений на управляемой форме при открытии
0 Serdolik55
 
29.07.16
14:25
Коллеги, доброго времени суток!
Мне нужно в форме Заказа покупателя организовать интерактивную проверку остатков. Сделал так: создал общую форму ("Табло остатков") на неё кинул Таблицу значений с 3-мя колонками. В документе "Заказ покупателя" создал команду (кнопку), при нажатии которой запросом проверяются остатки товара в заказе и должны вывестись в эту несчастную форму.
Вроде всё элементарно, в обычных формах сделал бы на раз два,тут сижу уже полдня(((

Код ниже:

&НаКлиенте
Процедура ПроверитьНаличие(Команда)
    
    ФормаОстатков = ПолучитьФорму("ОбщаяФорма.ТаблоОстатков");
    ЗаполнитьФорму(ФормаОстатков);    
    ФормаОстатков.Открыть();
    
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьОстаткиПоставщика(Объект)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    Запрос.УстановитьПараметр("ДатаОстатков", ТекущаяДата());
    Запрос.Текст = "ВЫБРАТЬ
    |    ЗаказПокупателяЗапасы.Номенклатура
    |ПОМЕСТИТЬ Таб
    |ИЗ
    |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
    |ГДЕ
    |    ЗаказПокупателяЗапасы.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    ЗаказПокупателяЗапасы.Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Э_ЗапасыПоставщикаОстатки.Номенклатура,
    |    Э_ЗапасыПоставщикаОстатки.ОстатокОстаток КАК Остаток
    |ПОМЕСТИТЬ ТабОстатков
    |ИЗ
    |    Таб КАК Таб
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Э_ЗапасыПоставщика.Остатки(
    |                &ДатаОстатков,
    |                Номенклатура В
    |                    (ВЫБРАТЬ
    |                        Таб.Номенклатура
    |                    ИЗ
    |                        Таб КАК Таб)) КАК Э_ЗапасыПоставщикаОстатки
    |        ПО Таб.Номенклатура = Э_ЗапасыПоставщикаОстатки.Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Таб.Номенклатура,
    |    Таб.Номенклатура.Артикул КАК Артикул,
    |    ЕСТЬNULL(ТабОстатков.Остаток, 0) КАК Остаток
    |ИЗ
    |    Таб КАК Таб
    |        ЛЕВОЕ СОЕДИНЕНИЕ ТабОстатков КАК ТабОстатков
    |        ПО Таб.Номенклатура = ТабОстатков.Номенклатура";
    
    Возврат Запрос.Выполнить().Выгрузить();
КонецФункции


Ругается, что типа нельзя управляемую форму на сервер передавать, в принциипе правильно, она и так на сервере, а тогда как таблицу то эту заполнить?
1 hhhh
 
29.07.16
14:30
вот это что за бред?

ТаблицаОстатков = ДанныеФормыВЗначение(Форма.ТаблицаОстатков, Тип("ТаблицаЗначений"));

пишите


МояОфигеннаяТаблицаОстатков = ДанныеФормыВЗначение(Форма.ТаблицаОстатков, Тип("ТаблицаЗначений"));

не надо дублировать имена.
2 Numerus Mikhail
 
29.07.16
14:33
Передавай данные формы

ДанныеФормы = ФормаОстатков.Объект;
ЗаполнитьФорму(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, ФормаОстатков.Объект);
3 Serdolik55
 
29.07.16
14:56
(2) Спасибо, разобрался. Заработало
4 lodger
 
29.07.16
15:32
"Неправильно ты, дядя Фёдор, бутерброд ешь" (с)
в современной идеологии надо было сделать так:
1) на любой форме с таблицей номенклатуры команда.
команда уходит на сервер выгружает из таблицы формы колонку номенклатуры и необходимые характеристики\серии.
возвращается на клиента и инициирует ОткрытьФорму("СуперФормаОстатков",Параметры), где в параметрах будет табличка с выгруженной ранее номенклатурой и прочим(туда же можно подать и необходимое число, чтобы сразу показать хват или нехват).
2) в СуперФормаОстатков ПриСозданииНаСервере происходит разбор входящих параметров, запрос к остаткам и все что еще заблагорассудится.

в итоге выиграете на пропускной способности и количестве обращений к серверу, что ведет к ускорению работы пользовательского интерфейса.
5 lodger
 
29.07.16
15:47
(4) ах да. и самый главный выигрыш - не надо записывать заказ, а работать с текущими данными в текущей форме.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан