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

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

ИР Найти последнее изменение метода

Довольно часто, анализируя метод, возникает вопрос "Кто когда и какие изменения внес в него последний раз?" Для ответа на этот вопрос при использовании хранилища конфигурации приходится вручную перебирать сравнения последних версий текущего модуля и искать...
tormozit 8 1

TurboConf ИР адаптер 5.18.6

TurboConf скрипт "ИР Адаптер" обеспечивает в конфигураторе 1С 8 доступ к функциям мощной подсистемы Инструменты разработчика Tormozit (ИР)
tormozit 8 1
Бесплатно

TurboConf - расширение Конфигуратора 1С Наш выбор

TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
bolsun
590 руб.

Отобразить заголовки периодов на форме отчета БСП

В некоторых версиях БСП форма отчета скрывает заголовки ряда параметров. В том числе с типом "Стандартный период". Данную функцию нужно вставить в модуль отчета и вызывать в обработчике ПослеЗаполненияПанелиБыстрыхНастроек(). Подключить обработчик можно в событии ОпределитьНастройкиФормы
Источник: https://t.me/JuniorOneS
SeiOkami 407 5 8 7
Процедура ОпределитьНастройкиФормы(Параметр, КлючВарианта, НастройкиОтчета) Экспорт
	
	НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
		
КонецПроцедуры

Процедура ПослеЗаполненияПанелиБыстрыхНастроек(ФормаОтчета, ПараметрыОбновления) Экспорт
	
	ПочинитьЗаголовкиПериодов(ФормаОтчета);
		
КонецПроцедуры

Процедура ПочинитьЗаголовкиПериодов(ФормаОтчета)
	
	ЗаголовкиЭлементов = Новый Массив;
	Для Каждого ПараметрСКД Из СхемаКомпоновкиДанных.Параметры Цикл
		ЗначениеТипа = ПараметрСКД.ТипЗначения.ПривестиЗначение(Неопределено);
		Если ТипЗнч(ЗначениеТипа) = Тип("СтандартныйПериод") Тогда
			ЗаголовкиЭлементов.Добавить(ПараметрСКД.Заголовок + ":");
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого ЭлементФормы Из ФормаОтчета.Элементы Цикл
		
		СвойстваЭлемента = Новый Структура("ПоложениеЗаголовка,Заголовок,ПутьКДанным");
		ЗаполнитьЗначенияСвойств(СвойстваЭлемента, ЭлементФормы);
		
		Если СвойстваЭлемента.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет
			И ЗаголовкиЭлементов.Найти(СвойстваЭлемента.Заголовок) <> Неопределено Тогда
			ЭлементФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
		КонецЕсли;
		
	КонецЦикла;
		
КонецПроцедуры

Функция восстановления значения при чтении JSON (ЧтениеJSON)

Функция восстановления из JSON может использоваться для того, чтобы преобразовать данные JSON в типы платформы 1С, которые либо 1. не могут являться результатом автоматического преобразования, либо 2. чтобы просто изменить получаемые данные, если есть такая необходимость. В данном примере из json файла где ИНН, КПП контрагента - пустая строка, заменим на значение - Пустая строка ИНН (КПП)
andrey5565 203 4 2 12
// Структура JSON файла:
{
 "Info": [
  {
   "Наименование": "Global Trade Company GmbH",
   "НаименованиеПолное": "Global Trade Company GmbH",
   "ИНН": "",
   "КПП": "",
   "ЮрФизЛицо": "Юридическое лицо",
   "ТекущаяДата": "2023-09-03T16:45:44Z",
   "ДанныеАдреса": "Страна - 1; Город  - 1; Индекс - 1"
  },
  {
   "Наименование": "Kikinda (Сербия)",
   "НаименованиеПолное": "Kikinda (Сербия)",
   "ИНН": "",
   "КПП": "",
   "ЮрФизЛицо": "Юридическое лицо",
   "ТекущаяДата": "2023-09-03T16:45:44Z",
   "ДанныеАдреса": "Страна - 2; Город  - 2; Индекс - 2"
  },
  {
   "Наименование": "Koenig Holding GmbH",
   "НаименованиеПолное": "Koenig Holding GmbH",
   "ИНН": "",
   "КПП": "",
   "ЮрФизЛицо": "Юридическое лицо",
   "ТекущаяДата": "2023-09-03T16:45:44Z",
   "ДанныеАдреса": "Страна - 3; Город  - 3; Индекс - 3"
  },
  {
   "Наименование": "АВИКА",
   "НаименованиеПолное": "АВИКА",
   "ИНН": "4825005381",
   "КПП": "482201001",
   "ЮрФизЛицо": "Юридическое лицо",
   "ТекущаяДата": "2023-09-03T16:45:44Z",
   "ДанныеАдреса": "Страна - 4; Город  - 4; Индекс - 4"
  },
  {
   "Наименование": "АвтБанк АКБ",
   "НаименованиеПолное": "АКБ АвтБанк",
   "ИНН": "",
   "КПП": "",
   "ЮрФизЛицо": "Юридическое лицо",
   "ТекущаяДата": "2023-09-03T16:45:44Z",
   "ДанныеАдреса": "Страна - 5; Город  - 5; Индекс - 5"
  }
 ]
}

//Код в модуле формы:
&НаСервере
Функция ФункцияВосстановленияСериализуемогоЗначения(Свойство, Значение, ДополнительныеПараметры) Экспорт

	 Если Свойство = "ИНН" ИЛИ Свойство = "КПП" Тогда
	 	 Если ПустаяСтрока(Значение) Тогда
			Возврат "Пустая строка " + Свойство; 
		 КонецЕсли;
	 КонецЕсли;

КонецФункции // ()

&НаСервере
Процедура ВыполнитьЧтениеДанныхНаСервере()
	
	// Проверка наличия файла по пути;
	ПутьНаСервере1  = "C:\Users\SystemX\Desktop\TestJSON_1.json";
	
	ФайлJSON = Новый Файл(ПутьНаСервере1);
	
	Если НЕ ФайлJSON.Существует() Тогда
		ОбщегоНазначения.СообщитьПользователю("Файл отсутствует по пути: " + ПутьНаСервере1);		
	    Возврат;
	КонецЕсли;
	
	ЧтениеJSON = Новый ЧтениеJSON();
	Попытка
	   ЧтениеJSON.ОткрытьФайл(ПутьНаСервере1, "UTF-8");
	Исключение
	КонецПопытки;
	
	ПрочитанноеЗначение = ПрочитатьJSON(ЧтениеJSON, Ложь,,, "ФункцияВосстановленияСериализуемогоЗначения", ЭтотОбъект);
	
	ЧтениеJSON.Закрыть(); 
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЧтениеДанных(Команда)
	ВыполнитьЧтениеДанныхНаСервере();
КонецПроцедуры

Функции преобразования ЗаписьJSON

Функция преобразования, используемая при сериализации данных в JSON, вызывается для всех свойств, тип которых не поддерживает преобразование в формат JSON на прямую. В "функции преобразования" разработчик напрямую может проанализировать переданный объект и
andrey5565 203 4 2 12

Вывод табличного документа в типовое окно печати для УФ

Использование типового окна печати для вывода табличного документа (выдержка с Инфостарт https://infostart.ru/1c/articles/394727/) НаКлиенте Процедура КомандаПечати(Команда) ТабличныйДокументДляПечати = ПолучитьТаблчныйДокумент(); Коллекция = У...
SnarkSpb 12 1

Заполнить контрагента по ИНН, Получить данные по ИНН

Пример процедуры для получение данных юридического лица по ИНН используя бесплатное API. Данный способ был реализован на YouTube канале "IRONSKILLS". // Описание функции // // Параметры: // ИНН - Тип.Строка - Строка с ИНН // продолжен...
Razlomalo 19 1 1

Автосохранение текстов модулей в папку TurboConf

Вы знали, что TurboConf умеет периодически сохранять тексты открытых модулей? Это может быть полезно в случае аварийного завершения конфигуратора или каких-то других случаев потери набранного кода. Включить функцию можно на вкладке Разработчикам, в разд...
bolsun 455 6 11 8

Парсинг URL

Раскладываем URL по полочкам Введение Потребовалось написать функцию, разбора URL на составляющие, беглое гугление не дало полноценный результат (да, плохо искал), а значит нужно написать самому. В ходе разработки парсинга, получилась полезная функция, ...
markers 39 2 3

Упрощенный парсинг строк

Если хочется упросить парсинг строк, то можно воспользоваться этой функцией Введение Как-то потребовалось мне написать функцию разбора URL (она опубликована тут) и сразу захотелось упросить себе жизнь. В результате несколькоих итераций и родилась данная...
markers 39 2 3

Вывод месяца строкой из даты

Выводит месяц строкой из полученной даты
&НаСервере
Функция ФорматМесяц(ДатаИсходная)
	Месяц = Нрег(Формат(ДатаИсходная, "ДЛФ=DD"));
	Месяц = СтрЗаменить(Месяц, Лев(Месяц, СтрНайти(Месяц, " ")), "");
	Месяц = Лев(Месяц, СтрНайти(Месяц, " "));
	
	Возврат Месяц;
КонецФункции //ФорматМесяц

Сортировка ДанныеФормыДеревоЗначений с изменением направления

Сортировка дерева значений с изменением направления

Инфостарт Александр Цегельников

tech_log 10 2
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыДерево(КоллекцияСортировки, КолонкаСортировки, ВключатьПодчиненные = Ложь, ПоВозрастанию = Истина)
    
    КоллекцияСтрок = КоллекцияСортировки.ПолучитьЭлементы();
    
    СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию);
    
    Если ВключатьПодчиненные Тогда
        
        Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
            
            СортироватьДанныеФормыДерево(ТекущаяСтрока, КолонкаСортировки, ВключатьПодчиненные, ПоВозрастанию);
            
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию = Истина)
    
    ПараметрыЗначений     = Новый Соответствие;
    СортированныеЗначения = Новый СписокЗначений;
    
    Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
        
        ТекущееЗначение = ТекущаяСтрока[КолонкаСортировки];
        
        ПараметрыЗначения = ПараметрыЗначений.Получить(ТекущееЗначение);
        
        Если ПараметрыЗначения = Неопределено Тогда
            
            ПараметрыЗначения = Новый Массив;
            ПараметрыЗначений.Вставить(ТекущееЗначение, ПараметрыЗначения);
            СортированныеЗначения.Добавить(ТекущееЗначение);
            
        КонецЕсли;
        
        ПараметрыЗначения.Добавить(ТекущаяСтрока);
        
    КонецЦикла;
    
    СортированныеЗначения.СортироватьПоЗначению(?(ПоВозрастанию, НаправлениеСортировки.Возр, НаправлениеСортировки.Убыв));
    НовыйИндекс = 0;
    
    Для Каждого ТекущееЗначение Из СортированныеЗначения Цикл
        
        МассивСтрок = ПараметрыЗначений.Получить(ТекущееЗначение.Значение);
        
        Для Каждого ТекущаяСтрока Из МассивСтрок Цикл
            
            ТекущийИндекс = КоллекцияСтрок.Индекс(ТекущаяСтрока);
            ШагСдвига     = НовыйИндекс - ТекущийИндекс;
            
            Если НЕ ШагСдвига = 0 Тогда
                
                КоллекцияСтрок.Сдвинуть(ТекущийИндекс, ШагСдвига);
                
            КонецЕсли;
            
            НовыйИндекс = НовыйИндекс + 1;
            
        КонецЦикла;
        
    КонецЦикла;
    
КонецПроцедуры

СоздатьЭлементФормы

Создает элемент на форме. Возможно вставить перед выбранным элементом
Функция СоздатьЭлементФормы(Форма, ИмяЭлемента, ТипЭлемента, РодительЭлемента, ЭлементПеред = Неопределено) Экспорт
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = Форма.Элементы.Добавить(ИмяЭлемента, ТипЭлемента, РодительЭлемента);
	Иначе
		НовыйЭлемент = Форма.Элементы.Вставить(ИмяЭлемента, ТипЭлемента, РодительЭлемента, ЭлементПеред);
	КонецЕсли;
	
	Возврат НовыйЭлемент;
	
КонецФункции

Шаблон данных для печатных форм ЗУП

Шаблон кода основных данных, который поможет быстро формировать печатные формы для ЗУП. Функция ПолучитьДанные() Возвращает структуру параметров. Функция принимает следующие параметры: ОбъектНаПечать (Объект, откуда была вызвана команда), Отказ (Задал
ArtVadan 46 1 2

Предупреждение-оповещение

Всплывающее окно для произвольного оповещения пользователя о событии
s.y.panferov 7 1
ПоказатьПредупреждение(
		Неопределено, "ТекстПредупреждения", 3, "Заголовок");

Что делать, если сервер падает из-за перебоев с электричеством?

Кейс неэффективного использования собственных серверов под 1С и решение по оптимизации. - Ты чего такой грустный? - Да вот сервер вчера упал. - А что ты его до сих пор не поднял? - Поднял, он со стола упал... Ситуация страшная, но этого можно избежать, ...

Убрать префикс и лидирующие нули

Префиксация объектов
tech_log 10 2
Функция ПолучитьНомер(Строка) 
	
	RegExp = Новый COMОбъект("VBScript.RegExp");
	RegExp.MultiLine = Истина;
	RegExp.Global = Истина;
	RegExp.IgnoreCase = Истина;
	
	Шаблон = "№ 0*(\d+)";
	
	RegExp.Pattern = Шаблон;
	Matches=RegExp.Execute(Строка);	
	
	Возврат Matches;
	
КонецФункции

Переход к определению одним кликом

Для перехода нажмите Ctrl + левую кнопку мыши на нужном вам идентификаторе. Также можно автоматически закрывать окно выбора Объекта перехода. При первом появлении такого окна, появится окно с включением функции автозакрытия. Если окно не появляется, настро...
bolsun 455 6 11 8

Генерация методов "на лету"

В TurboConf можно создавать процедуры и функции одновременно с их первым использованием. После того, как вы где-то в коде написали имя метода и необходимые параметры, нажмите Ctrl+Shift+M. Программа автоматически определит названия метода, типов, параме...
bolsun 455 6 11 8

Отправка сформированного отчета на почту (в виде html текста)

Сохраняем табличный документ как html текст, отправляем на почту используя протокол smtp. Плюс в том, что при открытии сообщения на почте сразу будем видеть отчет (не прибегая к скачиванию файла и тп)
andrey5565 203 4 2 12
	// Описание ПочтовогоПрофиля;
	ПочтовыйПрофиль  = Новый ИнтернетПочтовыйПрофиль;
	
	// SMTP (отправляем сообщение);    
	ПочтовыйПрофиль.АдресСервераSMTP = "smtp.yandex.com";
	//ПочтовыйПрофиль.АдресСервераIMAP = "imap.yandex.com";
	
	ПочтовыйПрофиль.ПользовательSMTP = "xxxxx.xxxxxx@yandex.ru";
	ПочтовыйПрофиль.ПарольSMTP 	= "tcbbrwraduriuusz"; 
	
	ПочтовыйПрофиль.Пользователь = "xxxxx.xxxxxx@yandex.ru";
	ПочтовыйПрофиль.Пароль = "tcbbrwraduriuusz";
	
	ПочтовыйПрофиль.ПортSMTP = 465; 
	//ПочтовыйПрофиль.ПортIMAP = 993;
	ПочтовыйПрофиль.Таймаут = 30; // мс;
	
	ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
	ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
	
	// ИнтернетПочта;
	Почта = Новый ИнтернетПочта;
	
	ПодключеноУспешно = Ложь;
	Попытка
		Почта.Подключиться(ПочтовыйПрофиль, ПротоколИнтернетПочты.IMAP);
		ПодключеноУспешно = Истина;
	Исключение
	КонецПопытки;
	
	// Проверка;
	Если НЕ ПодключеноУспешно Тогда
    	        ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ОписаниеОшибки(), 
                     УровеньЖурналаРегистрации.Ошибка,,,  "Сообщение- не было отправлено!");  
		Возврат;
	Иначе
		
		АдресФайлаВложения = ПолучитьИмяВременногоФайла(".txt");
		
		// Формирование отчета;
		ТаблДок = Новый ТабличныйДокумент;
                // Формируем отчет (какой хотим);
		Отчеты.ABCXYZАнализНоменклатуры.Создать().СкомпоноватьРезультат(ТаблДок);   
		ТаблДок.Записать(АдресФайлаВложения, ТипФайлаТабличногоДокумента.HTML);
		
		ТекстHTML = "";
			ТекДок = Новый ТекстовыйДокумент;
			ТекДок.Прочитать(АдресФайлаВложения);
		ТекстHTML = ТекДок.ПолучитьТекст();
		
		// Формирование сообщения;
		ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
		ПочтовоеСообщение.Тема 		= СтрШаблон("Отчет ""Остатки товаров организаций"" от %1", Формат(ТекущаяДата(), "ДЛФ=DD"));
		ПочтовоеСообщение.Важность 	= ВажностьИнтернетПочтовогоСообщения.Наивысшая;
		ПочтовоеСообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);
		//
		ПочтовоеСообщение.Отправитель.Адрес = "xxxxx.xxxxxx@yandex.ru";
		ПочтовоеСообщение.Получатели.Добавить("xxxxx.xxxxxx@yandex.ru");  
		
		//ИнтернетПочтовоеВложение  = ПочтовоеСообщение.Вложения.Добавить(АдресФайлаВложения, "Остатки товаров организаций");
		
		Попытка
			СоответствиеОтвет = Почта.Послать(ПочтовоеСообщение,, ПротоколИнтернетПочты.SMTP);	
		Исключение
		КонецПопытки;
		
	КонецЕсли;