1C:невозможно применить фиксированные настройки пересекаются элементы отбора

Эта ошибка может появляться, если при открытии формы списка задаётся «жесткий» отбор, который конфликтует с пользовательским отбором (выбран тот-же отбор, что и «принудительный»). Я решил эту проблему следующим образом: при открытии формы читаю пользовательские отборы, и если вижу что его отбор тот же что и назначаемый, назначаемый отключаю и вывожу сообщение о конфликте:

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

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

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

1С: Отбор в списке выбора с предустановленным фильтром

Задача: в табличной части на форме документа давай выбирать пользователю только необходимые элементы справочнике при заполнении реквизита.

Решение:

В реквизите установим связь параметров выбора «Очищать» при каждой попытке выбора элемента:

На событие «При изменении» табличной части на форме добавить событие, которое формирует фильтр:

	НовыйПараметр = Новый ПараметрВыбора("Отбор.Суд", ЗначениеРеквизитаОбъекта(Объект.Суд, "ПризнакСуда"));
	НовыйМассив = Новый Массив();
	НовыйМассив.Добавить(НовыйПараметр);
	НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
	Элементы.ДанныеИскаРезультат.ПараметрыВыбора = НовыеПараметры;  

И в параметрах выбора выставим:

1С: Событие по снятию галочки в фильтре формы списка

Столкнулся с интересной особенностью 1С: если на форме списка присутствуют пользовательские фильтры, и пользователь «включил/выключил» этот фильтр, то нет никакого способа это событие отловить

Единственное решение какое я придумал, это подключение обработчика ожидания при событии на открытие формы вида:

ПодключитьОбработчикОжидания("ПосчитатьИтогиНаКлиенте",3,ложь);

Ну и сам обработчик:

&НаКлиенте 
Функция ПосчитатьИтогиНаКлиенте()
	ПосчитатьИтогиНаСервере();
КонецФункции	
Функция ПосчитатьИтогиНаСервере()
	ВсеЭлементы=СписокВКоллекциюЗначений();
	ЗадолженостьПоУведомлению=0;ОстатокЗадолженности=0;ТекущаяЗадолженость=0;	
	для каждого стр из ВсеЭлементы цикл
		ЗадолженостьПоУведомлению=ЗадолженостьПоУведомлению+стр.ЗадолженостьПоУведомлению;
		ОстатокЗадолженности=ОстатокЗадолженности+стр.ОстатокЗадолженности;
		ТекущаяЗадолженость=ТекущаяЗадолженость+стр.ТекущаяЗадолженость;
	КонецЦикла;	
	элементы.Список.ПодчиненныеЭлементы.ЗадолженостьПоУведомлению.ТекстПодвала=ЗадолженостьПоУведомлению;
	элементы.Список.ПодчиненныеЭлементы.ОстатокЗадолженности.ТекстПодвала=ОстатокЗадолженности;
	элементы.Список.ПодчиненныеЭлементы.ТекущаяЗадолженость.ТекстПодвала=ТекущаяЗадолженость;
КонецФункции

1С: Раскраска строк на форме списка (условное оформление)

Задача: обеспечить раскраску строк по условию на форме списка

Решение: может быть разным, в зависимости от сложности условий и способа вывода данных на форму.

Вариант 1: данные формируются запросом СКД, динамически:

В этом случае заходим во вкладку «Условное оформление» и настраиваем собственно условия:

Вариант 2: данные формируются «как обычно».

В этом случае в свойствах формы ищем реквизит «Условное оформление» и настраиваем по тому-же принципу как и в Варианте 1

Вариант 3: подходит для «сложных» вариантов оформления, когда при помощи первого и второго варианта, нужного эффекта добиться не удалось. В свойстве «ПриОткрытии» размещаем код вида:

&НаКлиенте
Процедура УстановитьУсловноеОформлениеДляПоляДатаДоговора()

   // Создание элемента условного оформления
   ЭлементыОформления = СписокПартийДС.УсловноеОформление.Элементы.Добавить();
   ЭлементыОформления.Использование = Истина;

   // Настройка оформляемого поля
   Поля = ЭлементыОформления.Поля.Элементы.Добавить();
   Поля.Использование = Истина;
   Поля.Поле = Новый ПолеКомпоновкиДанных("ДатаДог");
   Поля = ЭлементыОформления.Поля.Элементы.Добавить();
   Поля.Использование = Истина;

   // Создание условия для элемента оформления
   Отбор = ЭлементыОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   Отбор.Использование = Истина;
   Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
   Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатаДог");
   Отбор.ПравоеЗначение = ТекущаяДата() + 31557600;

   // Установка цвета оформления
   Оформление = ЭлементыОформления.Оформление;
   Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.ЛососьСветлый);

КонецПроцедуры

1С: Оптимизация времени разбора большого XLSX файла

Для чтения и разбора файлов формата xlsx на 1С обычно используют следующую схему разбора файла:

ТабличныйДокументХар = Новый ТабличныйДокумент; 
ТабличныйДокументХар.Прочитать(парам.ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст);		
// читаем каждый лист по отдельности
Для Каждого ОбластьТД ИЗ ТабличныйДокументХар.Области Цикл
    ОбластьФайла = ТабличныйДокументХар.ПолучитьОбласть(ОбластьТД.Имя,);
    КолВоСтрокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоВертикали();
    КолВоКолонокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали();
	НачСтрока=3;КонСтрока=0;
    НачСтрока = ?(НачСтрока = 0, 2, НачСтрока);
    КонСтрока = ?(КонСтрока = 0, КолвоСтрокФайла, КонСтрока);						
    // перебираем все строки без шапки
    Для нСтрокаТФ = НачСтрока ПО КонСтрока Цикл      				
        ПКолонка=Формат(ном_кол, "ЧГ=0");
        Данные=ОбластьФайла.ПолучитьОбласть("R"+ПСтрока + "C1").ТекущаяОбласть.Текст;
    конеццикла
конеццикла    

Так-же встречается другой вариант, у которого есть особенность — не учитывается что файл может содержать листы:

ТабличныйДокументХар = Новый ТабличныйДокумент; 
ТабличныйДокументХар.Прочитать(парам.ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст);		
КолВоСтрокФайла = ТабличныйДокументХар.ПолучитьРазмерОбластиДанныхПоВертикали();
КолВоКолонокФайла = ТабличныйДокументХар.ПолучитьРазмерОбластиДанныхПоГоризонтали();  
СтрокиДиапазона =   50000;
НачСтрокаДиапазона = 3; 
КонСтрокаДиапазона = мин(КолВоСтрокФайла, СтрокиДиапазона);
КолВоСтрокФайла_часть = КолВоСтрокФайла;
Пока  КолВоСтрокФайла_часть>0 Цикл
	ОбластьФайла = ТабличныйДокументХар.ПолучитьОбласть(НачСтрокаДиапазона,1,КонСтрокаДиапазона,КолВоКолонокФайла);		
	Если КолвоСтрокФайла = 0 Тогда ТабличныйДокументХар = Неопределено;КонецЕсли;
	Для стр = 1  по КонСтрокаДиапазона-НачСтрокаДиапазона+1 Цикл  
              Данные=ОбластьФайла.Область(стр,2).Текст;
	КонецЦикла;  
	КолВоСтрокФайла_часть = КолВоСтрокФайла_часть-СтрокиДиапазона;
	НачСтрокаДиапазона = НачСтрокаДиапазона +СтрокиДиапазона;
	КонСтрокаДиапазона = КонСтрокаДиапазона +СтрокиДиапазона;
КонецЦикла;

Если сравнивать производительность каждого метода, то выходит следующая картина (для файла размером 254 тыс строк):

Метод 1Метод 2
Время работы кода1 784 сек714 сек

1 2 3 38