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

Формат изображения (уменьшить,обрезать,масштабировать,сжать)

Формат изображения (уменьшить,обрезать,масштабировать,сжать)
Артур 28 4
&НаКлиенте
Процедура сжатьФото(Фото)
	МаксимальнаяШирина	= 700; 
	МаксимальнаяВысота	= 400;
			
	ОбрезкаЛ	=  200;
	ОбрезкаВ	=  0;
	ОбрезкаП	=  200;
	ОбрезкаН	=  0;
	
    // Создаем объект
    ФайлКартинка = Новый COMОбъект("WIA.ImageFile");
    ФайлКартинка.LoadFile(Фото);

    //Сообщить("Картинка: " + Картинка.Имя);
    //Сообщить("    Расширение файла: " + ФайлКартинка.FileExtension);
    //Сообщить("    Ширина: " + ФайлКартинка.Width);
    //Сообщить("    Высота: " + ФайлКартинка.Height);
    //Сообщить("    Размер: " + Окр(ФайлКартинка.FileData.Count / 1024, 2) + " Кб");
        
    ФайлПрогресс = Новый COMОбъект("WIA.ImageProcess"); ///ФайлПрогресс.Filters - список Фильтров, всего 8
		
    ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Scale").FilterID);    ///масштабирование  
    ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Crop").FilterID);     ///Обрезка
	ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Convert").FilterID);  ///Конвертация (Сжатия)
		
	ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value  = МаксимальнаяШирина;        
	ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = МаксимальнаяВысота;	    
	ФайлПрогресс.Filters(1).Properties("PreserveAspectRatio").Value = Ложь;  ///Сохранять пропорции (По умолчанию было истина - сбивает разрешения высоту и ширину)
	
	//Форматы преобразований имееют следующий формат:
	///wiaFormatBMP    = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}";      ///  .BMP
	wiaFormatJPEG   = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";         ///  .JPEG

	ФайлПрогресс.Filters(3).Properties("FormatID").Value = wiaFormatJPEG;
	ФайлПрогресс.Filters(3).Properties("Quality").Value = 50;          ///Качество фотографии  (от 1 - 100); 100 =60КБ  50 = 8КБ

	///Обрезка
	ФайлПрогресс.Filters(2).Properties("Left").Value   =  ОбрезкаЛ;       /// лево;    
	ФайлПрогресс.Filters(2).Properties("Top").Value    =  ОбрезкаВ;       /// верх;     
	ФайлПрогресс.Filters(2).Properties("Right").Value  =  ОбрезкаП;       /// право;    
	ФайлПрогресс.Filters(2).Properties("Bottom").Value =  ОбрезкаН;	      /// низ;      
	
	///Применить фильтры к фотографии
    ФайлКартинка = ФайлПрогресс.Apply(ФайлКартинка);

	///Удалить старое фото и создать новое
	УдалитьФайлы(фото);
    ФайлКартинка.SaveFile(фото);
	
	
	//Сообщить("    Расширение файла: " + ФайлКартинка.FileExtension);
	//Сообщить("    Ширина: " + ФайлКартинка.Width);
	//Сообщить("    Высота: " + ФайлКартинка.Height);
	//Сообщить("    Размер: " + Окр(ФайлКартинка.FileData.Count / 1024, 2) + " Кб");
КонецПроцедуры

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

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

Убрать итоги из готового текста запроса

Позволяет убрать итоги из текста запроса, на пример, перед передачей его в СКД
ChOP 11 2
СхемаЗапроса = новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);
СхемаЗапроса.ПакетЗапросов.Получить(СхемаЗапроса.ПакетЗапросов.Количество()-1).ВыраженияИтогов.Очистить();
СхемаЗапроса.ПакетЗапросов.Получить(СхемаЗапроса.ПакетЗапросов.Количество()-1).КонтрольныеТочкиИтогов.Очистить();
Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();

Выгрузка в Excel документ

Как выгружать данные в Эксель? через COMОбъект понятно. а как происходит сам процесс выгрузки... Нуждаюсь в помощи
Hex

OneTracker - трекер учета рабочего времени в 1С

Программа автоматически замеряет время работы разработчика с программой 1С в режиме Конфигуратора или Предприятия. Учет ведется в разрезах задач, информационных баз или объектов конфигураций.
bolsun 28 3

Дублирование тегов

Теги OneScript и теги БСП, существуют в нескольких экземлярах

Плановая себестоимость продаж (цена на Дату документа)

Плановая себестоимость продаж (цена на Дату документа)
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПродажиОбороты.Период КАК Период,
	|	ПродажиОбороты.Характеристика КАК Характеристика,
	|	ПродажиОбороты.Номенклатура КАК Номенклатура,
	|	ПродажиОбороты.КоличествоОборот КАК Количество,
	|	ПродажиОбороты.СуммаОборот КАК Выручка,
	|	ПродажиОбороты.Контрагент КАК Контрагент,
	|	ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
	|	ПродажиОбороты.Ответственный КАК Ответственный
	|ПОМЕСТИТЬ втПродажиБезЦены
	|ИЗ
	|	РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ПродажиОбороты
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	|	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	|	МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена,
	|	ЦеныНоменклатуры.Период КАК Период
	|ПОМЕСТИТЬ втЦеныПоНоменклатуре
	|ИЗ
	|	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
	|ГДЕ
	|	ЦеныНоменклатуры.Период <= &ДатаОкончания
	|	И ЦеныНоменклатуры.ВидЦен = &ВидЦен
	|
	|СГРУППИРОВАТЬ ПО
	|	ЦеныНоменклатуры.Номенклатура,
	|	ЦеныНоменклатуры.Характеристика,
	|	ЦеныНоменклатуры.Период
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПродажиОбороты.Период КАК Период,
	|	ЕСТЬNULL(ПродажиОбороты.Выручка, 0) КАК Выручка,
	|	ПродажиОбороты.Характеристика КАК Характеристика,
	|	ПродажиОбороты.Номенклатура КАК Номенклатура,
	|	ЕСТЬNULL(ПродажиОбороты.Количество, 0) КАК Количество,
	|	ПродажиОбороты.Контрагент КАК Контрагент,
	|	ПродажиОбороты.Ответственный КАК Ответственный,
	|	ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
	|	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ДатаЦены
	|ПОМЕСТИТЬ втМаксПериод
	|ИЗ
	|	втПродажиБезЦены КАК ПродажиОбороты
	|		ЛЕВОЕ СОЕДИНЕНИЕ втЦеныПоНоменклатуре КАК ЦеныНоменклатуры
	|		ПО (ЦеныНоменклатуры.Номенклатура = ПродажиОбороты.Номенклатура)
	|			И (ЦеныНоменклатуры.Характеристика = ПродажиОбороты.Характеристика)
	|			И (ЦеныНоменклатуры.Период <= ПродажиОбороты.Период)
	|
	|СГРУППИРОВАТЬ ПО
	|	ПродажиОбороты.Ответственный,
	|	ПродажиОбороты.Контрагент,
	|	ПродажиОбороты.Номенклатура,
	|	ПродажиОбороты.Характеристика,
	|	ПродажиОбороты.Период,
	|	ПродажиОбороты.ЗаказПокупателя,
	|	ЕСТЬNULL(ПродажиОбороты.Выручка, 0),
	|	ЕСТЬNULL(ПродажиОбороты.Количество, 0)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Заказ_Поставщику.ЗаказПокупателя КАК ЗаказПокупателя,
	|	СУММА(ЗаказПоставщикуЗапасы.Сумма) КАК Сумма
	|ПОМЕСТИТЬ ВТЗатратыНаСубподряд
	|ИЗ
	|	Документ.ЗаказПоставщику.Запасы КАК ЗаказПоставщикуЗапасы
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК Заказ_Поставщику
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Заказ_Покупателя
	|			ПО Заказ_Поставщику.ЗаказПокупателя = Заказ_Покупателя.Ссылка
	|		ПО ЗаказПоставщикуЗапасы.Ссылка = Заказ_Поставщику.Ссылка
	|ГДЕ
	|	Заказ_Покупателя.Дата > ДОБАВИТЬКДАТЕ(&ДатаНачала, ГОД, -1) И  Заказ_Покупателя.Контрагент НЕ В (&КонтрагентыБезСубподряда)
	|
	|СГРУППИРОВАТЬ ПО
	|	Заказ_Поставщику.ЗаказПокупателя
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПродажиОбороты.Характеристика КАК Характеристика,
	|	ПродажиОбороты.Номенклатура КАК Номенклатура,
	|	ПродажиОбороты.Количество КАК Количество,
	|	ПродажиОбороты.Выручка КАК Выручка,
	|	ПродажиОбороты.Контрагент КАК Контрагент,
	|	ПродажиОбороты.Ответственный КАК Ответственный,
	|	ПродажиОбороты.Период КАК Период,
	|	ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
	|	ЦеныНоменклатуры.Цена КАК Цена,
	|	isnull(ЦеныНоменклатуры.Цена,0) * ПродажиОбороты.Количество КАК Себестоимость,
	|	isnull(ВТЗатратыНаСубподряд.Сумма,0) КАК Субподряд
	|ИЗ
	|	втМаксПериод КАК ПродажиОбороты
	|		ЛЕВОЕ СОЕДИНЕНИЕ втЦеныПоНоменклатуре КАК ЦеныНоменклатуры
	|		ПО (ЦеныНоменклатуры.Номенклатура = ПродажиОбороты.Номенклатура)
	|			И (ЦеныНоменклатуры.Период = ПродажиОбороты.ДатаЦены)
	|			И ПродажиОбороты.Характеристика = ЦеныНоменклатуры.Характеристика
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЗатратыНаСубподряд КАК ВТЗатратыНаСубподряд
	|		ПО ПродажиОбороты.ЗаказПокупателя = ВТЗатратыНаСубподряд.ЗаказПокупателя
	|
	|СГРУППИРОВАТЬ ПО
	|	ПродажиОбороты.Ответственный,
	|	ПродажиОбороты.Характеристика,
	|	ПродажиОбороты.Контрагент,
	|	ПродажиОбороты.ЗаказПокупателя,
	|	ПродажиОбороты.Номенклатура,
	|	ПродажиОбороты.Количество,
	|	ПродажиОбороты.Период,
	|	ПродажиОбороты.Выручка,
	|	ЦеныНоменклатуры.Цена,
	|	ПродажиОбороты.ДатаЦены,
	|	ЦеныНоменклатуры.Цена * ПродажиОбороты.Количество,
	|	ВТЗатратыНаСубподряд.Сумма
	|ИТОГИ
	|	СУММА(Количество),
	|	СУММА(Выручка),
	|	СУММА(Себестоимость),
	|	МАКСИМУМ(Субподряд)
	|ПО
	|	Ответственный,
	|	Контрагент,
	|	ЗаказПокупателя,
	|	Номенклатура";

Диаграмма в СКД

Приветствую! Возникла такая проблема. Делаю отчет в СКД, в выводе диаграмма. Есть подразделение у сотрудника и есть собственно сам сотрудник. Нужно вывести продажи сотрудника по подразделениям (это точки) в разрезе собственно сотрудников (серии). Но когда ...

Программное получение СочетаниеКлавиш

Дает возможность назначить нестандартные кнопки - например Enter(13) , Esc(27), Del(46) и т.д.
4 DiKSer 10 2
// Возвращает сочетание клавиш из скан-кода
//
// Параметры:
//  Код - Строка - скан-код клавиши
//  Alt - Число - факт нажатия клавиши alt
//  Control - Число - факт нажатия клавиши Control
//  Shift - Число - факт нажатия клавиши Shift
//
// Возвращаемое значение:
//   СочетаниеКлавиш - программное сочетание клавиш
//
Функция ПолучитьСочетаниеКлавишПоКоду(Код, Alt = 0, Control = 0, Shift = 0) Экспорт
    Возврат ЗначениеИзСтрокиВнутр("{""#"", 69cf4251-8759-11d5-bf7e-0050bae2bc79, 1,
        |{0, " + Формат(Код, "ЧН=0; ЧГ=0") + ", " + Формат(Alt * 16 + Control * 8 + Shift * 4, "ЧН=0; ЧГ=0") + "}
        |}");
КонецФункции

// https://filestore.community.support.microsoft.com/api/images/924f1958-8fe8-41a8-b34b-6018c6283a05 - скан-коды клавиатуры

Установить отбор пользовательских настроек динамического списка

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

//Если нет БСП то используем велосипед
//Вызывающий код
мФорма = ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
УстановитьПользовательскийОтборДинамическогоСписка(мФорма.Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно);
		

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

Отслеживание изменений отбора

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

Процедура ОбработкаОтбора(Элемент)
	
    // Элемент - то что изменилось в Отборе - например Период.ВидСравнения
    // тут можно обработать изменения отбора 
		
КонецПроцедуры