Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 апр 2024, 15:07

Нужен отбор с видом сравнения в обработке на 1С 8.3 в режиме управляемого приложения

Автор PavelVaskan, 24 окт 2018, 16:25

0 Пользователей и 1 гость просматривают эту тему.

PavelVaskan

1С 8.3, режим Управляемого приложения (т.е. формы на Управляемом интерфейсе)

По условиям задания надо создать внешнюю обработку, открываемую из формы документа Поступление по кнопке "Заполнение...".

На форме обработки нужно реализовать отбор по Партнёру (справочник Партнёры) с видом сравнения.

Насколько я знаю, поле типа "ВидСравнения" было легко и просто создать в формах на 1С 8.2 в режиме Обычного приложения. 1С 8.3 в режиме Управляемого приложения с типом "ВидСравнения" не дружит! :-(

Разве что - он появляется при использовании-реализации отборов в СКД.

А если мне не надо СКД? А при этом отборы с видом сравнения нужны? Как быть???

ЕСТЬ ЛИ СПОСОБ ИХ РЕАЛИЗОВАТЬ ПОМИМО СКД ???

Буду благодарен за любые мысли и помощь!

Есть мысли "велосипедно"-вручную "долепливать" имитацию вида сравнения через поле типа СписокЗначений со строками, соответствующими значениям вида сравнения в обычном приложении 1С 8.2... И только!

Либо - мучаться как-то через СКД, делая обработку внешним отчётом с СКД, что тоже "через заднее место", извиняюсь...

wise

(0) https://1c-programmer-blog.ru/programmirovanie/kak-otkryt-formu-s-otborom.html

Как открыть форму с отбором

Продолжаем разговор о открытие форм различным способом (и с различными целями), предыдущая статья рассказывала о том, как открыть форму с заполнением, а данная статья расскажет о том, ка открыть форму с отбором (форма списка, форма выбора) в обычном и управляемом приложении.

Открытие формы с отбором в обычном приложении

В обычном приложении (я пробовал на платформе 8.2.18.102) я знаю только один способ открытия формы списка или формы выбора с отбором (буду рад увидеть другие варианты), выглядит он примерно так:

нФормаВыбора = Справочники.ТестСправочник.ПолучитьФормуВыбора(, ЭлементыФормы.тестОбъект);

нФормаВыбора.Отбор.ТестРеквизит.ВидСравнения = ВидСравнения.Равно;

нФормаВыбора.Отбор.ТестРеквизит.Значение = "Тест1";

нФормаВыбора.Отбор.ТестРеквизит.Использование = Истина;

нФормаВыбора.Открыть();

В этом примере при получении формы владельца открывающейся формы (второй параметр) можно ничего не указывать (для формы списка, например), я указал поле в которое должен попадать выбранный элемент.

Кроме этого, если код открытия формы у Вас размещается в событии «НачалоВыбора», то не забудьте отменить стандартную обработку, а в качестве владельца открывающейся формы можно указать первый параметр события - «Элемент».

Открытие формы с отбором в управляемом приложении

В управляемом приложении я знаю несколько способов открыть форму с отбором. Первый способ простой, но сильно ограничен по возможностям, выглядит он примерно так:

ПараметрыОтбора = Новый Структура;

ПараметрыОтбора.Вставить("ТестРеквизит", "Тест1");

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);

ОткрытьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора", ПараметрыФормы, Элементы.тестОбъект);

Проблема в том, что нельзя выбрать вид сравнения (только «равно») и нет доступа к некоторым другим параметрам.

Второй способ лишен недостатков первого способа, но выглядит значительно более громоздко:

фиксНастройки = Новый НастройкиКомпоновкиДанных;

эОтбор = фиксНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

эОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТестРеквизит");

эОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;

эОтбор.ПравоеЗначение = "Тест2";

эОтбор.Использование = Истина;

эОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки);

ОткрытьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора", ПараметрыФормы, Элементы.тестОбъект);

И на всякий случай приведу третий способ, который, на самом деле, мало чем отличается от второго, но смотрите сами:

нФормаВыбора = ПолучитьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора", , Элементы.тестОбъект);

эОтбор = нФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

эОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТестРеквизит");

эОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;

эОтбор.ПравоеЗначение = "Тест2";

эОтбор.Использование = Истина;

эОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

нФормаВыбора.Открыть();

Не забывайте отключать стандартную обработку, если это требуется, а также указывать/не указывать владельца при получении/открытии формы.

В заключение отмечу, что я намеренно не использую модальное открытие формы списка/выбора (1С с некоторых пор приказала отказываться от модальности), но если у Вас есть потребность в модальности, то такое, разумеется, тоже возможно.

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

loading.gif Загрузка...

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

alex0402

Цитата: PavelVaskan от 24 окт 2018, 16:25ЕСТЬ ЛИ СПОСОБ ИХ РЕАЛИЗОВАТЬ ПОМИМО СКД ???

Есть. Построитель запросов, построитель отчетов, генерация запросов своим колом.
В СКД проще всего!!!
1) Сформировать запрос.
2) Создать настройки отчета.
Готово.
Спасибо за Сказать спасибо

PavelVaskan

Цитата: alex0402 от 24 окт 2018, 17:19
Цитата: PavelVaskan от 24 окт 2018, 16:25ЕСТЬ ЛИ СПОСОБ ИХ РЕАЛИЗОВАТЬ ПОМИМО СКД ???

Есть. Построитель запросов, построитель отчетов, генерация запросов своим колом.
В СКД проще всего!!!
1) Сформировать запрос.
2) Создать настройки отчета.
Готово.

А конкретнее - с примером кода - можно (не через СКД)? Особенно - по пункту 2) ...

А если форма - не форма выбора, а обычная форма обработки? И она уже открыта или открывается (допустим, она первая и единственная в обработке).

vitasw

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

PavelVaskan

Цитата: vitasw от 25 окт 2018, 10:51
Смешалось в кучу кони-люди.
Приведите пожалуйста дословный текст задания, потому что ваша интерпритация задания лично у меня вызывает серьезные вопросы. Насколько я понимаю по вашим вопросам - вы еще новичек. Но то как вы интерпретировали задание - говорит об необходимости достаточно серьезных знаний.

Не такой и новичок. Просто, есть пробелы в некоторых моментах использования управляемых форм...
Уж извините, но судя по молчанию-мычанию, и Вы не знаете, как сделать то, что мне нужно (отбор с видом сравнения на обычной, основной форме обработки в управляемом интерфейсе)... Эксперты-коллеги в офисе тоже "сломались" пока при попытке помочь мне...

ТЕКСТ ЗАДАЧИ:

Обработка для заполнения документа поступления. Открытие списка заказов клиента, установка отметки по товару и перенос этих товаров в документ поступления.


После устного уточнения с постановщиком задания:

Создаём обработку. Форма обработки открывается из открытой формы документа Поступление по кнопке «Заполнение...». В обработке 2 (два) шага: 1) заполняем таблицу товаров; 2) из заполненной таблицы формируем документ Поступление.

Шаг 1): делаем сложный (стандартный, с видом сравнения) отбор по клиенту (партнёру), и простой — по периоду, по организации и по складу. По кнопке заполняем по отбору таблицу товаров. Заказы клиента отбираются НЕ СО СТАТУСОМ «Закрыт» (Заказы клиента со статусом «Закрыт» исключаются.)!!! При повторном нажатии на кнопку заполнения таблица товаров очищается и заполняется новыми данными.

По кнопке «Заполнить Поступление» товары переносятся в табличную часть документа Поступление. Если для Партнёра в шапке документа и указанных в строке Номенклатуры и Характеристики есть Номенклатура поставщика, то её заполняем в строке документа тоже.

***************************
Пока коллеги насоветовали делать вид сравнения в виде строкового списка, а не типа ВидСравнения или ВидСравненияКомпоновкиДанных... Но и тогда "всплывают" неразрешаемые "подводные камни" (например, в режиме выбора из списка постоянно надо выбирать тип в начале ввода кажого значения в списке... заполнение

Элементы.Партнер.СписокВыбора.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Партнеры");

должно теоретически помогать, но практически не помогает ...).

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

Просто, начальница хочет, чтобы элементарно - был бы при отборе вид сравнения, как 8.2, в режиме обычного приложения, а у нас сейчас в задаче режим Управляемого приложения, и я не знаю, как реализовать в нём вид сравнения, то есть, то, что в 8.2 в режиме обычного приложения было проще некуда... А заодно и объяснить начальнице, что это труднореализуемо! )))))

Добавлено: 25 окт 2018, 12:29


Если есть возможность создать элемент формы (обычной, основной формы обработки) типа "Отбор" или что-то вроде - буду благодарен за помощь! Спасибо!..
Добавлено: 25 окт 2018, 12:49


Ну вот, с последней локальной подзадачей справились: при выборе вида сравнения ВСписке и т.п., когда выбор из списка, надо в коде делать не

Элементы.Партнер.СписокВыбора.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Партнеры");


, а


Элементы.Партнер.ОграничениеТипа     = Новый ОписаниеТипов("СписокЗначений");
Партнер = Новый СписокЗначений;
Партнер.ТипЗначения    = Новый ОписаниеТипов("СправочникСсылка.Партнеры");

Добавлено: 25 окт 2018, 12:53


Тогда работает: тогда тип при добавлении каждого нового значения в список руками выбирать не надо - он всегда будет СправочникСсылка.Партнеры

vitasw

 
Цитата: PavelVaskan от 25 окт 2018, 11:54Уж извините, но судя по молчанию-мычанию, и Вы не знаете, как сделать то, что мне нужно
Уважаемый, у вас очень странный метод просить помощь... оскорбляя других - странно ждать помощи. Или вы считаете что кроме как висеть на форуме - других задач нет?
То что вы написали в первом посте не соответствует полностью приведенному заданию. В первом посте речь шла о
Цитата: PavelVaskan от 24 окт 2018, 16:25создать внешнюю обработку,
В полном задании речь уже не идет о ВНЕШНЕЙ обработке. или для вас это не играет принципиальную роль?
Раз вы нашли уже решение вашей локальной задачи, какие-то еще вопросы остались?


PavelVaskan

В любом случае, без типа ВидСравнения для реквизита формы и без легко реализуемого отбора с видом сравнения в случае обычных форм и без СКД на Управляемом приложении неприятно!
Добавлено: 25 окт 2018, 13:50


Цитата: vitasw от 25 окт 2018, 13:14
Цитата: PavelVaskan от 25 окт 2018, 11:54Уж извините, но судя по молчанию-мычанию, и Вы не знаете, как сделать то, что мне нужно
Уважаемый, у вас очень странный метод просить помощь... оскорбляя других - странно ждать помощи. Или вы считаете что кроме как висеть на форуме - других задач нет?
То что вы написали в первом посте не соответствует полностью приведенному заданию. В первом посте речь шла о
Цитата: PavelVaskan от 24 окт 2018, 16:25создать внешнюю обработку,
В полном задании речь уже не идет о ВНЕШНЕЙ обработке. или для вас это не играет принципиальную роль?
Раз вы нашли уже решение вашей локальной задачи, какие-то еще вопросы остались?

Ну уж извините, начальство этот вид обработки называет "внешней обработкой, подключаемой к документу"... Она прописывается в "Администрирование -> Дополнительные отчеты и обработки", и, по сути, да... внешняя...
Добавлено: 25 окт 2018, 13:56


Никого оскорблять не хотел... Приношу свои извинения. Всего лишь констатировал факты!

Вопрос остался прежним - не имитируя поле типа ВидСравнения или ВидСравненияКомпоновкиДанных с помощью строкового поля со списком, отбор с видом сравнения на основной форме обработки без с СКД реализовать можно?

Я так понял, раз тип "ВидСравнения" исчез, предлагается либо создавать самому перечисление, но для этого надо менять конфигурацию, а в большинстве случаев конфигурация неизменна или малоизменяема по условиям задачи. Если конфигурация неизменяема - остаётся только создать поле со списком на форме. Я и спрашиваю: породить "стандартный" вид сравнения в случае обычной формы на управляемом интерфейсе без СКД никак нельзя?

Ещё лучше понять, как сразу создавать отбор с видом сравнения в случае основной формы обработки (никакой не формы выбора). Внешняя обработка или не внешняя - без разницы, конечно же...

vitasw

По сути вопроса о виде сравнения. Я бы нарисовал динамический список и его отбор

PavelVaskan

Просто, в случае необходимости переводов видов сравнения на 3-5 языков при реализации через поле со списком, жизнь программиста усложняется в геометрической прогрессии... ))))

Какой проблемы, по-моему, не было, когда ВидСравнения был стандартным выбираемым для реквизитов типом...
Добавлено: 25 окт 2018, 14:36


Цитата: vitasw от 25 окт 2018, 14:25
По сути вопроса о виде сравнения. Я бы нарисовал динамический список и его отбор

Спасибо огромное! B) С типом ДинамическийСписок работал пока слабо и мало. Сейчас попробую разобраться и почитать об этом.

Пробую. Не совсем понимаю, как добиться отображения отбора с видом сравнения на форме, как заказала начальница... Для отбора надо лезть в настройки списка по отдельной кнопке...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск