Имя: Пароль:
1C
1С v8
Как обратиться к реквизитам формы документа из внешней обработки
0 Nzzzz
 
21.10.20
12:50
Доброго времени суток. Как обратиться к реквизитам формы документа из внешней обработки в процедуре ВыполнитьКомандуЗавершение?
ВладелецФормы.Объект.Товары - не работает.
1 Nzzzz
 
21.10.20
12:52
Внешняя обработка добавлена в Администрировании в базу и открывается через документ
2 Vadim_37
 
21.10.20
12:53
а почему именно формы, а не объекта?
3 Pro-tone
 
21.10.20
12:59
(0) у реквизита формы есть путь, как правило там либо реквизит объекта, либо программное заполнение на основе данных регистров, посмотри путь откуда берутся данные и обращайся к ним из обработки
4 Nzzzz
 
21.10.20
13:01
(3) А если документ ещё не записан?
5 Галахад
 
гуру
21.10.20
13:16
Хм. "ВыполнитьКомандуЗавершение" это вообще что за процедура?
6 kobzon2
 
21.10.20
13:18
(4) А если документ не записан, зачем к нему обращаться? Цель итоговая какая?
7 banco
 
21.10.20
13:22
(0) Реквизитам формы надо обращаться как ВладелецФормы[Имяреквизита]
8 Nzzzz
 
21.10.20
13:31
(6) Открываю документ - нажимаю кнопку(моя внешняя обработка) - открывается форма, в ней выбираю значение(например склад "Основной") - в табличной части документа удалиться все записи с товарами ,которые не лежат на "Основном".
9 Strogg
 
21.10.20
13:34
(8) ну так и обрабатывай форму после закрытия твоей вешней обработки. Тогда все параметры передадутся в твою форму-владельца. И там уже делай с ними что хочешь...
10 Nzzzz
 
21.10.20
13:37
(9) нет во владельце после закрытия..
11 Nzzzz
 
21.10.20
13:41
(10) Вот весь код в форме обработки:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    ОткрытьФорму("ВнешняяОбработка.ЗаполнениеТЧ.Форма", , , ,  , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьКомандуЗавершение(Результат, ДополнительныеПараметры) Экспорт     
    Если Результат = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ЭтаФорма.Закрыть();
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    
    Оповещение = Новый ОписаниеОповещения("ВыполнитьКомандуЗавершение", ЭтотОбъект);
    ВыполнитьОбработкуОповещения(Оповещение, НужныйСклад);
КонецПроцедуры
12 Nzzzz
 
21.10.20
13:47
В какой процедуре обращаться??
Вот например в первой процедуре "ВыполнитьКоманду", я там могу обратиться через владельца
13 Strogg
 
21.10.20
13:47
(11) погугли параметры Открытьформу(). Там есть описание оповещения при закрытии формы. Сейчас это у тебя безымянная запятая в параметрах.
14 Nzzzz
 
21.10.20
13:51
(13) А зачем мне  оповещения при закрытии формы?
15 Strogg
 
21.10.20
13:55
(14) ты хочешь, чтобы у тебя во владельце что-то изменилось после каких-то действий с твоей обработкой, я правильно понимаю?
16 Pro-tone
 
21.10.20
13:56
(8) >Открываю документ - нажимаю кнопку(моя внешняя обработка) - открывается форма, в ней выбираю значение(например склад "Основной") - в табличной части документа удалиться все записи с товарами ,которые не лежат на "Основном"

а зачем вообще надо обработку внешнюю открывать-то? обработка нужна чтоб внутри нее происходило какое-то шаманство (допустим, как в обработке подбора товаров - там остатки и цены видны, можно список товаров собрать с аналогами и тп)
17 Pro-tone
 
21.10.20
13:57
(14) это тебе наследие прошлого программиста досталось и ты не знаешь что с ним делать? я вообще не вижу смысла в открытии внешней обработки для изменения склада
18 Nzzzz
 
21.10.20
13:57
(16) "а зачем вообще надо обработку внешнюю открывать-то?" - потому что именно во внешней обработке я выбираю нужный склад. Чтобы в ТЧ документа показаны были товары на выбранном во внешней обработке складе
19 Nzzzz
 
21.10.20
13:58
(17) Вот так вот надо, чтобы по кнопке из документа удалялись ненужные записи. Чтобы был только выбранный склад.
20 Nzzzz
 
21.10.20
13:59
(15) Ну да. Выбираю во внешней обработке склад, нажимаю во внешней обработке "Заполнить" и в документе должна перезаполняться ТЧ(то есть удалять все записи которые не равны выбранному складу)
21 Pro-tone
 
21.10.20
14:01
(18) нет, склад ты выбираешь в форме документа, а в обработке должен происходить подбор самих товаров, и после ее закрытия через ОК они должны попадать в таблицу формы
22 Pro-tone
 
21.10.20
14:02
бывают случаи когда складов несколько, тогда список складов можно выбрать в форме обработки подбора
23 Strogg
 
21.10.20
14:04
(20) ну так я тебе об этом и говорю. При закрытии формы твоей обработки передавай в параметре выбранный склад. А в обработке оповещения после закрытия обрабатывай переданный параметр (выбранный склад). Тебе же не интерактивно все это надо удалять, а после нажатия кнопки...
(21) зачем тогда вообще нужна внешняя обработка)
24 Nzzzz
 
21.10.20
14:06
(21) Не на форме документа выбираю склад, а именно по этой кнопке во внешней обработке.
25 Nzzzz
 
21.10.20
14:08
(23) "При закрытии формы твоей обработки передавай в параметре выбранный склад" -в какой процедуре её закрывать и куда передавать выбранный склад?
26 Nzzzz
 
21.10.20
14:12
Вообще надо полностью очищать тч.
В общем надо так:

Открываю док - Нажимаю кнопку(моя обработка) - на ней выбираю склад - нажимаю кнопку "Заполнить" - запросом заполняется ТЧ с нужным складом.
Как мне обратиться к этой ******* табличной части??
27 ГдеСобака Зарыта
 
21.10.20
14:27
Открой типовую, да посмотри как там подбор сделан. Вкратце
1. Открываешь свою форму обработки указывая ей владельца - форму документа
2. Заполненные в обработке данные кладешь во временное хранилище, вызываешь метод Закрыть(АдресВХранилище) где параметром указываешь адрес твоих данных в хранилище
3. В форме документа в ОбработкаПодбора() в параметрах будет адрес в хранилище. По нему получаешь данные загружаешь себе в ТЧ.

Но лучше все-таки позвать программиста
28 Галахад
 
гуру
21.10.20
14:44
Как-то так:

ОбъектДокумента = ВладелецФормы.Объект;
    
ЗафигачитьНаСервере(ОбъектДокумента);
    
КопироватьДанныеФормы(ОбъектДокумента, ВладелецФормы.Объект);
ВладелецФормы.Модифицированность = Истина;
29 Nzzzz
 
21.10.20
14:51
(28) Это в какой процедурке писать?
30 kobzon2
 
21.10.20
14:55
(26) Ты же нажимаешь кнопку (моя обработка), по ней открывается какая та процедура. Вот в ней и обращайся в самом конце к ТЧ документа. В процедуре обработки в конце напиши:
Результат = Новый Структура;
Результат.Вставить("КакойТоСклад", Склад);    
Закрыть(Результат);

И используй потом это.
Мне вобще не понятно на кой ляд тут обработка нужна?.
31 Nzzzz
 
21.10.20
14:58
(30) Нажимая на кнопку "моя обработка", появляется форма моей обработки в которой выбираю склад. После выбора склада жму кнопку "Заполнить ТЧ"
32 Nzzzz
 
21.10.20
15:06
(30) Так не совсем понятно..В процедуре обработки в конце напиши - это в какой? Выше код моей обработки..
33 Nzzzz
 
21.10.20
15:15
Всем спасибо за помощь.
34 kobzon2
 
21.10.20
15:15
(32) Вон у тебя в процедуре ВыполнитьКомандуЗавершение() возвращается какой-то результат. Что там сейчас?
Из обработки верни свой склад в этот результат - Закрыть(Результат);
И дальше используй как тебе надо.