|
1С 8.3 Выборка фильтрация? | ☑ | ||
---|---|---|---|---|
0
Олеся999
03.07.15
✎
08:36
|
http://lvkr.ru/f/Jwm5tx/800.jpg
http://lvkr.ru/f/9Xd1RZ/1024.jpg Сделала оформление по цветам) Подскажите как можно сделать, что бы в место оформления, фильтровался список в таблице"Товары" по выбранному значению из таблицы "Продукция" ? :) Например если в таблице "Продукция" выберем : Паспорт то в таблице "Товары" отфильтрует только строки с : Паспорт Код: &НаСервере Процедура ОформитьТоварыНаСервере() // Выделим текущее ЭлементУО = УсловноеОформление.Элементы.Добавить(); ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Черный); ЭлементУО.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; УсловиеОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Продукция"); УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; УсловиеОтбора.ПравоеЗначение = ТекПродукция; ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыНомерСтроки"); ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыШК"); ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыПродукция"); ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыКоличечтво"); // Засветим остальные ЭлементУО = УсловноеОформление.Элементы.Добавить(); ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СеребристоСерый); ЭлементУО.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; УсловиеОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Продукция"); УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; УсловиеОтбора.ПравоеЗначение = ТекПродукция; ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыНомерСтроки"); ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыШК"); ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыПродукция"); ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыКоличечтво"); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ КонецПроцедуры &НаСервере Процедура ОформитьТовары2НаСервере() // ЭлементУО2 = УсловноеОформление.Элементы.Добавить(); // ЭлементУО2.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Черный); // ЭлементУО2.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; // // УсловиеОтбора2 = ЭлементУО2.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); // УсловиеОтбора2.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары2.Продукция"); // УсловиеОтбора2.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // УсловиеОтбора2.ПравоеЗначение = ТекПродукция; // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2НомерСтроки"); // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2тч_Флаг"); // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2Продукция"); // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2Количество"); // // // Засветим остальные // ЭлементУО2 = УсловноеОформление.Элементы.Добавить(); // ЭлементУО2.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СеребристоСерый); // ЭлементУО2.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; // // УсловиеОтбора2 = ЭлементУО2.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); // УсловиеОтбора2.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары2.Продукция"); // УсловиеОтбора2.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; // УсловиеОтбора2.ПравоеЗначение = ТекПродукция; // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2НомерСтроки"); // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2тч_Флаг"); // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2Продукция"); // ОформляемоеПоле = ЭлементУО2.Поля.Элементы.Добавить(); // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары2Количество"); // КонецПроцедуры &НаСервере Процедура Команда1НаСервере() // Вставить содержимое обработчика. КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Ключ.Пустая() Тогда Объект.Дата = ТекущаяДата(); КонецЕсли; Если НачалоДня(Объект.Дата) < НачалоДня(ТекущаяДата()) Тогда ТолькоПросмотр = Истина; Элементы.ГруппаДиапазон.Видимость = Ложь; КонецЕсли; Если Объект.Продукция.Количество() > 0 Тогда ТекПродукция = Объект.Продукция[0].Продукция; КонецЕсли; ОформитьТоварыНаСервере(); КонецПроцедуры &НаКлиенте Процедура ВвестиДиапазон(Команда) Если ДиапазонОт = 0 Тогда ПоказатьПредупреждение(, "Задайте начало диапазона", 5); ТекущийЭлемент = Элементы.ДиапазонОт; Возврат; КонецЕсли; Если ДиапазонДо = 0 Тогда ПоказатьПредупреждение(, "Задайте окончание диапазона", 5); ТекущийЭлемент = Элементы.ДиапазонДо; Возврат; КонецЕсли; Если ДиапазонОт >= ДиапазонДо Тогда ПоказатьПредупреждение(, "Начало диапазона должно быть меньше окончания", 5); ТекущийЭлемент = Элементы.ДиапазонОт; КонецЕсли; //Если Элементы.Продукция1Продукция.Пустая() Тогда // ПоказатьПредупреждение(, "Выберите продукцию", 5); // ТекущийЭлемент = Элементы.Продукция1Продукция; //КонецЕсли; ИсходнаяДл = СтрДлина(ДиапазонОт); Для Сч = ДиапазонОт По ДиапазонДо Цикл НС = Объект.Товары.Добавить(); // Надо дополнить до исходной длинны строки ЧислоСтр = Формат(Сч, "ЧДЦ=; ЧН=Пусто; ЧГ=0"); НС.ШК = Лев("0000000", ИсходнаяДл - СтрДлина(ЧислоСтр)) + ЧислоСтр; НС.Продукция = Элементы.Продукция.ТекущиеДанные.Продукция; //НС.Количество = "1"; КонецЦикла; ДиапазонОт = ""; ДиапазонДо = ""; КонецПроцедуры &НаКлиенте Процедура ПроверитьДиапазонПоТипу() Диапазон = тк_Сервер.ПолучитьДиапазонПрибора(Элементы.Продукция1Продукция); Если Диапазон = Неопределено Тогда Возврат; КонецЕсли; НачалоДиапазона = Диапазон.Начало; КонецДиапазона = Диапазон.Конец; Если (НачалоДиапазона > 0) И (НЕ ПустаяСтрока(ДиапазонОт)) Тогда Если НачалоДиапазона > Число(ДиапазонОт) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Начало диапазона не соотв. продукции! Для типа приборов " + тк_Сервер.ПолучитьРеквизитПоСсылке(Элементы.Продукция1Продукция, "ТипПрибора") + " начало диапазона: " + НачалоДиапазона; Сообщение.Поле = "ДиапазонОт"; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; Если (КонецДиапазона > 0) И (НЕ ПустаяСтрока(ДиапазонДо)) Тогда Если КонецДиапазона < Число(ДиапазонДо) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Конец диапазона не соотв. продукции! Для типа приборов " + тк_Сервер.ПолучитьРеквизитПоСсылке(Элементы.Продукция1Продукция, "ТипПрибора") + " начало диапазона: " + НачалоДиапазона; Сообщение.Поле = "ДиапазонОт"; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЧислоПриборовПриИзменении(Элемент) Если ПустаяСтрока(ДиапазонОт) Тогда ПоказатьПредупреждение(, "Задайте начало диапазона", 5); ТекущийЭлемент = Элементы.ДиапазонОт; Возврат; КонецЕсли; Если Количество > 0 Тогда чОт = Число(ДиапазонОт) - 1; ИсходнаяДл = СтрДлина(ДиапазонОт); ЧислоСтр = Формат(чОт + Количество, "ЧДЦ=; ЧН=Пусто; ЧГ=0"); ДиапазонДо = Лев("0000000", СтрДлина(ДиапазонОт) - СтрДлина(ЧислоСтр)) + ЧислоСтр; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДиапазонОтПриИзменении(Элемент) ПроверитьДиапазонПоТипу(); КонецПроцедуры &НаКлиенте Процедура ДиапазонДоПриИзменении(Элемент) // Проверим корректность, чтобы было больше начала диапазона Если Число(ДиапазонОт) >= Число(ДиапазонДо) Тогда ПоказатьПредупреждение(, "Окончание диапазона должно быть меньше начала", 5); ТекущийЭлемент = Элементы.ДиапазонОт; ДиапазонДо = ДиапазонОт; КонецЕсли; ПроверитьДиапазонПоТипу(); КонецПроцедуры &НаКлиенте Процедура ВыборПродукцииЗавершение(Результат, ПараметрыВыполнения) Экспорт Если ТипЗнч(Результат) = Тип("ЭлементСпискаЗначений") Тогда Элементы.Товары.ТекущиеДанные.Продукция = Результат.Значение; ИначеЕсли ТипЗнч(Результат) = Тип("СправочникСсылка.Номенклатура") Тогда Элементы.Товары.ТекущиеДанные.Продукция = Результат; Продукция = Результат; Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не выбрано значение"; Сообщение.Сообщить(); Возврат; КонецЕсли; Если Элементы.Продукция1Продукция.Пустая() Тогда Элементы.Продукция1Продукция = Элементы.Товары.ТекущиеДанные.Продукция; КонецЕсли; Диапазон = тк_Сервер.ПолучитьДиапазонПрибора(Элементы.Продукция1Продукция); Если Диапазон <> Неопределено Тогда ДиапазонОт = Диапазон.Начало; ДиапазонДо = Диапазон.Конец; КонецЕсли; Элементы.Товары.ЗакончитьРедактированиеСтроки(Ложь); Элементы.Товары.ДобавитьСтроку(); КонецПроцедуры &НаКлиенте Процедура ТоварыСерияПриИзменении(Элемент) // Если ШК из того же даипазона, тогда продукцию ставим такую же как и в предыдущей строке ТД = Элементы.Товары.ТекущиеДанные; // Надо проверить нет ли уже такого ШК Отбор = Новый Структура; Отбор.Вставить("ШК", ТД.ШК); Мс = Объект.Товары.НайтиСтроки(Отбор); Если Мс.Количество() > 1 Тогда ПоказатьПредупреждение(, "Такой ШК уже введен", 1); ТД.ШК = ""; Возврат; КонецЕсли; Если Объект.Товары.Количество() > 1 Тогда // Если задан диапазон проанализируем из того же или нет Если (ДиапазонОт > 0) И (ДиапазонДо > 0) Тогда Если (ТД.ШК >= ДиапазонОт) И (ТД.ШК < ДиапазонДо) Тогда // Взять из предыдущей строки ПредыдущаяПродукция = ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"); Если ТД.НомерСтроки > 1 Тогда ПредыдущаяПродукция = Объект.Товары[ТД.НомерСтроки - 2].Продукция; КонецЕсли; Если НЕ ПредыдущаяПродукция.Пустая() Тогда ТД.Продукция = ПредыдущаяПродукция; Иначе ТД.Продукция = Элементы.Продукция1Продукция; КонецЕсли; Если НЕ ТД.Продукция.Пустая() Тогда Элементы.Товары.ЗакончитьРедактированиеСтроки(Ложь); Элементы.Товары.ДобавитьСтроку(); КонецЕсли; Возврат; Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Сменился диапазон, т.е. тип приборов"; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; КонецЕсли; Сп = тк_Сервер.ПолучитьСписокПриборовПоСерийномуНомеру(ТД.ШК); Обработчик = Новый ОписаниеОповещения("ВыборПродукцииЗавершение", Объект); Если Сп = Неопределено Тогда // Предложить выбрать ПараметрыФормы = Новый Структура; ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Объект, , , , Обработчик); Иначе Сп.ПоказатьВыборЭлемента(Обработчик, "Выберите продукцию"); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ТоварыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) Если ОтменаРедактирования Тогда Возврат; КонецЕсли; Если Элементы.Товары.ТекущиеДанные.Продукция.Пустая() Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ТекущийОбъект.Количество <> Объект.Товары.Количество() Тогда ТекущийОбъект.Количество = Объект.Товары.Количество(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) // Вставить содержимое обработчика. КонецПроцедуры &НаСервере Процедура ЗаполнитьНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураКомплектация.Наименование, | НоменклатураКомплектация.Количество |ИЗ | Справочник.Номенклатура.Комплектация КАК НоменклатураКомплектация"; результат=Запрос.Выполнить(); Объект.тч_доп.Загрузить(Запрос.выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедуры &НаКлиенте Процедура ТоварыПриАктивизацииСтроки(Элемент) ТоварыПриАктивизацииСтрокиНаСервере(); КонецПроцедуры &НаСервере Процедура ТоварыПриАктивизацииСтрокиНаСервере() // Запрос = Новый Запрос; // Запрос.Текст = "ВЫБРАТЬ //| НоменклатураКомплектация.Наименование, //| НоменклатураКомплектация.Количество //|ИЗ //| Справочник.Номенклатура.Комплектация КАК НоменклатураКомплектация"; //результат=Запрос.Выполнить(); //Объект.тч_доп.Загрузить(Запрос.выполнить().Выгрузить()); КонецПроцедуры &НаСервере Процедура ОбщееКолВоНаСервере() Запрос2 = Новый Запрос; Запрос2.Текст = "ВЫБРАТЬ | ОтгрузкаТовары.Продукция.Ссылка как Продукция |ИЗ | Документ.Отгрузка.Товары КАК ОтгрузкаТовары | |СГРУППИРОВАТЬ ПО | ОтгрузкаТовары.Продукция.Ссылка" ; Результат2=Запрос2.Выполнить(); ТабЗн.Загрузить(Запрос2.выполнить().Выгрузить()); //Запрос2.Параметры.Очистить(); КонецПроцедуры &НаКлиенте Процедура ОбщееКолВо(Команда) ОбщееКолВоНаСервере(); КонецПроцедуры &НаСервере Процедура КомплектацияНаСервере(ТекущаяПродукция) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураКабелиИЖгуты.НомерСтроки, | НоменклатураКабелиИЖгуты.Флаг КАК тч_Флаг, | НоменклатураКабелиИЖгуты.Наименование КАК Продукция, | НоменклатураКабелиИЖгуты.Количество |ИЗ | Справочник.Номенклатура.КабелиИЖгуты КАК НоменклатураКабелиИЖгуты |ГДЕ | НоменклатураКабелиИЖгуты.Ссылка = &Продукция"; Запрос.УстановитьПараметр("Продукция", ТекущаяПродукция); Результат=Запрос.Выполнить(); //Объект.Товары2.Загрузить(Запрос.выполнить().Выгрузить()); Для каждого Стр из Запрос.выполнить().Выгрузить() Цикл // НайдЭлемент = Объект.Товары2.НайтиСтроки(Стр.Продукция, "Продукция"); // Если НайдЭлемент = Неопределено Тогда ЗаполнитьЗначенияСвойств(Объект.Товары2.Добавить(),Стр); //КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Комплектация(Команда) КомплектацияНаСервере(Элементы.Продукция.ТекущиеДанные.Продукция); КонецПроцедуры &НаКлиенте Процедура ПродукцияПриИзменении(Элемент) //ПродукцияПриИзмененииНаСервере(Элементы.Продукция.ТекущиеДанные.Продукция) КонецПроцедуры &НаСервере Процедура ПродукцияПриИзмененииНаСервере(ТекущаяПродукция) // //Запрос = Новый Запрос; //Запрос.Текст = "ВЫБРАТЬ // | НоменклатураКабелиИЖгуты.НомерСтроки, // | НоменклатураКабелиИЖгуты.Флаг КАК тч_Флаг, // | НоменклатураКабелиИЖгуты.Наименование КАК Продукция, // | НоменклатураКабелиИЖгуты.Количество // |ИЗ // | Справочник.Номенклатура.КабелиИЖгуты КАК НоменклатураКабелиИЖгуты // |ГДЕ // | НоменклатураКабелиИЖгуты.Ссылка = &Продукция"; // //Запрос.УстановитьПараметр("Продукция", ТекущаяПродукция); ////Запрос.УстановитьПараметр("тч_Флаг", Элементы.Товары2тч_Флаг); //Результат=Запрос.Выполнить(); //Объект.Товары2.Загрузить(Запрос.выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура ПродукцияПриАктивизацииСтроки(Элемент) //ПродукцияПриАктивизацииСтрокиНаСервере(Элементы.Продукция.ТекущиеДанные.Продукция); ТекПродукция = Элементы.Продукция.ТекущиеДанные.Продукция; ОформитьТоварыНаСервере(); //ОформитьТовары2НаСервере(); Возврат; КонецПроцедуры &НаСервере Процедура ПродукцияПриАктивизацииСтрокиНаСервере(ТекущаяПродукция) //Запрос = Новый Запрос; //Запрос.Текст = "ВЫБРАТЬ // | НоменклатураКабелиИЖгуты.НомерСтроки, // | НоменклатураКабелиИЖгуты.Флаг КАК тч_Флаг, // | НоменклатураКабелиИЖгуты.Наименование КАК Продукция, // | НоменклатураКабелиИЖгуты.Количество // |ИЗ // | Справочник.Номенклатура.КабелиИЖгуты КАК НоменклатураКабелиИЖгуты // |ГДЕ // | НоменклатураКабелиИЖгуты.Ссылка = &Продукция"; // //Запрос.УстановитьПараметр("Продукция", ТекущаяПродукция); ////Запрос.УстановитьПараметр("тч_Флаг", Элементы.Товары2тч_Флаг); //Результат=Запрос.Выполнить(); ////Объект.Товары2.Загрузить(Запрос.выполнить().Выгрузить()); //Объект.Товары2.Добавить(Запрос.выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура КоличествоПриИзменении(Элемент) ДиапазонДо= ДиапазонОт + Объект.Количество-1; КонецПроцедуры |
|||
1
GROOVY
03.07.15
✎
08:37
|
Отбор установи в динамическом списке.
|
|||
2
Enterprise
03.07.15
✎
08:43
|
(0) Павел плохого не посоветует
|
|||
3
Олеся999
03.07.15
✎
09:39
|
Типо что то такого ?
ГруппаОтбор = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбор.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.Родитель = ГруппаОтбор; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование"); Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; Отбор.Использование = Истина; Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементОтбора.ПравоеЗначение = "000000001"; |
|||
4
Олеся999
03.07.15
✎
10:43
|
Написала вот так но что то не работает :(
Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("Продукция",Элементы.Товары.ТекущиеДанные.Продукция); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |