Имя: Пароль:
1C
 
Обработка заполнения табличной части документа (УФ)
0 antotti
 
10.10.14
16:26
Есть документ, для него создана внешняя обработка заполнения тч(реквизит "ДокументОснование есть"), подключена. При вызове ее из документа - открывается форма с выбором документа. (назовем его ДокументОснование), и нужно вытащить данные из табличной части "Товары" документа основания и заполнить ими текущий документ... не пойму как обратиться и как передать данные??? например я получил Ссылку, Ссылка = Объект.ДокументОснование; А дальше как, не пойму??
В обычном такое сделал, а в УФ не выходит. Подскажите кто знает?
1 Dmitry1c
 
10.10.14
16:30
(0) в управляемом режиме нет обработок заполнения ТЧ, есть обработка в целом для документа (можно заполнить ТЧ тоже)

но писать её надо по-другому, гугл в зубки и вперед
2 antotti
 
10.10.14
16:35
Я делаю обработку внешнюю с видом"ЗаполненияОбъекта"
3 antotti
 
10.10.14
16:35
По типу как тут:  http://infostart.ru/public/84119/
4 antotti
 
10.10.14
16:36
Но не могу получить документ, который сейчас открыт, и из которого запущена обработка, чтобы заполнить его тч...
5 antotti
 
10.10.14
16:41
HELP
6 antotti
 
10.10.14
16:42
Как получить ссылку на документ из которого идет вызов внешней обработки???
7 antotti
 
10.10.14
16:43
Из модуля формы или модуля объекта обработки?
8 13_Mult
 
10.10.14
16:46
Пятнично
9 antotti
 
10.10.14
16:47
???
10 13_Mult
 
10.10.14
16:48
11 hhhh
 
10.10.14
16:49
всё-таки (3) это для супермегаасов, вы пока таким не являетесь, пользуйтесь тем, что попроще.
12 antotti
 
10.10.14
16:52
а можно подсказать без издевок?
13 Krolik Bezobraznik
 
10.10.14
16:55
(12) Прежде всего следует отметить что заполнение ТЧ в УФ делается в серверной обработке.
14 Krolik Bezobraznik
 
10.10.14
16:57
Ты как то немного непонятно описал тему. Есть обработка в которой ты выбираешь какой то докуменнт а вот дальше ничего не понял
15 antotti
 
10.10.14
16:58
Ну смотрите, мой открытый документ, из которого вызывается обработка- хранится в массиве назначений.
МассивНазначений[0]
Как получить этот элемент нулевой в модуле обработки?
16 Krolik Bezobraznik
 
10.10.14
16:59
(15) Прошу прощения но документ и обработка это два разных объекта метаданных. Давайте не путаться в понятиях
17 Krolik Bezobraznik
 
10.10.14
17:01
(15) Вы хотите заполнить один документ данными из другого документа, я верно понимаю?
18 antotti
 
10.10.14
17:02
да
19 Krolik Bezobraznik
 
10.10.14
17:04
(18) Ну в таком случае можно воспользоваться механизмом заполнения на основании или же в документе приемнике в модуле объекта сделать экспортную процедуру заполнения ТЧ, в эту процедуру передавайте ссылку на документ источник.
20 hhhh
 
10.10.14
17:06
МассивНазначений - там названия документов, а самих документов там нет.

То есть просто строка "Реализация товаров и услуг", например. Из этой строки ничего не вытащишь.
21 antotti
 
10.10.14
17:06
а как вытащить?
22 antotti
 
10.10.14
17:07
как н получить ссылку на документ из которого идет вызов обработки?
23 Krolik Bezobraznik
 
10.10.14
17:07
(20) С чего вы взяли что там нет ссылок на документы? Вы топик стартер, если нет то почему вы за него говорите...
24 antotti
 
10.10.14
17:09
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ОбъектыНазначения") Тогда
        ТекущийДокумент = Параметры.ОбъектыНазначения[0];
        Сообщить(ТекущийДокумент);
    КонецЕсли;
КонецПроцедуры


Может так? токлько как потом передать данные на клиент? или в другую серверную процедуры?
25 Krolik Bezobraznik
 
10.10.14
17:11
(22) воспользуйтесь реквизитом Ссылка. например так

Процедура КакаяТоПроцедураНаДокеИсточнике()
Док = Документы.ДокПолучатель.СоздатьДокумент();
Док.ПроцедураЗаполненияТЧ9Ссылка);
Док.записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры;

Примерно так.

А в модуле документа приемника должна быть экспортная процедура
Процедура ПроцедураЗаполненияТЧ(Истоник) Экспорт

///Бла бла бла тут обходим в цикле ТЧ иточника и добавляем строки в ТЧ приемник
КонецПроцедуры;
26 antotti
 
10.10.14
17:12
&НаСервере
Функция ЗаполнитьДокументнаСервере(ТекущийДокумент)
    Для Каждого стч Из ТекущийДокумент.товары Цикл
        
    КонецЦикла;
КонецФункции


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ОбъектыНазначения") Тогда
        ТекущийДокумент = Параметры.ОбъектыНазначения[0];
    КонецЕсли;
    ЗаполнитьДокументнаСервере(ТекущийДокумент);
КонецПроцедуры
А такой вариант?
27 hhhh
 
10.10.14
17:12
(24) делаешь реквизит у формы "ТекущийДОкумент", он и будет виден везде.
28 Krolik Bezobraznik
 
10.10.14
17:13
(24) Можно наверно и так, только как мне кажется тогда в качестве параметра формы передавайте ссылку на документ источник, а не массив и потом в серверной процедуре присоздании выбирать из массива
29 Krolik Bezobraznik
 
10.10.14
17:16
(26)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ОбъектыНазначения") Тогда
        ТекущийДокумент = Параметры.ОбъектыНазначения[0];
    КонецЕсли;
///Это уже серверная процедура тут прям и заполняй не надо вызывать какую то еще серверную процедуру

//    ЗаполнитьДокументнаСервере(ТекущийДокумент);
КонецПроцедуры
30 antotti
 
10.10.14
17:17
hhhh, и как в этот реквизит запхнуть тек док?
31 Krolik Bezobraznik
 
10.10.14
17:18
(26) Ты лучше скажи, ты из формы документа источника хочешь вызвать процедуру заполнения документа приемника или как?
32 hhhh
 
10.10.14
17:18
(30) ну как и написано

ТекущийДокумент = Параметры.ОбъектыНазначения[0];
33 antotti
 
10.10.14
17:31
пробую
34 antotti
 
10.10.14
17:34
{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (Добавить)
        СтрокаТаблицы = ТекущийДокумент.Продукция.Добавить();
по причине:
Объект недоступен для изменения.

при выполнение обработки
35 antotti
 
10.10.14
17:38
код

&НаСервере
Функция ПолучитьДокументОснованиенаСервере()
    ДокументОснованиеСсылка =  Объект.ДокументПоступления;    
    Возврат ДокументОснованиеСсылка;
КонецФункции

&НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьДокументнаСервере();    
КонецПроцедуры



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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.ТекДокумент = Документы.ПоступлениеИзПереработки.ПустаяСсылка();
    //
    Если Параметры.Свойство("ОбъектыНазначения") Тогда
        ТекущийДокумент = Параметры.ОбъектыНазначения[0];
    КонецЕсли;
    Объект.ТекДокумент = ТекущийДокумент;
КонецПроцедуры
36 antotti
 
10.10.14
17:39
ошибки нет, но заполнение не происходит((
37 hhhh
 
10.10.14
17:42
ТекущийДокумент = Параметры.ОбъектыНазначения[0];

    ТекущийДокумент = Объект.ТекДокумент.ПолучитьОбъект();

точно нет ошибки?

совершенно два разных текущих документа?
38 antotti
 
10.10.14
17:48
спасибо) работает)