Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Двойное открытие формы выбора
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
sweety-twetty
Здравствуйте, подскажите, пожалуйста, программно открываю форму выбора с отборами, в ней выбираю значение -им заполняю поле. а потом снова открывается форма выбора.Через ПолучитьОкна() - это окно не вижу. Как выйти из такого положения?Заранее спасибо

&НаКлиенте
Процедура ТоварыДокументПартииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Массив = ТоварыДокументПартииНачалоВыбораНаСервере(Объект.ДоговорКонтрагента, Объект.Организация,ЭтаФорма.Элементы.Товары.ТекущиеДанные.Номенклатура);    
    ФормаВыбора = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора");
    
    //добавляем отбор по ссылке на документ
    
    Отбор = ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    Отбор.ПравоеЗначение = Массив;
    Отбор.Использование = Истина;

    ДокументРеализации = ФормаВыбора.ОткрытьМодально();
    Если НЕ ЗначениеЗаполнено(ДокументРеализации) Тогда
        Возврат; // ничего не выбрали.
    КонецЕсли;
    Элементы.Товары.ТекущиеДанные.ДокументПартии = ДокументРеализации;

КонецПроцедуры
DmitryS
СтандартнаяОбработка = Ложь;
logist
Простите что вмешиваюсь, но реализация задачи отбора партий в таком виде ужасна до безобразия smile.gif Разве что у вас тестовая база в которой накладных два десятка.
sweety-twetty
Цитата(logist @ 19.03.13, 16:59) необходимо зарегистрироваться для просмотра ссылки
реализация задачи отбора партий в таком виде ужасна до безобразия smile.gif

Почему ужасна?
logist
Цитата(sweety-twetty @ 20.03.13, 9:14) необходимо зарегистрироваться для просмотра ссылки
Почему ужасна?

Производительность. У вас для отбора клиент получит весь список документов а потом на него наложится отбор из массива ссылок. Это еще не видно что там за процедура "ТоварыДокументПартииНачалоВыбораНаСервере". Вместо вывода в какую-то форму подбора только нужных документов.
А главное, что дает список документов? да ничего, у вас может быть в строке количество 10 а по документу есть только 5, и зачем тогда указание этой партии, если туда можно указать любую накладную без контроля количества? Вы можете контролировать это на этапе проведения, но тогда зачем вообще выбирать партию?

upd: и это, на мой дилетантский взгляд так правильнее:
    ДокументРеализации = ФормаВыбора.ОткрытьМодально();
    Если ЗначениеЗаполнено(ДокументРеализации) Тогда
        Элементы.Товары.ТекущиеДанные.ДокументПартии = ДокументРеализации;
    КонецЕсли;

Vofka
Цитата(logist @ 20.03.13, 9:41) необходимо зарегистрироваться для просмотра ссылки
У вас для отбора клиент получит весь список документов

Это где?

Цитата(logist @ 20.03.13, 9:41) необходимо зарегистрироваться для просмотра ссылки
и это, на мой дилетантский взгляд так правильнее

Это дело вкуса и стиля.

logist, ну и раз по вашему, реализация ужасна - предложите автору более красивое решение. Правда я уже долгое время пытаюсь понять, как вы оцениваете качество решения, не зная истинно конечной цели и каких-то локальных внешних факторов. smile.gif

Цитата(logist @ 20.03.13, 9:41) необходимо зарегистрироваться для просмотра ссылки
у вас может быть в строке количество 10 а по документу есть только 5, и зачем тогда указание этой партии

Это то о чем я писал выше. Возможно, автор планирует добавить дополнительный код, который будет разбивать 1 строку на несколько, исходя из количества документов партии. Ну это я условно.
logist
Цитата(Vofka @ 20.03.13, 9:54) необходимо зарегистрироваться для просмотра ссылки
Это где?

В данном коде НаКлиент будет передан весь список документов (а вдруг их там 10000 а нужен только один?), и уже на клиенте будет установлен отбор по массиву ссылок.

Цитата(Vofka @ 20.03.13, 9:54) необходимо зарегистрироваться для просмотра ссылки
Это дело вкуса и стиля.

Ну, я просто свое мнение сказал. Я думаю имею же на это право?

Цитата(Vofka @ 20.03.13, 9:54) необходимо зарегистрироваться для просмотра ссылки
предложите автору более красивое решение.

Только после предоплаты wink.gif И это уже выходит за рамки этой темы.

Цитата(Vofka @ 20.03.13, 9:54) необходимо зарегистрироваться для просмотра ссылки
Правда я уже долгое время пытаюсь понять, как вы оцениваете качество решения, не зная истинно конечной цели и каких-то локальных внешних факторов.

Интуиция, вероятно. Даже если я ошибусь в предположениях, беседа все равно может быть кому-то полезна.
Vofka
Цитата(logist @ 20.03.13, 10:01) необходимо зарегистрироваться для просмотра ссылки
В данном коде НаКлиент будет передан весь список документов (а вдруг их там 10000 а нужен только один?)

Каких 10000 документов? Если открывается даже просто форма списка, в которой присутствует динамический список. Разве оно там получает все документы, которые есть в системе?
logist
Цитата(Vofka @ 20.03.13, 10:14) необходимо зарегистрироваться для просмотра ссылки
Разве оно там получает все документы, которые есть в системе?

В типовом варианте - если в форме списка документов не установлен отбор дат с признаком "Использовать при открытии", то передаются все документы, иначе передаются все по указанному периоду.
Не передавать все, можно только передав перед открытием в форму параметры отбора, и установив их в список как параметры в ПриСозданииНаСервере. В этом случае надо править форму, код формы и запрос динамического списка.
Vofka
Цитата(logist @ 20.03.13, 10:51) необходимо зарегистрироваться для просмотра ссылки
В типовом варианте

В типовом - это в каком, какой документ? Мне интересно посмотреть.
logist
Цитата(Vofka @ 20.03.13, 11:04) необходимо зарегистрироваться для просмотра ссылки
В типовом - это в каком,

Имеется ввиду форма списка/выбора созданная конструктором, или автоматически генерируемая в случае ее отсутствия в конфигураторе.

Цитата(Vofka @ 20.03.13, 11:04) необходимо зарегистрироваться для просмотра ссылки
Мне интересно посмотреть.

УНФ форма списка документа АвансовыйОтчет.
sweety-twetty
Привожу код функции "ТоварыДокументПартииНачалоВыбораНаСервере".
&НаСервере
Функция ТоварыДокументПартииНачалоВыбораНаСервере(Договор,Организация,Номенклатура)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РеализацияТоваровУслуг.Ссылка КАК Ссылка
                   |ИЗ
                   |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                   |        ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
                   |ГДЕ
                   |    РеализацияТоваровУслугТовары.Номенклатура = &Ссылка
                   |    И РеализацияТоваровУслуг.ДоговорКонтрагента = &Договор
                   |    И РеализацияТоваровУслуг.Организация = &Организация";
    Запрос.УстановитьПараметр("Договор", Договор);
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Ссылка", Номенклатура);
    РезультатВыборки = Запрос.Выполнить().Выбрать();
    
    СписокОтбора = Новый Массив;
    Пока РезультатВыборки.Следующий() Цикл
        СписокОтбора.Добавить(РезультатВыборки.Ссылка)
    КонецЦикла;
    
    Возврат СписокОтбора;
КонецФункции
logist
Цитата(sweety-twetty @ 20.03.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
Привожу код функции "ТоварыДокументПартииНачалоВыбораНаСервере".

Ужас smile.gif Я думал у вас там какой-то партионный учет, а вы просто выбираете документы...

&НаСервере
Функция ТоварыДокументПартииНачалоВыбораНаСервере(Договор,Организация,Номенклатура)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РеализацияТоваровУслуг.Ссылка КАК Ссылка
                   |ИЗ
                   |    Документ.РеализацияТоваровУслугТовары КАК РеализацияТоваровУслуг
                   |ГДЕ
                   |    РеализацияТоваровУслугТовары.Номенклатура = &Ссылка
                   |    И РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента = &Договор
                   |    И РеализацияТоваровУслугТовары.Ссылка.Организация = &Организация";
    Запрос.УстановитьПараметр("Договор", Договор);
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Ссылка", Номенклатура);
    Результат = Запрос.Выполнить().Выгрузить();
    Возврат Результат.ВыгрузитьКолонку("Ссылка");
КонецФункции

Подправил процедуру, чисто для понимания картины в целом, потому что вам эта процедура, и та на клиенте совершенно не нужна. У реквизита ДокументРеализаци в объекте укажите "Связи параметров выбора", из "Доступных параметров" вам надо выбрать Договор, Организация и Товар.Номенклатура и усё.
Vofka
Цитата(logist @ 20.03.13, 11:11) необходимо зарегистрироваться для просмотра ссылки
Имеется ввиду форма списка/выбора созданная конструктором, или автоматически генерируемая в случае ее отсутствия в конфигураторе.

По умолчанию ставится галка "Динамическое считывание данных". И после этого вы всеравного будете говорить, что на клиент приходят все документы?

Цитата(logist @ 20.03.13, 11:11) необходимо зарегистрироваться для просмотра ссылки
УНФ форма списка документа АвансовыйОтчет.

Надо не забыть посмотреть. Но я очень сомневаюсь, что это так. Думаю, что конфигурацию не глупые люди делали.
Ardi
В семёрке в DBF по несколько таблиц ЦЕЛИКОМ копируются на компьютер пользователя для выборки данных. И жили же как-то люди.
logist
Цитата(Vofka @ 20.03.13, 16:55) необходимо зарегистрироваться для просмотра ссылки
По умолчанию ставится галка "Динамическое считывание данных". И после этого вы всеравного будете говорить, что на клиент приходят все документы?

Каюсь 03000000.gif 73000000.gif
Но все равно, установка отбора на клиенте притащит туда первую порцию "всех", а уже потом наложится отбор, соответственно если отбор меньше порции то будет подгружаться еще порция, пока отображаемые данные не заполнятся. Это визуально скорее не заметно, но...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.