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


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

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

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

СКД УФ

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

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

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

запрос дубли

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

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

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

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

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

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

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

часть строки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Получение сообщений для бота Telegram

Получение сообщений для бота Telegram

HTTPСоединение Telegram JSON ЧтениеJSON ПрочитатьJSON

Добавил: stawen
Запрос=Новый HTTPЗапрос();
Запрос.АдресРесурса=Константы.token.Получить()+"/getUpdates";
Запрос.Заголовки=Новый Соответствие();

Соединение=Новый HTTPСоединение("api.telegram.org",,,,,5,Новый ЗащищенноеСоединениеOpenSSL);
update_id=Константы.update_id.Получить();
Если ЗначениеЗаполнено(update_id) тогда
	ТекстЗапроса="&offset="+Формат(update_id+1,"ЧГ=");
	Запрос.Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded");
	Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
	Ответ=Соединение.ОтправитьДляОбработки(Запрос);//POST
	
	//то же самое GET-запросом
	//Запрос.АдресРесурса=Запрос.АдресРесурса+"?offset="+Формат(update_id+1,"ЧГ=");
	//Ответ=Соединение.Получить(Запрос);//GET
Иначе
	Ответ=Соединение.Получить(Запрос);//GET
КонецЕсли;
КодСостояния=Ответ.КодСостояния;
СтрокаОтвета=Ответ.ПолучитьТелоКакСтроку();

Если КодСостояния=200 тогда
	ЧтениеОтвета=Новый ЧтениеJSON;
	ЧтениеОтвета.УстановитьСтроку(СтрокаОтвета);
	РезультатСтруктура=ПрочитатьJSON(ЧтениеОтвета);
	Если РезультатСтруктура.ok=Истина тогда
		Для сч=1 по РезультатСтруктура.result.Количество() цикл
			ОбъектUpdate=РезультатСтруктура.result[сч-1];
			Константы.update_id.Установить(ОбъектUpdate.update_id);
			СтруктураMessage=ОбъектUpdate.message;
			//СтруктураMessage это обычная Структура
			//описание объекта Message тут https://core.telegram.org/bots/api#message
		КонецЦикла;
	КонецЕсли;
Иначе
	Сообщить("КодСостояния "+КодСостояния);
	Сообщить(СтрокаОтвета);
КонецЕсли;

TurboConf

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

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

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