Публикации

БСП
Разработки

Найдено результатов: 142


Выделенные строки

Работа с выделенными строками
ROXy 25 1 2
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; 
Сумма = 0; 
Для Каждого Строка Из ВыделенныеСтроки Цикл 
         Сумма = Сумма + Элементы.Список.ДанныеСтроки(Строка).Сумма; 
КонецЦикла;

ВосстановитьВыделенныеСтроки

ОбщийМодуль.ОтчетыСервер
Автор: 1С
Процедура ВосстановитьВыделенныеСтроки(Форма, ИмяТаблицы, СтрокиТаблицы) Экспорт
	ТаблицаРеквизит = Форма[ИмяТаблицы];
	ТаблицаЭлемент = Форма.Элементы[ИмяТаблицы];
	
	ТаблицаЭлемент.ВыделенныеСтроки.Очистить();
	
	Если СтрокиТаблицы.Текущая <> Неопределено Тогда
		Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(ТаблицаРеквизит, СтрокиТаблицы.Текущая);
		Если Найденные <> Неопределено И Найденные.Количество() > 0 Тогда
			Для Каждого СтрокаТаблицы Из Найденные Цикл
				Если СтрокаТаблицы <> Неопределено Тогда
					Идентификатор = СтрокаТаблицы.ПолучитьИдентификатор();
					ТаблицаЭлемент.ТекущаяСтрока = Идентификатор;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
	Для Каждого ДанныеСтроки Из СтрокиТаблицы.Выделенные Цикл
		Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки);
		Если Найденные <> Неопределено И Найденные.Количество() > 0 Тогда
			Для Каждого СтрокаТаблицы Из Найденные Цикл
				Если СтрокаТаблицы <> Неопределено Тогда
					ТаблицаЭлемент.ВыделенныеСтроки.Добавить(СтрокаТаблицы.ПолучитьИдентификатор());
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ЗапомнитьВыделенныеСтроки

Сохранение состояния формы
ОбщийМодуль.ОтчетыСервер
Автор: 1С
////////////////////////////////////////////////////////////////////////////////
// Сохранение состояния формы

Функция ЗапомнитьВыделенныеСтроки(Форма, ИмяТаблицы, КлючевыеКолонки) Экспорт
	ТаблицаРеквизит = Форма[ИмяТаблицы];
	ТаблицаЭлемент = Форма.Элементы[ИмяТаблицы];
	
	Результат = Новый Структура;
	Результат.Вставить("Выделенные", Новый Массив);
	Результат.Вставить("Текущая", Неопределено);
	
	ТекущаяИдентификатор = ТаблицаЭлемент.ТекущаяСтрока;
	Если ТекущаяИдентификатор <> Неопределено Тогда
		СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ТекущаяИдентификатор);
		Если СтрокаТаблицы <> Неопределено Тогда
			ДанныеСтроки = Новый Структура(КлючевыеКолонки);
			ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаТаблицы);
			Результат.Текущая = ДанныеСтроки;
		КонецЕсли;
	КонецЕсли;
	
	ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки;
	Если ВыделенныеСтроки <> Неопределено Тогда
		Для Каждого ВыделеннаяИдентификатор Из ВыделенныеСтроки Цикл
			Если ВыделеннаяИдентификатор = ТекущаяИдентификатор Тогда
				Продолжить;
			КонецЕсли;
			СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ВыделеннаяИдентификатор);
			Если СтрокаТаблицы <> Неопределено Тогда
				ДанныеСтроки = Новый Структура(КлючевыеКолонки);
				ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаТаблицы);
				Результат.Выделенные.Добавить(ДанныеСтроки);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

СкопироватьСтрокиВБуферОбмена

Помещает выделенные строки табличной части во внутренний буфер обмена
ОбщийМодуль.ОбщегоНазначения
Автор: 1С
// Помещает выделенные строки табличной части во внутренний буфер обмена
// откуда их можно получить с помощью СтрокиИзБуфераОбмена.
//
// Параметры:
//  ТабличнаяЧасть   - ДанныеФормыКоллекция - табличная часть, строки которой
//                                            необходимо поместить во внутренний буфер обмена.
//  ВыделенныеСтроки - Массив - массив идентификаторов выделенных строк.
//  Источник         - Строка - произвольный строковый идентификатор, например, имя объекта,
//                              строки табличной части которого помещаются во внутренний буфер обмена.
//
Процедура СкопироватьСтрокиВБуферОбмена(ТабличнаяЧасть, ВыделенныеСтроки, Источник = Неопределено) Экспорт
	
	Если ВыделенныеСтроки = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаЗначений = ТабличнаяЧасть.Выгрузить();
	ТаблицаЗначений.Очистить();
	
	УдаляемыеКолонки = Новый Массив;
	УдаляемыеКолонки.Добавить("ИсходныйНомерСтроки");
	УдаляемыеКолонки.Добавить("НомерСтроки");
	
	Для Каждого ИмяКолонки Из УдаляемыеКолонки Цикл
		Колонка = ТаблицаЗначений.Колонки.Найти(ИмяКолонки);
		Если Колонка = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		ТаблицаЗначений.Колонки.Удалить(Колонка);
	КонецЦикла;
	
	Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
		КопируемаяСтрока = ТабличнаяЧасть.НайтиПоИдентификатору(ИдентификаторСтроки);
		ЗаполнитьЗначенияСвойств(ТаблицаЗначений.Добавить(), КопируемаяСтрока);
	КонецЦикла;
	
	СкопироватьВБуферОбмена(ТаблицаЗначений, Источник);
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ПараметрыРасчетаПоказателейЯчеек

Формирует описание выделенных областей табличного документа.
ОбщийМодуль.ОбщегоНазначенияСлужебныйКлиент
Автор: 1С
// Формирует описание выделенных областей табличного документа.
//
// Параметры:
//  ТабличныйДокумент - ТабличныйДокумент - документ, значения ячеек которого участвуют в расчете.
//
// Возвращаемое значение: 
//   Структура - содержит:
//       * ВыделенныеОбласти - Массив - содержит структуры со свойствами:
//           * Верх  - Число - Номер строки верхней границы области.
//           * Низ   - Число - Номер строки нижней границы области.
//           * Лево  - Число - Номер колонки верхней границы области.
//           * Право - Число - Номер колонки нижней границы области.
//           * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица.
//       * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере.
//
Функция ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент) Экспорт 
	ПараметрыРасчетаПоказателей = Новый Структура;
	ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив);
	ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь);
	
	ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти;
	Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл
		Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
			Продолжить;
		КонецЕсли;
		ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти");
		ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть);
		ВыделенныеОбласти.Добавить(ГраницыОбласти);
	КонецЦикла;
	
	ВыделеноВсе = Ложь;
	Если ВыделенныеОбласти.Количество() = 1 Тогда 
		ВыделеннаяОбласть = ВыделенныеОбласти[0];
		ВыделеноВсе = Не Булево(
			ВыделеннаяОбласть.Верх
			+ ВыделеннаяОбласть.Низ
			+ ВыделеннаяОбласть.Лево
			+ ВыделеннаяОбласть.Право);
	КонецЕсли;
	
	ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100);
	
	Возврат ПараметрыРасчетаПоказателей;
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

УстановитьОтображениеЗаголовковГрупп

Устанавливает жирное оформление шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2.
ОбщийМодуль.СтандартныеПодсистемыСервер
Автор: 1С
// Устанавливает жирное оформление шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2.
// В интерфейсе "Такси" заголовки групп с обычным выделением и без выделения выводятся большим шрифтом.
// В интерфейсе 8.2 такие заголовки выводятся как обычные надписи и не ассоциируются с заголовками.
// Эта функция предназначена для визуального выделения (жирным шрифтом) заголовков групп в режиме интерфейса 8.2.
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения - форма для изменения шрифта заголовков групп;
//  ИменаГрупп - Строка - список имен групп формы, разделенных запятыми. Если имена групп не указаны,
//                        то оформление будет применено ко всем группам на форме.
//
// Пример:
//  Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//    СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект);
//
Процедура УстановитьОтображениеЗаголовковГрупп(Форма, ИменаГрупп = "") Экспорт
	
	Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		ЖирныйШрифт = Новый Шрифт(,, Истина);
		Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда 
			Для Каждого Элемент Из Форма.Элементы Цикл 
				Если Тип(Элемент) = Тип("ГруппаФормы")
					И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа
					И Элемент.ОтображатьЗаголовок = Истина 
					И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение
					Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда 
						Элемент.ШрифтЗаголовка = ЖирныйШрифт;
				КонецЕсли;
			КонецЦикла;
		Иначе
			МассивЗаголовков = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаГрупп,,, Истина);
			Для Каждого ИмяЗаголовка Из МассивЗаголовков Цикл
				Элемент = Форма.Элементы[ИмяЗаголовка];
				Если Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ Элемент.Отображение = ОтображениеОбычнойГруппы.Нет Тогда 
					Элемент.ШрифтЗаголовка = ЖирныйШрифт;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ОткрытьОтчетПоПроблемамИзСписка

Открывает форму отчета при двойном нажатии на ячейку таблицы формы списка с картинкой,
ОбщийМодуль.КонтрольВеденияУчетаКлиент
Автор: 1С
// Открывает форму отчета при двойном нажатии на ячейку таблицы формы списка с картинкой,
// сигнализирующей о наличии проблем с выделенным объектом.
//
//  Параметры:
//     Форма                   - ФормаКлиентскогоПриложения - Управляемая форма проблемного объекта.
//     ИмяСписка               - Строка - Имя целевого динамического списка как реквизита формы.
//     Поле                    - ПолеФормы - Колонка в которой располагается картинка,
//                               сигнализирующая о наличии проблем.
//     СтандартнаяОбработка    - Булево - В данный параметр передается признак выполнения
//                               стандартной (системной) обработки события.
//     ДополнительныеПараметры - Структура, Неопределено - Содержит дополнительные свойства в случае
//                               необходимости их использования.
//
// Пример:
//    КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка(ЭтотОбъект, "Список", Поле, СтандартнаяОбработка);
//
Процедура ОткрытьОтчетПоПроблемамИзСписка(Форма, ИмяСписка, Поле, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт
	
	ИмяПроцедуры = "КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка";
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Форма", Форма, Тип("ФормаКлиентскогоПриложения"));
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяСписка", ИмяСписка, Тип("Строка"));
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Поле", Поле, Тип("ПолеФормы"));
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "СтандартнаяОбработка", СтандартнаяОбработка, Тип("Булево"));
	Если ДополнительныеПараметры <> Неопределено Тогда
		ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеПараметры", ДополнительныеПараметры, Тип("Структура"));
	КонецЕсли;
	
	ДополнительныеСвойства = Форма[ИмяСписка].КомпоновщикНастроек.Настройки.ДополнительныеСвойства;
	
	Если Не (ДополнительныеСвойства.Свойство("КолонкаИндикатора")
		И ДополнительныеСвойства.Свойство("ВидОбъектаМетаданных")
		И ДополнительныеСвойства.Свойство("ИмяОбъектаМетаданных")
		И ДополнительныеСвойства.Свойство("ИмяСписка")) Тогда
		СтандартнаяОбработка = Истина;
	Иначе
		
		ТаблицаФормы   = Форма.Элементы.Найти(ДополнительныеСвойства.ИмяСписка);
		
		Если Поле.Имя <> ДополнительныеСвойства.КолонкаИндикатора Тогда
			СтандартнаяОбработка = Истина;
		Иначе
			СтандартнаяОбработка = Ложь;
			
			ДанныеКонтекста = Новый Структура;
			ДанныеКонтекста.Вставить("ВыделенныеСтроки",     ТаблицаФормы.ВыделенныеСтроки);
			ДанныеКонтекста.Вставить("ВидОбъектаМетаданных", ДополнительныеСвойства.ВидОбъектаМетаданных);
			ДанныеКонтекста.Вставить("ИмяОбъектаМетаданных", ДополнительныеСвойства.ИмяОбъектаМетаданных);
			
			ПараметрыФормы = Новый Структура;
			ПараметрыФормы.Вставить("ДанныеКонтекста", ДанныеКонтекста);
			ОткрытьФорму("Отчет.РезультатыПроверкиУчета.Форма", ПараметрыФормы);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

ОткрытьОтчетИлиФорму

Предназначена для открытия переданного отчета или формы.
ОбщийМодуль.ПользователиСлужебныйКлиент
Автор: 1С
// Предназначена для открытия переданного отчета или формы.
//
// Параметры:
//  ТекущийЭлемент               - ТаблицаФормы - выделенная строка дерева значений.
//  Пользователь                 - Строка - имя пользователя информационной базы,
//  ТекущийПользователь          - Строка - имя пользователя информационной базы, для открытия формы
//                                 должен совпадать значением параметра "Пользователь".
//  ИмяФормыПерсональныхНастроек - Строка - путь для открытия формы персональных настроек.
//                                 Вида "ОбщаяФорма.НазваниеФормы".
Процедура ОткрытьОтчетИлиФорму(ТекущийЭлемент, Пользователь, ТекущийПользователь, ИмяФормыПерсональныхНастроек) Экспорт
	
	ЭлементДереваЗначений = ТекущийЭлемент;
	Если ЭлементДереваЗначений.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Пользователь <> ТекущийПользователь Тогда
		ТекстПредупреждения =
			НСтр("ru = 'Для просмотра настроек другого пользователя необходимо
			           |запустить программу от его имени и открыть нужный отчет или форму.'");
		ПоказатьПредупреждение(,ТекстПредупреждения);
		Возврат;
	КонецЕсли;
	
	Если ЭлементДереваЗначений.Имя = "НастройкиОтчетовДерево" Тогда
		
		КлючОбъекта = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Значение;
		КлючОбъектаМассивСтрок = СтрРазделить(КлючОбъекта, "/", Ложь);
		КлючВарианта = КлючОбъектаМассивСтрок[1];
		ПараметрыОтчета = Новый Структура("КлючВарианта, КлючПользовательскихНастроек", КлючВарианта, "");
		
		Если ЭлементДереваЗначений.ТекущиеДанные.Тип = "НастройкаОтчета" Тогда
			КлючПользовательскихНастроек = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Представление;
			ПараметрыОтчета.Вставить("КлючПользовательскихНастроек", КлючПользовательскихНастроек);
		КонецЕсли;
		
		ОткрытьФорму(КлючОбъектаМассивСтрок[0] + ".Форма", ПараметрыОтчета);
		Возврат;
		
	ИначеЕсли ЭлементДереваЗначений.Имя = "ВнешнийВид" Тогда
		
		Для Каждого КлючОбъекта Из ЭлементДереваЗначений.ТекущиеДанные.Ключи Цикл
			
			Если КлючОбъекта.Пометка = Истина Тогда
				
				ИмяФормы = СтрРазделить(КлючОбъекта.Значение, "/")[0];
				ИмяФормыЧастями = СтрРазделить(ИмяФормы, ".");
				Пока ИмяФормыЧастями.Количество() > 4 Цикл
					ИмяФормыЧастями.Удалить(4);
				КонецЦикла;
				ИмяФормы = СтрСоединить(ИмяФормыЧастями, ".");
				ОткрытьФорму(ИмяФормы);
				Возврат;
			Иначе
				РодительЭлемента = ЭлементДереваЗначений.ТекущиеДанные.ПолучитьРодителя();
				
				Если ЭлементДереваЗначений.ТекущиеДанные.ТипСтроки = "НастройкиРабочегоСтола" Тогда
					ПоказатьПредупреждение(,
						НСтр("ru = 'Для просмотра настроек рабочего стола перейдите к разделу
						           |""Рабочий стол"" в командном интерфейсе программы.'"));
					Возврат;
				КонецЕсли;
				
				Если ЭлементДереваЗначений.ТекущиеДанные.ТипСтроки = "НастройкиКомандногоИнтерфейса" Тогда
					ПоказатьПредупреждение(,
						НСтр("ru = 'Для просмотра настроек командного интерфейса
						           |выберите нужный раздел командного интерфейса программы.'"));
					Возврат;
				КонецЕсли;
				
				Если РодительЭлемента <> Неопределено Тогда
					ТекстПредупреждения =
						НСтр("ru = 'Для просмотра данной настройки необходимо открыть ""%1"" 
						           |и затем перейти к форме ""%2"".'");
					ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения,
						РодительЭлемента.Настройка, ЭлементДереваЗначений.ТекущиеДанные.Настройка);
					ПоказатьПредупреждение(,ТекстПредупреждения);
					Возврат;
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;
		
		ПоказатьПредупреждение(,НСтр("ru = 'Данную настройку невозможно просмотреть.'"));
		Возврат;
		
	ИначеЕсли ЭлементДереваЗначений.Имя = "ПрочиеНастройки" Тогда
		
		Если ЭлементДереваЗначений.ТекущиеДанные.Тип = "ПерсональныеНастройки"
			И ИмяФормыПерсональныхНастроек <> "" Тогда
			ОткрытьФорму(ИмяФормыПерсональныхНастроек);
			Возврат;
		КонецЕсли;
		
		ПоказатьПредупреждение(,НСтр("ru = 'Данную настройку невозможно просмотреть.'"));
		Возврат;
		
	КонецЕсли;
	
	ПоказатьПредупреждение(,НСтр("ru = 'Выберите настройку для просмотра.'"));
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Добавить отбор в списке, в пользовательских настройках

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

Строка в дату по форматной строке

Преобразование строки в дату по форматной строке
Функция СтрокаВДату(ФорматДаты, Дано, Ошибка = Ложь)
	
	Попытка
		
		ТестоваяДата = Формат('00010101', "ДФ=" + ФорматДаты); // — необязательная проверка первого правильности параметра
		
	Исключение
		
		Ошибка = Истина;
		Возврат '00010101';
		
	КонецПопытки;
	
	СтруктураДаты = Новый Соответствие;
	
	Для Счетчик = 1 По СтрДлина(ФорматДаты) + 7 Цикл
		
		СтруктураДаты[Сред(ФорматДаты + "dMyHhms", Счетчик, 1)] = 0; // — инициализация частей даты
		
	КонецЦикла;
	
	Для Счетчик = 1 По 12 Цикл
		
		Дано = СтрЗаменить(Дано, Формат(Дата(1, Счетчик, 1), "ДФ=MMММ"), Формат(Счетчик, "ЧЦ=4; ЧВН=")); // — замена названий месяцев числами
		Дано = СтрЗаменить(Дано, Формат(Дата(1, Счетчик, 1), "ДФ=MMМ" ), Формат(Счетчик, "ЧЦ=3; ЧВН="));
		
	КонецЦикла;
	
	Для Счетчик = 1 По СтрДлина(ФорматДаты) Цикл
		
		СтруктураДаты[Сред(ФорматДаты, Счетчик, 1)] = 10 * СтруктураДаты[Сред(ФорматДаты, Счетчик, 1)] + Найти("123456789", Сред(Дано, Счетчик, 1)); // — накопление частей даты
		Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, Счетчик, 1)) И НЕ Найти("0123456789", Сред(Дано, Счетчик, 1)); // — необязательная проверка на цифры
		
	КонецЦикла;
	
	СтруктураДаты["y"] = СтруктураДаты["y"] + ?(СтруктураДаты["y"] < 50, 2000, ?(СтруктураДаты["y"] < 100, 1900, 0)); // — дополнение двух цифр года до четырех
	
	Попытка
		
		Возврат Дата(СтруктураДаты["y"], СтруктураДаты["M"], СтруктураДаты["d"], СтруктураДаты["H"] + СтруктураДаты["h"], СтруктураДаты["m"], СтруктураДаты["s"])
		
	Исключение
		
		Ошибка = Истина;
		Возврат '00010101';
		
	КонецПопытки;
	
КонецФункции

Определение длины строки в запросе

Автор: ildarovich

FastCode 64 8
ВЫБРАТЬ
    Дано.НомерСтроки,
    Дано.Строка
ПОМЕСТИТЬ Дано
ИЗ
    &Дано КАК Дано
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    0 КАК ё
ПОМЕСТИТЬ Р0

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    2 * Р1.ё + Р0.ё КАК ё
ПОМЕСТИТЬ Р10
ИЗ
    Р0 КАК Р1,
    Р0 КАК Р0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    4 * Р32.ё + Р10.ё КАК ё
ПОМЕСТИТЬ Р3210
ИЗ
    Р10 КАК Р32,
    Р10 КАК Р10
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    16 * Р54.ё + Р3210.ё + 1 КАК ё
ПОМЕСТИТЬ Р543210
ИЗ
    Р10 КАК Р54,
    Р3210 КАК Р3210
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Дано.НомерСтроки,
    Дано.Строка,
    МАКСИМУМ(Р543210.ё) КАК ДлинаСтроки
ИЗ
    Дано КАК Дано,
    Р543210 КАК Р543210
ГДЕ
    ПОДСТРОКА(Дано.Строка, Р543210.ё, 1) + "!" <> "!"

СГРУППИРОВАТЬ ПО
    Дано.НомерСтроки,
    Дано.Строка

Разложить строку в массив

freelance_1C 9 1
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
	МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр, Поз - 1));
			Стр = СокрЛ(Сред(Стр, Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр, Поз - 1));
			Стр = Сред(Стр, Поз + ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;	
КонецФункции

Выделение разрядов числа без использования округления и деления по модулю

Первый параметр функции - число из максимум пяти разрядов цифр "0" и "1", второй параметр - номер разряда. Функция, возвращающая значение разряда:

Автор: ildarovich

FastCode 64 8
Функция Ф(Х, У)
    Возврат ?(У < 2, 0 + (Х > 9999), Ф((Х - 10000 * (Х > 9999)) * 10, У - 1))
КонецФункции

Функция для превращения строки в дату по форматной строке

Автор: ildarovich

FastCode 64 8
Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) Экспорт 
    Попытка 
        ё = Формат('00010101', "ДФ=" + ФорматДаты) // - необязательная проверка первого правильности параметра 
    Исключение 
        Ошибка = Истина; 
        Возврат '00010101' 
    КонецПопытки; 
    Ч = Новый Соответствие; 
    Для ё = 1 По СтрДлина(ФорматДаты) + 7 Цикл 
        Ч[Сред(ФорматДаты + "dMyHhms", ё, 1)] = 0    // - инициализация частей даты 
    КонецЦикла; 
    Для ё = 1 По 12 Цикл 
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMММ"), Формат(ё, "ЧЦ=4; ЧВН=")); // - замена названий месяцев числами 
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMМ" ), Формат(ё, "ЧЦ=3; ЧВН=")) 
    КонецЦикла; 
    Для ё = 1 По СтрДлина(ФорматДаты) Цикл 
        Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Дано, ё, 1)); // - накопление частей даты 
        Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, ё, 1)) И НЕ Найти("0123456789", Сред(Дано, ё, 1)) // - необязательная проверка на цифры 
    КонецЦикла; 
    Ч["y"] = Ч["y"] + ?(Ч["y"] < 50, 2000, ?(Ч["y"] < 100, 1900, 0)); // - дополнение двух цифр года до четырех 
    Попытка 
        Возврат Дата(Ч["y"], Ч["M"], Ч["d"], Ч["H"] + Ч["h"], Ч["m"], Ч["s"]) 
    Исключение 
        Ошибка = Истина; 
        Возврат '00010101' 
    КонецПопытки 
КонецФункции

Описание строки в таблице значений

Описание строки в таблице значений
Андрей 23 4
ст90	= новый описаниеТипов("строка",,Новый КвалификаторыСтроки(90));

Запрос с нумерацией строк

хитрый запрос с нумерацией строк
Юрий 6 1
ВЫБРАТЬ
	                 |	ШтрихкодыНоменклатуры.Штрихкод,
	                 |	ШтрихкодыНоменклатуры.Номенклатура,
	                 |	ШтрихкодыНоменклатуры.Характеристика,
	                 |	ШтрихкодыНоменклатуры.Упаковка
	                 |ПОМЕСТИТЬ Нач
	                 |ИЗ
	                 |	РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
	                 |;
	                 |
	                 |////////////////////////////////////////////////////////////////////////////////
	                 |ВЫБРАТЬ
	                 |	Нач.Штрихкод,
	                 |	КОЛИЧЕСТВО(Нач1.Штрихкод) КАК ПорядковыйНомер
	                 |ИЗ
	                 |	Нач КАК Нач
	                 |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Нач КАК Нач1
	                 |		ПО Нач.Штрихкод >= Нач1.Штрихкод
	                 |
	                 |СГРУППИРОВАТЬ ПО
	                 |	Нач.Штрихкод
	                 |
	                 |УПОРЯДОЧИТЬ ПО
	                 |	ПорядковыйНомер

Поиск кириллицы в строке

Ищет кириллицу в строке.
Dmitry Zhurbenko 28 4
Функция ПоискКириллицы(Текст) Экспорт;
Для i=1040 по 1103 цикл
	Результат = Найти (Текст, Символ(i));
	Если Результат>0 Тогда
		Возврат Истина;
	КонецЕсли; 
КонецЦикла;
Возврат Ложь;

КонецФункции;

Колонки в строку

Возвращает строку с названиями колонок коллекции (ТаблицаЗначений, РезультатЗапроса)
prog1c 45 1 5
Функция КолонкиВСтроку(Коллекция, Разделитель=",")

	СтрКоллекция = "";
	
	Для каждого Колонка Из Коллекция.Колонки Цикл
		Если Не ПустаяСтрока(СтрКоллекция) Тогда
			СтрКоллекция = СтрКоллекция + Разделитель;
		КонецЕсли;
		СтрКоллекция = СтрКоллекция + Колонка.Имя;
	КонецЦикла;
	
	Возврат СтрКоллекция;

КонецФункции // КолонкиВСтроку()

часть строки

Функция ЧастьСтроки позволяет получить подстрокй из строки с разделителями по номеруу или "последняя"
Mx 1
//******************************************************************************
&НаКлиентеНаСервереБезКонтекста
Функция ЧастьСтроки(Знач ИсхСтрока,Разделитель,НомерЧасти) Экспорт
	ИсхСтрока=СтрЗаменить(ИсхСтрока,Разделитель,Символы.ПС);
	Если Строка(НомерЧасти)="последняя" Тогда
		Возврат СтрПолучитьСтроку(ИсхСтрока,СтрЧислоСтрок(ИсхСтрока));
	Иначе
		Возврат СтрПолучитьСтроку(ИсхСтрока,НомерЧасти);
	КонецЕсли;
КонецФункции

Сравнение двух строк

Результатом сравнения двух строк является массив, который показывает, что от "От" до "До" позиции строки совпадают (ОК = Истина) или нет.

Автор: ildarovich

FastCode 64 8
Функция ТаблицаСравненияСтрок_(С1, С2) Экспорт
   Ответ = Новый ТаблицаЗначений; //Ответ = НоваяТаблицаЗначений("От, До, ОК");
   Ответ.Колонки.Добавить("От");
   Ответ.Колонки.Добавить("До"); 
   Ответ.Колонки.Добавить("ОК");  
   ЗаполнитьЗначенияСвойств(Ответ.Добавить(), Новый Структура("От, ОК", 1, Сред(С1, 1, 1) = Сред(С2, 1, 1)));
   Для ё = 2 По Макс(СтрДлина(С1), СтрДлина(С2)) Цикл
      Если Ответ[0].ОК <> (Сред(С1, ё, 1) = Сред(С2, ё, 1)) Тогда
         ЗаполнитьЗначенияСвойств(Ответ.Вставить(0), Новый Структура("От, ОК", ё, НЕ Ответ[1].ОК));                            
         Ответ[1].До = ё - 1
      КонецЕсли      
   КонецЦикла;
   Ответ[0].До = Макс(СтрДлина(С1), СтрДлина(С2));
   Возврат Ответ
КонецФункции

//С дихотомией

Процедура РазДва(Ответ, С1, С2, От, До)
   Если От + 2 > До И (Сред(С1, От, 1) = Сред(С2, От, 1)) <> (Сред(С1, До, 1) = Сред(С2, До, 1)) Тогда
      ЗаполнитьЗначенияСвойств(Ответ.Вставить(0), Новый Структура("От, ОК", До, НЕ Ответ[1].ОК));
      Ответ[1].До = От
   ИначеЕсли  От + 1 < До И Сред(С1, От, До - От + 1) <> Сред(С2, От, До - От + 1) Тогда
      РазДва(Ответ, С1, С2, От, Цел((От + До) / 2));
      РазДва(Ответ, С1, С2, Цел((От + До) / 2), До)   
   КонецЕсли
КонецПроцедуры
Функция ТаблицаСравненияСтрок(С1, С2) Экспорт
   Ответ = Новый ТаблицаЗначений;
   Ответ.Колонки.Добавить("От");
   Ответ.Колонки.Добавить("До");
   Ответ.Колонки.Добавить("ОК");
   ЗаполнитьЗначенияСвойств(Ответ.Добавить(), Новый Структура("От, ОК", 1, Сред(С1, 1, 1) = Сред(С2, 1, 1)));
   РазДва(Ответ, С1, С2, 1, Макс(СтрДлина(С1), СтрДлина(С2)));
   Ответ[0].До = Макс(СтрДлина(С1), СтрДлина(С2));
   Возврат Ответ
КонецФункции