Версия для печати темы (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) *
я в маразме ?

Не исключено. 32542460.gif

Автор: 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