Имя: Пароль:
1C
1С v8
8.3 Внешняя обработка заполнения ТЧ
0 Sun125
 
14.03.15
19:23
Управляемая форма, 8.3.
Нужно с помощью внешней обработки ТЧ получить текущую строку ТЧ.
Подскажите, пожалуйста, чайнику в УФ, как это можно сделать?
&НаСервере
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
    ЭтаФорма = ПараметрыВыполнения.ЭтаФорма;
    Объект = ЭтаФорма.Объект;
    ЭтаФорма.Модифицированность = Истина;
    
    ТекСтрока = Объект.Контрагенты.ТекущиеДанные;
Программа ругается, что поле объекта не обнаружено (ТекущиеДанные)
1 hhhh
 
14.03.15
19:30
У Объект и не бывает ТекущиеДанные. 1С-ка правильно ругается. Копай ЭтаФорма.Элементы.
2 Sun125
 
14.03.15
19:39
(1) ТекСтрока = ЭтаФорма.Элементы.Контрагенты.ТекущиеДанные
Текущие данные таблицы недоступны на сервере.
Как можно обратиться к клиенту из внешних обработок?
3 hhhh
 
14.03.15
20:13
ну, выполняйте на клиенте
4 Otkr
 
14.03.15
20:18
(1) (2) У внешней обработки заполнения ТЧ нет формы, вот хоть тресни
5 hhhh
 
14.03.15
20:35
(4) он берет форму из параметров. Не форму внешней обработки.
6 zladenuw
 
14.03.15
20:41
а выбранная строка есть или там только на клиенте
7 Sun125
 
14.03.15
21:31
(3) Так проблема, как перейти обратиться к Клиенту, если
процедура ВыполнитьКоманду() на Сервере?
8 Sun125
 
14.03.15
21:32
Помогите примером кода, кому не жалко? Или где подсмотреть в типовых конфигурациях?
9 Wern
 
14.03.15
21:44
С сервера на клиент обратится нельзя. Получай до того как перейдешь на сервер. т.е. не в этой процедуре которая в (0) а там где она вызывается.
10 Sun125
 
14.03.15
22:07
Пытаюсь сделать обработку как печатную форму (цель-получить текущую строку ТЧ документа и вывести макет)
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'МК'");
    НоваяКоманда.Идентификатор = "МК";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";

Использую клиентский вызов, теперь программа не понимает процедуру Печать() (метод объекта не обнаружен)
11 Sun125
 
14.03.15
22:13
(10) Разобрался с процедурой) буду дальше пытаться найти текущую строку ТЧ)
12 zladenuw
 
14.03.15
22:21
форма есть  ?

ТаблицаФормы (FormTable) ТекущаяСтрока (CurrentRow)
Использование:
Чтение и  запись.
Описание:
Тип:  Произвольный.
Идентификатор текущей строки таблицы.
Доступность:
Тонкий  клиент, веб-клиент, сервер, толстый клиент.
13 Sun125
 
14.03.15
22:22
В форме обработки:
&НаКлиенте
Процедура Печать(Идентификатор, МассивОбъектов) Экспорт

    Для Каждого Ссылка Из МассивОбъектов Цикл
        ФормаДок = Ссылка.ПолучитьФорму();
        ТекСтрокаДок = ФормаДок.Элементы.ТЧ.ТекущиеДанные;
    КонецЦикла;
Программа ругается, что метод объекта не обнаружен ПолучитьФорму()
14 zladenuw
 
14.03.15
22:24
Идентификатор

тут что ?
15 zladenuw
 
14.03.15
22:25
можно изврат. при открытие давай свой уник идентификатор. потом почему получать форму.
но думаю 1с умная. и сама назначает идентификатор при открытие внешний обработки. может и ошибаюсь.
16 zladenuw
 
14.03.15
22:27
<Уникальность> (необязательный)

Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь.
17 Sun125
 
14.03.15
22:31
Почему я не могу в форме обработке на Клиенте ПолучитьФорму() документа?
18 zladenuw
 
14.03.15
22:37
а она откуда знает кто ее вызвал. она что получает и что потом отдает
19 Sun125
 
14.03.15
22:41
(18) Т.е. я не смогу из внешней печатной формы, получить данные текущей строки ТЧ документа?
20 Sun125
 
14.03.15
22:42
(18) А не смогу, потому что не могу получить форму документа..так чтоли?
21 zladenuw
 
14.03.15
22:42
ща. смотрю
22 zladenuw
 
14.03.15
22:44
та блин нарисуй свою кнопку туда параметр тек строка. и засунь ее, а в обработке ты уже этот парамер можешь получить
23 Sun125
 
14.03.15
22:49
(22) Где нарисовать кнопку? На форме документа? конфигурация типовая, без изменений
24 zladenuw
 
14.03.15
22:49
так. моя бп 3 мертва... ща.
25 zladenuw
 
14.03.15
22:55
26 zladenuw
 
14.03.15
22:55
(25) ха. не тот. но ты найди...
27 zladenuw
 
14.03.15
22:56
помогло ?
28 Sun125
 
14.03.15
23:11
(27) Если использовать обработку как "Обработка заполнения ТЧ", я могу получить форму, но не могу из формы получить текущую строку, потому что процедура ВыполнитьКоманду() уже на Сервере.
А если использовать клиентский вызов, то программа ругается на процедуру ВыполнитьКоманду()
29 Sun125
 
14.03.15
23:14
(27) &НаСервере
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
    ЭтаФорма = ПараметрыВыполнения.ЭтаФорма;
    Объект = ЭтаФорма.Объект;
ТЧ  =Объект.ТЧ;
Как после этого получить текущую строку ТЧ?
30 Sun125
 
14.03.15
23:20
(27) Спасибо, получилось! таким способом:
ФормаПроверки = ПолучитьФорму("Документ.ОТ_Проформа.ФормаОбъекта",Новый Структура("Ключ",Проформа),ЭтаФорма);
31 Sun125
 
14.03.15
23:23
В форме ВПФ:
&НаКлиенте
Процедура Печать(Идентификатор, МассивОбъектов) Экспорт

    Для Каждого Ссылка Из МассивОбъектов Цикл
        ФормаДок = ПолучитьФорму("Документ.Заказ.ФормаОбъекта",Новый Структура("Ключ",Ссылка),);
        ТекСтрока = ФормаДок.Элементы.ТЧ.ТекущиеДанные;
        сообщить("" + ТекСтрока.НомерСтроки);
32 zladenuw
 
14.03.15
23:39
ну так все возможно. и нет магии :)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн