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

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

Запрос 1С

Здравствуйте, изучаю 1С и получил задание, разработать отчет, который выводит остатки по складам, + две колонки в конце, объем закупок и объем продаж по выбранному складу. Я в запросах новичок, но знаю про соединения, функции некоторые. То есть я могу выво...

Получить данные временной таблицы

При добавлении данной функции в общий модуль, позволяет быстро и без внесения изменений в код получать данные из временных таблиц в запросе. Используется в случае, если МенеджерВременныхТаблиц = Неопределенно. Доступна с версии 8.3.8
ChOP 50 1 5
//Функция возвращает содержимое временной таблицы в запросе по индексу
//
// Параметры:
//  Запрос - Запрос - исполняемый запрос
//  ИндексПакета - Число – индекс временной таблицы
//
// Возвращаемое значение: 
//  - Таблица значений - таблица значений с содержимым временной таблицы.
// 
Функция ПолучитьДанныеВременнойТаблицы(Запрос, ИндексПакета) Экспорт
	Возврат Запрос.ВыполнитьПакетСПромежуточнымиДанными()[ИндексПакета].Выгрузить();
КонецФункции

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз Промо

Быстрое и надежное обновление файловых и серверных баз, защита от шифровальщиков, автоматическое обновление доработанных конфигураций и расширений, а также многое другое.
bolsun
950 руб.

Шпаргалка по горячим клавишам для разработчика 1С

Сочетания клавиш.png
SeiOkami 183 3 2 3

Тикеты - система учета задач/Help Desk в 1С (интеграция с Trello, Мобильное приложение)

Система предназначена для учета задач в 1С как между пользователем — разработчиком, так и для внутренних нужд организаций в качестве обслуживания бизнес-процессов. Основное преимущество разработки - это подключение клиентской части в виде внешней обработки...
Бесплатно

Как узнать какая программа блокирует файл

Скачайте программу Process Explorer с сайта Microsoft Она бесплатная и не требует установки. ProcessExplorer Нажмите Ctrl+F или кнопку поиска на панели инструментов ProcessExplorer Введите имя заблокированного файла и нажмите Search. Будет найдет процесс, ...
bolsun 266 4 2 8

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

Возвращает результат анализа запроса и полученные данные. При этом переданный объект запроса не выполняется Удобно использовать в отладке для анализа запроса прямо с установленными параметрами и МВТ 1. Выбирает все данные из менеджера временных таблиц
SeiOkami 183 3 2 3

Добавить или обновить колонку

Добавляет колонку в таблицу значений Если колонка уже есть, то обновляет свойства Заголовок и Ширина Возвращает добавленную или найденную колонку
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Добавляет колонку в таблицу значений
// Если колонка уже есть, то обновляет свойства Заголовок и Ширина
//
// Параметры:
//  ТаблицаЗначений  - ТаблицаЗначений - Таблица значений, в которую нужно добавить колонку
//  Имя              - Строка - Имя колонки
//  Тип              - ОписаниеТипов, Неопределено - Объект, описывающий допустимые типы значений для колонки. 
//                 Если параметр не указан, в колонке можно будет хранить значение любого типа.
//  Заголовок        - Строка, Неопределено - Заголовок колонки таблицы значений.
//                 Используется при визуальном отображении таблицы значений.
//  Ширина           - Строка, Неопределено - Ширина колонки в символах.
//                 Используется при визуальном отображении таблицы значений.
//
// Возвращаемое значение:
//   КолонкаТаблицыЗначений - добавленная (или найденная) колонка 
//
Функция ДобавитьКолонкуБезопасно(ТаблицаЗначений, Имя, 
	Тип = Неопределено, Заголовок = Неопределено, Ширина = Неопределено) Экспорт
	
	Колонка	= ТаблицаЗначений.Колонки.Найти(Имя);
	
	Если Колонка = Неопределено Тогда
		Колонка	= ТаблицаЗначений.Колонки.Добавить(Имя, Тип);
	КонецЕсли;
	
	Если Заголовок <> Неопределено Тогда
		Колонка.Заголовок	= Заголовок;
	КонецЕсли;
	
	Если Ширина <> Неопределено Тогда
		Колонка.Ширина	= Ширина;
	КонецЕсли;
	
	Возврат Колонка;
	
КонецФункции

Добавить отбор построителя

Добавляет в построитель отбор по переданным параметрам
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Добавляет в построитель отбор по переданным параметрам
//
// Параметры:
//  Построитель      - ПостроительЗапроса, ПостроительОтчета - Построитель, в которой необходимо добавить элемент отбора
//  ПолеОтбора       - Строка - Имя поля отбора
//  ЗначениеОтбора   - Произвольный - значение отбора
//  ВидСравненияСтр  - Строка, Неопределено - Вид сравнения отбор в виде строки
//                 Если Неопределено, то для списков будет ВСписке, а для остальных Равно
//  Использование    - Булево - включено ли использование отбора
//
// Возвращаемое значение:
//   ЭлементОтбора   - добавленный элемент отбора
//
Функция ДобавитьОтборПостроителя(Построитель, ПолеОтбора, ЗначениеОтбора, 
	ВидСравненияСтр = Неопределено, Использование = Истина) Экспорт
	
    ЭлементОтбора   = Построитель.Отбор.Добавить(ПолеОтбора);
    ЭлементОтбора.Использование = Использование;
	
	ТипЗначенияОтбора   = ТипЗнч(ЗначениеОтбора);
	ФиксированныйМассив = ТипЗначенияОтбора = Тип("ФиксированныйМассив");
	ЗначениеМассивом    = ФиксированныйМассив ИЛИ ТипЗначенияОтбора = Тип("Массив");
	Если ЗначениеМассивом И ЗначениеОтбора.Количество() = 1 Тогда
		УстанавливаемоеЗначениеОтбора = ЗначениеОтбора.Получить(0);
		ЗначениеМассивом = Ложь;
	ИначеЕсли ФиксированныйМассив Тогда
		УстанавливаемоеЗначениеОтбора = Новый Массив(ЗначениеОтбора);
	Иначе
		УстанавливаемоеЗначениеОтбора = ЗначениеОтбора;
	КонецЕсли;
	
	ВидСравненияОтбора = ?(ВидСравненияСтр = Неопределено, 
	?(ЗначениеМассивом, "ВСписке", "Равно"), ВидСравненияСтр);
		
	ЭлементОтбора.ВидСравнения  = ВидСравнения[ВидСравненияОтбора];
	
	Если ЗначениеМассивом Тогда
		ЗначениеСписком = Новый СписокЗначений;
		ЗначениеСписком.ЗагрузитьЗначения(УстанавливаемоеЗначениеОтбора);
		ЭлементОтбора.Значение = ЗначениеСписком;
	Иначе
		ЭлементОтбора.Значение      = ЭлементОтбора.ТипЗначения.ПривестиЗначение(УстанавливаемоеЗначениеОтбора);
	КонецЕсли;
	
	Возврат ЭлементОтбора;
	
КонецФункции

Свернуть табличную часть

Сворачивает табличную часть по всем колонкам. Числовые колонки при этом суммируются
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Сворачивает табличную часть по всем колонкам. 
// Числовые колонки при этом суммируются
//
// Параметры:
//  Объект  - Произвольный - Объект, который имеет Метаданные и Табличную часть
//  ИмяТабличнойЧасти  - Строка - Имя табличной части
//
Процедура СвернутьТабличнуюЧасть(Объект, ИмяТабличнойЧасти) Экспорт
	
	ИзмеренияТаблицы = Новый Массив;
	РесурсыТаблицы   = Новый Массив;
	
	КолонкиТабличнойЧасти = Объект.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты;
	Для Каждого МетаданныеКолонки Из КолонкиТабличнойЧасти Цикл
		Если МетаданныеКолонки.Тип.СодержитТип(Тип("Число")) Тогда
			РесурсыТаблицы.Добавить(МетаданныеКолонки.Имя);
		Иначе
			ИзмеренияТаблицы.Добавить(МетаданныеКолонки.Имя);
		КонецЕсли;
	КонецЦикла;
	
	Объект[ИмяТабличнойЧасти].Свернуть(
		СтрСоединить(ИзмеренияТаблицы, ","), 
		СтрСоединить(РесурсыТаблицы, ",")
	);
	
КонецПроцедуры

Таблица значений по полному имени метаданных

Возвращает описание таблицы значений по полному имени таблицы базы данных. Например "Справочник.Валюты"
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Возвращает описание таблицы значений по полному имени таблицы базы данных
// Например "Справочник.Валюты" или "РегистрСведений.КурсыВалют"
//
// Параметры:
//  ПолноеИмя  - Строка - Полное имя таблицы базы данных
//
// Возвращаемое значение:
//   ТаблицаЗначений
//
Функция СтруктураТаблицыБазы(ПолноеИмя) Экспорт
	
	Текст   = СтрШаблон("ВЫБРАТЬ ПЕРВЫЕ 0 * ИЗ %1", ПолноеИмя);
	Запрос  = Новый Запрос(Текст);
	Таблица = Запрос.Выполнить().Выгрузить();
	
	//Можно использовать метод из другой моей публикации или удалить этот комментарий
        //   https://fastcode.im/Templates/7418
	//Таблица = ТаблицаЗначенийБезNull(Таблица);
	
	Возврат Таблица;
	
КонецФункции

Этот тип является менеджером записи регистра сведений

Является ли переданный тип менеджером записи регистра сведений
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Является ли переданный тип менеджером записи регистра сведений
// К сожалению, не нашел ничего лучше. 
//
// Параметры:
//  ТипЗначения  - Тип - Проверяемый тип значения
//
// Возвращаемое значение:
//   Булево   - Это менеджер записи регистра сведений
//
Функция ЭтоМенеджерЗаписиРегистраСведений(ТипЗначения) Экспорт
    
    ОбъектМетаданных    = Метаданные.НайтиПоТипу(ТипЗначения);
	Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда
		ТипМенеджераЗаписи = Тип("РегистрСведенийМенеджерЗаписи." + ОбъектМетаданных.Имя);
        ЭтоМенеджерЗаписи  = (ТипМенеджераЗаписи = ТипЗначения);
    Иначе
        ЭтоМенеджерЗаписи  = Ложь;
    КонецЕсли;
    
    Возврат ЭтоМенеджерЗаписи;
    
КонецФункции

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

Функция возвращает копию переданной таблицы значений, но исключая из всех колонок тип Null Бывает полезна для обработки выгрузки запроса, в котором у каждой колонки есть тип Null
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Функция возвращает копию переданной таблицы значений, но исключая из всех колонок тип Null
// Бывает полезна для обработки выгрузки запроса, в котором у каждой колонки есть тип Null
//
// Параметры:
//  ТаблицаЗначений  - ТаблицаЗначений - Таблица значений источник
//
// Возвращаемое значение:
//   ТаблицаЗначений   - Таблица без Null
//
Функция ТаблицаЗначенийБезNull(ТаблицаЗначений) Экспорт
	
	НоваяТаблица = Новый ТаблицаЗначений;
	Для Каждого ТекущаяКолонка Из ТаблицаЗначений.Колонки Цикл
		ОписаниеТипа = Новый ОписаниеТипов(ТекущаяКолонка.ТипЗначения, ,"NULL");
        НоваяТаблица.Колонки.Добавить(ТекущаяКолонка.Имя, ОписаниеТипа,
		ТекущаяКолонка.Заголовок, ТекущаяКолонка.Ширина);
    КонецЦикла;
	
	Для Каждого ТекущаяСтрока Из ТаблицаЗначений Цикл
        ЗаполнитьЗначенияСвойств(НоваяТаблица.Добавить(), ТекущаяСтрока);
    КонецЦикла;
    
    Возврат НоваяТаблица;

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

Пустое значение типа

Возвращает пустое значение переданного типа
Источник: https://t.me/JuniorOneS
SeiOkami 183 3 2 3
// Возвращает пустое значение переданного типа
//
// Параметры:
//  ТипЗначения  - Тип - Тип пустого значения
//
// Возвращаемое значение:
//   Произвольный   - пустое значение типа
//
Функция ПустоеЗначениеТипа(ТипЗначения) Экспорт
	
	МассивТипов  = Новый Массив;
	МассивТипов.Добавить(ТипЗначения);
	ОписаниеТипа = Новый ОписаниеТипов(МассивТипов);
	Возврат ОписаниеТипа.ПривестиЗначение();
	
КонецФункции

В Конфигураторе, между редактором формы и текстом модуля, можно быстро переключаться без помощи мыши

Для управляемых форм Alt+1 (форма) и Alt+2 (модуль). Для обычных форм Ctrl+PageDown и Ctrl+PageUp вперед и назад по вкладкам. Переключение_между_формой_и_модулем_в_конфигураторе.gif
bolsun 266 4 2 8

Обслуживание ИБ на PostgreSQL с использованием 1С-Обновлятора

Самый ценный ресурс в нашей жизни - время, поскольку он не возобновляем. И вот с целью экономии этого ресурса предлагаю быстрое, доступное и безопасное решение проблемы обслуживания информационных баз PostgreSQL на платформе Windows средствами программы 1С...

Чтение параметров http-запроса в формате x-www-form-urlencoded в соответствие

Smaylukk 23 1 1
Функция ПолучитьПараметрыКакСоответствие(Тело)Экспорт
	
	Результат = Новый Соответствие;
	Тело = РаскодироватьСтроку(Тело, СпособКодированияСтроки.КодировкаURL, "UTF-8");
	Тело = СтрЗаменить(Тело, "+", " ");
	ПарметрыЗначения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Тело, "&");
	Для Каждого Пар Из ПарметрыЗначения Цикл
		мПар = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Пар, "=");
		Если мПар.Количество() > 1 Тогда
			СущЗначениеПараметра = Результат.Получить(мПар[0]);
			
			//Если в структуре нет такого параметра, просто его добавляем.
			Если СущЗначениеПараметра = Неопределено Тогда 
				Результат.Вставить(мПар[0], мПар[1]);
			Иначе
				//Если такой параметр есть и значени его находится в массиве, то добавляем
				//текущий параметр в массив.
				Если ТипЗнч(СущЗначениеПараметра) = Тип("Массив") Тогда 
					СущЗначениеПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], СущЗначениеПараметра);
					
					//Если это второе значение параметра, то добавляем уже существующее и текущее
					//значение в массив.	
				Иначе 
					МассивЗначЭтогоПараметра = Новый Массив();
					МассивЗначЭтогоПараметра.Добавить(СущЗначениеПараметра);
					МассивЗначЭтогоПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], МассивЗначЭтогоПараметра);
				КонецЕсли;
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

Чтение параметров http-запроса в формате x-www-form-urlencoded в структуру

Smaylukk 23 1 1
Функция ПолучитьПараметры(Тело)Экспорт
	
	Результат = Новый Структура;
	Тело = РаскодироватьСтроку(Тело, СпособКодированияСтроки.КодировкаURL, "UTF-8");
	Тело = СтрЗаменить(Тело, "+", " ");
	ПарметрыЗначения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Тело, "&");
	Для Каждого Пар Из ПарметрыЗначения Цикл
		
		мПар = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Пар, "=");
		Если мПар.Количество() > 1 Тогда
			СущЗначениеПараметра = "";
			
			Попытка
				Результат.Свойство(мПар[0], СущЗначениеПараметра);
			Исключение
				Продолжить;
			КонецПопытки;
			
			//Если в структуре нет такого параметра, просто его добавляем.
			Если ПустаяСтрока(СущЗначениеПараметра) Тогда 
				Результат.Вставить(мПар[0], мПар[1]);
			Иначе
				
				//Если такой параметр есть и значени его находится в массиве, то добавляем
				//текущий параметр в массив.
				Если ТипЗнч(СущЗначениеПараметра) = Тип("Массив") Тогда 
					СущЗначениеПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], СущЗначениеПараметра);
					
					//Если это второе значение параметра, то добавляем уже существующее и текущее
					//значение в массив.	
				Иначе 
					МассивЗначЭтогоПараметра = Новый Массив();
					МассивЗначЭтогоПараметра.Добавить(СущЗначениеПараметра);
					МассивЗначЭтогоПараметра.Добавить(мПар[1]);
					Результат.Вставить(мПар[0], МассивЗначЭтогоПараметра);
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли мПар.Количество() = 1 Тогда
			Если Не Результат.Свойство(мПар[0]) Тогда
				Результат.Вставить(мПар[0], "");
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

Для веб-сервера IIS можно использовать бесплатные SSL сертификаты Let's Encrypt с автоматическим обновлением

Некоммерческий проект Let's Encrypt - предоставляет бесплатно сертификаты, которые используют проекты по всему миру. Проект спонсируют и поддерживают Mozilla, Cisco, Chrome, AWS, Facebook и др. Проект используют 240 миллионов вебсайтов. 2021-03-19_130529.p...
bolsun 266 4 2 8

Разбить число на Кусочки

Для параллельного выполнения нужно наиболее "ровно" разделить, например массив, на кусочки.
miha 45 3
Функция РазбитьНаКусочки(ОбщееКоличество, ОднаЧасть) Экспорт
	Частей = Цел(ОбщееКоличество / ОднаЧасть) + ?(ОбщееКоличество % ОднаЧасть > 0, 1, 0);

	Частное = ОбщееКоличество / Частей;
	МаксКусок = Цел(Частное) + ?(ОбщееКоличество % Частей > 0, 1, 0);
	Остаток = ОбщееКоличество % МаксКусок;

	Массив = Новый Массив;

	Если Остаток > 0 Тогда
		ОдинКусок = МаксКусок - 1;
		МеньшегоКолва = МаксКусок - Остаток;
		Для ъ = 1 по МеньшегоКолва Цикл
			Массив.Добавить(ОдинКусок);
		КонецЦикла;
	Иначе
		ъ = 1;
	КонецЕсли;

	ОдинКусок = МаксКусок;
	ъъ = ъ;
	Для ъ = ъъ по Частей Цикл
		Массив.Вставить(0, ОдинКусок);
	КонецЦикла;

//	ВсегоВМассиве = 0;
//	Для Каждого Элем из Массив Цикл
//		ВсегоВМассиве = ВсегоВМассиве + Элем;
//	КонецЦикла;

	Возврат Массив;
КонецФункции  // РазбитьНаКусочки

Функция РазбитьСписокТоваров(Знач списТоваров, МаксТоваров = 150)
	#Если Сервер И Не Сервер Тогда  // для типизации в конфигураторе
		списТоваров = Новый СписокЗначений;
	#КонецЕсли

	мТовары = списТоваров.ВыгрузитьЗначения();

	КоличествоТоваров = мТовары.Количество();
	мКусочки = РазбитьНаКусочки(КоличествоТоваров, МаксТоваров);

	ммТовары = Новый Массив;
	Для Каждого ЧислоТоваров Из мКусочки Цикл
		мПодСписок = Новый Массив;
		Для ъ = 1 По ЧислоТоваров Цикл
			мПодСписок.Добавить(мТовары[0]);
			мТовары.Удалить(0);
		КонецЦикла;

		ммТовары.Добавить(мПодСписок);
	КонецЦикла;

	Возврат ммТовары;
КонецФункции  // РазбитьСписокТоваров

Заполнение формы объекта без записи в БД

Пример кода, которым можно заполнить и открыть формы заполненных объектов (например, загрузить несколько документов), не записывая их. Например, чтобы пользователь мог документы проверить и дозаполнить. Можно заполнить любые данные объекта без доработки конфигурации (даже если реквизит не заполняется из входящих данных).

Блог Жёлтая тетрадь http://t.me/yellow_pad

builin 78 1 3 2
&НаКлиенте
Процедура ОткрытьФормуНового(Команда)
	
	Форма = ПолучитьФорму("Документ.ПродажаТоваровУслуг.Форма.ФормаДокумента");
	ДанныеФормы = Форма.Объект;
	ЗаполнитьНаСервере(ДанныеФормы);
	КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
	Форма.Открыть();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(НовыйОбъект)
	НовыйОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000005"); 
КонецПроцедуры