Все публикации

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

NuxtJS + 1C. Личный кабинет контрагента. Курс

Разработай мини-сайт на современном фреймворке NuxtJS для оформления заказов контрагентами!
FastCode 276 2 4 20
-40%

Выполнение функции произвольным кодом (Выполнить)

Блог Жёлтая тетрадь 📒 http://t.me/yellow_pad В 1С нет возможности выполнить произвольный код с возвратом результата. Можно результат вычисления произвольного кода присвоить переменной Результат и реализовать экспортную функцию с методом Выполнить.
builin 40 2 1
Функция ВычислитьФункцию(Знач ПроизвольныйКод) Экспорт
  
  Результат = Неопределено;
  
  Выполнить(ПроизвольныйКод);
  
  Если Результат = Неопределено Тогда
    ВызватьИсключение "Не присвоено значение результата (Результат = Неопределено).";
  КонецЕсли; 
  
  Возврат Результат;
  
КонецФункции

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

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

Упорядочивание (сортировка) массива

Метод не требует смены контекста исполнения кода (подходит для размещения в клиент-серверном общем модуле).
John Doe 8 1
// Сортирует массив через методы объекта "СписокЗначений".
// Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.
//
// Параметры:
//  МассивДляУпорядочивания - Массив - Массив элементов, которые необходимо упорядочить (по значению или по представлению).
//                                     Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.
//  ПорядокСортировки - Строка - "Возр" или "Убыв".
//  СортироватьПоЗначению - Булево - Если Ложь, то сортировать по представлению.
// 
// Возвращаемое значение:
//  Массив - упорядоченный массив.
//
Функция УпорядочитьМассив(МассивДляУпорядочивания, Знач ПорядокСортировки = "Возр", Знач СортироватьПоЗначению = Истина) Экспорт

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

КонецФункции

ВЫБРАТЬ ПЕРВЫЕ для СКД

Процедура подставляет в последний пакет набора данных запроса конструкцию ВЫБРАТЬ ПЕРВЫЕ N
Источник: https://t.me/JuniorOneS
SeiOkami 36 2 2
// Подставляет в последний пакет набора данных запроса конструкцию ВЫБРАТЬ ПЕРВЫЕ N
//
// Параметры:
//  НаборДанных  - НаборДанныхЗапросСхемыКомпоновкиДанных - Набор данных СКД
//  КоличествоПолучаемыхЗаписей  - Число, Неопределено - Количество получаемых записей. 
//		Соответствует ключевому слову ПЕРВЫЕ языка запросов.
//		Если Неопределено, ограничение на количество выбираемых записей отсутствует.
//
Процедура УстановитьКоличествоПолучаемыхЗаписейНабораДанных(НаборДанных, КоличествоПолучаемыхЗаписей) Экспорт
	
	СхемаЗапроса = Новый СхемаЗапроса();
	СхемаЗапроса.РежимКомпоновкиДанных = Истина;
	СхемаЗапроса.УстановитьТекстЗапроса(НаборДанных.Запрос);
	ПоследнийПакет = СхемаЗапроса.ПакетЗапросов.Получить(СхемаЗапроса.ПакетЗапросов.Количество()-1);
	ПоследнийПакет.Операторы.Получить(0).КоличествоПолучаемыхЗаписей = КоличествоПолучаемыхЗаписей;
	
	НаборДанных.Запрос = СхемаЗапроса.ПолучитьТекстЗапроса();
		
КонецПроцедуры

Разные параметры ориентации для разных страниц печатной формы в БСП

Блог Жёлтая тетрадь 📒 http://t.me/yellow_pad Передача нескольких табличных документов в подсистему печати для вывода пакета документов с индивидуальными параметрами печати для каждой страницы печатной формы.
builin 40 2 1
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
	
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ext_ТОРГ2_АктОРасхожденияхПослеПриемки");
	Если ПечатнаяФорма <> Неопределено Тогда
		МассивТабличныхДокументов = СформироватьПечатнуюФормуТорг2(СтруктураТипов, ОбъектыПечати, ПараметрыВывода);
        //в массив возвращаем столько частей печатной формы, сколько нужно, задав для каждой ориентацию и масштаб
		Для К = 1 По МассивТабличныхДокументов.Количество() Цикл
			НоваяСтрока = КоллекцияПечатныхФорм.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, ПечатнаяФорма);
			НоваяСтрока.ТабличныйДокумент = МассивТабличныхДокументов[К-1];
			НоваяСтрока.ИмяМакета = НоваяСтрока.ИмяМакета + К;
			НоваяСтрока.ИмяВРЕГ = НоваяСтрока.ИмяВРЕГ + К;
			НоваяСтрока.СинонимМакета = СтрШаблон(НСтр("ru = 'ТОРГ-2 [%1 из %2]'"), К, МассивТабличныхДокументов.Количество());
		КонецЦикла; 
		КоллекцияПечатныхФорм.Удалить(ПечатнаяФорма);
	КонецЕсли;
	
	ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);

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

RegEx1CAddin - внешняя компонента для выполнения регулярных выражений RegEx в 1С

Внешняя Native API компонента для выполнения регулярных выражений на платформе 1С:Предприятие 8. Поддерживает Windows, Linux, MacOS, Android, Chrome
FastCode 276 2 4 20
Бесплатно

Опциональное выполнение метода в фоновом задании (БСП)

Блог Жёлтая тетрадь 📒 http://t.me/yellow_pad Опциональное выполнение метода в фоне средствами БСП
Источник: http://t.me/yellow_pad
builin 40 2 1
Процедура ВыполнитьВыгрузку(ВидВыгрузки, МестоВызова, ИсточникСсылка, ВФоне = Ложь, Отказ = Ложь) Экспорт
	
	Если НЕ ЗначениеЗаполнено(ИсточникСсылка) Тогда
		Возврат;
	КонецЕсли;
	
	Если ВФоне Тогда
		
		ДлительныеОперации.ВыполнитьПроцедуру(, "БизнесПроцессыСлужебный.ПолучитьВыборкуИВыгрузить", ВидВыгрузки, МестоВызова, ИсточникСсылка);
		
	Иначе
		
		БизнесПроцессыСлужебный.ПолучитьВыборкуИВыгрузить(ВидВыгрузки, МестоВызова, ИсточникСсылка);
		
	КонецЕсли; 
	
КонецПроцедуры

Пример использования регулярных выражений RegExp в 1С

Парсинг строки с помощью RegExp. Вариант через COMОбъект.
bolsun 116 1 2 7
//Получить из строки значение productId в формате числа
ПроверяемаяСтрока = "?productId=3453466&vendorId=02";

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Истина;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;

// \d+ - последовательность чисел, не меньше 1 символа
// скобки - захватить значение в отдельную группу
RegExp.Pattern = "productId=(\d+)";

Matches=RegExp.Execute(ПроверяемаяСтрока);

Если Matches.Count > 0 Тогда
	SubMatch = Matches.Item(0);
	//Получаем значение первой захваченной группы
	productId= SubMatch.SubMatches.Item(0);
	Сообщить("productId: " + productId);
КонецЕсли;

Получить каталог "Мои документы"

miha 30 2
	ИмяОбработки = ЭтотОбъект.Метаданные().ПолноеИмя();
	КаталогСохранения = ХранилищеНастроекДанныхФорм.Загрузить(ИмяОбработки, "КаталогСохранения");
	Если ПустаяСтрока(КаталогСохранения) Тогда
		WSS = Новый COMОбъект("WScript.Shell");
		КаталогСохранения = WSS.SpecialFolders().Item("MyDocuments");
		WSS = Неопределено;
	КонецЕсли; 

Отбор при начале выбора

Блог Жёлтая тетрадь 📒 http://t.me/yellow_pad Читатель блога I N поделился найденным в интернете полезным кодом для установки произвольного отбора формы выбора при начале выбора из элемента формы (без отдельной кнопки и команды). НаКлиенте Процедура Магази...
builin 40 2 1

Удалить недоступные отборы

Рекурсивно удаляет недоступные элементы из коллекции отборов Написан для статьи "Как ограничить поля отбора в динамическом списке и ничего не сломать" https://infostart.ru/public/1226445/?ref=1159 Пример использования для ДС: Список.УстановитьОграниченияИспользованияВОтборе(ЗапрещенныеВОтбореПоля); УдалитьНедоступныеОтборы(Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы);
Источник: https://t.me/JuniorOneS
SeiOkami 36 2 2
// Рекурсивно удаляет недоступные элементы из коллекции отборов
//
// Написан для статьи Как ограничить поля отбора в динамическом списке и ничего не сломать: 
// https://infostart.ru/public/1226445/?ref=1159
//
// Пример использования для ДС:
//    Список.УстановитьОграниченияИспользованияВОтборе(ЗапрещенныеВОтбореПоля);
//    УдалитьНедоступныеОтборы(Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы);
//
// Параметры:
//  Коллекция  - Массив, КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных, КоллекцияЭлементовОтбораКомпоновкиДанных - Коллекция элементов отбора.
//  ДоступныеПоляОтбора  - Неопределено, ДоступныеПоляКомпоновкиДанных - Список доступных полей отбора. При первоначальном вызове не передаётся.
//
Процедура УдалитьНедоступныеОтборы(Коллекция, ДоступныеПоляОтбора = Неопределено)
	
	УдаляемыеЭлементы = Новый Массив;
	
	Для Каждого ТекущиеДанные Из Коллекция Цикл
		
		Если ТипЗнч(ТекущиеДанные) = Тип("ОтборКомпоновкиДанных") Тогда
			
			УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ТекущиеДанные.ДоступныеПоляОтбора);
			
		ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			
			УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ДоступныеПоляОтбора);
			                 
		ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			
			Если НЕ ТекущиеДанные.Использование Тогда
				Продолжить;
			КонецЕсли;
			
			Для Каждого ИмяСвойства Из СтрРазделить("ЛевоеЗначение,ПравоеЗначение",",") Цикл
				
				ТекущееПоле = ТекущиеДанные[ИмяСвойства];
				Если ТипЗнч(ТекущееПоле) = Тип("ПолеКомпоновкиДанных") 
					И ДоступныеПоляОтбора.НайтиПоле(ТекущееПоле) = Неопределено Тогда
					
					УдаляемыеЭлементы.Добавить(ТекущиеДанные);
					Прервать;
					
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл
		Коллекция.Удалить(УдаляемыйЭлемент);
	КонецЦикла;
	
КонецПроцедуры

Быстрое удаление строк в таблице значений

Быстрее всего удаляются строки путем копирования оставшихся строк по условию, обратному к условию удаления:

Автор: ildarovich

FastCode 276 2 4 20
РабочаяТаблица = РабочаяТаблица.Скопировать(Новый Структура("КУдалению", Ложь))

Получить всех родителей элемента

Возвращает всех родителей элемента, согласно рекомендациям на ИТС: "Получение всех родителей элемента" (https://its.1c.ru/db/metod8dev/content/2659/hdoc)
Источник: https://t.me/JuniorOneS
SeiOkami 36 2 2
// Возвращает всех родителей элемента, согласно рекомендациям на ИТС:
// "Получение всех родителей элемента" (https://its.1c.ru/db/metod8dev/content/2659/hdoc)
//
// Параметры:
//  СсылкаНаЭлемент  - СправочникСсылка, ПланВидовХарактеристикСсылка - Ссылка на элемент, родителей которого нужно найти
//  КоличествоВыбираемыхЗаПорцию  - Число - Количество выбираемых родителей за одно выполнение запроса. 
//		Используется минимальное число из переданного и ограничения количества уровней в конфигураторе
//
// Возвращаемое значение:
//   Массив[СправочникСсылка, ПланВидовХарактеристикСсылка] - массив с родителями элемента
//
&НаСервереБезКонтекста
Функция РодителиЭлемента(СсылкаНаЭлемент, Знач КоличествоВыбираемыхЗаПорцию = 5)
	
	РодителиЭлемента = Новый Массив;
	Если НЕ ЗначениеЗаполнено(СсылкаНаЭлемент) Тогда
		Возврат РодителиЭлемента;
	КонецЕсли;
	
	МетаданныеЭлемента = СсылкаНаЭлемент.Метаданные();
	Если МетаданныеЭлемента.ОграничиватьКоличествоУровней Тогда
		КоличествоВыбираемыхЗаПорцию = Мин(КоличествоВыбираемыхЗаПорцию, МетаданныеЭлемента.КоличествоУровней);
	КонецЕсли;
	
	ВыбираемыеПоля = Новый Массив;
	ВыбираемоеПоле = "Родитель";
	Для НомерРодителя = 1 По КоличествоВыбираемыхЗаПорцию Цикл
		ВыбираемыеПоля.Добавить(ВыбираемоеПоле);
		ВыбираемоеПоле = ВыбираемоеПоле + ".Родитель";
	КонецЦикла;
	
	ТекстЗапроса = "ВЫБРАТЬ %1 ИЗ %2 ГДЕ Ссылка = &ТекущийЭлемент";
	ТекстЗапроса = СтрШаблон(ТекстЗапроса, СтрСоединить(ВыбираемыеПоля, ","), МетаданныеЭлемента.ПолноеИмя());
	Запрос = Новый Запрос(ТекстЗапроса);
	
	ТекущийЭлемент = СсылкаНаЭлемент;
	Пока ЗначениеЗаполнено(ТекущийЭлемент) Цикл
		
		Запрос.УстановитьПараметр("ТекущийЭлемент", ТекущийЭлемент); 
		Результат = Запрос.Выполнить(); 
		Если Результат.Пустой() Тогда 
			Прервать; 
		КонецЕсли; 
		
		Выборка = Результат.Выбрать(); 
		Выборка.Следующий(); 
		Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл 
			ТекущийЭлемент = Выборка[НомерКолонки]; 
			Если ЗначениеЗаполнено(ТекущийЭлемент) Тогда 
				РодителиЭлемента.Добавить(ТекущийЭлемент);
			Иначе 
				Прервать;
			КонецЕсли; 
		КонецЦикла; 
		
	КонецЦикла;
	
	Возврат РодителиЭлемента;
	
КонецФункции

Обновить список документов - аналог кнопки F5

Автор: HostHost

FastCode 276 2 4 20
ОповеститьОбИзменении(Тип("ДокументСсылка.РаботаВВыходныеИПраздничныеДни"));

Удаление повторяющихся символов в начале или конце текста

Функции СокрЛ, СокрП, СокрЛП удаляют любое количество пробелов в начале или конце строки. Этим можно воспользоваться, чтобы удалить другие начальные или конечные повторяющиеся символы, заменив их на пробел, а затем выполнив обратную замену.

Автор: ildarovich

FastCode 276 2 4 20
//Например, чтобы удалить любое количество точек в конце строки, можно воспользоваться выражением:
СтрЗаменить(СокрП(СтрЗаменить(ИсходнаяСтрока, ".", " ")), " ", ".")

//Правда, если исходная строка изначально содержит пробелы, то результат будет неправильным. В этом случае предварительно требуется заменить пробелы каким-либо редким сочетанием символов, а после преобразования выполнить обратную замену.

СтрЗаменить(СтрЗаменить(СокрП(СтрЗаменить(СтрЗаменить(ИсходнаяСтрока, " ", Символы.НПП), ".", " ")), " ", "."), Символы.НПП, " ")

Подсистема "Инструменты разработчика" для 1С 8.2 и 8.3

Продукт представляет собой интегрированный в подсистему набор мощных инструментов разработчика на платформе 1С 8. Почти все они выполнены на обычных формах и потому работают только в толстых клиентах. Подсистема получила награду "Лучшая разработка" на конференции Infostart Event Evolution 2013.
tormozit
Бесплатно

Определение, вместится ли текст в ячейку табличного документа

Функция для определения вместимости текста в ячейку табличного документа
ChOP 50 1 5
//Функция для определения вместится ли текст в ячейку:
//
// Параметры:
//  пОбласть -Область табличного документа- Область табличного документа, которую надо проверить на вместимости.
//	"пОбласть = пТабДок.Области.ТекстЗаготовки;". "ТекстЗаготовки" имя ячейки.
//
//  Для возможности использования этого метода необходимо соблюдать следующие условия:
// 
//	пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
//  "пТабДок = Макет.ПолучитьОбласть("ТекстЗаготовки");"
//
//  пТекст - Строка - Проверяемый текст.
//
//	1. Необходимо как-нибудь назвать область.
//	2. Заполнение области = Текст, а не Параметр или Шаблон.
//	Во всяком случае, я ничего простого не придумал. И так как жизнь это усложняет не сильно не стал заморачиваться из-за этого.
//	3. Размещение текста (Параметр ячейки) = Перенос. Вот это нужно обязательно! Размещение текста програмно поставить можно, но эффект от изменения,
//	насколько я понял, появляется только после отображения табличного документа с этой ячейкой.
//
// Возвращаемое значение:
//  Булево.
//
Функция ТекстУмещаетсяВЯчейке(пОбласть, пТабДок, пТекст) Экспорт
	
	ВысотаДо = ВысотаОбластиВмм(пОбласть, пТабДок);
	
	// Скопируем область в новый табличный документ.
	// И там уже будем играть с её свойствами.
	ВремТабДок = Новый ТабличныйДокумент;
	ВремТабДок.Вывести(пТабДок);
	ВремОбласть = ВремТабДок.Область(пОбласть.Имя);
	
	ВремОбласть.АвтоВысотаСтроки = Истина;
	ВремОбласть.ВысотаСтроки     = 0;
	
	ВремОбласть.Текст = пТекст + "Щ"; // Для исключения ситуаций вида "на грани переноса"
	ВысотаПосле       = ВысотаОбластиВмм(ВремОбласть, ВремТабДок);
	
	Возврат ВысотаДо >= ВысотаПосле;
	
КонецФункции


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

1С RabbitMQ. Вебинар от Алексея Лустина

Научись создавать систему обмена сообщениями 1С RabbitMQ за 5 часов
FastCode 276 2 4 20
-10%

1С + Kafka. Вебинар от Алексея Лустина

Научись создавать систему обмена сообщениями для 1С на Apache Kafka за 5 часов
FastCode 276 2 4 20
-10%

Актуальные символы препроцессора

Возвращает массив символов препроцессора актуальных при вызове. Функция может быть полезна в процессе изучения/освоения особенностей клиент-серверного взаимодействия. <Символ препроцессора> = {НаКлиенте | НаСервере | ТолстыйКлиентОбычноеПриложение | ТолстыйКлиентУправляемоеПриложение | Клиент | Сервер | ВнешнееСоединение }
SDV 90 3 11
&НаКлиентеНаСервере
Функция АктуальныеСимволыПрепроцессора() Экспорт
    
    Результат = новый Массив;
    
    #Если НаКлиенте Тогда
        Результат.Добавить("НаКлиенте");
    #КонецЕсли
    
    #Если НаСервере Тогда
        Результат.Добавить("НаСервере");
    #КонецЕсли
    
    #Если Клиент Тогда
        Результат.Добавить("Клиент");
    #КонецЕсли
    
    #Если Сервер Тогда
        Результат.Добавить("Сервер");
    #КонецЕсли
    
    #Если МобильноеПриложениеКлиент Тогда
        Результат.Добавить("МобильноеПриложениеКлиент");
    #КонецЕсли
    
    #Если МобильноеПриложениеСервер Тогда
        Результат.Добавить("МобильноеПриложениеСервер");
    #КонецЕсли
    
    #Если МобильныйКлиент Тогда
        Результат.Добавить("МобильныйКлиент");
    #КонецЕсли
    
    #Если ТолстыйКлиентОбычноеПриложение Тогда
        Результат.Добавить("ТолстыйКлиентОбычноеПриложение");
    #КонецЕсли
        
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Результат.Добавить("ТолстыйКлиентУправляемоеПриложение");
    #КонецЕсли
    
    #Если ВнешнееСоединение Тогда
        Результат.Добавить("ВнешнееСоединение");
    #КонецЕсли
    
    #Если ТонкийКлиент  Тогда
        Результат.Добавить("ТонкийКлиент");
    #КонецЕсли
    
    #Если ВебКлиент  Тогда
        Результат.Добавить("ВебКлиент");
    #КонецЕсли
    
    Возврат Результат;

КонецФункции