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


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

Обход иерархии справочника 2

Иерархия добавим в массив

иерархия Выборка 8.3

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

		Выборка = ЗапросПодразделения.Выполнить().Выбрать();
		МассивРодителей = Новый Массив;
		Пока Выборка.Следующий() Цикл 
			
			Если Выборка.Ссылка.ЭтоГруппа Тогда
				МассивРодителей.Добавить(Выборка.Ссылка);
			КонецЕсли;	
		КонецЦикла;	
Возврат МассивРодителей
Комментарии: 1

Заполнение реквизитов формы из ТЧ

8.3 Работа с формой

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


&НаСервере
Процедура УстановитьЗначениеЭлемента(ИмяЭлемента,ЗначениеЭлемента)
	
	ПутьКДаннымЭлемента = ВернутьПутьКДаннымЭлемента(ИмяЭлемента);
	Если Лев(ПутьКДаннымЭлемента,7) = "Объект." Тогда
		
		ПутьКДаннымЭлемента = СтрЗаменить(ПутьКДаннымЭлемента,"Объект.","");
		Объект[ПутьКДаннымЭлемента] = ЗначениеЭлемента;
		
	Иначе
		
		ЭтаФорма[ПутьКДаннымЭлемента] = ЗначениеЭлемента;
		
	КонецЕсли;
	
КонецПроцедуры


&НаСервере
Процедура УстановитьЗначениеЭлементаТабличнойЧасти(ТЧИмя,ИмяЭлемента,ЗначениеЭлемента)

	ПутьКДаннымТЧ = ВернутьПутьКДаннымЭлемента(ТЧИмя);

	Если Лев(ПутьКДаннымТЧ,7) = "Объект." Тогда
		
		ПутьКДаннымТЧ = СтрЗаменить(ПутьКДаннымТЧ,"Объект.","");
		Если Объект[ПутьКДаннымТЧ].Количество() = 0 Тогда
			
			СтрокаТЧ = Объект[ПутьКДаннымТЧ].Добавить();
			СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
			
		Иначе
			
			СтрокаТЧ = Объект[ПутьКДаннымТЧ].Получить(0);
			СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
			
		КонецЕсли;
		
	Иначе
		
		Если ЭтаФорма[ПутьКДаннымТЧ].Количество() = 0 Тогда
			
			СтрокаТЧ = ЭтаФорма[ПутьКДаннымТЧ].Добавить();
			СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
			
		Иначе
			
			СтрокаТЧ = ЭтаФорма[ПутьКДаннымТЧ].Получить(0);
			СтрокаТЧ[ИмяЭлемента] = ЗначениеЭлемента;
			
		КонецЕсли;
		
	КонецЕсли;

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

&НаСервере
Функция ВернутьПутьКДаннымЭлемента(ИмяЭлемента)

	Возврат Элементы[ИмяЭлемента].ПутьКДанным;

КонецФункции 
Добавить комментарий

Подключение к Firebird

Firebird

Firebird FB SQL

	Если ЭлементыФормы.ФайлИмпорта.Значение = "" Тогда
		Предупреждение("Неуказан файл");
		Возврат;
	КонецЕсли;
	СтрокаПодключения =  "Driver=Firebird/InterBase(r) driver;" ;
	СтрокаПодключения = СтрокаПодключения + "Dbname=Localhost:"+ ЭлементыФормы.ФайлИмпорта.Значение + ";";
	СтрокаПодключения = СтрокаПодключения + "UID=SYSDBA;PWD=masterkey;CHARSET=WIN1251";		
	// Подключаемся к базе данных 	
	Connection = Новый COMОбъект("ADODB.Connection");
	Connection.ConnectionTimeout = 15; 
	Connection.CursorLocation = 3;
	Connection.ConnectionString = СтрокаПодключения; 
	Connection.Open();
	Сообщить("Соединение успешно уставнолено !!!");
Комментарии: 1

Вывод данных СКД в таблицу значений (дерево)

Вывод данных СКД в таблицу значений (дерево)

СКД

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

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

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

СКД

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

Вывод данных СКД в табличный документ

Вывод данных СКД в табличный документ

СКД

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

Открыть отчет с пользовательскими настройками

УФ СКД Отчет

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

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

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

СКД УФ

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

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

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

запрос дубли

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

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

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

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

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

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

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

TurboConf

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

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

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