Версия для печати темы (https://pro1c.org.ua/index.php?s=3a710254b61a70b47a7814ecaed05953&showtopic=54275)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Форма выбора. Параметр "Дата между". Реально?
Автор: Inkognito 23.09.19, 10:16
Управляемые формы, конфигурация "УНФ". Реально ли передать в параметры открытия формы выбора документа условие: дата документа в некотором интервале.
Насколько мне известно, можно передать только точные значения...
ПараметрыОткрытияФормыВыбора=Новый Структура;
Пар = Новый Структура;
Пар.Вставить("Контрагент", Объект.Контрагент);
Пар.Вставить("Организация", Объект.Организация);
//сюда бы добавить период отбора документа. Например, документы за последние 2 месяца. Сейчас за все годы попадают в список, не годится так.
ПараметрыОткрытияФормыВыбора.Вставить("Отбор", Пар);
ОписаниеОповещения = Новый ОписаниеОповещения("Тест", ЭтаФорма);
ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора", ПараметрыОткрытияФормыВыбора,ЭтаФорма,,,,ОписаниеОповещения);
Автор: sava1 23.09.19, 12:29
А два параметра не проходит ? 1- больше А, 2- меньше Б ???
Автор: Vofka 23.09.19, 12:57
Цитата(sava1 @ 23.09.19, 13:29)
А два параметра не проходит ? 1- больше А, 2- меньше Б ???
Подозреваю, что нужно это сделать без изменения кода конфигурации.
Автор: Inkognito 23.09.19, 12:59
Vofka
Да, так и есть. Нужно типовыми средствами как-то сделать. Но как период всунуть в "Дату", непонятно.
Автор: fly 23.09.19, 13:56
Inkognito @ Сегодня, 11:16
,
теоретически возможно
только придется вероятнее всего получить форму
Форма = Документы.ЗаказПоставщику.ПолучитьФормуВыбора();
а потом уже работать со Списком - Форма.Список.Отбор = Отбор компоновки данных
Там уже получать отборы и потом уже открывать непосредственно форму.
Форма.Открыть();
Автор: sava1 23.09.19, 14:30
Цитата(fly @ 23.09.19, 14:56)
Там уже получать отборы и потом уже открывать непосредственно форму.
Форма.Открыть();
уважаемый, Упр. формы открываются по-другому (тем более с установкой отбора списка)
Цитата(Inkognito @ 23.09.19, 11:16)
//сюда бы добавить период отбора документа. Например, документы за последние 2 месяца. Сейчас за все годы попадают в список, не годится так.
Цитата(Inkognito @ 23.09.19, 13:59)
Да, так и есть. Нужно типовыми средствами как-то сделать. Но как период всунуть в "Дату", непонятно.
я в маразме ?
Автор: Vofka 23.09.19, 14:39
Цитата(sava1 @ 23.09.19, 15:30)
уважаемый, Упр. формы открываются по-другому (тем более с установкой отбора списка)
В управляемых формах тоже можно получить форму, что-то с ней поделать и потом открыть.
Цитата(sava1 @ 23.09.19, 15:30)
я в маразме ?
Не исключено.
Автор: sava1 23.09.19, 14:40
вот такая фигня не проходит ? - самому впадло пробовать
Сп = Новый СписокЗначений;
Сп.Добавить(Значение1);
Сп.Добавить(Значение2);
ПараметрыОтбор = Новый Структура("Контрагент", Сп);
ПараметрыОткрытия = Новый Структура("Отбор", ПараметрыОтбор);
ОткрытьФорму("Документ.........Форма.ФормаВыбора", ПараметрыОткрытия, Элемент);
Автор: Inkognito 23.09.19, 15:21
sava1
Доработав немного код выше:
Сп = Новый СписокЗначений;
Сп.Добавить(ДобавитьМесяц(НачалоДня(ТекущаяДата()), -2));
Сп.Добавить(КонецДня(ТекущаяДата()));
ПараметрыОтбор = Новый Структура("Дата", Сп);
Пустой список в результате получаем.
Также попробовал вместо "Дата" --- "Период": никаких изменений по сравнению с базовым кодом (т.е. список отображается полностью по всем годам)
Автор: fly 23.09.19, 16:34
Inkognito @ Сегодня, 16:21
,
Попробуйте так
Дата отбора = текущая дата минус 3 месяца, можете поставить свою.
Форма = Документы.ЗаказПоставщику.ПолучитьФормуВыбора();
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = ДобавитьМесяц(ТекущаяДата(),-3);
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = Объект.Контрагент;
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = Объект.Организация;
Форма.Открыть();
fly @ Сегодня, 17:11
,
увы проставить интервал "Между" не получиться
типа сравнения между в СКД нет для левого соединения.
увы там или больше (больше или равно) или меньше (меньше или равно), или равно, или не равное, или в списке...... и т.д.
идею получать весь список дат и сравнивать("В списке" или "Не в списке"), думаю это не очень хорошая идея - хотя если очень и очень надо, то возможно и такое.
Автор: Petre 23.09.19, 16:36
fly @ Today, 16:34
,
Почему же? Можно добавить два условия: с "больше или равно" и "меньше или равно".
Автор: fly 23.09.19, 16:42
Petre @ Сегодня, 17:36
,
Цитата(Petre @ 23.09.19, 17:36)
Почему же? Можно добавить два условия: с "больше или равно" и "меньше или равно".
может быть, теорию не настолько знаю, возможно пересечение отоборов
или
сработает...
тут надо пробовать
Цитата(Petre @ 23.09.19, 17:36)
Почему же? Можно добавить два условия: с "больше или равно" и "меньше или равно".
сработало,
да ок
я не прав
".....увы проставить интервал "Между" не получиться...."
Автор: sava1 24.09.19, 8:45
Цитата(Vofka @ 23.09.19, 15:39)
В управляемых формах тоже можно получить форму, что-то с ней поделать и потом открыть.
Не рекомендуют - https://pro1c.org.ua/redirect.php?https://infostart.ru/public/236382/
по-правильному - устанавливаем фикс. настройки и открываем форму - 2 параметра (большравно и меньшеравно) - о чем и писАл в #2
кстати - по ПолучитьФорму - https://pro1c.org.ua/redirect.php?https://its.1c.ru/db/v8std#content:404:hdoc
Автор: Inkognito 24.09.19, 9:49
Если вызывать процедуру на клиенте, ругается при сохранении на 1 строку:
Переменная не определена (Документы)
Если вызывать на сервере, ругается при выполнении серверной функции:
Форма = Документы.ЗаказПоставщику.ПолучитьФормуВыбора();
по причине:
Интерактивные операции недоступны
Где ее правильно вызвать (пример кода от
fly)?
Автор: sava1 24.09.19, 10:37
ФормуВыбора на сервере - вернуть на клиент - открыть
Автор: fly 24.09.19, 10:38
Цитата(Inkognito @ 24.09.19, 10:49)
Где ее правильно вызвать (пример кода от fly)?
На клиенте.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).
Автор: sava1 24.09.19, 10:39
а по-человечески - так
ФормаВыбора = ПолучитьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора"
Автор: Inkognito 24.09.19, 10:49
sava1
Работает прекрасно, спасибо. А как получить результат?
ОписаниеОповещения = Новый ОписаниеОповещения("Тест", ЭтаФорма);
ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора", ПараметрыОткрытияФормыВыбора,ЭтаФорма,,,,ОписаниеОповещения);
//тут результат получаем в процедуре Тест()
//тут нет конструктора ОписаниеОповещения
Форма = ПолучитьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора");
Автор: Petre 24.09.19, 11:02
Inkognito @ Today, 10:49
,
Так используйте ОткрытьФорму.
Автор: Inkognito 24.09.19, 11:16
Всем спасибо, заработало!
Может, кому пригодится код&НаКлиенте
Процедура ВыборДокумента(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьЗначениеВыбора", ЭтаФорма);
Форма = ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора",,ЭтаФорма,,,,ОписаниеОповещения);
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = ДобавитьМесяц(ТекущаяДата(),-3);
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = ТекущаяДата();
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = Объект.Контрагент;
Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = Объект.Организация;
Форма.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьЗначениеВыбора(Результат, ДополнительныеПараметры) Экспорт
Рез = Результат;
КонецПроцедуры
Автор: Vofka 24.09.19, 11:21
Цитата(Inkognito @ 24.09.19, 12:16)
Может, кому пригодится код
Форма.Открыть(); в конце, наверное, лишнее.
Автор: sava1 24.09.19, 11:23
а вот так ?
&НаКлиенте
Процедура ОткрытьФормуА(Команда)
фиксНастройки = Новый НастройкиКомпоновкиДанных;
эОтбор = фиксНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
эОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
эОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
эОтбор.ПравоеЗначение = Объект.Период.ДатаНачала;
эОтбор.Использование = Истина;
эОтбор = фиксНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
эОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
эОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
эОтбор.ПравоеЗначение = Объект.Период.ДатаОкончания;
эОтбор.Использование = Истина;
эОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua