![]() |
![]() |
|
Организация прикрепленного окна | ☑ | ||
---|---|---|---|---|
0
YauheniL
13.08.08
✎
18:33
|
Пытаюсь написать обработку, которая выполняет 2 функции:
а) является отчетом (без печ. формы) б) является обработкой подбора. С первой задачей я все-таки справился. А вот, со второй пока не смог. Проблема вот в чем: хочется при открытии обработки в качестве обработки подбора сделать так, чтобы она вела себя так как обработка подбора: был а прикрепленной к правой части рабочего стола. У меня получается, что она появляется где-то правее родительского окна, но имеет свободное положение. И, еще одно, это окно может быть открыто неограниченное количество раз. Как это можно побороть. Прилагаю код: Если ЗначениеНеЗаполнено(КлючУникальности) Тогда КлючУникальности = Новый УникальныйИдентификатор; КонецЕсли; ФормаПодбораИмпорт = ОбработкаПодбораИмпорт.ПолучитьФорму("ФормаПодбора", ЭтаФорма, КлючУникальности); Если Не ФормаПодбораИмпорт.Открыта() Тогда ФормаПодбораИмпорт.ПоложениеОкна = ВариантПоложенияОкна.НеПерекрыватьВладельца; ФормаПодбораИмпорт.РазрешитьСоединятьОкно = Истина; ФормаПодбораИмпорт.СоединяемоеОкно = Истина; //ФормаПодбораИмпорт.РазрешитьСостояниеОбычное = Ложь; ФормаПодбораИмпорт.РазрешитьСостояниеПрячущееся = Ложь; ФормаПодбораИмпорт.РазрешитьСостояниеСвободное = Ложь; ФормаПодбораИмпорт.РазрешитьСостояниеПрикрепленное = Истина; ФормаПодбораИмпорт.СостояниеОкна = ВариантСостоянияОкна.Прикрепленное; ФормаПодбораИмпорт.ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право; ФормаПодбораИмпорт.Открыть(); КонецЕсли; |
|||
1
kosts
14.08.08
✎
07:02
|
Что бы было прикрепленным смотри свойства Формы
Состояние окна - Прикрепленное Положение прикрепленного окна - Право Изменять способ отображения окна - Запретить Так вроде. Если окно создается каждый раз новое Может быть КлючУникальности создается каждый раз новый? А может быть хранить ФормаПодбораИмпорт, и не создавать формукаждый раз? |
|||
2
YauheniL
14.08.08
✎
10:10
|
(1) Ключ уникальности создается только единожды (при самом первом вызове: параметр КлючУникальности = Неопределено; соответственно, он переопределяется один раз и все. Проверял в отладчике)...
|
|||
3
kosts
14.08.08
✎
10:33
|
Попробуй вместо "КлючУникальности" использовать "ЕщеКлючУникальности"
|
|||
4
kosts
14.08.08
✎
10:35
|
Покажи ЗначениеНеЗаполнено()
|
|||
5
kosts
14.08.08
✎
10:49
|
При таком выводе оно прикрепленное справа
Если Не ФормаПодбораИмпорт.Открыта() Тогда ФормаПодбораИмпорт.РазрешитьСостояниеПрикрепленное = Истина; ФормаПодбораИмпорт.РазрешитьСоединятьОкно = Истина; ФормаПодбораИмпорт.СоединяемоеОкно = Истина; ФормаПодбораИмпорт.СостояниеОкна = ВариантСостоянияОкна.Прикрепленное; ФормаПодбораИмпорт.РазрешитьСостояниеОбычное = Ложь; ФормаПодбораИмпорт.ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право; ФормаПодбораИмпорт.ИзменятьСпособОтображенияОкна = ИзменениеСпособаОтображенияОкна.Запретить; ФормаПодбораИмпорт.Открыть(); КонецЕсли; |
|||
6
YauheniL
14.08.08
✎
10:53
|
(3) Для открытия использовал вот такую штуку:
Если мЮИ_КлючУникальности = Неопределено Тогда //КлючУникальности = Ссылка.УникальныйИдентификатор(); мЮИ_КлючУникальности = Ссылка.УникальныйИдентификатор(); КонецЕсли; ФормаПодбораИмпорт = ОбработкаПодбораИмпорт.ПолучитьФорму("ФормаПодбора", ЭтаФорма, мЮИ_КлючУникальности); (4) Ниже: Функция ЗначениеНеЗаполнено(Значение) Экспорт Результат = Ложь; ТипЗначения = ТипЗнч(Значение); // Сначала примитивные типы Если Значение = Неопределено Тогда Результат = Истина; ИначеЕсли Значение = NULL Тогда Результат = Истина; ИначеЕсли ТипЗначения = Тип("Строка") Тогда Если СокрЛП(Значение) = "" Тогда Результат = Истина; КонецЕсли; ИначеЕсли ТипЗначения = Тип("Число") Тогда Если Значение = 0 Тогда Результат = Истина; КонецЕсли; ИначеЕсли ТипЗначения = Тип("Дата") Тогда Если Значение = Дата('00010101') Тогда Результат = Истина; КонецЕсли; ИначеЕсли ТипЗначения = Тип("Булево") Тогда Результат = Ложь; // Булево будем считать не пустым //Отдельное определение, так как конструкторов данного типа не существует ИначеЕсли ТипЗначения = Тип("РежимПроведенияДокумента") Тогда Если Значение = РежимПроведенияДокумента.Неоперативный или Значение = РежимПроведенияДокумента.Оперативный тогда Результат = Ложь; КонецЕсли; // Для остальных будем считать значение пустым, если оно равно // дефолтному значению своего типа Иначе Если Значение = Новый(ТипЗначения) Тогда Результат = Истина; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // ЗначениеНеЗаполнено() |
|||
7
YauheniL
14.08.08
✎
11:31
|
В общем, разрешил я обе проблемы. Прилагаю код:
Перем мЮИ_ФормаПодбораИмпорт; ... ... ... ОбработкаПодбораИмпорт = Обработки.ЮИ_ПодборИмпортныхТоваров.Создать(); ОбработкаПодбораИмпорт.СтруктураПараметров = СтруктураПараметров; Если мЮИ_ФормаПодбораИмпорт = Неопределено Тогда мЮИ_ФормаПодбораИмпорт = ОбработкаПодбораИмпорт.ПолучитьФорму("ФормаПодбора", ЭтаФорма, Ссылка.УникальныйИдентификатор() ); КонецЕсли; Если (ТипЗнч(мЮИ_ФормаПодбораИмпорт) = Тип("Форма")) И (Не мЮИ_ФормаПодбораИмпорт.Открыта()) Тогда мЮИ_ФормаПодбораИмпорт.ИзменятьСпособОтображенияОкна = ИзменениеСпособаОтображенияОкна.Разрешить; мЮИ_ФормаПодбораИмпорт.ПоложениеОкна = ВариантПоложенияОкна.НеПерекрыватьВладельца; мЮИ_ФормаПодбораИмпорт.РазрешитьСоединятьОкно = Истина; мЮИ_ФормаПодбораИмпорт.СоединяемоеОкно = Истина; мЮИ_ФормаПодбораИмпорт.РазрешитьСостояниеПрячущееся = Ложь; мЮИ_ФормаПодбораИмпорт.РазрешитьСостояниеСвободное = Ложь; мЮИ_ФормаПодбораИмпорт.РазрешитьСостояниеПрикрепленное = Истина; мЮИ_ФормаПодбораИмпорт.СостояниеОкна = ВариантСостоянияОкна.Прикрепленное; мЮИ_ФормаПодбораИмпорт.ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право; мЮИ_ФормаПодбораИмпорт.Обновить(); мЮИ_ФормаПодбораИмпорт.Открыть(); КонецЕсли; |
|||
8
YauheniL
14.08.08
✎
11:32
|
В этом случае можно обойтись и без ключа уникальности: форма постоянно храниться в глобальной переменной формы. Не очень понятно, зачем, в таком случае, этот параметр нужен вообще...
Тему можно считать закрытой. |
|||
9
YauheniL
14.08.08
✎
16:21
|
В общем, переоткрываю тему по следующему поводу: форма подбора самопроизвольно закрывается. Подскажите, при что я снова забыл?
При выборе строки выполняется обработчик: Процедура ОстаткиИмпортныхТоваровВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) // Действие верно только для режима подбора Если ВладелецФормы = Неопределено Тогда Возврат; КонецЕсли; ТекСтрокаДереваЗначений = ЭлементыФормы.ОстаткиИмпортныхТоваров.ТекущиеДанные; Если ТекСтрокаДереваЗначений.Строки.Количество() = 0 Тогда // подготовим структуру подбора для заполнения РезультатПодбора = Новый Структура("Организация, Номенклатура, СтранаПроисхождения, ПартияПоступления, НомерГТД, ПаспортСделки, СМР, Инвойс, ТранспортныйИнвойс, Валюта, КоличествоОстаток, ЦенаРублевая, ЦенаВалютная"); Если ЗапрашиватьКоличество Тогда // Если количество запрашивается, тогда запросим количество у пользователя ИскомоеКоличество = 0; ЧислоВведено = Ложь; Пока (Не ВвестиЧисло(ИскомоеКоличество, "Введите необходимое количество", 15, 0) ) ИЛИ (ИскомоеКоличество = 0) Цикл КонецЦикла; ЗаполнитьЗначенияСвойств(РезультатПодбора, ТекСтрокаДереваЗначений, ,"КоличествоОстаток"); РезультатПодбора.Вставить("КоличествоОстаток", ИскомоеКоличество); Иначе // В противном случае, подставим все, что есть ЗаполнитьЗначенияСвойств(РезультатПодбора, ТекСтрокаДереваЗначений); КонецЕсли; РезультатПодбора.Вставить("ЮИ_ЭтоПодборИмпортныхТоваров", Истина); ОповеститьОВыборе(РезультатПодбора); КонецЕсли; КонецПроцедуры В документе-приемнике выполняется вот такой код: Процедура ЮИ_ПодборИмпортногоТовара(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ЮИ_ЭтоПодборИмпортныхТоваров = Неопределено; ВыбранноеЗначение.Свойство("ЮИ_ЭтоПодборИмпортныхТоваров", ЮИ_ЭтоПодборИмпортныхТоваров); Если ЗначениеНеЗаполнено(ЮИ_ЭтоПодборИмпортныхТоваров) Тогда Возврат; КонецЕсли; // Выполним подбор НоваяСтрокаТовары = Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаТовары, ВыбранноеЗначение, "Номенклатура, СтранаПроисхождения, НомерГТД"); ВыбранноеЗначение.Свойство("КоличествоОстаток", НоваяСтрокаТовары.Количество); ВыбранноеЗначение.Свойство("Инвойс", НоваяСтрокаТовары.ЮИ_Инвойс); ВыбранноеЗначение.Свойство("ПаспортСделки", НоваяСтрокаТовары.ЮИ_ПаспортСделки); ВыбранноеЗначение.Свойство("СМР", НоваяСтрокаТовары.ЮИ_СМР); ВыбранноеЗначение.Свойство("ТранспортныйИнвойс", НоваяСтрокаТовары.ЮИ_ТранспортныйИнвойс); Если ВалютаДокумента = мВалютаРегламентированногоУчета Тогда // Данные в рублях ВыбранноеЗначение.Свойство("ЦенаРублевая", НоваяСтрокаТовары.Цена); Иначе // Данные в валюте ВыбранноеЗначение.Свойство("ЦенаВалютная", НоваяСтрокаТовары.Цена); КонецЕсли; // Заполняем реквизиты табличной части. ЗаполнитьСтавкуНДСТабЧасти(НоваяСтрокаТовары, ЭтотОбъект); // Рассчитываем реквизиты табличной части. РассчитатьСуммуТабЧасти(НоваяСтрокаТовары, ЭтотОбъект); РассчитатьСуммуНДСТабЧасти(НоваяСтрокаТовары, ЭтотОбъект); ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(НоваяСтрокаТовары, "Оборудование", Истина, ОтражатьВНалоговомУчете); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |