Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Форма выбора. Параметр "Дата между". Реально?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Inkognito
Управляемые формы, конфигурация "УНФ". Реально ли передать в параметры открытия формы выбора документа условие: дата документа в некотором интервале.
Насколько мне известно, можно передать только точные значения...

ПараметрыОткрытияФормыВыбора=Новый Структура;
Пар = Новый Структура;
Пар.Вставить("Контрагент", Объект.Контрагент);
Пар.Вставить("Организация", Объект.Организация);
//сюда бы добавить период отбора документа. Например, документы за последние 2 месяца. Сейчас за все годы попадают в список, не годится так.
ПараметрыОткрытияФормыВыбора.Вставить("Отбор", Пар);    
ОписаниеОповещения = Новый ОписаниеОповещения("Тест", ЭтаФорма);  

ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора", ПараметрыОткрытияФормыВыбора,ЭтаФорма,,,,ОписаниеОповещения);
sava1
А два параметра не проходит ? 1- больше А, 2- меньше Б ???
Vofka
Цитата(sava1 @ 23.09.19, 13:29) необходимо зарегистрироваться для просмотра ссылки
А два параметра не проходит ? 1- больше А, 2- меньше Б ???

Подозреваю, что нужно это сделать без изменения кода конфигурации.
Inkognito
Vofka
Да, так и есть. Нужно типовыми средствами как-то сделать. Но как период всунуть в "Дату", непонятно.
fly
Inkognito @ Сегодня, 11:16 необходимо зарегистрироваться для просмотра ссылки ,
теоретически возможно
только придется вероятнее всего получить форму
Форма = Документы.ЗаказПоставщику.ПолучитьФормуВыбора();


а потом уже работать со Списком - Форма.Список.Отбор = Отбор компоновки данных

Там уже получать отборы и потом уже открывать непосредственно форму.

Форма.Открыть();
sava1
Цитата(fly @ 23.09.19, 14:56) необходимо зарегистрироваться для просмотра ссылки
Там уже получать отборы и потом уже открывать непосредственно форму.

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


уважаемый, Упр. формы открываются по-другому (тем более с установкой отбора списка)

Цитата(Inkognito @ 23.09.19, 11:16) необходимо зарегистрироваться для просмотра ссылки
//сюда бы добавить период отбора документа. Например, документы за последние 2 месяца. Сейчас за все годы попадают в список, не годится так.

Цитата(Inkognito @ 23.09.19, 13:59) необходимо зарегистрироваться для просмотра ссылки
Да, так и есть. Нужно типовыми средствами как-то сделать. Но как период всунуть в "Дату", непонятно.


я в маразме ?
Vofka
Цитата(sava1 @ 23.09.19, 15:30) необходимо зарегистрироваться для просмотра ссылки
уважаемый, Упр. формы открываются по-другому (тем более с установкой отбора списка)

В управляемых формах тоже можно получить форму, что-то с ней поделать и потом открыть.

Цитата(sava1 @ 23.09.19, 15:30) необходимо зарегистрироваться для просмотра ссылки
я в маразме ?

Не исключено. 32542460.gif
sava1
вот такая фигня не проходит ? - самому впадло пробовать
Сп = Новый СписокЗначений;
Сп.Добавить(Значение1);
Сп.Добавить(Значение2);

ПараметрыОтбор = Новый Структура("Контрагент", Сп);
ПараметрыОткрытия = Новый Структура("Отбор", ПараметрыОтбор);
ОткрытьФорму("Документ.........Форма.ФормаВыбора", ПараметрыОткрытия, Элемент);
Inkognito
sava1
Доработав немного код выше:
Сп = Новый СписокЗначений;
Сп.Добавить(ДобавитьМесяц(НачалоДня(ТекущаяДата()), -2));
Сп.Добавить(КонецДня(ТекущаяДата()));
ПараметрыОтбор = Новый Структура("Дата", Сп);

Пустой список в результате получаем.
Также попробовал вместо "Дата" --- "Период": никаких изменений по сравнению с базовым кодом (т.е. список отображается полностью по всем годам)
fly
Inkognito @ Сегодня, 16:21 необходимо зарегистрироваться для просмотра ссылки ,
Попробуйте так
Дата отбора = текущая дата минус 3 месяца, можете поставить свою.

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

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


fly @ Сегодня, 17:11 необходимо зарегистрироваться для просмотра ссылки ,
увы проставить интервал "Между" не получиться

типа сравнения между в СКД нет для левого соединения.
увы там или больше (больше или равно) или меньше (меньше или равно), или равно, или не равное, или в списке...... и т.д.
идею получать весь список дат и сравнивать("В списке" или "Не в списке"), думаю это не очень хорошая идея - хотя если очень и очень надо, то возможно и такое.
Petre
fly @ Today, 16:34 необходимо зарегистрироваться для просмотра ссылки ,
Почему же? Можно добавить два условия: с "больше или равно" и "меньше или равно".
fly
Petre @ Сегодня, 17:36 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Petre @ 23.09.19, 17:36) необходимо зарегистрироваться для просмотра ссылки
Почему же? Можно добавить два условия: с "больше или равно" и "меньше или равно".

может быть, теорию не настолько знаю, возможно пересечение отоборов
или
сработает...

тут надо пробовать

Цитата(Petre @ 23.09.19, 17:36) необходимо зарегистрироваться для просмотра ссылки
Почему же? Можно добавить два условия: с "больше или равно" и "меньше или равно".


сработало,
да ок

я не прав

".....увы проставить интервал "Между" не получиться...."
sava1
Цитата(Vofka @ 23.09.19, 15:39) необходимо зарегистрироваться для просмотра ссылки
В управляемых формах тоже можно получить форму, что-то с ней поделать и потом открыть.


Не рекомендуют - необходимо зарегистрироваться для просмотра ссылки

по-правильному - устанавливаем фикс. настройки и открываем форму - 2 параметра (большравно и меньшеравно) - о чем и писАл в #2

кстати - по ПолучитьФорму - необходимо зарегистрироваться для просмотра ссылки
Inkognito
Если вызывать процедуру на клиенте, ругается при сохранении на 1 строку:
Переменная не определена (Документы)

Если вызывать на сервере, ругается при выполнении серверной функции:
Форма = Документы.ЗаказПоставщику.ПолучитьФормуВыбора();
по причине:
Интерактивные операции недоступны

Где ее правильно вызвать (пример кода от fly)?
sava1
ФормуВыбора на сервере - вернуть на клиент - открыть
fly
Цитата(Inkognito @ 24.09.19, 10:49) необходимо зарегистрироваться для просмотра ссылки
Где ее правильно вызвать (пример кода от fly)?



На клиенте.

Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).




sava1
а по-человечески - так

ФормаВыбора = ПолучитьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора"
Inkognito
sava1
Работает прекрасно, спасибо. А как получить результат?
ОписаниеОповещения = Новый ОписаниеОповещения("Тест", ЭтаФорма);  
ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора", ПараметрыОткрытияФормыВыбора,ЭтаФорма,,,,ОписаниеОповещения);
//тут результат получаем в процедуре Тест()


//тут нет конструктора ОписаниеОповещения
Форма = ПолучитьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора");
Petre
Inkognito @ Today, 10:49 необходимо зарегистрироваться для просмотра ссылки ,
Так используйте ОткрытьФорму.
Inkognito
Всем спасибо, заработало!
необходимо зарегистрироваться для просмотра ссылки
&НаКлиенте
Процедура ВыборДокумента(Команда)
                    
        ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьЗначениеВыбора", ЭтаФорма);  
        Форма = ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаВыбора",,ЭтаФорма,,,,ОписаниеОповещения);
    
        Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
        Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
        Отбор.Использование = Истина;
        Отбор.ПравоеЗначение =  ДобавитьМесяц(ТекущаяДата(),-3);
        
        Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
        Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
        Отбор.Использование = Истина;
        Отбор.ПравоеЗначение = ТекущаяДата();
        
        Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
        Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        Отбор.Использование = Истина;
        Отбор.ПравоеЗначение =  Объект.Контрагент;
        
        Отбор = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
        Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        Отбор.Использование = Истина;
        Отбор.ПравоеЗначение =  Объект.Организация;
        
        Форма.Открыть();
        
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьЗначениеВыбора(Результат, ДополнительныеПараметры) Экспорт
    
    Рез = Результат;

КонецПроцедуры
Vofka
Цитата(Inkognito @ 24.09.19, 12:16) необходимо зарегистрироваться для просмотра ссылки
Может, кому пригодится код

Форма.Открыть(); в конце, наверное, лишнее.
sava1
а вот так ?

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

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

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

    ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.