Все публикации

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

Получить даты за период в запросе

Генерация списка дат за период с настраиваемым шагом в днях в запросе
ChOP 198 2 8 5
// Возвращает текст запроса, или добавляет запрос во временную таблицу, или возвращает результат запроса, или таблицу значений с результатом запроса.
// Следует указать истина только в одном из следующих параметров:
// - ПолучитьТекстЗапроса
// - ПолучитьРезультатЗапроса
// - ПолучитьТаблицуЗначений.
// 
// Параметры:
//  НачалоПериода              - Дата - начало периода отсчета.
//  КонецПериода               - Дата - конец периода отсчета включительно.
//  Шаг                        - Число - шаг вывода дат в днях.
//  ПолучитьПоследнююДату      - Булево - признак вывода последнего дня, если тот не попадает по шагу.
//  ИмяКолонкиПериод           - Строка - имя колонки с датами.
//  ПолучитьКолонкуШаг         - Булево - признак получения колонки шага, используемой для отладки.
//  ИмяКолонкиШаг              - Строка - имя колонки с шагом.
//  ПолучитьТекстЗапроса       - Булево - возврат текста запроса.
//  ДобавитьВоВременныеТаблицы - Булево - добавление запроса во временную таблицу.
//  МенеджерВременныхТаблиц    - МенеджерВременныхТаблиц - менеджер временных таблиц.
//  ИмяВременнойТаблицы        - Строка - имя временной таблицы.
//  ПолучитьРезультатЗапроса   - Булево - получить результат запроса.
//  ПолучитьТаблицуЗначений    - Булево - получить таблицу значений с результатом запроса.
//  УничтожитьВТ               - Булево - если истина, в конце запроса будут уничтеженны промежуточные временные таблицы.
//                                                                         
// Возвращаемое значение:
//  - Строка            - если ПолучитьТекстЗапроса истина. 
//	- Временная таблица - если ДобавитьВоВременныеТаблицы истина. 
//	- Результат запрос  - если ПолучитьРезультатЗапроса истина.
//	- Таблица значений  - если ПолучитьТаблицуЗначений истина.
//
Функция ПолучитьДатыЗаПериодВЗапросе(НачалоПериода = Неопределено, КонецПериода = Неопределено, Шаг = 1, ПолучитьПоследнююДату = Ложь,
										ИмяКолонкиПериод = "Период", ПолучитьКолонкуШаг = Ложь, ИмяКолонкиШаг = "Шаг",
										ПолучитьТекстЗапроса = Ложь, ДобавитьВоВременныеТаблицы = Ложь, МенеджерВременныхТаблиц = Неопределено,
										ИмяВременнойТаблицы = "#ДатыЗаПериод", ПолучитьРезультатЗапроса = Ложь, ПолучитьТаблицуЗначений = Ложь,
										УничтожитьВТ = Истина) Экспорт
										
	ТекстЗапроса = 
		"ВЫБРАТЬ 0 КАК Цифра
		|ПОМЕСТИТЬ Цифры
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 1
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 2
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 3
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 4
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 5
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 6
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 7
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 8
		|ОБЪЕДИНИТЬ ВЫБРАТЬ 9
		|;
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СписокДней.Дней) КАК Период
		|ПОМЕСТИТЬ НужныйПериод
		|ИЗ
		|	(ВЫБРАТЬ
		|		СотниТысяч.Цифра * 100000 + ДесяткиТысяч.Цифра * 10000 + Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра КАК Дней
		|	ИЗ
		|		Цифры КАК СотниТысяч
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч
		|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Тысячи
		|					ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Сотни
		|						ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Десятки
		|							ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Единицы
		|							ПО (Десятки.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		|								И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		|						ПО (Сотни.Цифра * 100 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		|					ПО (Тысячи.Цифра * 1000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		|				ПО (ДесяткиТысяч.Цифра * 10000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		|			ПО (СотниТысяч.Цифра * 100000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		|	ГДЕ
		|		СотниТысяч.Цифра * 100000 + ДесяткиТысяч.Цифра * 10000 + Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК СписокДней
		|;
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	НужныйПериод1.Период КАК Период,
		|	СУММА(1) + (&Шаг - 1) КАК Шаг
		|ПОМЕСТИТЬ ПериодДоОбрезания
		|ИЗ
		|	НужныйПериод КАК НужныйПериод1
		|		ЛЕВОЕ СОЕДИНЕНИЕ НужныйПериод КАК НужныйПериод2
		|		ПО НужныйПериод1.Период >= НужныйПериод2.Период
		|
		|СГРУППИРОВАТЬ ПО
		|	НужныйПериод1.Период
		|;
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ПериодДоОбрезания.Период КАК Период,
		|	ПериодДоОбрезания.Шаг КАК Шаг
		|ПОМЕСТИТЬ ПериодПлюсПоследняяДата
		|ИЗ
		|	ПериодДоОбрезания КАК ПериодДоОбрезания
		|ГДЕ
		|	ПериодДоОбрезания.Шаг / &Шаг = (ВЫРАЗИТЬ(ПериодДоОбрезания.Шаг / &Шаг КАК ЧИСЛО(10, 0)))
		|
		|СГРУППИРОВАТЬ ПО
		|	ПериодДоОбрезания.Период,
		|	ПериодДоОбрезания.Шаг
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	&КонецПериода,
		|	NULL
		|;
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ПериодПлюсПоследняяДата.Период КАК " + ИмяКолонкиПериод
		 +
		 	?(ПолучитьКолонкуШаг,",
								 |	СУММА(ПериодПлюсПоследняяДата.Шаг) КАК " + ИмяКолонкиШаг, "")
		+
			?(ДобавитьВоВременныеТаблицы, "
										  |ПОМЕСТИТЬ " + ИмяВременнойТаблицы, "")
		+
		"
		|ИЗ
		|	ПериодПлюсПоследняяДата КАК ПериодПлюсПоследняяДата
		|"
		 +
		    ?(ПолучитьПоследнююДату,"ГДЕ
									|    НЕ ПериодПлюсПоследняяДата.Шаг ЕСТЬ NULL
									|", "")
		 +
		"СГРУППИРОВАТЬ ПО
		|	ПериодПлюсПоследняяДата.Период
		|"
		 +
		 	?(УничтожитьВТ, ";
							|////////////////////////////////////////////////////////////////////////////////
							|УНИЧТОЖИТЬ Цифры
							|; 
							|////////////////////////////////////////////////////////////////////////////////
							|УНИЧТОЖИТЬ НужныйПериод
							|;
							|////////////////////////////////////////////////////////////////////////////////
							|УНИЧТОЖИТЬ ПериодДоОбрезания
							|;
							|////////////////////////////////////////////////////////////////////////////////
							|УНИЧТОЖИТЬ ПериодПлюсПоследняяДата ", "");										

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

	Если ПолучитьРезультатЗапроса Тогда
		Возврат РезультатЗапроса;
	КонецЕсли;
	
	Если ПолучитьТаблицуЗначений Тогда
		Возврат РезультатЗапроса.Выгрузить();
	КонецЕсли;
			
КонецФункции

Условное оформление

Добавление условного оформления одной строкой в элементы формы: ДинамическийСписок, ТаблицаФормы - поддерживает добавление сравниваемого значения при виде сравнения ВСписке - создание/подбор (отборы будут дополнены) элемента отбора - замена (т.е. удален...
mikaelangelm 58 1 3

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз Промо

Быстрое и надежное обновление файловых и серверных баз, защита от шифровальщиков, автоматическое обновление доработанных конфигураций и расширений, а также многое другое.
bolsun
950 руб.

Открыть отчет СКД с передачей параметров и отборами

ChOP 198 2 8 5
// Открывает отчет на СКД с передачей параметров и отборов
//
// Параметры:
//  ЭтаФорма					 - ФормаКлиентскогоПриложения - Форма клиентского приложения 
//  ФормаОтчета					 - Строка - Путь к форме отчета, например: "Отчет.ТестовыйОтчёт.Форма" 
//  Параметры					 - Структура - Ключ- имя параметра, значение- присваиваемое значение
//  Отборы						 - Массив структур - Структура вида: Новый Структура("ИмяОтбора, Значение, ВидСравнения", ИмяОтбора, Значение, ВидСравнения) 
//  СформироватьПриОткрытии		 - Булево - Признак формировании отчета при открытии 
//  КлючВарианта				 - Строка - Ключ варианта отчета, который следует открыть
//  ПользовательскиеНастройки	 - Пользовательские настройки отчета - КомпоновщикНастроек.ПользовательскиеНастройки 
//
Процедура КомандаОткрытьОтчётСОтбором(ЭтаФорма, ФормаОтчета, Параметры = Неопределено, Отборы = Неопределено,
	          СформироватьПриОткрытии = Истина, КлючВарианта = Неопределено, ПользовательскиеНастройки = Неопределено) Экспорт
		
	ФормаОтчёта = ПолучитьФорму(ФормаОтчета);
	КомпоновщикНастроек = ФормаОтчёта.Отчет.КомпоновщикНастроек;
	
	Для Каждого Парам Из Параметры Цикл 
		УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, Парам.Ключ, Парам.Значение);	
	КонецЦикла;	
	
	Для Каждого Отбор Из Отборы Цикл 
		УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, Отбор.ИмяОтбора, Отбор.Значение, Отбор.ВидСравнения);	
	КонецЦикла;
	
	ПараметрыФормы = Новый Структура();
	ПараметрыФормы.Вставить("СформироватьПриОткрытии", СформироватьПриОткрытии);
	Если КлючВарианта <> Неопределено Тогда
		ПараметрыФормы.Вставить("КлючВарианта", КлючВарианта);		
	КонецЕсли;  
	ПараметрыФормы.Вставить("ПользовательскиеНастройки", ?(ПользовательскиеНастройки <> Неопределено, ПользовательскиеНастройки,
																									  КомпоновщикНастроек.ПользовательскиеНастройки)); 
	
	ОткрытьФорму(ФормаОтчета, ПараметрыФормы, ЭтаФорма);
	
КонецПроцедуры

Процедура УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, ИмяПараметра, Значение)
	
	Перем ПараметрДанных, Настройки, ПользовательскиеНастройки, ПользовательскийПараметр;
	
	Настройки = КомпоновщикНастроек.Настройки;
	
	ПараметрДанных = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
	
	Если ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда
		
		ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
		ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
		ПользовательскийПараметр.Использование = Истина;
		ПользовательскийПараметр.Значение = Значение;

	КонецЕсли;
	
КонецПроцедуры

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

	КонецЕсли;

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

Преобразование строки в число

Не вызывает исключение
RomanVG 76 5 1
// функция преобразует строку в число, примеры:
// 315 руб. = 315
// 1 007,30 м2 (квадратный метр) = 1007,3
// -12.5% = -12,5
// ,05 = 0,05
// пустая строка или пробелы = 0
Функция грв_СтрокаВЧисло(Знач СтрокаЧисло) Экспорт
	
	Результат = "";
	Для Индекс = 1 По СтрДлина(СтрокаЧисло) Цикл
		Символ = Сред(СтрокаЧисло, Индекс, 1);
		КодСимвола = КодСимвола(Символ);
		Если ((КодСимвола >= 48 И КодСимвола <= 57) Или (Символ = "-" И Индекс = 1) Или (Символ = ",") Или (Символ = ".") Или (Символ = " ") Или (КодСимвола = 160)) Тогда
			Если КодСимвола <> 32 И КодСимвола <> 160 Тогда
				Результат = Результат + Символ;
			КонецЕсли; 
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Результат = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(Результат);
	
	Возврат Результат;
	
КонецФункции

Как запустить скрипт VBS с правами администратора

Понадобилось по быстрому запустить скрипт для очистки логов IIS. Но для этого потребовались права администратора. Помог совет со StackOverflow, добавил в начало скрипта: If Not WScript.Arguments.Named.Exists(elevate) Then CreateObject(Shell.Application)....
bolsun 321 5 7 5

Получить количество строк динамического списка

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

Восстановить положение окна программно

ChOP 198 2 8 5
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ЭтаФорма.ИмяСохраненияПоложенияОкна = Новый УникальныйИдентификатор();
КонецПроцедуры

Общая форма для вывода сообщений пользователю в HTML

Как то мне потребовалось вывести пользователю сообщение с таблицей 4 на 4. Решил сделать для этого общую форму HTMLСообщение, пример ее вызова ниже: СтруктураПараметров = Новый Структура(Заголовок, ТекстСообщения); СтруктураПараметров.Заголовок = Заключе...
RomanVG 76 5 1

Функция преобразует Массив из структур в ТаблицуЗначений

RomanVG 76 5 1
&НаСервереБезКонтекста
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) 
    
    тзДанные = Новый ТаблицаЗначений;
    
    Для Каждого ЭлементМассива Из мсДанные Цикл
		
		Если тзДанные.Колонки.Количество() = 0 Тогда
            Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
                тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
            КонецЦикла;
        КонецЕсли;
        
        НоваяСтрока = тзДанные.Добавить();
        Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
            НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
        КонецЦикла;
    КонецЦикла;
    
    Возврат тзДанные;
    
КонецФункции

Прибавить рабочие дни к дате (Запрос)

Получение указанного порядкового рабочего дня к дате
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000000
	Календарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ БанковскиеДниКалендаря
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ГДЕ
	(Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
			ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))

УПОРЯДОЧИТЬ ПО
	Календарь.ДатаКалендаря

ИНДЕКСИРОВАТЬ ПО
	Календарь.ДатаКалендаря
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ДАТАВРЕМЯ(2022, 4, 1) КАК ДатаДокумента,
	5 КАК ДнейОтсрочки
ПОМЕСТИТЬ ТаблицаОплат

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ДАТАВРЕМЯ(2022, 4, 9),
	7
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Оплаты.ДатаДокумента КАК ДатаДокумента,
	Оплаты.ДнейОтсрочки КАК ДнейОтсрочки,
	Календарь.ДатаКалендаря КАК ДатаОплаты
ИЗ
	ТаблицаОплат КАК Оплаты
		ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК Календарь
		ПО ((Календарь.ДатаКалендаря, Оплаты.ДнейОтсрочки) В
				(ВЫБРАТЬ
					Выборка.ДатаКалендаря КАК ДатаКалендаря,
					СУММА(1) КАК НомерРабочегоДня
				ИЗ
					БанковскиеДниКалендаря КАК Выборка ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК ПодВыборка
						ПО
							ПодВыборка.ДатаКалендаря > Оплаты.ДатаДокумента
								И ПодВыборка.ДатаКалендаря <= Выборка.ДатаКалендаря
				ГДЕ
					Выборка.ДатаКалендаря > Оплаты.ДатаДокумента
				СГРУППИРОВАТЬ ПО
							Выборка.ДатаКалендаря))

Сравнить ТЗ

Сравнение Таблиц Значений две Таблицы
miha 123 8 1
// Предварительно надо отсортировать обе таблицы по одному и тому же уникальному ключу
	СтрВнутр_СтараяТЗ = ЗначениеВСтрокуВнутр(тзСтарыеПартииГТД.Скопировать());
	СтрВнутр_НоваяТЗ  = ЗначениеВСтрокуВнутр(тзНовыеПартииГТД.Скопировать());

	Если СтрВнутр_СтараяТЗ <> СтрВнутр_НоваяТЗ Тогда

Свернуть массив

RomanVG 76 5 1
Процедура СвернутьМассив(Мас) Экспорт 
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ЗначМас");
	Для каждого ЗначМас из Мас Цикл 
		НСтрока = ТЗ.Добавить();
		НСтрока.ЗначМас = ЗначМас;
	КонецЦикла;
	ТЗ.Свернуть("ЗначМас");
	Мас.Очистить();
	Для каждого СтрТЗ из ТЗ Цикл 
		Мас.Добавить(СтрТЗ.ЗначМас);
	КонецЦикла;
	
КонецПроцедуры

Транспонировать таблицу значений

RomanVG 76 5 1
Функция ТранспонироватьТЗ(ТЗ)
   
	ТЗ2 = Новый ТаблицаЗначений;
	Массив = ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0]); // первая колонка содержит названия новых колонок
	ТЗ2.Колонки.Добавить(ТЗ.Колонки[0].Имя); // старые названия колонок сохраним в первой колонке
	
	Для Каждого Значения из Массив Цикл
		ТЗ2.Колонки.Добавить(СокрЛП(Значения));
	КонецЦикла;
	
	Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
		ТЗ2.Добавить();
		ТЗ2[Сч - 1][ТЗ.Колонки[0].Имя] = ТЗ.Колонки[Сч].Имя;
	КонецЦикла;
	
	СчетчикСтрок = -1;
	Для каждого стр из Тз Цикл
		СчетчикСтрок = СчетчикСтрок + 1;
		Мас = Новый Массив;
		Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
			Мас.Вставить(Сч - 1, стр[Сч]);
		КонецЦикла;
		ТЗ2.ЗагрузитьКолонку(Мас, ТЗ2.Колонки[СчетчикСтрок + 1]);
	КонецЦикла;
	
	Возврат ТЗ2;
   
КонецФункции

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

RomanVG 76 5 1
&НаСервере
Функция ПолучитьТЗизДинамическогоСписка()

	Схема = Элементы.Сделки.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Сделки.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	
	ТабЗначений = Новый ТаблицаЗначений;
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВывода.УстановитьОбъект(ТабЗначений);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
	
	Возврат ТабЗначений;

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

Простое добавление колонки в Динамический список

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

Передача менеджера временных таблиц в СКД

Для того, чтобы компоновщик настроек мог понять, с каким типами данных из временной таблицы он имеет дело, желательно прописать это в тексте запроса, используя выражения языка запросов ВЫРАЗИТЬ(ВТ.ЗначениеПоля КАК <Описание типа>) или ЕСТЬNULL(ВТ.ЗначениеП...
ChOP 198 2 8 5

Ввод по строке вхождением с доп параметрами и подсветкой вхождения

К оригиналу добавил возможность передать дополнительно свои условия к запросу Модуль менеджера //Параметры.ДопУсловияПоиска - строка - значение подставится в параметры запроса // Пример: Справочники.ПодразделенияОрганизаций.ПолучитьДанныеВыбора(Новый Ст...
ChOP 198 2 8 5

Получить web-cсылку на объект метаданных

Примеры использования: для запуска ДО из других конфигураций или из Битрикс24 и т.п. интеграций Функция ПолучитьWebСсылкуНаОбъект(Объект) Экспорт НавСсылка = ПолучитьНавигационнуюСсылку(Объект); ДлинаСтроки = СтрДлина(НавСсылка); ПозицияРеф = СтрНа...
RomanVG 76 5 1

Фильтрация таблицы значений

С помощью построителя запросов
freeman 8 1
// ТаблицаОтборов - Таблица значений с колонками
// ИмяОтбора - Строка
// ВидСравнения - ВидСравнения
// Значение - Any
// Возвращает отфильтрованную таблицу значений

Функция ОтфильтроватьТаблицуЗначений(ТаблицаЗначенийДляФильтрации, ТаблицаОтборов)

	Построитель                = Новый ПостроительЗапроса;
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначенийДляФильтрации);

	Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
		Отбор                     = Построитель.Отбор.Добавить(СтрокаКоллекции.ИмяОтбора);
		Отбор.ВидСравнения        = СтрокаКоллекции.ВидСравнения;
		Отбор.Использование       = Истина;
		Отбор.Значение            = СтрокаКоллекции.Значение;
	КонецЦикла;

	Возврат Построитель.Результат.Выгрузить();

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

Определить это Linux или Windows

buketoff 129 2 2 9
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоLinux = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы.Linux_x86_64;