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


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


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


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

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


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


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


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