Имя: Пароль:
1C
1С v8
УФ: текущая строка таблицы формы на сервере
,
0 OnePrg
 
18.07.22
10:19
Есть таблица значений на форме (не табличная часть). Как на сервере получить данные текущей строки?
1 OnePrg
 
18.07.22
10:20
Сори - поторопился, не в ту ветку отправил. Админы переместите пожалуйста в 1С8.
2 vicof
 
18.07.22
10:20
Передать их с клиента
3 Kassern
 
18.07.22
10:21
Элементы.ТЗ.ТекущиеДанные/ТекущаяСтрока
4 СеменовСемен
 
18.07.22
10:23
Тз.найтипоиндентификатору(текущаястрока)
5 unenu
 
18.07.22
10:23
&НаКлиенте
Функция ПолучитьДанныеФормыЭлементКоллекцииКлиент(ТаблицаИмя)
    
    Дфк = Объект[ТаблицаИмя]; // Данные формы коллекция
    
    ДфкЭл = Неопределено;
    Если Дфк.Количество() Тогда
        тИд = Элементы[ТаблицаИмя].ТекущаяСтрока;
        Если НЕ тИд = Неопределено Тогда
            ДфкЭл = Дфк.НайтиПоИдентификатору(тИд);
        КонецЕсли;
    КонецЕсли;
    
    Возврат ДфкЭл;
    
КонецФункции
6 OnePrg
 
18.07.22
10:26
(4) нет такого метода у таблицы формы
7 Kassern
 
18.07.22
10:27
ТекущаяСтрока=ТЗ.НайтиПоИдентификатору(Элементы.ТЗ.ТекущаяСтрока);
8 Kassern
 
18.07.22
10:27
(6) Да лааадно)))
9 Kassern
 
18.07.22
10:28
(6) Как раз таки для коллекций формы данный метод и есть.
10 Kassern
 
18.07.22
10:30
А вот если бы вы написали так:
ТЗ=Новый ТаблицаЗначений;
То да, такой бы метод не канал. Когда вы работаете с ТЗ на форме, то это не ТЗ, а ДанныеФормыКоллекция и у нее свои методы.
11 unenu
 
18.07.22
10:30
(8) У ТаблицыФормы действительно нет. Просто автор не может понять, что есть ТФ и ДФК.

меня тоже поначалу коробило от этих "матрешек"
12 OnePrg
 
18.07.22
10:32
(8) На сервере нет.
С формы нельзя передать на сервер ДанныеФормыЭлементКоллекции
13 OnePrg
 
18.07.22
10:32
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
    Сообщ = Новый СообщениеПользователю;
    Сообщ.Текст = СоздатьЗаказПокупателя(Заказы.НайтиПоИдентификатору(Элементы.Заказы.ТекущаяСтрока)); <---- ошибка
    Сообщ.Сообщить();
КонецПроцедуры
14 Kassern
 
18.07.22
10:34
(12) Да лааадно)))
Создайте простенькую обработку с ТЗ на форме и одним реквизитом (реквизит1) и попробуйте этот код выполнить

&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере();
КонецПроцедуры

&НаСервере
Процедура Команда1НаСервере()
    ТекущаяСтрока=ТЗ.НайтиПоИдентификатору(Элементы.тз.ТекущаяСтрока);
    Сообщить(ТекущаяСтрока.Реквизит1);
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовСтрока=ТЗ.Добавить();
    НовСтрока.Реквизит1=10;
    НовСтрока=ТЗ.Добавить();
    НовСтрока.Реквизит1=20;
КонецПроцедуры
15 Kassern
 
18.07.22
10:35
(13) Да вы издеваетесь!
"Как на сервере получить данные текущей строки?" и потом, что я вижу?
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
16 OnePrg
 
18.07.22
10:35
Другой вариант:

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


&НаСервере
Функция СоздатьЗаказПокупателя()
    Отказ = Ложь;
    пЗаказы = РеквизитФормыВЗначение("Заказы");
    Данные = Элементы.Заказы.НайтиПоИдентификатору(Элементы.Заказы.ТекущаяСтрока); <-- Метод объекта не найден (НайтиПоИдентификатору)
17 OnePrg
 
18.07.22
10:36
(15) СоздатьЗаказПокупателя серверная функция
18 Kassern
 
18.07.22
10:37
(16) Вы хоть понимаете, что это за метод такой? РеквизитФормыВЗначение? Он возвращает ТЗ, это уже не реквизит формы, а просто ТЗ!
19 Kassern
 
18.07.22
10:37
Зачем вы используете РеквизитФормыВЗначение, объясните мне?
20 OnePrg
 
18.07.22
10:37
Таблица "Заказы" в конфигураторе отсутствует на форме. Создаётся программно. (18)
21 OnePrg
 
18.07.22
10:38
(19) это потом ниже по коду, в этом месте нужно получить данные текущей строки на форме
22 unenu
 
18.07.22
10:39
Тз может быть пуста или пуста по отбору, вообщем лучше так не делать:

СоздатьЗаказПокупателя(Заказы.НайтиПоИдентификатору(Элементы.Заказы.ТекущаяСтрока))

Я получаю ДфкЭк (строку тз функцией), а потом уже есть есть строка, то условно можно что-то делать.
Особенно заказ мучить безусловнно - 11-й великий грех!

Если ДфкЭк <> Неопределено Тогда
СоздатьЗаказПокупателя(Заказы.НайтиПоИдентификатору(Элементы.Заказы.ТекущаяСтрока))
КонецЕсли;
23 Kassern
 
18.07.22
10:41
(13)
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
    Сообщ = Новый СообщениеПользователю;
    Сообщ.Текст = СоздатьЗаказПокупателя(Элементы.Заказы.ТекущаяСтрока); <---- Так не будет ошибки
    Сообщ.Сообщить();
КонецПроцедуры

&НаСервере

Функция СоздатьЗаказПокупателя(ИндификаторСтроки)
    Отказ = Ложь;
    Данные = Заказы.НайтиПоИдентификатору(ИндификаторСтроки);
24 OnePrg
 
18.07.22
10:46
Сделал так

&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
    Сообщ = Новый СообщениеПользователю;
    Сообщ.Текст = СоздатьЗаказПокупателя(Элементы.Заказы.ТекущиеДанные.id); <--- уникальное значение в ТЗ
    Сообщ.Сообщить();
КонецПроцедуры        


&НаСервере
Функция СоздатьЗаказПокупателя(id)
    Отказ = Ложь;
    пЗаказы = РеквизитФормыВЗначение("Заказы");
    Данные = пЗаказы.Найти(id,"id");  <---- находим строку по уникальному id


Всем спасибо.
25 Kassern
 
18.07.22
10:47
(24) пробовали (23) ?
26 OnePrg
 
18.07.22
13:36
(23) нет, завтра попробую - отпишусь
27 OnePrg
 
25.07.22
22:09
(25) Это получаются данные формы, а потом же нужно изменить их и на форму обратно передать - что-то не получается.
Вернул как было.