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


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

Пауза, ожидание в коде

Пауза выполнения кода

Пауза ожидание таймер

Процедура Ожидание(МСекунды)
	Перем Таймер;
	Таймер     = ТекущаяУниверсальнаяДатаВМиллисекундах() + МСекунды;
	Пока Таймер > ТекущаяУниверсальнаяДатаВМиллисекундах() Цикл
		Состояние(ОКР((Таймер-ТекущаяУниверсальнаяДатаВМиллисекундах())/1000),1);
	КонецЦикла;
КонецПроцедуры
Комментарии: 1

Преобразование ЧтениеJSON в Соответствие

Преобразует ЧтениеJSON любой глубины в Соответствие. Пример вызова: //JSONТекст - исходный текст в формате JSON Результат = Неопределено; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(JSONТекст); ОбработатьJSON(ЧтениеJSON, Результат); //Здесь на выходе из процедуры Результат = Соответствие;

ЧтениеJSON JSON Соответствие.

&НаСервере
Процедура ОбработатьJSON(ЧтениеJSON, Результат)
	
	ИмяСвойства = Неопределено;
	
	Пока ЧтениеJSON.Прочитать() Цикл
		TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
		
		Если TипJSON = ТипЗначенияJSON.НачалоОбъекта 
			ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
			НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);
			
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(НовыйОбъект);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда
				Результат.Вставить(ИмяСвойства, НовыйОбъект);
			КонецЕсли;
			
			ОбработатьJSON(ЧтениеJSON, НовыйОбъект);
			
			Если Результат = Неопределено Тогда
				Результат = НовыйОбъект;
			КонецЕсли;
		ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
			ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
		ИначеЕсли TипJSON = ТипЗначенияJSON.Число 
			ИЛИ TипJSON = ТипЗначенияJSON.Строка 
			ИЛИ TипJSON = ТипЗначенияJSON.Булево 
			ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(ЧтениеJSON.ТекущееЗначение);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") Тогда
				Результат.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
			КонецЕсли;
		Иначе
			Возврат;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Добавить комментарий

Последняя строка таблицы на одной странице вместе с подвалом

ВместеСоСледующим

Добавил: Dmitry Zhurbenko
 //После цикла вывода строк

ТабДок.Область(ТабДок.ВысотаТаблицы, ,ТабДок.ВысотаТаблицы,).ВместеСоСледующим = Истина;
Комментарии: 1

Отладка внешних печатных форм

Отладка внешних печатных форм

печатная форма отладка

Адрес = "C:\Эля\кИТ_ВнешняяРеализацияТоваровУслуг.epf";
Обр = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
Обр.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Возврат;
Добавить комментарий

Чтение файлов Exсel в таблицу значений (автоматическое наименование столбцов)

Функция считывает содержимое страницы файла Exсel в таблицу значений, автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на "".

Таблица значений чтение Excel Excel

&НаСервере
Функция ПодготовитьТаблицуСДанными(ФайлАдресВХранилище)
	
	ИмяФайлаСервер = ПолучитьИмяВременногоФайла(".xlsx");
	ФайлИмпорта = ПолучитьИзВременногоХранилища(ФайлАдресВХранилище);
	ФайлИмпорта.Записать(ИмяФайлаСервер);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Попытка
		ТабличныйДокумент.Прочитать(ИмяФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;	
	
	ПЗ = Новый ПостроительЗапроса;
	ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
	ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
	ПЗ.ЗаполнитьНастройки();
	ПЗ.Выполнить();
	
	ТаблицаПромежуточныхДанных = ПЗ.Результат.Выгрузить();
	
	Возврат	ТаблицаПромежуточныхДанных;
	
КонецФункции
Комментарии: 1

Отбор по таблице значений

Отбор строк по таблице значений

отбор ТаблицаЗначений ТЗ таблица значений

СтруктураОтбора = Новый Структура("Номенклатура,ХарактеристикаНоменклатуры", ЗначениеОтбора.Номенклатура, ЗначениеОтбора.ХарактеристикаНоменклатуры);
РезультатОтбора = ТаблицаЗначений.НайтиСтроки(СтруктураОтбора);
//Если РезультатОтбора.Количество() > 0 Тогда
//	СтрокаОтбора = РезультатОтбора[0];
//КонецЕсли;
Для каждого СтрокаОтбора Из РезультатОтбора Цикл
	
КонецЦикла;
Добавить комментарий

Прибавить к дате день

Прибавить, добавить, дата, день

Дата

Добавил: Александр Near IT
&НаСервереБезКонтекста
Функция ПрибавитьКДатеДень(Дата, КоличествоДней = 1)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("КоличествоДней", КоличествоДней);
	Запрос.Текст =
		"ВЫБРАТЬ
		|	ДОБАВИТЬКДАТЕ(&Дата, ДЕНЬ, &КоличествоДней) КАК Дата";
		
	Результат = Запрос.Выполнить().Выбрать();
	Результат.Следующий();
	Возврат  Результат.Дата;
	
КонецФункции
Комментарии: 1

Чтение XML файла

Чтение XML файла по объектно. (экономим память, не обрабатываем каждый узел вручную)

XML XDTO ЧтениеXML

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(ИмяФайлаНаСервере);
	Пока ЧтениеXML.Прочитать() Цикл
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			Если ЧтениеXML.Имя = "Товар" Тогда // Считываем номенклатуру в XDTO
				ДанныеТовараXML = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
				НоменклатураОбъект = Справочники.Номенклатура.СоздатьОбъект();
				//  Заполняем реквизиты номенклатруы данными объекта XDTO 
				НоменклатураОбъект.Записать();
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = "Создана:" + НоменклатураОбъект.Наименование;
				Сообщение.Сообщить();
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	ЧтениеXML.Закрыть();
Добавить комментарий

Получение данных динамического списка

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

СКД динамический список

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

Таблица значений

обход таблицы и работа с ней по условию

ТЗ таблица значений

//Создаем таблицу значений
	ТабЗнч = Новый ТаблицаЗначений;
	ТабЗнч.Колонки.Добавить("Наименование");
	ТабЗнч.Колонки.Добавить("Значение");
	
	//Заполняем ТЗ
	Для н=1 По 100 Цикл
		
		СтрокаТЗ = ТабЗнч.Добавить();
		СтрокаТЗ.Наименование = "Н"+н;
		СтрокаТЗ.Значение = "К"+н;
		
		//Здесь каждый 10-й элемент делаем дубляжом
		Если (н%10)=0 Тогда
			СтрокаТЗ2 = ТабЗнч.Добавить();
			СтрокаТЗ2.Наименование = "Н"+н;
			СтрокаТЗ2.Значение = "К"+н;
		КонецЕсли;
		
	КонецЦикла;
	
	//Перебираем заполненное ТЗ
	Для й=0 По ТабЗнч.Количество()-1 Цикл
		
		//Не даем провалиться индексу за грани
		Если й>ТабЗнч.Количество()-1 Тогда
			
			Прервать;
			
		КонецЕсли;
		
		//Пропускаем первый элемент
		Если й=0 Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		//Ну и собственно сравниваем значения текущего с предыдущем
		Если ТабЗнч[й].Наименование = ТабЗнч[й-1].Наименование Тогда
			
			ТабЗнч[й-1].Значение = ТабЗнч[й-1].Значение + ", " + ТабЗнч[й].Значение;
			
			ТабЗнч.Удалить(й);
			
		КонецЕсли;
		
	КонецЦикла;
Добавить комментарий

TurboConf

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

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

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