Вход | Регистрация


Передача данных с сервера на клиент 1с УТ11 УФ

Передача данных с сервера на клиент 1с УТ11 УФ
Я
   Casper211
 
03.11.16 - 10:29
При изменении поля в ТЧ необходимо извлечь данные из регистра и записать их в данную сроку
я сделал через ТЗ, но потом понял что ее нельзя передавать на клиент, так как там она не существует


&НаКлиенте
Процедура ТабличнаяЧастьВАТСсылкаНаДокПриИзменении(Элемент)
Для каждого СтрокаТЗ из ТабличнаяЧастьВАТСсылкаНаДокПриИзмененииНаСервере(Параметр) Цикл
ЗаполнитьЗначенияСвойств(Элементы.ТабличнаяЧастьВАТ.ТекущиеДанные,СтрокаТЗ);
КонецЦикла;
КонецПроцедуры


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


как мне реализовать заданную задачу?чтобы работала для тонкого клиента и веб клиента? Через массив или структуру?если так то подскажите как. Спасибо
 
 
   Casper211
 
1 - 03.11.16 - 10:32
ТабЗначВМассив(ТаблицаЗначений)
необходимо это использовать для Тз на сервере, передать на клиент, а затем на клиенте из массива записать?
   Defender aka LINN
 
2 - 03.11.16 - 10:33
Реквизит формы создать
   Casper211
 
3 - 03.11.16 - 10:59
и использовать? ЗначениеВРеквизитФормы() или как?
   Casper211
 
4 - 03.11.16 - 11:05
наверное нет. поскольку РеквизитФормыВЗначение() возвращает ТЗ
   Casper211
 
5 - 03.11.16 - 12:25
(2) на сервере выгрузить значения в реквизит (МояТЗ)?
&НаСервере
Процедура ТабличнаяЧастьВАТСсылкаНаДокПриИзмененииНаСервере(Параметр)
    Запрос = Новый Запрос;
    Запрос.Текст =     "ВЫБРАТЬ
                       |    ВАТОстатки.ДокументПоступлениеТоваровУслуг,
                       |    ВАТОстатки.СуммаВАТОстаток,
                       |    ВАТОстатки.Поставщик,
                       |    ВАТОстатки.Контрагент
                       |ИЗ
                       |    РегистрНакопления.ВАТ.Остатки КАК ВАТОстатки
                       |ГДЕ
                       |    ВАТОстатки.ДокументПоступлениеТоваровУслуг = &ДокПТУ
                       |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.УстановитьПараметр("ДокПТУ", Параметр);
    //МояТЗ.ЗаполнитьЗначения(Запрос.Выполнить().Выгрузить());

        //выгрузить данные с ТЗ в реквизит как то

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

и на клиенте с реквизита в ТЧ?
да?


&НаКлиенте
Процедура ТабличнаяЧастьВАТСсылкаНаДокПриИзменении(Элемент)
ТабличнаяЧастьВАТСсылкаНаДокПриИзмененииНаСервере(Параметр);
        Объект.ТабличнаяЧастьВАТ.Очистить();
        Для каждого СтрокаТЗ из МояТЗ Цикл
            ЗаполнитьЗначенияСвойств(Элементы.ТабличнаяЧастьВАТ.ТекущиеДанные,СтрокаТЗ);
        КонецЦикла;
КонецПроцедуры
   write
 
6 - 03.11.16 - 12:26
(0) Вы в строку таб. части (текущиеданные) записываете несколько раз данные строк СтрокаТЗ в итоге там окажется последняя строка из СтрокаТЗ. Каков смысл получения ТЗ тогда?
   write
 
7 - 03.11.16 - 12:27
(0) Вы вызываете контекстную серверную процедуру, что мешает Вам выполнить все необходимые действия на сервере?
   Casper211
 
8 - 03.11.16 - 12:28
(6) у меня в результате запроса всегда будет 1 строка
   Casper211
 
9 - 03.11.16 - 12:29
(7) а как в текущую строку ТЧ документа записать данные на сервере?
   Casper211
 
10 - 03.11.16 - 12:30
Текущие данные таблицы недоступны на сервере
 
 Рекламное место пустует
   write
 
11 - 03.11.16 - 12:31
(8) Тогда используйте структуру.
   Casper211
 
12 - 03.11.16 - 13:15
(11) Спасибо!!!Вот так??


&НаКлиенте
Процедура ТабличнаяЧастьВАТСсылкаНаДокПриИзменении(Элемент)
Для каждого СтрокаТЗ из ТабличнаяЧастьВАТСсылкаНаДокПриИзмененииНаСервере(Параметр) Цикл
                Если СтрокаТЗ.Ключ = "блабла" Тогда
                    Элементы.ТабличнаяЧастьВАТ.ТекущиеДанные=СтрокаТЗ.Значение;    
                //ЗаполнитьЗначенияСвойств(Элементы.ТабличнаяЧастьВАТ.ТекущиеДанные,СтрокаТЗ);

            КонецЦикла;


&НаСервере
Функция ТабличнаяЧастьВАТСсылкаНаДокПриИзмененииНаСервере(Параметр)
    Запрос = Новый Запрос;
    Запрос.Текст =     "ВЫБРАТЬ
                       |    ВАТОстатки.ДокументПоступлениеТоваровУслуг,
                       |    ВАТОстатки.СуммаВАТОстаток,
                       |    ВАТОстатки.Поставщик,
                       |    ВАТОстатки.Контрагент
                       |ИЗ
                       |    РегистрНакопления.ВАТ.Остатки КАК ВАТОстатки
                       |ГДЕ
                       |    ВАТОстатки.ДокументПоступлениеТоваровУслуг = &ДокПТУ
                       |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.УстановитьПараметр("ДокПТУ", Параметр);
    НужныеДанные = Новый Структура;
    Для каждого СтрокаТЗ из Запрос.Выполнить().Выгрузить()Цикл
        НужныеДанные.Вставить("ОстатокВАТ",СтрокаТЗ.СуммаВАТОстаток);
        НужныеДанные.Вставить("КоличествоВАТ",СтрокаТЗ.СуммаВАТОстаток);
        Если Объект.ВидОперации = Перечисления.ВидыОперацийВАТ.Передача  Тогда
              НужныеДанные.Вставить("СуммаВАТ",СтрокаТЗ.СуммаВАТОстаток);
        Иначе  НужныеДанные.Вставить("СуммаВАТ",(СтрокаТЗ.ДокументПоступлениеТоваровУслуг.СуммаДокумента*Объект.СтавкаВАТ)/100);
        КонецЕсли; 
        НужныеДанные.Вставить("Партнер",СтрокаТЗ.ДокументПоступлениеТоваровУслуг.Партнер);
        НужныеДанные.Вставить("СуммаДок",СтрокаТЗ.ДокументПоступлениеТоваровУслуг.СуммаДокумента);
    КонецЦикла;
Возврат НужныеДанные; 
КонецФункции
   Casper211
 
13 - 03.11.16 - 13:28
(11) а структура подойдет? если в результате запроса будет несколько записей?
   write
 
14 - 03.11.16 - 13:32
(12) Ни надо ни каких циклов ЗаполнитьЗначенияСвойств (Элементы.ТабличнаяЧастьВАТ.ТекущиеДанные,ТабличнаяЧастьВАТСсылкаНаДокПриИзмененииНаСервере(Параметр));
(13) Как несколько строк запроса вы будете записывать в одну строку?
   Casper211
 
15 - 03.11.16 - 13:34
(14) Спосибо!
для варианта с 1 записью я сделал. А если их несколько? (Т.е. кнопкой "заполнить" заполнить все данные в ТЧ с результата запроса) будет несколько строк
   write
 
16 - 03.11.16 - 13:38
(15) Если всю таблицу тогда можно и на сервере загрузить Объект.ТабличнаяЧастьВАТ.Загрузить(Запрос.Выполнить().Выгрузить())
   shpioleg
 
17 - 03.11.16 - 13:55
(0) Если не хочешь заполнять/изменять ТЧ на сервере, то делай вызов сервера без контекста и возвращай на клиент  массив структур.
   Casper211
 
18 - 03.11.16 - 18:07
(16) Спасибо за помощь, возможно посоветуете книгу по управляемых формах? или (17) , чтобы понять что можно на сервере (клиенте) или без контекста, а что нет?

Список тем форума
Рекламное место пустует  Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует