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

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

Скриншот сеанса средствами 1С

Процедура сохраняет скриншот текущего сеанса пользователя по переданному адресу. Работает из клиента 1С на УФ (начиная с версии 8.3.17)
Источник: https://t.me/JuniorOneS
SeiOkami 247 4 3 6
// Процедура сохраняет скриншот текущего сеанса пользователя по переданному адресу
// Работает начиная с версии 8.3.17.
//
// Параметры:
//  ПолныйПуть	 - Строка	 - Полный путь к файлу
//
&НаКлиенте
Процедура СохранитьСкриншотСеанса(ПолныйПуть = "")
	
	#Если НЕ ВебКлиент Тогда
	
	ВременныйФайл = ПолучитьИмяВременногоФайла(".zip");
	
	ОтчетОбОшибке = Новый ОтчетОбОшибке(ИнформацияОбОшибке());
	ОтчетОбОшибке.Записать(ВременныйФайл, Ложь);
	
	КаталогФайлов = КаталогВременныхФайлов() + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
	ЧтениеАрхива  = Новый ЧтениеZipФайла(ВременныйФайл);
	ЧтениеАрхива.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
	
	ПутьСкриншота = КаталогФайлов + "\screenshot.png";
	КопироватьФайл(ПутьСкриншота, ПолныйПуть);
	
	УдалитьФайлы(ВременныйФайл);
	УдалитьФайлы(КаталогФайлов);
	
	#КонецЕсли
	
КонецПроцедуры

Не переносите код таким образом

Как нельзя переносить текст кода Не переносите код таким образом Иногда так бывает, что названия вызываемого метода и передаваемых параметров формируют слишком длинную строчку кода. И приходится её разбивать на несколько. По этому поводу есть ссылка на ...
SeiOkami 247 4 3 6

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

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

Колонки результата запроса

Нюанс о типизации колонок результата запроса Колонки результата запроса У результата запроса есть одна особенность. Какой бы вы ни выбирали тип значений, платформа добавит к колонке результата тип Null. Число, Строка, Булево, Ссылка. Неважно. Даже если ...
SeiOkami 247 4 3 6

Вопрос. Стоит ли мне учить 1С для дальнейшего потом заработка

Всем привет,я новичок в программировании, подскажите пожалуйста стоит ли мне учить 1С для дальнейшего потом заработка, или все же попробовать какой-то другой язык?
ArByZzZ

Запрос 1С

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

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

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

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

Сочетания клавиш.png
SeiOkami 247 4 3 6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для управляемых форм Alt+1 (форма) и Alt+2 (модуль). Для обычных форм Ctrl+PageDown и Ctrl+PageUp вперед и назад по вкладкам. Переключение_между_формой_и_модулем_в_конфигураторе.gif
bolsun 275 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], МассивЗначЭтогоПараметра);
				КонецЕсли;
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции