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

Vofka
Код писал прямо здесь, не проверял:
Отбор = ЭлементыФормы.ДокументСписок.Отбор;
Отбор.ВидСравнения = ВидыСравнения.ВСписке;
Отбор.Значение = СписокДокументов;
Отбор.Использование = Истина;
alexkhua
Цитата(Vofka @ 03.06.13, 16:05) необходимо зарегистрироваться для просмотра ссылки
Код писал прямо здесь, не проверял:
Отбор = ЭлементыФормы.ДокументСписок.Отбор;
Отбор.ВидСравнения = ВидыСравнения.ВСписке;
Отбор.Значение = СписокДокументов;
Отбор.Использование = Истина;

Не пойму , что такое ДокументСписок.?
Vofka
Цитата(alexkhua @ 03.06.13, 16:29) необходимо зарегистрироваться для просмотра ссылки
что такое ДокументСписок.?

Имя элемента управления, в котором содержится список документов.
alexkhua
Нужно из одного документа открыть форму выбора документа ПриходнаяНакладная с отбором, например, по складу. Нашел штук пять методов в инете, но они работают только в УП.
Вот код , что не так ? (конфигурация самописная)
Процедура РецептураПартия1НачалоВыбора(Элемент, СтандартнаяОбработка)
     СтандартнаяОбработка=Ложь;
     ЗначениеОтбора= Новый Структура("Склад", СкладМатериалов);
     ПараметрыВыбора= Новый Структура("Отбор", ЗначениеОтбора);
     Форма=ПолучитьФорму("Документ.ПриходнаяНакладная.ФормаВыбора",ПараметрыВыбора);
     Форма.Открыть();
  
КонецПроцедуры

Vofka
Цитата(alexkhua @ 03.06.13, 20:22) необходимо зарегистрироваться для просмотра ссылки
что не так ?

Вы же сами пишете, что это для управляемых форм! Для обычных как-то так:

Процедура РецептураПартия1НачалоВыбора(Элемент, СтандартнаяОбработка)

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

как вариант.
alexkhua
Вот С таким кодом:
Процедура РецептураПартия1НачалоВыбора(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка=Ложь;

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриходнаяНакладная.Ссылка,
        |    ПриходнаяНакладнаяНоменклатура.Номенклатура
        |ИЗ
        |    Документ.ПриходнаяНакладная.Номенклатура КАК ПриходнаяНакладнаяНоменклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
        |        ПО ПриходнаяНакладнаяНоменклатура.Ссылка = ПриходнаяНакладная.Ссылка
        |ГДЕ
        |    ПриходнаяНакладнаяНоменклатура.Номенклатура = &СтрНоменклатура";

    Запрос.УстановитьПараметр("СтрНоменклатура", ЭлементыФормы.Рецептура.ТекущиеДанные.Номенклатура);

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
        СписокДокументов = Выборка.Ссылка;
    
    КонецЦикла;

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

Такая ошибка:
Цитата
{Документ.НарядЗаказПорошок.Форма.ФормаДокумента.Форма(98)}: Поле объекта не обнаружено (Отбор)
Отбор = Форма.ЭлементыФормы.ДокументСписок.Отбор;
logist
Цитата(alexkhua @ 03.06.13, 20:52) необходимо зарегистрироваться для просмотра ссылки
Вот С таким кодом:

Это не код, это шопопало.

Процедура РецептураПартия1НачалоВыбора(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка=Ложь;

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриходнаяНакладнаяНоменклатура.Ссылка,
        |ИЗ
        |    Документ.ПриходнаяНакладная.Номенклатура КАК ПриходнаяНакладнаяНоменклатура
        |ГДЕ
        |    ПриходнаяНакладнаяНоменклатура.Номенклатура = &СтрНоменклатура
        |СГРУППИРОВАТЬ ПО
        |    ПриходнаяНакладнаяНоменклатура.Ссылка";

    Запрос.УстановитьПараметр("СтрНоменклатура", ЭлементыФормы.Рецептура.ТекущиеДанные.Номенклатура);

    Результат = Запрос.Выполнить().Выгрузить();

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

Vofka
Цитата(logist @ 03.06.13, 21:16) необходимо зарегистрироваться для просмотра ссылки
Это не код, это шопопало.

Каждый когда-то шопопало писал smile.gif
alexkhua
logist, Ваш запрос ошибочный

Цитата(logist @ 03.06.13, 21:16) необходимо зарегистрироваться для просмотра ссылки
Это не код, это шопопало.

Процедура РецептураПартия1НачалоВыбора(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка=Ложь;

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриходнаяНакладнаяНоменклатура.Ссылка,
        |ИЗ
        |    Документ.ПриходнаяНакладная.Номенклатура КАК ПриходнаяНакладнаяНоменклатура
        |ГДЕ
        |    ПриходнаяНакладнаяНоменклатура.Номенклатура = &СтрНоменклатура
        |СГРУППИРОВАТЬ ПО
        |    ПриходнаяНакладнаяНоменклатура.Ссылка";

    Запрос.УстановитьПараметр("СтрНоменклатура", ЭлементыФормы.Рецептура.ТекущиеДанные.Номенклатура);

    Результат = Запрос.Выполнить().Выгрузить();

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

Цитата
{Документ.НарядЗаказПорошок.Форма.ФормаДокумента.Форма(93)}: Ошибка при установке значения атрибута контекста (Значение)
ФормаВыбора.Отбор.Ссылка.Значение = СписокДокументов; // Хотя может не Ссылка а Документ
по причине:
Неверный тип значения


alexkhua
Вот Так Работает как надо
Процедура РецептураПартия1НачалоВыбора(Элемент, СтандартнаяОбработка)
    
СтандартнаяОбработка=Ложь;

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриходнаяНакладнаяНоменклатура.Ссылка
        |ИЗ
        |    Документ.ПриходнаяНакладная.Номенклатура КАК ПриходнаяНакладнаяНоменклатура
        |ГДЕ
        |    ПриходнаяНакладнаяНоменклатура.Номенклатура = &СтрНоменклатура
        |
        |СГРУППИРОВАТЬ ПО
        |    ПриходнаяНакладнаяНоменклатура.Ссылка";

    Запрос.УстановитьПараметр("СтрНоменклатура", ЭлементыФормы.Рецептура.ТекущиеДанные.Номенклатура);

    Результат = Запрос.Выполнить().Выгрузить();

    МассивДокументов = Результат.ВыгрузитьКолонку("Ссылка");
    
    СписокДокументов= Новый СписокЗначений;
    
    Для Каждого Стр из МассивДокументов Цикл
        СписокДокументов.Добавить(Стр);
    КонецЦикла;    
        

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


Всем спасибо за помощь.
logist
Цитата(Vofka @ 03.06.13, 21:38) необходимо зарегистрироваться для просмотра ссылки
Каждый когда-то шопопало писал

бесспорно. я лишь высказал свое мнение, и привел код который был бы правильным, а вместо спасибо за обучение, ткнули пальцем в ошибку, ну мне то что, главное, что человек разобрался где ошибка...
Цитата(alexkhua @ 03.06.13, 22:09) необходимо зарегистрироваться для просмотра ссылки
logist, Ваш запрос ошибочный

Vofka
Цитата(logist @ 04.06.13, 0:14) необходимо зарегистрироваться для просмотра ссылки
а вместо спасибо за обучение, ткнули пальцем в ошибку

Автор не со зла, я думаю smile.gif

alexkhua, а ну ка быстренько всем помогающим палец вверх 32542460.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.