Имя: Пароль:
1C
1С v8
Как получить обработку выбора другой формы?
0 Miss1C
 
14.09.12
15:54
Уважаемые знатоки, с вами играет Татьяна с Украины. В табличной части документа по кнопке, открывается обработка в которой выбирается контрагент, вопрос - как отловить выбранное значение и передать его в форму своего документа, для последующих действий?
1 Maxus43
 
14.09.12
15:56
зависит от формы обработки
2 Maxus43
 
14.09.12
15:56
лучше взять музыкальную паузу
3 Miss1C
 
14.09.12
15:56
В каком смысле?
4 mikecool
 
14.09.12
15:57
(3) на танец тебя приглашает
5 Maxus43
 
14.09.12
15:57
(3) например обработка по записи адреса - она сама возвращает значения в виде структуры в документ, это в ней прописано. в этой - хз что прописано
6 mikecool
 
14.09.12
15:58
(0) обработать событие передначаломвыбора по своему
7 Maxus43
 
14.09.12
15:58
(4) её бойфренд меня не поймёт(
8 Miss1C
 
14.09.12
16:02
Чтобы было понятно излагаемое, приведу подробный пример. Внизу выложу старые процедуры которые работали по старому механизму.

Процедура СписокРегионовВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   ОбработатьВыбор(ВыбраннаяСтрока.Ссылка);
   Закрыть();
КонецПроцедуры  ---------- Процедура модуля формы, больше ничего нет.

Далее идут процедуры модуля обработки:

Перем Объект;
Перем ИмяТабличнойЧасти;
Перем ТабличноеПолеОбъекта;

Процедура Инициализировать(_Объект,_ИмяТабличнойЧасти,_ТабличноеПолеОбъекта) Экспорт
   Объект = _Объект;
   ИмяТабличнойЧасти = _ИмяТабличнойЧасти;
   ТабличноеПолеОбъекта = _ТабличноеПолеОбъекта;
   
   // выберем регион
   ФормаВыбора = ПолучитьФорму();
   ФормаВыбора.РежимВыбора = Истина;
   ФормаВыбора.МножественныйВыбор = Ложь;
   ФормаВыбора.Открыть();
   
КонецПроцедуры

Процедура ОбработатьВыбор(ЭлементВыбора) Экспорт
   // определим точки по региону
   ТекстЗапроса = "ВЫБРАТЬ
                  |    ТорговыеТочки.Владелец КАК Контрагент,
                  |    ТорговыеТочки.Ссылка КАК ТорговаяТочка
                  |ИЗ
                  |    Справочник.ТорговыеТочки КАК ТорговыеТочки
                  |ГДЕ
                  |    ТорговыеТочки.Регион В ИЕРАРХИИ (&Регион)";
   Запрос = Новый Запрос(ТекстЗапроса);
   Запрос.УстановитьПараметр("Регион",ЭлементВыбора);
   ТаблицаТочек = Запрос.Выполнить().Выгрузить();
   
   Если ТипЗнч(Объект) = Тип("СправочникОбъект.МаршрутыЭкспедиторов") Тогда
       Если ДоговорКонтрагента.КонтролироватьСрокДействияДоговора И ДатаОтгрузки > ДоговорКонтрагента.СрокДействия Тогда
           
           тглОбщегоНазначения.СообщитьПользователю("Срок действия договора истек : "+Формат(ДоговорКонтрагента.СрокДействия,"ДФ=dd.MM.yyyy")+". Заказы по этому контрагенту заблокированы!", , ТаблицаСообщений, Заказ.Контрагент, Заказ.ТорговаяТочка, Заказ.Ссылка);
           
           Если ИмяТабличнойЧасти = "Посещения" Тогда
               
               КоличествоТочек = Объект.Посещения.Количество();
               Если КоличествоТочек > 0 Тогда
                   Режим = РежимДиалогаВопрос.ДаНетОтмена;
                   Ответ = Вопрос("Есть заполненные точки маршрута! Очистить эти точки перед заполнением?",Режим,0);
                   Если Ответ = КодВозвратаДиалога.Отмена Тогда
                       Возврат;
                   КонецЕсли;
                   Если Ответ = КодВозвратаДиалога.Да Тогда
                       Объект.Посещения.Очистить();
                   КонецЕсли;
               КонецЕсли;
               Для каждого СтрокаТаблицы из ТаблицаТочек Цикл
                   ТочкаВМаршруте = Объект.Посещения.Найти(СтрокаТаблицы.ТорговаяТочка,"ТорговаяТочка");
                   Если ТочкаВМаршруте = Неопределено Тогда
                       НоваяСтрока = Объект.Посещения.Добавить();
                       НоваяСтрока.Контрагент = СтрокаТаблицы.Контрагент;
                       НоваяСтрока.ТорговаяТочка = СтрокаТаблицы.ТорговаяТочка;
                   КонецЕсли;
               КонецЦикла;
               
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Я хочу последнюю процедуру переписать в своем документе
9 Miss1C
 
14.09.12
16:03
Но чтобы ее переписать я должна получить выбранное значение с этой обработки, не знаю как это сделать
10 vmv
 
14.09.12
16:04
у нее 8.1 - динозавриха, а так можно было посоветовать модуль менеджера объекта
11 Miss1C
 
14.09.12
16:05
(10)Предлагала перейти на 8.2, ответили "Все в твоих руках")
12 73
 
14.09.12
16:06
(10) Смотри ОповеститьОВыборе
13 Segate
 
14.09.12
16:06
Предполжу, что тебя спасет процедура ОбработкаВыбора =)
14 Aprobator
 
14.09.12
16:07
лениво копаться - в типовых подбор посмотри в табличные части документов к примеру. Принцип тот же самый.
15 Aprobator
 
14.09.12
16:08
(13) при стандартная обработка = Ложь, как то слабовато верится.
16 vmv
 
14.09.12
16:09
(9) в 8.1 для описанной ситуации нужно открывать форму модально

возвращаемое модальной формой в режиме выбора значение - это и есть выбранное значение или массив строк при множественном выборе

2-0й вариант

МояФорма.ОткурытьМодально();

// тут форма закрыта и можно читать ее контекст
// если при закрытии формы прописать в реквизит формы
// значение выбора, то его можно получить

ВыбраноЗначение = МояФорма.РеквизитЗначенияВыбора;
17 Miss1C
 
14.09.12
16:12
Я помню делала раньше как предложили в посте (10), но забыла уже
18 Miss1C
 
14.09.12
16:13
В посте (12)
19 vmv
 
14.09.12
16:14
(17) память девичья, мдя - вот так и доверяй юбкам)
20 Stim
 
14.09.12
16:14
Хорошее фото, спасибо
21 Miss1C
 
14.09.12
16:15
(20)Стареем)
22 73
 
14.09.12
16:16
Покажи код, как обработку открываешь
23 vmv
 
14.09.12
16:16
ВыбранныйКонтрагант = ФормаВыбора.ОткрытьМодально();
Если НЕ ЗначениеЗаполнено(ВыбранныйКонтрагант) Тогда
  Возврат;
КонецЕсли;

// Обрабатываем значение выбора
//...
// чево-нибудь еще
24 Miss1C
 
14.09.12
16:17
(22)Обработка находится во внешних обработках заполнения табличных частей
25 Segate
 
14.09.12
16:17
(0) Послушай меня. ТАк проще! )))

Процедура КоманднаяПанель1Подбор(Кнопка)
   ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора(,ЭтаФорма);
  ФормаВыбора.РежимВыбора = Истина;
  ФормаВыбора.ЗакрыватьПриВыборе = Ложь;          
  ФормаВыбора.Открыть();
 
КонецПроцедуры

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
//Здесь делаешь все че хочешь, и ничего тебе за это не будет
КонецПроцедуры
26 mikecool
 
14.09.12
16:18
(7) а какая тебе разница до ее бойфренда? )))
27 vmv
 
14.09.12
16:18
(21) да уж, скоро повят ярлык "старая дева" и замуж давай до сведания)
28 Aprobator
 
14.09.12
16:18
(25) во я же грил, подбор в типовых смотреть надо.
29 Aprobator
 
14.09.12
16:19
+(25)Небольшое уточнение - Процедура ОбработкаВыбора цепляется к событиям формы в целом.
30 73
 
14.09.12
16:19
Щас скажет, что на поддержке...
31 Miss1C
 
14.09.12
16:19
(25)Не ту форму открываешь)
32 Aprobator
 
14.09.12
16:20
неа.
33 Miss1C
 
14.09.12
16:20
Если бы я знала как обратится к форме моей обработки
34 Miss1C
 
14.09.12
16:21
Я ее загрузила во внешние обработки, указала для какого документа и для какой таб части
35 vmv
 
14.09.12
16:21
вобщем и целом все варианты предствлены и любая умная девица уже все поняла, а теперь "Маша - о главном"(с) Дубровский
36 Aprobator
 
14.09.12
16:22
пфф так там итак все типовым способом возвращается. В хелпе справочника внешние обработки и отчеты все описано.
37 vmv
 
14.09.12
16:22
(34) попахивает извращениями, уточняй
38 73
 
14.09.12
16:22
В форме обработки:
Процедура СписокРегионовВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   ОповеститьОВыборе(ВыбраннаяСтрока.Ссылка);
   Закрыть();
КонецПроцедуры  ---------- Процедура модуля формы, больше ничего нет.

В форме дока :
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
//Здесь делаешь все че хочешь, и ничего тебе за это не будет

КонецПроцедуры
39 Miss1C
 
14.09.12
16:22
(35)Я поняла как получить выбранное значение, как можно обратится к обработке?
40 Segate
 
14.09.12
16:23
(31) Объясни толком, что за форма твоей обработки? Тем более, что за бред, из конфы обращаться к внешним обработкам. Этож моветон =))
+ Если тебе надо не форму выбора, а какую то левую, то юзай вариант с модальным открытием, и передавай родителю
41 Aprobator
 
14.09.12
16:23
(33) ВладелецФормы. Если при открытии формы обработки проскакивала ЭтаФорма.
42 Aprobator
 
14.09.12
16:26
(40) да ладно - обработки заполнения ТЧ.
43 Aprobator
 
14.09.12
16:27
+(41) и если ты находишься  модуле формы обработки.
44 Miss1C
 
14.09.12
16:27
(40) Обычная обработка с обычной формой, чтобы не нарушать типовый объект я загрузила внешнюю обработку в внешние обработки по заполнению табличных частей - это справочник, как обратится к этой обработке чтобы открыть ее форму?
45 vmv
 
14.09.12
16:28
(41) наконец озвучено главное, ну конечно при выборе контрагента в формы выбора нужно передавать родительскую форму откуда производят выбор в форму выбора.

ну теперь все или мне клещи еще не прятать?
46 Aprobator
 
14.09.12
16:29
(44) так кнопка сама появится в нужном месте. Там должна быть кнопка с надписью Заполнить с ниспадающим меню. Вот там она и появится.
47 Miss1C
 
14.09.12
16:30
запутали, я к ней обращаюсь но при нажатии кнопки, которая появилась в табличной части, кнопка появляется только в режиме предприятия, не знаю как отследить ее нажатие в конфигураторе
48 Aprobator
 
14.09.12
16:30
(45) судя по (44), ты явно поторопился )
49 Aprobator
 
14.09.12
16:30
(87) в конфигураторе никак.
50 vmv
 
14.09.12
16:30
(44) а

получить ссылку на элемент справочника "ВнешниеОтчетыИОбработки" с вашей обработкой

из нее(ссылки) получить обработку, которая там зашита вроде в хранилище или бинарник - это просто

щас пажи все расскажут, я пока коня почищу
51 Aprobator
 
14.09.12
16:30
(49) к (47).
52 Aprobator
 
14.09.12
16:32
ты бы сказала сразу, что тебе надо отладить внешнюю обработку заполнения табличной части, а то сидим тут ребус разгадываем, а что надо в конечном счете то.
53 Aprobator
 
14.09.12
16:33
можно конечно извратиться, типа добавить к обработке форму, в нее вкатать нужные реквизиты и немного поколдовав организовать вызов из модуля процедуры заполнения.
54 vmv
 
14.09.12
16:35
(47)

ТекущаяОбработка = СсылкаСправочникаВнешниеОбработки.ХранилищеЗначения.Получить();
Если ТекущаяОбработка = Неопределено Тогда
  Возврат;
КонецЕсли;

ТекущаяОбработка.Открыть();

ЗапуститьПроцедуруХватитьКушатьМозг();
55 Segate
 
14.09.12
16:36
(47) НИКАК!!!111 Не делай этого! Молю! =))) Это кощунство! Точно так же, как из конфигуратора обращаться напрямую к элементам справочника(не предопределенным)
Забудь эту идею как страшный сон.

Лучше попробуй так:
а) выгружать тч документа в обработку и там с ней работать, после этого пихать обратно.(если нельзя вносить изменения в конфигратор)
б) Внести обработку в структуру конфигурации
в) Юзать уже готовые формы выбора
г) изменить механизм подбора.
56 Miss1C
 
14.09.12
16:36
(54)Интересная процедура)
57 Aprobator
 
14.09.12
16:38
Т.е. обработка в конфигурацию не ложится (в сам справочник), а делается ее форма (она потом ничему не мешает). На форму выводится реквизит типа ДокументСсылка.НужныйТип. На форме рисуется кнопка к ней прикручивается процедура типа

Процедура НажатиеКнопки(Кнопка)
       ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
      ИмяПроцедурыЗаполненияНепомню(параметрынепомню)
КонецПроцедуры

вот тогда ты сможешь отладить обработку заполнения ТЧ. И потом спокойно загрузишь ее в справочник Внешние обработки и отчеты. Все отладочные доработки можно не убирать.
58 Miss1C
 
14.09.12
16:38
Спасибо за помощь, буду пробовать, вариантов масса)
59 Aprobator
 
14.09.12
16:39
в (57) твой, если я правильно понял твою задачу )
60 vmv
 
14.09.12
16:39
кароче Татьяна из Черкасс

перто из ЗУПа для Укранины 8.1, ваш случай

Если ТипЗНЧ(СсылкаНаВнешнююОбработку) = Тип("СправочникСсылка.ВнешниеОбработки") Тогда
       ИмяФайла = КаталогВременныхФайлов()+"PrnForm.tmp";
       ОбъектВнешнейФормы = СсылкаНаВнешнююОбработку.ПолучитьОбъект();
       
       Если ОбъектВнешнейФормы = Неопределено Тогда
           Сообщить("Ошибка получения внешней обработки заполнения табличной части документа. Возможно обработка была удалена", СтатусСообщения.Важное);
           Возврат;
       КонецЕсли;
       
       ДвоичныеДанные = ОбъектВнешнейФормы.ХранилищеВнешнейОбработки.Получить();
       ДвоичныеДанные.Записать(ИмяФайла);
       
       Попытка
           
           Обработка = ВнешниеОбработки.Создать(ИмяФайла);
           
           // Передать внешней обработке дополнительные параметры
           Если ДополнительныеПараметры <> Неопределено Тогда
               
               // Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
               Если НЕ Обработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
                   Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
               КонецЕсли;
               
           КонецЕсли;
           
       Исключение
           
           Сообщить("Ошибка исполнения внешней обработки табличной части документа."+Символы.ПС+ОписаниеОшибки(), СтатусСообщения.Важное);
           Возврат;
           
       КонецПопытки;
       
       Попытка
           
           Обработка.Инициализировать(ЭтотОбъект, СтрокаКнопки.Родитель.Имя, СтрокаКнопки.Родитель.Расшифровка);
           
       Исключение
           
           ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Заполнение ТЧ не произведено!");
           
       КонецПопытки;
       
   КонецЕсли;


ех
61 Aprobator
 
14.09.12
16:42
(60) да - этот код очень сильно поможет Татьяне отладить ее обработку заполнения ТЧ.
62 Aprobator
 
14.09.12
16:44
хотя имя процедуры Заполнения ТЧ и е параметры из нее можно взять.
Инициализировать(Объект, ИмяПоляТЧ, ИмяТЧ)
63 vmv
 
14.09.12
16:44
(61) это именно то, что ей нужно - поможет или нет решу я сам
64 Segate
 
14.09.12
16:44
(61) он содержит ответ. ))) Это процедура вызываемая по кнопке ее. В доп параметры можно передать все что угодно, а значит оттуда можно все что угодно вытащить... Если уж совсем попа чешется писать "костыль для костыля" То можно в этой процедуре описать вызов интересующей обрабтки отдельно
65 73
 
14.09.12
16:45
Типовой механизм вообще-то туда весь объект передаёт... И делай с ним что хошь.
66 Segate
 
14.09.12
16:47
Не ну а фигли,  "чтобы не нарушать типовый объект я загрузила внешнюю обработку в внешние обработки по заполнению табличных частей", а потом переписала нахрен пол конфы, чтоб обратится к форме этой обработки. Все по нашему )))
67 Stim
 
14.09.12
16:48
СЧЕТ 1:0 В ПОЛЬЗУ ЗНАТОКОВ!
<удар гонга>
тра-ра-рарам(музыкальное сопровождение)
68 Segate
 
14.09.12
16:49
(67) погоди-погоди, мы берем дополнительную минуту
69 Aprobator
 
14.09.12
16:56
все замерли в ожидании. Кто же возьмет СОВУ?
70 vmv
 
14.09.12
16:58
(67) гран-приз убежала - уже не первый раз, только обещает
71 vmv
 
14.09.12
16:59
вывод программиста: если взять сову она будет высиживать яйца
72 Aprobator
 
14.09.12
17:00
(71) извращенец.
73 Stim
 
14.09.12
17:01
Отвечает ДРУЗЬ:
74 vmv
 
14.09.12
17:02
(66) все правильно, я тьоток тоже так приучил

- ой мы хотим такое извращение, ну такое смотри как нящно
- ок, ноу проблем, ваще извращения я помещу в справочник ВнешниеОбрабработки
- ну там же нудобно
- не ври мне, в машине тоже неудобно, но вполне приемлемо
- я согласна
75 Miss1C
 
14.09.12
18:32
Чтобы не играться, добавила свою обработку в обработки, добавила в командную панель табличного поля кнопку при нажатии

Процедура КоманднаяПанель1Моя(Кнопка)
   
   Форма = Обработки.ЗаполнениеПоРегионам.ПолучитьФорму();
   Форма.Открыть();
   
КонецПроцедуры

Процедура формы обработки:

Процедура СписокТочекВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   ОповеститьОВыборе(ВыбраннаяСтрока.Ссылка);
   //Закрыть();
КонецПроцедуры

Но при выборе значения в форме обработки, отладчик не заходит в процедуру обработки выбора формы моего документа (
76 vmv
 
14.09.12
18:34
(75) хватит уже - все уже бухие, сходи в кабак, цепани мальчугана, расслабся от души.

В понедельник поговорим о серьезном и вечном, ок?)
77 Miss1C
 
14.09.12
18:35
(76)Не указала владельца формы(
78 Miss1C
 
14.09.12
18:35
(76)Какой отдохни, работать еще завтра нужно
79 vmv
 
14.09.12
18:37
(78) замуж выходи, по субботам нужно валяться в постели после бурной ночи, а не ищачить на дядю, ех ты)
80 73
 
14.09.12
18:42
(77) Так укажи.
81 vmv
 
14.09.12
18:46
(80) не пристовай к тьолке - она трудиться)
82 Miss1C
 
14.09.12
19:34
Если ОтгрузкаРазрешена Тогда
               //        
               //    ИначеЕсли ДоговорКонтрагента.КонтролироватьСрокДействияДоговора И ДатаОтгрузки > ДоговорКонтрагента.СрокДействия Тогда
               //        тглОбщегоНазначения.СообщитьПользователю("Срок действия договора истек : "+Формат(ДоговорКонтрагента.СрокДействия,"ДФ=dd.MM.yyyy")+". Заказы по этому контрагенту заблокированы!", , ТаблицаСообщений, Заказ.Контрагент, Заказ.ТорговаяТочка, Заказ.Ссылка);
               //        Продолжить;
83 Aprobator
 
14.09.12
19:50
Дурдом, а не код. Режим выбора не включён, владелец формы не указан