Шаблоны кода 1С


Добавить новый Назад

Инициализация компоновщика настроек, упр формы

Инициализация компоновщика настроек, упр формы, обработка, СКД

СКД УФ

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

Количество дублей элементов справочника

Запрос позволяет получить количество элементов с разными ссылками, но одинаковым наименованием

запрос дубли

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

Распределить Сумму Пропорционально Коэффициентам

Функция РаспределитьСуммуПропорциональноКоэффициентам

Распределить Пропорция Коэффициент

// Выполняет пропорциональное распределение суммы в соответствии
// с заданными коэффициентами распределения.
//
// Параметры:
//  РаспределяемаяСумма - Число - сумма, которую надо распределить;
//  МассивКоэффициентов - Массив - коэффициенты распределения;
//  Точность - Число - точность округления при распределении. Необязателен.
//
// Возвращаемое значение:
//  Массив - массив размерностью равный массиву коэффициентов, содержит
//           суммы в соответствии с весом коэффициента (из массива коэффициентов).
//           В случае если распределить не удалось (сумма = 0, кол-во коэффициентов = 0,
//           или суммарный вес коэффициентов = 0), тогда возвращается значение Неопределено.
//

Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, Коэффициенты, Знач Точность = 2) Экспорт

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

часть строки

Функция ЧастьСтроки позволяет получить подстрокй из строки с разделителями по номеруу или "последняя"

ЧастьСтроки часть строки разделитель

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

Связанные документы

Поиск по критериям отбора связанных документов по ссылке ВыбДок - документ для которого ищем связные

Связанные документы критерии отбора

СвязанныеДокументы = КритерииОтбора.СвязанныеДокументы.Найти(ВыбДок);
Для Каждого ТекСвязанныйДокумент из СвязанныеДокументы Цикл
Сообщить(ТекСвязанныйДокумент);
КонецЦикла;
Добавить комментарий

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

Работа с выделенными строками

Строки выделенные

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

Соединение и запрос данных из другой базы 1с

делаем запрос в УТ из сторонней базы для поиска документа

V82.COMConnector

//Подключение к внешней базе
&НаСервере
 Функция ПодключитьВнешнийИсточник(СтрокаСоединения, ОбъектПодключения="V82.COMConnector") 
	 Попытка
		 Connector = Новый COMОбъект("V82.COMConnector");
		 COM = Connector.connect(СтрокаСоединения);
		 Возврат COM;
	 Исключение
		  Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
		  Возврат Неопределено;
	 КонецПопытки;
	 
 КонецФункции	


&НаКлиенте
Процедура Подключение(Команда)
	ПодключениеСервер();
КонецПроцедуры


//Подключение и Выгрузка данных из сторонней базы
&НаСервере
Процедура ПодключениеСервер()
	 Соединение = ПодключитьВнешнийИсточник("Srvr=""ИмяСервера"";Ref=""ИмяБазы"";Usr=""Пользователь"";Pwd=""Пароль"";");
	 Запрос = Соединение.NewObject("Запрос");
	 Запрос.Текст = "ВЫБРАТЬ
		|	РеализацияТоваровУслуг.Номер
		|		ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|		ГДЕ
		|	РеализацияТоваровУслуг.Номер =  &Номер";
	Запрос.УстановитьПараметр("Номер",Номер);
	РезультатЗапроса = Запрос.Выполнить().Выгрузить(); //Получили COM объект
	Преобразование = ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(РезультатЗапроса));  //преобразовали COM объект

	Для каждого стр из Преобразование Цикл
		Сообщить(стр.номер);
	КонецЦикла;
		
КонецПроцедуры
Добавить комментарий

Демонстрация асинхр. вызова 01

&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
    ОбратныйВызов = Новый ОписаниеОповещения("ПредупреждениеЗавершение", ЭтотОбъект);
    ПоказатьПредупреждение(ОбратныйВызов, "Закрытие формы обрабатывается отдельно");
КонецПроцедуры
&НаКлиенте
Процедура ПредупреждениеЗавершение(ДополнительныеПараметры) Экспорт
    // какие-то действия
КонецПроцедуры
Добавить комментарий

Ограничение, одним видом документов, запроса из регистра

" ВЫБРАТЬ
|	ТоварыОрганизаций.Номенклатура,
|	ТоварыОрганизаций.СерияНоменклатуры,
|	ТоварыОрганизаций.Склад,
|	ТоварыОрганизаций.Количество,
|	ТоварыОрганизаций.Организация,
|	ТоварыОрганизаций.Регистратор
|ИЗ
|	РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
|ГДЕ
|	ТоварыОрганизаций.Регистратор ССЫЛКА Документ.ТребованиеНакладная";
Добавить комментарий

Получить менеджер объекта по переданной ссылке

// Возвращает менеджер объекта по переданной ссылке.
// Не обрабатываются точки маршрутов бизнес-процессов.
Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт
	
	ИмяОбъекта = Ссылка.Метаданные().Имя;
	
	ТипСсылки = ТипЗнч(Ссылка);
	
	Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат Справочники[ИмяОбъекта];
		
	ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат Документы[ИмяОбъекта];
		
	ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат БизнесПроцессы[ИмяОбъекта];
		
	ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат ПланыВидовХарактеристик[ИмяОбъекта];
		
	ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат ПланыСчетов[ИмяОбъекта];
		
	ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат ПланыВидовРасчета[ИмяОбъекта];
		
	ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат Задачи[ИмяОбъекта];
		
	ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат ПланыОбмена[ИмяОбъекта];
		
	ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		
		Возврат Перечисления[ИмяОбъекта];
		
	Иначе	
		
		Возврат НеОпределено;
		
	КонецЕсли; 
	
КонецФункции
Добавить комментарий

TurboConf

Удобный поиск шаблонов кода

прямо в Конфигураторе

Узнать подробнее