Как в УТ 11.3, в справочник номенклатуры добавить остатки на складах и актуальные цены Попросил клиент добавить в справочник номенклатуры остатки и цены на текущий момент. Нужно!? Делаем:
1. Открываем форму списка номенклатуры и в свойства СписокНоменклатуры - Настройка списка
Корректируем запрос добавляя выборку по остаткам склада, новый вариант:
Код 1C v 8.3 ВЫБРАТЬ
СпрНоменклатура. Ссылка КАК Ссылка,
СпрНоменклатура. Код КАК Код,
СпрНоменклатура. Наименование КАК Наименование,
СпрНоменклатура. Артикул КАК Артикул,
СпрНоменклатура. ВидНоменклатуры КАК ВидНоменклатуры,
СпрНоменклатура. ЕдиницаИзмерения КАК ЕдиницаИзмерения,
СпрНоменклатура. СтавкаНДС КАК СтавкаНДС,
СпрНоменклатура. Родитель,
ВЫБОР
КОГДА СпрНоменклатура. ЕстьТоварыДругогоКачества
ТОГДА 4 + ВЫБОР
КОГДА СпрНоменклатура. ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СпрНоменклатура. ИспользованиеХарактеристик = ЗНАЧЕНИЕ( Перечисление. ВариантыИспользованияХарактеристикНоменклатуры. НеИспользовать)
ТОГДА 0
ИНАЧЕ 2
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СпрНоменклатура. ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СпрНоменклатура. ИспользованиеХарактеристик = ЗНАЧЕНИЕ( Перечисление. ВариантыИспользованияХарактеристикНоменклатуры. НеИспользовать)
ТОГДА 0
ИНАЧЕ 2
КОНЕЦ
КОНЕЦ КАК ИндексКартинки,
ТоварыНаСкладахОстатки1 . ВНаличииОстаток КАК Остаток_Про,
ТоварыНаСкладахОстатки2 . ВНаличииОстаток КАК Остаток_Лемм
ИЗ
Справочник. Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления. ТоварыНаСкладах. Остатки( ,
Склад = Склад1
) КАК ТоварыНаСкладахОстатки1
ПО ( ТоварыНаСкладахОстатки1 . Номенклатура = СпрНоменклатура. Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления. ТоварыНаСкладах. Остатки( ,
Склад = Склад2
) КАК ТоварыНаСкладахОстатки2
ПО ( ТоварыНаСкладахОстатки2 . Номенклатура = СпрНоменклатура. Ссылка)
ГДЕ
НЕ СпрНоменклатура. ЭтоГруппа
{ГДЕ
( СпрНоменклатура. Ссылка В
( ВЫБРАТЬ
Сегменты. Номенклатура
ИЗ
РегистрСведений. НоменклатураСегмента КАК Сегменты
ГДЕ
Сегменты. Сегмент = СегментНоменклатуры) ) }
2. Устанавливаем параметры в Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Код 1C v 8.3 СписокНоменклатура. Параметры. УстановитьЗначениеПараметра( "Склад1" , Справочники. Склады. НайтиПоНаименованию( "PRO" ) ) ;
СписокНоменклатура. Параметры. УстановитьЗначениеПараметра( "Склад2" , Справочники. Склады. НайтиПоНаименованию( "ЛЕММ" ) ) ;
Цены. Параметры. УстановитьЗначениеПараметра( "КонПериода" , ТекущаяДата( ) ) ;
Добавляем Динамический список Цены:
В свойствах произвольный запрос:
Код 1C v 8.3 ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних. Номенклатура,
ЦеныНоменклатурыСрезПоследних. ВидЦены,
ЦеныНоменклатурыСрезПоследних. Характеристика,
ЦеныНоменклатурыСрезПоследних. Цена
ИЗ
РегистрСведений. ЦеныНоменклатуры. СрезПоследних( &КонПериода, ) КАК ЦеныНоменклатурыСрезПоследних
И для списка номенклатуры пропишем обновление цен при активизации строки
Код 1C v 8.3
Цены. Отбор. Элементы. Очистить( ) ;
НовыйЭлементОтбора = Цены. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ПолеОтбора = Новый ПолеКомпоновкиДанных( "Номенклатура" ) ;
НовыйЭлементОтбора. ЛевоеЗначение = ПолеОтбора;
НовыйЭлементОтбора. Использование = Истина ;
НовыйЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
НовыйЭлементОтбора. ПравоеЗначение = ? ( Элемент. ТекущиеДанные < > Неопределено , Элемент. ТекущиеДанные. Ссылка, ВернутьЗначениеНоменклатура( ) ) ;
В результате:
Клиент доволен, а это самое главное
Если Вам нужна аналогичная настройка, обращайтесь, контакты тут
Категория:
1С Управление торговлей 11 Динамический список ~ отбор в динамическом списке программно Для установки отбора в динамическом списке используется свойство Отбор.
Добавление нового элемента отбора осуществляется следующим образом:
Код 1C v 8.2 УП ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
Для того чтобы новый отбор начал работать необходимо установить у элемента отбора свойства ЛевоеЗначение, ВидСравнения и ПравоеЗначение, а также установить свойство Использование в Истина.
Код 1C v 8.2 УП ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Поле1" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. ПравоеЗначение = Значение1 ;
Кроме простых условий в отборе возможно создание условий по нескольким полям. При чём как по условию "И", так и по условиям "Или" и "Не". Для данной операции используется специальный тип данных ГруппаЭлементовОтбораКомпоновкиДанных.
Код 1C v 8.2 УП ГруппаОтбора = Список. Отбор. Элементы. Добавить( Тип( "ГруппаЭлементовОтбораКомпоновкиДанных" ) ) ;
ГруппаОтбора. ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных. ГруппаИЛИ;
ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. Родитель = ГруппаОтбора;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Поле1" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Меньше;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. ПравоеЗначение = Значение1 ;
ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. Родитель = ГруппаОтбора;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Поле2" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Больше;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. ПравоеЗначение = Значение2 ;
Категория:
Работа с Формой (Диалог) и её элементами Как программно установить отбор в СКД Код 1C v 8.х Процедура ВашРеквизитПриИзменении(Элемент)
СоответствиеПоискаОтбора = Новый Соответствие;
СоответствиеПоискаОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("%Нужное поле компоновки%"));
СоответствиеПоискаОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.ВСписке); //сюда впихнуть нужный вид сравнения
СоответствиеПоискаОтбора.Вставить("Использование",Истина);
СоответствиеНовогоОтбора = Новый Соответствие;
СоответствиеНовогоОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("%Нужное поле компоновки%"));
СоответствиеНовогоОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.ВСписке); // вид сравнения
Если ЗначениеЗаполнено(Кампейны) тогда
СоответствиеНовогоОтбора.Вставить("Использование",Истина);
Иначе
СоответствиеНовогоОтбора.Вставить("Использование",Ложь);
КонецЕсли;
СоответствиеНовогоОтбора.Вставить("Значение",Кампейны);
ИзменитьОтбор(КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);
КонецПроцедуры
Процедура ИзменитьОтбор(ЭлементСтруктуры, СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт
Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
Отбор = ЭлементСтруктуры.Настройки.Отбор;
Иначе
Отбор = ЭлементСтруктуры;
КонецЕсли;
Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка") Тогда
нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение);
Иначе
нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"];
КонецЕсли;
Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда
нВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Иначе
нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"];
КонецЕсли;
Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда
нИспользование = Истина;
Иначе
нИспользование = СоответствиеНовогоОтбора["Использование"];
КонецЕсли;
нЗначение = СоответствиеНовогоОтбора["Значение"];
ТолькоПоЛевомуЗначению = Ложь;
Если СоответствиеПоискаОтбора = Неопределено Тогда
ТолькоПоЛевомуЗначению = Истина;
КонецЕсли;
сЛевоеЗначение = СоответствиеПоискаОтбора.Получить("ЛевоеЗначение");
Если сЛевоеЗначение = Неопределено Тогда
сЛевоеЗначение = нПоле;
КонецЕсли;
сВидСравнения = СоответствиеПоискаОтбора.Получить("ВидСравнения");
Если ВидСравнения = Неопределено Тогда
сВидСравнения = ВидСравнения;
КонецЕсли;
сИспользование = СоответствиеПоискаОтбора.Получить("Использование");
Если сИспользование = Неопределено Тогда
сИспользование = нИспользование;
КонецЕсли;
Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
Если ТолькоПоЛевомуЗначению Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать;
Иначе
Если (ЭлементОтбора.ЛевоеЗначение = сЛевоеЗначение)
И (ЭлементОтбора.ВидСравнения = сВидСравнения)
Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденныйОтбор <> Неопределено Тогда
НайденныйОтбор.ЛевоеЗначение = нПоле;
НайденныйОтбор.Использование = нИспользование;
НайденныйОтбор.ВидСравнения = нВидСравнения;
НайденныйОтбор.ПравоеЗначение = нЗначение;
Иначе
НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПолеОтбора = Новый ПолеКомпоновкиДанных(нПоле);
НовыйЭлементОтбора.ЛевоеЗначение = нПоле;
НовыйЭлементОтбора.Использование = нИспользование;
НовыйЭлементОтбора.ВидСравнения = нВидСравнения;
НовыйЭлементОтбора.ПравоеЗначение = нЗначение;
КонецЕсли;
КонецПроцедуры
Категория:
Схема Компоновки Данных Как установить параметр динамического списка? Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента
Для вывода используется используется запрос:
Код 1C v 8.3 ВЫБРАТЬ
РегистрСведенийFinans. Период,
РегистрСведенийFinans. Клиент,
РегистрСведенийFinans. Движение,
РегистрСведенийFinans. Расшифровка,
РегистрСведенийFinans. СуммаОбщая,
РегистрСведенийFinans. РасходыСервиса,
РегистрСведенийFinans. W1C
ИЗ
РегистрСведений. Finans КАК РегистрСведенийFinans
ГДЕ
РегистрСведенийFinans. Клиент = Клиент
Чтобы при открытии не отображалась информацию по другим клиентам, необходимо установить параметр динамического списка , сделаем это так:
Код 1C v 8.3 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Финансы. Параметры. УстановитьЗначениеПараметра( "Клиент" , Объект. Ссылка) ;
КонецПроцедуры
Можно и просто настроить отбор через настройки, используя ЭлементОтбораКомпоновкиДанных
Подробнее об этом: Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором?
Категория:
Работа с Формой (Диалог) и её элементами Табличная часть ~ Как получить массив строк по условию (отбору)? Для УП:
Код 1C v 8.3
&НаКлиенте
. . . .
ФМ= Новый ФиксированнаяСтруктура( "КлючСвязи" , Элементы. ДанныеБезКоррекции. ТекущиеДанные. КлючСвязи) ;
Элементы. СписокПодразделений. ОтборСтрок= ФМ;
Код 1C v 8.3
Функция ПолучитьЗаписиСогласноОтбору(ТабличноеПолеИсточник)
ОтборСтрок = ТабличноеПолеИсточник. ОтборСтрок;
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса. ИсточникДанных = Новый ОписаниеИсточникаДанных( ТабличноеПолеИсточник. Значение) ;
Для Каждого ЭлементОтбора Из ОтборСтрок Цикл
Если ЭлементОтбора. Использование Тогда
НовыйОтбор = ПостроительЗапроса. Отбор. Добавить( ЭлементОтбора. Имя) ;
НовыйОтбор. Использование = Истина ;
НовыйОтбор. ВидСравнения = ЭлементОтбора. ВидСравнения;
НовыйОтбор. ЗначениеС = ЭлементОтбора. ЗначениеС;
НовыйОтбор. ЗначениеПо = ЭлементОтбора. ЗначениеПо;
НовыйОтбор. Значение = ЭлементОтбора. Значение;
КонецЕсли ;
КонецЦикла ;
Таблица = ПостроительЗапроса. Результат. Выгрузить( ) ;
МассивСтрок = Новый Массив;
Для Каждого Стр ИЗ Таблица Цикл
СтруктураПоиска = Новый Структура;
Для Каждого Колонка Из Таблица. Колонки Цикл
СтруктураПоиска. Вставить( Колонка. Имя, Стр[Колонка. Имя]) ;
КонецЦикла ;
НайденыеСтроки = ТабличноеПолеИсточник. Значение. НайтиСтроки( СтруктураПоиска) ;
Если НайденыеСтроки. Количество( ) > 0 Тогда
МассивСтрок. Добавить( НайденыеСтроки[0 ]) ;
КонецЕсли ;
КонецЦикла ;
Возврат МассивСтрок;
КонецФункции
Для Обычных форм:
Код 1C v 8.х ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ДокСсылка", ДанныеПоШК.Объект);
НайденныеСтроки = ПакетДокументов.НайтиСтроки(ПараметрыОтбора);
// Подробнее
СтруктураОтбора = Новый Структура("ВидДокумента, Контрагент", ПФ, ?(Контр = Неопределено, Справочники.Контрагенты.ПустаяСсылка(), Контр));
ПакетДокументов = ЗадачаОбъект.ПакетДокументов;
МассивСтрок = ПакетДокументов.НайтиСтроки(СтруктураОтбора);
Если МассивСтрок.Количество() Тогда
Для Каждого СтрокаМассива Из МассивСтрок Цикл
СтрокаМассива.ДобавленоПользователем = Истина;
СтрокаМассива.Пользователь = ПараметрыСеанса.ТекущийПользователь;
СтрокаМассива.ДатаВремя = ТекущаяДата();
КонецЦикла;
КонецЕсли;
//или
ТЧ = ПромежуточнаяНакладная.Выгрузить();
ТЧ.Свернуть("СхемаПродажи");
СтрокаСПустойСП = ТЧ.НайтиСтроки(Новый Структура("СхемаПродажи", Справочники.СхемыПродаж.ПустаяСсылка()));
Если ТЧ.Количество() - СтрокаСПустойСП.Количество() > 1 Тогда
Если Вопрос("Сбросить все схемы в строках?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
НесколькоСхем = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
Для каждого СтрокаПН из ПромежуточнаяНакладная Цикл
Если СтрокаПН.Номенклатура.ВидНоменклатуры.ТипНоменклатуры <> Перечисления.ТипыНоменклатуры.Услуга Тогда
СтрокаПН.СхемаПродажи = СхемаПродажи;
КонецЕсли;
КонецЦикла;
Категория:
Работа с Формой (Диалог) и её элементами Табличная часть ~ Как настроить отбор строк? Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство:
в обычном приложении параметр для ОтборСтрок - Отбор...
в управляемом приложении - ФиксированнаяСтруктура
ОтборСтрок , которое входит в расширение табличного поля, связанного с табличной частью.
Управляемые формы Код 1C v 8.3 СписокЗаказовНаФорме. ОтборСтрок = Новый ФиксированнаяСтруктура( "Клиент" , СписокЗаказовНаФорме. ТекущиеДанные. Клиент) ;
пример:
Код 1C v 8.3 СписокЗаказовНаФорме = ЭтаФорма. Элементы. СписокЗаказов;
ТекНомер = Неопределено ;
Для НомерСтроки = 0 По СписокЗаказов. Количество( ) - 1 Цикл
Сообщение = Новый СообщениеПользователю;
Если СписокЗаказовНаФорме. ПроверитьСтроку( НомерСтроки) Тогда
СписокЗаказовНаФорме. ТекущаяСтрока = НомерСтроки;
Если ТекНомер = Неопределено Тогда
Если ЗначениеЗаполнено( СписокЗаказовНаФорме. ТекущиеДанные. Машина) Тогда
ТекНомер = СписокЗаказовНаФорме. ТекущиеДанные. Машина;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение. Текст = "Установите нужный номер автомобиля в первой строке списка" ;
Сообщение. Поле = "СписокЗаказов[" + НомерСтроки + "].Машина" ;
Сообщение. Сообщить( ) ;
СписокЗаказовНаФорме. ОтборСтрок = Новый ФиксированнаяСтруктура( "Клиент" , СписокЗаказовНаФорме. ТекущиеДанные. Клиент) ;
Возврат ;
КонецЕсли ;
Иначе
СписокЗаказовНаФорме. ТекущиеДанные. Машина = ТекНомер;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
или такой динамический отбор
Код 1C v 8.3 ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "ИмяПоляОтбора" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
ЭлементОтбора. ПравоеЗначение = ЗначениеПоляОтбора;
&НаКлиенте
Процедура ОчиститьОтбор(Команда)
этаформа. Список. Отбор. Элементы. Очистить( ) ;
КонецПроцедуры
Обычные формы Использовать его очень просто:
Код 1C v 8.х
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Установить( ЗначениеОтбора) ;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Установить( , Ложь ) ;
или 2-й вариант:
Код 1C v 8.х ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Использование = Истина ;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . ВидСравнения = ВидСравнения. Равно;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Значение = ЗначениеОтбора;
А теперь конкретные примеры:
Код 1C v 8.х
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Установить( 100 ) ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Валюта. Установить( ВалютаУпр) ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Установить( 200 ) ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Использование = Истина ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ВидСравнения = ВидСравнения. БольшеИлиРавно;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Значение = 100 ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. Использование = Истина ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ВидСравнения = ВидСравнения. Интервал;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ЗначениеС = 100 ;
ЭлементыФормы. тпТовары. ОтборСтрок. Цена. ЗначениеПо = 200 ;
- - - - - - - -
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. Использование = Истина ;
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. ВидСравнения = ВидСравнения. ВСписке;
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. Значение. Добавить( Товар1 ) ;
ЭлементыФормы. тпТовары. ОтборСтрок. Товар. Значение. Добавить( Товар2 ) ;
Подчиненные табличные части в 8.х
С помощью свойства ОтборСтрок можно реализовать подчиненные (связанные) табличные части. При смене текущей строки в первой табличной части вторая табличная часть показывает только связанную информаци. Например, таким образом можно реализовать работу с комплектами: 1-я таб. часть - комплекты, вторая - состав комплекта.
Во второй табличной части должна быть колонка - идентификационный признак, связывающий ее с первой табличной частью. Таких колонок может быть несколько (составной ключ);
В событии ПриАктивизацииСтроки для первого табличного поля пишем:
Код 1C v 8.х ЭлементыФормы. СоставКомплекта. ОтборСтрок. Комплект. Установить( Комплект) ;
При добавлении новой строки во вторую табличную часть, нужно следить за тем, чтобы идентификационная колонка была установлена.
Обращаю ваше внимание, что при таком отборе не используются индексы и для больших табличных частей возможно замедление работы.
Еще раз напомню, что ОтборСтрок входит в расширение табличного поля табличной части, т.е. табличное поле должно быть связано с табличной частью. Если же оно связано с динамическим списком типа СправочникСписок, то здесь нужно использовать свойство Отбор для объекта типа СправочникСписок.
Если понадобилось перебрать строки, вошедшие в отбор, то это можно сделать, только заново перебрав все строки и проверив условие отбора для каждой строки. Перебрать строки табличного поля, которые сейчас на экране - невозможно.
Категория:
Работа с Формой (Диалог) и её элементами Как открыть форму списка документов с отбором? Данный код позволяет открыть список документов с установленным отбором, также можно открыть список элементов справочника с нужным отбором
Код 1C v 8.2 УП Форма = ОткрытьФорму( "Документ.РасходнаяНакладная.Форма.ФормаСписка" ) ;
ОтборВладелец = Форма. Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ОтборВладелец. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ОтборВладелец. Использование = Истина ;
ОтборВладелец. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Контрагент" ) ;
ОтборВладелец. ПравоеЗначение = Объект. Контрагент;
Для того, чтобы открыть форму списка с заранее установленным отбором используйте следующие способы:
Первый способ заключается в том, что при открытии формы можно задать параметр формы Отбор, и открыть форму списка с этим параметром.
Параметр Отбор представляет собой структуру. Имена элементов соответствуют именам полей, по которым производится отбор, а значения содержат значения отбора. Это параметр расширения управляемой формы динамического списка. То есть он существует у форм, основным реквизитом которых является реквизит типа ДинамическийСписок, например у форм списка и форм выбора.
Например, в следующем примере открывается список приходных накладных с отбором по полю Номер, равному 333.
Код 1C v 8.2 УП ЗначениеОтбора = Новый Структура( "Номер" , "333" ) ;
ПараметрыВыбора = Новый Структура( "Отбор" , ЗначениеОтбора) ;
ОткрытьФорму( "Документ.ПриходнаяНакладная.ФормаСписка" , ПараметрыВыбора) ;
Второй способ
Можно открыть форму списка без параметров:
Код 1C v 8.2 УП ОткрытьФорму( "Документ.ПриходнаяНакладная.ФормаСписка" ) ;
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
Код 1C v 8.2 УП &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Номер" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Больше;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
ЭлементОтбора. ПравоеЗначение = "000000001" ;
КонецПроцедуры
Преимущества данного метода в том, что ВидСравнения у отбора можно задавать не только Равно, как в первом случае, а и Больше, Меньше и т.п.
Но у такого способа есть и очень существенный недостаток: с этим отбором форма будет открываться всегда. Откуда бы ее ни вызвали. Поэтому такую форму не следует назначать основной. А если все же она основная - то перед установкой отбора необходимо предусмотреть какой-то анализ того, откуда открывается эта форма. Например, анализируя параметры формы.
Третий способ
И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка.
Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Для этого в форме списка номенклатуры создадим команду и соответствующую ей кнопку Приходные накладные.
Обработчик выполнения этой команды заполним следующим образом:
Код 1C v 8.2 УП &НаКлиенте
Процедура ПриходныеНакладные(Команда)
ПараметрыВыбора = Новый Структура( "ФильтрПоТовару" , Элементы. Список. ТекущаяСтрока) ;
ОткрытьФорму( "Документ.ПриходнаяНакладная.ФормаСписка" , ПараметрыВыбора) ;
КонецПроцедуры
В этом обработчике мы открываем форму списка приходных накладных, передавая в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры.
Затем создадим форму списка документов ПриходнаяНакладная и создадим параметр формы ФильтрПоТовару, который мы будем использовать для открытия формы с нужным отбором.
Теперь откроем палитру свойств основного реквизита формы Список. Установим флаг ПроизвольныйЗапрос и в строке Настройка списка нажмём Открыть.
В поле Запрос введём следующий текст запроса:
Код 1C v 8.2 УП ВЫБРАТЬ
ДокументПриходнаяНакладная. Номер,
ДокументПриходнаяНакладная. Дата
ИЗ
Документ. ПриходнаяНакладная КАК ДокументПриходнаяНакладная
ГДЕ
ДокументПриходнаяНакладная. Товары. Товар = &Товар
В запросе мы используем параметр Товар, в который и будет передаваться ссылка на текущую строку в списке номенклатуры, содержащуюся в параметре формы списка приходных накладных ФильтрПоТовару.
Для этого в обработчике события формы списка ПриСозданииНаСервере напишем код для установки значения параметра запроса Товар:
Код 1C v 8.2 УП &НаКлиенте
Процедура ПриОткрытии(Отказ)
Список. Параметры. УстановитьЗначениеПараметра( "Товар" , Параметры. ФильтрПоТовару) ;
КонецПроцедуры
Здесь Список.Параметры - это список параметров запроса динамического списка для реквизита Список. Значение параметра Товар устанавливается равным значению параметра формы ФильтрПоТовару.
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Категория:
Документы Как пользователям запретить удаление условия отбора в форме списка? Код 1C v 8.2 УП ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
Полный код:
Код 1C v 8.2 УП ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Организация" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. ВСписке;
ЭлементОтбора. ПравоеЗначение = ОтборОрганизация;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
Элементы. Список. Обновить( ) ;
Код 1C v 8.х ФормаВыбора. ЭлементыФормы. СправочникСписок. НастройкаОтбора. Организация. Доступность = Ложь ;
Категория:
Список Справочника, Документов, Регистров Отбор в динамическом списке Пример отбора по организации
Код 1C v 8.2 УП ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Организация" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. ВСписке;
ЭлементОтбора. ПравоеЗначение = ОтборОрганизация;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
Элементы. Список. Обновить( ) ;
Полый пример для конфигурации УНФ
Код 1C v 8.2 УП
Если РольДоступна( "ПолныеПрава" ) Тогда
Иначе
Пользователь = Пользователи. ТекущийПользователь( ) ;
ОсновнойОтветственный = УправлениеНебольшойФирмойПовтИсп. ПолучитьЗначениеПоУмолчаниюПользователя( Пользователь, "ОсновнойОтветственный" ) ;
ОтборОрганизация = УправлениеНебольшойФирмойПовтИсп. ПолучитьЗначениеПоУмолчаниюПользователя( Пользователь, "ОсновнаяОрганизация" ) ;
ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Организация" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. ВСписке;
ЭлементОтбора. ПравоеЗначение = ОтборОрганизация;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
Элементы. Список. Обновить( ) ;
КонецЕсли ;
Категория:
Список Справочника, Документов, Регистров Отбор по текущему значению в динамическом списке Код 1C v 8.2 УП &НаКлиенте
Процедура ОтборПоТекущемуЗначению(Команда)
ТекДанныеСписка = Элементы. СписокОтчетов. ТекущиеДанные;
Если ТекДанныеСписка = Неопределено Тогда
Предупреждение( "Не указано значение отбора" ) ;
Возврат ;
КонецЕсли ;
ИмяПараметраОтбора = СтрЗаменить( Элементы. СписокОтчетов. ТекущийЭлемент. Имя, "СписокОтчетов" , "" ) ;
ЗначениеПараметраОтбора = Неопределено ;
ТекДанныеСписка. Свойство( ИмяПараметраОтбора, ЗначениеПараметраОтбора) ;
СписокОтчетов. Отбор. Элементы. Очистить( ) ;
ЭлементОтбора = СписокОтчетов. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( ИмяПараметраОтбора) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ЭлементОтбора. ПравоеЗначение = ЗначениеПараметраОтбора;
ЭлементОтбора. Использование = Истина ;
Элементы. СписокОтчетов. Обновить( ) ;
КонецПроцедуры
Категория:
Схема Компоновки Данных Пример программного вызова СКД отчета Пример использования СКД отчета для заполнения табличного документа.
Вызываем отчет “Маркетинговый план” сделаного на основе СКД.
Установка параметр “Вероятность”. И отбора по ключу “Основание.МВЗ.СПО”
Код 1C v 8.х Отчет = Отчеты. МаркетинговыйПлан. Создать( ) ;
Схема = Отчет. ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных" ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных( Схема) ;
КомпоновщикНастроек. Инициализировать( ИсточникДоступныхНастроек) ;
Настройки = Схема. НастройкиПоУмолчанию;
насВероятнось = Настройки. ПараметрыДанных. Элементы. Найти( "Вероятность" ) ;
насВероятнось. Использование = Истина ;
насВероятнось. Значение = Веротяность;
Если ЗначениеЗаполнено( СПО) тогда
ПолеОтбораСПО = Новый ПолеКомпоновкиДанных( "Основание.МВЗ.СПО" ) ;
ОтборПоСПО = Настройки. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ОтборПоСПО. ЛевоеЗначение = ПолеОтбораСПО;
ОтборПоСПО. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ОтборПоСПО. ПравоеЗначение = СПО;
ОтборПоСПО. Использование = Истина ;
КонецЕсли ;
Макет = КомпоновщикМакета. Выполнить( Схема, Настройки) ;
ПроцессорКомпоновки. Инициализировать( Макет, , , Истина ) ;
ПроцессорВывода. УстановитьДокумент( ТабДок) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
Категория:
Схема Компоновки Данных Программное открытие Универсального отчета с отбором Код 1C v 8.х ОтчетКонтрагента = Отчеты. ВедомостьВзаиморасчетыСКонтрагентами. Создать( ) ;
ОтчетКонтрагента. УстановитьНачальныеНастройки( ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ПостроительОтчета. ИзмеренияСтроки. Очистить( ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ПостроительОтчета. ИзмеренияКолонки. Очистить( ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ПостроительОтчета. ВыбранныеПоля. Очистить( ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ПостроительОтчета. Порядок. Очистить( ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Контрагент" ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "ДоговорКонтрагента" ) ;
ЭлементОтбора = ОтчетКонтрагента. УниверсальныйОтчет. ПостроительОтчета. Отбор["Контрагент" ];
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = ДоговорКонтрагента. Владелец;
ЭлементОтбора = ОтчетКонтрагента. УниверсальныйОтчет. ПостроительОтчета. Отбор["ДоговорКонтрагента" ];
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = ДоговорКонтрагента. Ссылка;
ОтчетКонтрагента. УниверсальныйОтчет. ДобавитьДополнительноеПоле( "Период" ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ДобавитьДополнительноеПоле( "Регистратор" ) ;
ОтчетКонтрагента. УниверсальныйОтчет. ВыводитьДетальныеЗаписи = Истина ;
ОтчетКонтрагента. УниверсальныйОтчет. мВосстанавливатьНастройкиПриОткрытии = Ложь ;
ФормаОтчета = ОтчетКонтрагента. ПолучитьФорму( ) ;
ФормаОтчета. Открыть( ) ;
ФормаОтчета. ОбновитьОтчет( ) ;
Категория:
Прочие вопросы Универсальный отчет в прикладных решениях фирмы 1С Как настроить Универсальный отчет?
Все настройки
универсального отчета описываются в процедуре
УстановитьНачальныеНастройки :
Код 1C v 8.х Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
УниверсальныйОтчет. ВариантОформления = СтандартноеОформление. Песок;
УниверсальныйОтчет. мНазваниеОтчета = СокрЛП( ЭтотОбъект. Метаданные( ) . Синоним) ;
УниверсальныйОтчет. мВыбиратьИмяРегистра = Ложь ;
УниверсальныйОтчет. ИмяРегистра = "-" ;
УниверсальныйОтчет. ОтрицательноеКрасным = Истина ;
УниверсальныйОтчет. ВыводитьОбщиеИтоги = Истина ;
УниверсальныйОтчет. ВыводитьДетальныеЗаписи = Ложь ;
УниверсальныйОтчет. мВыбиратьИспользованиеСвойств = Истина ;
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| CRM_ПредложенияОбороты.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Номенклатура) КАК НоменклатураПредставление,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление,
| CRM_ПредложенияОбороты.Контрагент КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Контрагент) КАК КонтрагентПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения КАК Документ,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения) КАК ДокументПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный КАК Ответственный,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения.Ответственный) КАК ОтветственныйПредставление,
| CRM_ПредложенияОбороты.КоличествоОборот КАК КоличествоОборот,
| CRM_ПредложенияОбороты.СтоимостьОборот КАК СтоимостьОборот,
| 0 КАК СкидкаОборот,
| 1 КАК Количество,
| CRM_ПредложенияОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот
| //ПОЛЯ_СВОЙСТВА
| //ПОЛЯ_КАТЕГОРИИ
|{ВЫБРАТЬ
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| КоличествоОборот,
| СтоимостьОборот,
| СкидкаОборот,
| Количество,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|ИЗ
| РегистрНакопления.CRM_Предложения.Обороты(&ДатаНач, &ДатаКон, , ) КАК CRM_ПредложенияОбороты
|{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсточникИнформацииПриОбращении.СрезПоследних(&ДатаКон) КАК ИсточникиИнформацииПриОбращении
|ПО CRM_ПредложенияОбороты.Контрагент = ИсточникиИнформацииПриОбращении.Контрагент}
|//СОЕДИНЕНИЯ
|{ГДЕ
| CRM_ПредложенияОбороты.Контрагент.* КАК Контрагент,
| CRM_ПредложенияОбороты.Номенклатура.* КАК Номенклатура,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный.* КАК Ответственный,
| CRM_ПредложенияОбороты.ДокументПредложения.* КАК Документ,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //УСЛОВИЯ_СВОЙСТВА
| //УСЛОВИЯ_КАТЕГОРИИ
|}
|{УПОРЯДОЧИТЬ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|
|ИТОГИ
| СУММА(КоличествоОборот),
| СУММА(СтоимостьОборот),
| СУММА(СтоимостьБезСкидокОборот - СтоимостьОборот) КАК СкидкаОборот,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ(Документ)) КАК Количество
|ПО
| ОБЩИЕ
|{ИТОГИ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ДЕНЬ) КАК ПериодДень,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, НЕДЕЛЯ) КАК ПериодНеделя,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, МЕСЯЦ) КАК ПериодМесяц,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, КВАРТАЛ) КАК ПериодКвартал,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ГОД) КАК ПериодГод
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}" ;
Если УниверсальныйОтчет. ИспользоватьСвойстваИКатегории Тогда
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.Номенклатура" , "Номенклатура" , "Номенклатура" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" , "Характеристика номенклатуры" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.Контрагент" , "Контрагент" , "Контрагент" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.ДокументПредложения" , "Документ" , "Коммерческое предложение" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Документ_CRM_КоммерческоеПредложение) ;
УниверсальныйОтчет. ДобавитьВТекстЗапросаСвойстваИКатегории( ТекстЗапроса) ;
КонецЕсли ;
УниверсальныйОтчет. ПостроительОтчета. Текст = ТекстЗапроса;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "ХарактеристикаНоменклатуры" , "Характеристика номенклатуры" ) ;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "Документ" , "Коммерческое предложение" ) ;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "ИсточникИнформации" , "Источник информации при обращении покупателя" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "Количество" , "Количество документов" , Истина , "ЧЦ = 15 ; ЧДЦ = 3" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "КоличествоОборот" , "Количество номенклатуры" , Истина , "ЧЦ = 15 ; ЧДЦ = 3" , , ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "СтоимостьОборот" , "Сумма" , Истина , "ЧЦ = 15 ; ЧДЦ = 2" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "СкидкаОборот" , "Скидка" , Истина , "ЧЦ = 15 ; ЧДЦ = 2" , , ) ;
УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Ответственный" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Документ" ) ;
УниверсальныйОтчет. УстановитьПредставленияПолей( УниверсальныйОтчет. мСтруктураПредставлениеПолей, УниверсальныйОтчет. ПостроительОтчета) ;
УниверсальныйОтчет. УстановитьТипыЗначенийСвойствДляОтбора( ) ;
УниверсальныйОтчет. УстановитьНачальныеНастройки( Ложь ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Ответственный" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Документ" ) ;
УниверсальныйОтчет. мСтруктураФорматаПолей. Вставить( "ДатаВыполнения" , "ДЛФ=DDT" ) ;
УниверсальныйОтчет. мСтруктураФорматаПолей. Вставить( "ДатаФактическогоВыполнения" , "ДЛФ=DDT" ) ;
УниверсальныйОтчет. мМинимальнаяШиринаКолонкиПоказатель = 10 ;
УниверсальныйОтчет. мМаксимальнаяШиринаКолонки = 80 ;
КонецПроцедуры
Как настроить условное оформление в Универсальном отчете?
Выравнивание значений влево :
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Номенклатура" , "Номенклатура" ) ;
ЭлементОформления. Область. Добавить( "Номенклатура" , "Номенклатура" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Лево;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" ) ;
ЭлементОформления. Область. Добавить( "ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Лево;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
УниверсальныйОтчет. мМинимальнаяШиринаКолонкиПоказатель = 7 ;
УниверсальныйОтчет. мМаксимальнаяШиринаКолонки = 50 ;
Изменение цвета текста и т.д.
Код 1C v 8.х
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ТребуетсяЗаказать" , "Требуется заказать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 0 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Красный;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Требуется заказать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "РекомендуетсяЗаказать" , "Рекомендуется заказать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 1 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Коричневый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Рекомендуется заказать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "НеТребуетсяЗаказывать" , "Не требуется заказывать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 2 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Зеленый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Не требуется заказывать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ЗонаПоСумме" , "Зона По Сумме" ) ;
ЭлементОформления. Область. Добавить( "ЗонаПоСумме" , "ЗонаПоСумме" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "ЗонаПоСумме" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = "крас" ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветФона. Значение = WebЦвета. Красный;
ЭлементОформления. Оформление. ЦветФона. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ЗонаПоСумме" , "Зона По Сумме" ) ;
ЭлементОформления. Область. Добавить( "ЗонаПоСумме" , "ЗонаПоСумме" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "ЗонаПоСумме" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = "зелн" ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Зеленый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Шрифт. Значение = Новый Шрифт( , , Истина ) ;
ЭлементОформления. Оформление. Шрифт. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "|||||||||||||||||" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Для типа «Дата»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ДатаЗаписи" , "Дата записи" ) ;
ЭлементОформления. Область. Добавить( "ДатаЗаписи" , "Дата записи" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. Формат. Значение = "ДФ=dd.MM.yyyy" ;
ЭлементОформления. Оформление. Формат. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Для типа «Булево»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Печать" , "Печать" ) ;
ЭлементОформления. Область. Добавить( "Печать" , "Печать" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Центр;
ЭлементОформления. Оформление. Формат. Значение = «БЛ= Нет; БИ= Напечатан»;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Категория:
Прочие вопросы Как результат СКД в виде Табличного Документа разобрать и вывести в Дерево Значений Процедура получает из СКД результат в виде Табличного документа, парсит его, создает в Дереве на форме колонки и заполняет дерево данными результата СКД
Смысл в том, что СКД не может вывести результат в объект на форму, если он Таблица - выдает ошибку "Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений".
Поэтому я выгружаю СКД в ТабличныйДокумент и вытаскиваю данные уже из него, далее строю и заполняю Дерево на форме
Код 1C v 8.х Процедура ЗаполнитьДерево()
ДеревоЗначений. Строки. Очистить( ) ;
КолРазмеров = 0 ;
СхемаКомпоновкиДанных = ПолучитьМакет( "Схема" ) ;
Настройки = СхемаКомпоновкиДанных. НастройкиПоУмолчанию;
Для Каждого ЭлементОтбора Из ПостроительОтчета. Отбор Цикл
Если Не ЭлементОтбора. Использование Тогда
Продолжить;
КонецЕсли ;
ВидСравненияВОтборе = мСоответствиеВидовСравнения. Получить( ЭлементОтбора. ВидСравнения) ;
Если ВидСравненияВОтборе = Неопределено Тогда
Продолжить;
КонецЕсли ;
Если Лев( ЭлементОтбора. ПутьКДанным, 8 ) = "Свойство" Тогда
ИмяПоля = "Номенклатура.[" + мСоответствиеНазначений[ЭлементОтбора. Представление]+ " (свойство)]" ;
ИначеЕсли Лев( ЭлементОтбора. ПутьКДанным, 9 ) = "Категория" Тогда
ИмяПоля = "Номенклатура.[" + мСоответствиеНазначений[ЭлементОтбора. Представление]+ " (категория)]" ;
Иначе
ИмяПоля = ЭлементОтбора. ПутьКДанным;
КонецЕсли ;
ПолеОтбора = Новый ПолеКомпоновкиДанных( ИмяПоля) ;
Отбор = Настройки. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
Отбор. ЛевоеЗначение = ПолеОтбора;
Отбор. Использование = Истина ;
Отбор. ВидСравнения = ВидСравненияВОтборе;
Отбор. ПравоеЗначение = ЭлементОтбора. Значение;
КонецЦикла ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, , Тип( "ГенераторМакетаКомпоновкиДанных" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновки, , ДанныеРасшифровки) ;
ТабличныйДокумент = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ТабличныйДокумент) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных, Истина ) ;
КолДанных = 5 ;
СоздатьДерево( ТабличныйДокумент, КолДанных) ;
СтКол = Новый Структура;
СтКол. Вставить( "Ном" , 1 ) ;
СтКол. Вставить( "Дат1" , 2 ) ;
СтКол. Вставить( "Дат2" , 3 ) ;
СтКол. Вставить( "Прих" , 4 ) ;
СтКол. Вставить( "Реал" , 5 ) ;
СтКол. Вставить( "Возв" , 6 ) ;
СтКол. Вставить( "Остат" , 7 ) ;
СтКол. Вставить( "ВПути" , 8 ) ;
СтрНом = Неопределено ;
СтрДерева = Неопределено ;
Для i= 3 По ТабличныйДокумент. ВысотаТаблицы Цикл
ПерваяКолонка = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Ном) ;
Если ТипЗнч( ПерваяКолонка) = Тип( "СправочникСсылка.Номенклатура" ) Тогда
Если СтрНом Неопределено Тогда
СтрНом. Строки. Сортировать( "Продажи УБЫВ" ) ;
СтрНом. ОстатокМагазин = СтрНом. Строки. Итог( "ОстатокМагазин" ) ;
СтрНом. ОстатокСклад = СтрНом. Строки. Итог( "ОстатокСклад" ) ;
КонецЕсли ;
СтрНом = ДеревоЗначений. Строки. Добавить( ) ;
СтрДерева = СтрНом;
ИначеЕсли ТипЗнч( ПерваяКолонка) = Тип( "СправочникСсылка.Склады" ) Тогда
СтрДерева = СтрНом. Строки. Добавить( ) ;
Дат1 = Формат( ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Дат1 ) , "ДФ=dd.MM.yy" ) ;
Дат2 = Формат( ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Дат2 ) , "ДФ=dd.MM.yy" ) ;
СтрДерева. Период = "" + Дат1 + " - " + Дат2 ;
Иначе
Продолжить;
КонецЕсли ;
СтрДерева. Номенклатура = ПерваяКолонка;
СтрДерева. Остаток = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Остат, Истина ) ;
СтрДерева. Приход = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Прих, Истина ) ;
СтрДерева. Продажи = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Реал, Истина ) ;
СтрДерева. Возврат = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, СтКол. Возв, Истина ) ;
Если ЗначениеЗаполнено( СтрДерева. Родитель) Тогда
Если ПерваяКолонка. ТипСклада = Перечисления. ТипыСкладов. ТорговыйЗал Тогда СтрДерева. ОстатокМагазин = СтрДерева. Остаток;
Иначе СтрДерева. ОстатокСклад = СтрДерева. Остаток;
КонецЕсли ;
Попытка СтрДерева. ПроцентПродаж = СтрДерева. Продажи * 100 / СтрДерева. Родитель. Продажи;
Исключение СтрДерева. ПроцентПродаж = "-" ;
КонецПопытки ;
Иначе
СтрДерева. ПроцентПродаж = "100%" ;
КонецЕсли ;
Для j= 1 По КолРазмеров Цикл
СтрДерева["Ост" + j] = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, 3 + КолДанных * j + 4 , Истина ) ;
СтрДерева["Пут" + j] = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, i, 3 + КолДанных * j + 5 , Истина ) ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура СоздатьДерево(ТабличныйДокумент, КолДанных)
КЧ = Новый КвалификаторыЧисла( 10 , 0 ) ;
Массив = Новый Массив;
Массив. Добавить( Тип( "Число" ) ) ;
ОписаниеТиповЧ = Новый ОписаниеТипов( Массив, , , КЧ) ;
Ном = 3 + КолДанных + 1 ;
КолРазмеров = ( ТабличныйДокумент. ШиринаТаблицы - Ном- 1 ) / КолДанных + 1 ;
Для i= 1 По КолРазмеров Цикл
Размер = ПолучитьЗначениеРасшифровки( ТабличныйДокумент, 1 , Ном, Истина , Ложь ) ;
Ном = Ном + КолДанных;
Попытка
ДеревоЗначений. Колонки. Добавить( "Ост" + i, ОписаниеТиповЧ, Размер, 5 ) ;
ДеревоЗначений. Колонки. Добавить( "Пут" + i, ОписаниеТиповЧ, "Путь" , 5 ) ;
ДеревоЗначений. Колонки. Добавить( "Пер" + i, ОписаниеТиповЧ, "Пер" , 5 ) ;
Исключение
КонецПопытки ;
КонецЦикла ;
ЭтаФорма. ЭлементыФормы. ДеревоЗначений. Значение = ДеревоЗначений;
ЭтаФорма. ЭлементыФормы. ДеревоЗначений. СоздатьКолонки( ) ;
i= 1 ; НомерРазмера= 1 ;
Для Каждого Кол Из ЭтаФорма. ЭлементыФормы. ДеревоЗначений. Колонки Цикл
Кол. ТолькоПросмотр = Истина ;
Если i = ( НомерРазмера + 8 + 1 ) Тогда
Кол. Положение = ПоложениеКолонки. НоваяКолонка;
ИначеЕсли i = ( НомерРазмера + 8 + 2 ) Тогда
Кол. Положение = ПоложениеКолонки. НаСледующейСтроке;
ИначеЕсли i = ( НомерРазмера + 8 + 3 ) Тогда
Кол. Положение = ПоложениеКолонки. ВТойЖеКолонке;
Кол. ТолькоПросмотр = Ложь ;
НомерРазмера = НомерРазмера + 3 ;
КонецЕсли ;
Если i= 1 Тогда
Кол. Ширина = 20 ;
Иначе
Если i= 2 Тогда Кол. Ширина = 11 ;
ИначеЕсли i9 Тогда Кол. Ширина = 7 ;
Иначе Кол. Ширина = 5 ;
КонецЕсли ;
Кол. ИзменениеРазмера = ИзменениеРазмераКолонки. НеИзменять;
КонецЕсли ;
i= i+ 1 ;
КонецЦикла ;
КонецПроцедуры
Автор:
Абазин Антон Категория:
Схема Компоновки Данных Форма ~ Отбор, Группировка, Порядок и Условное оформление через компоновку данных Выполним отбор по подразделению, если основной интерфейс пользователя кассир.
Код 1C v 8.х Если ПользователиИнформационнойБазы. ТекущийПользователь( ) . ОсновнойИнтерфейс. Имя = "ИнтерфейсКассира" Тогда
ДокументСписок. Отбор. Сбросить( ) ;
ДокументСписок. Отбор. Подразделение. ВидСравнения= ВидСравнения. Равно;
ДокументСписок. Отбор. Подразделение. Значение= ПараметрыСеанса. ТекущийПользователь. Подразделение;
ДокументСписок. Отбор. Подразделение. Установить( ) ;
Элементыформы. Список. НастройкаОтбора. Подразделение. Доступность = Ложь ;
КонецЕсли ;
Выполним отбор по дате в форме списка документа.
Код 1C v 8.2 УП ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Дата" ) ;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. БольшеИлиРавно;
ЭлементОтбора. ПравоеЗначение = Дата1 ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Обычный;
Элементы. Список. Обновить( ) ;
Группировка. Сгруппируем список документов по полю Клиент.
Код 1C v 8.2 УП ЭлементГруппировки = Список. Группировка. Элементы. Добавить( Тип( "ПолеГруппировкиКомпоновкиДанных" ) ) ;
ЭлементГруппировки. Использование = Истина ;
ЭлементГруппировки. Поле = Новый ПолеКомпоновкиДанных( "Клиент" ) ;
Элементы. Список. Обновить( ) ;
Порядок. Отсортируем список документов по полю ПлановаяДатаПоставки.
Код 1C v 8.2 УП Список. Порядок. Элементы. Очистить( ) ;
НовыйПорядок = Список. Порядок. Элементы. Добавить( Тип( "ЭлементПорядкаКомпоновкиДанных" ) ) ;
НовыйПорядок. Поле = Новый ПолеКомпоновкиДанных( "Список.ПлановаяДатаПоставки" ) ;
НовыйПорядок. Использование = Истина ;
НовыйПорядок. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Обычный;
НовыйПорядок. ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных. Возр;
Элементы. Список. Обновить( ) ;
Условное оформление. Покрасим в красный цвет строки списка документов с незаполненной датой согласования счета.
Код 1C v 8.2 УП ЭлементОформления = Список. УсловноеОформление. Элементы. Добавить( ) ;
ЭлементОтбора = ЭлементОформления. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "ДатаСогласованияСчета" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. НеЗаполнено;
ЭлементОтбора. Использование = Истина ;
Элемент = ЭлементОформления. Оформление. Элементы[1 ];
Элемент. Использование = Истина ;
Элемент. Значение = Новый Цвет( 255 , 0 , 0 ) ;
Категория:
Работа с Формой (Диалог) и её элементами