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

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

Полное(стек) и краткое представление ошибок в журнале регистрации

Altez 4 1
		Попытка
			ВесоГабариты = Новый Структура("Вес", СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ПараметрыНоменклатуры.получить("Weight")));
		Исключение		
			Описание = ОписаниеОшибки();
			// {ВнешняяОбработка.ОписаниеОшибки.Форма.Форма.Форма(6)}: Недостаточно фактических параметров
			
			Информация = ИнформацияОбОшибке();
			// Информация.ИмяМодуля = "ВнешняяОбработка.ОписаниеОшибки.Форма.Форма.Форма"
			// Информация.ИсходнаяСтрока = "		А = ОбщегоНазначения.ЗначениеРеквизитаОбъекта();"
			// Информация.НомерСтроки = 30
			// Информация.Описание = "Недостаточно фактических параметров"
			// Информация.Причина = Неопределено
			
			//КраткоеПредставлениеОшибки(Информация);
			// Недостаточно фактических параметров
			
			Подробности = ПодробноеПредставлениеОшибки(Информация);
			// Недостаточно фактических параметров
			// {ВнешняяОбработка.ОписаниеОшибки.Форма.Форма.Форма(6)}:		А = ОбщегоНазначения.ЗначениеРеквизитаОбъекта();
			
			//ВызватьИсключение "Не удалось получить значение реквизита по причине: " + Описание;			
			//ОбщегоНазначения.СообщитьПользователю("-" + ПараметрыНоменклатуры.получить("ExternalItemId") + ": " + ОписаниеОшибки());
			ЗаписьЖурналаРегистрации("Axapta.Обновление номенклатуры", УровеньЖурналаРегистрации.Ошибка, Номенклатура.Метаданные(), Номенклатура,
				"Не удалось получить сведения по номенклатуре: " + Подробности);
            Возврат Номенклатура
		КонецПопытки;

MenuHotkeys

Назначает горячие клавиши элементам меню.
bolsun 476 6 11 10
Бесплатно

TurboConf ИР адаптер 1.37 Наш выбор

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

Преобразовать UNICODE ответ с Сайта

Часто сайты возвращают ответ в кодировке UNICODE, при этом в ответе встречаются текст в кодировке UTF-16 и UTF-8 прочитать подобный текст для 1С - большая проблема
ProxyInspector 20 3
//Отдельные сайты шлют ответы в перемешку UTF-16 и UTF-8 
//Например 		"%u041F%20%3A TEST"
//Надо сделать 	"%u041F%u0020%u003A TEST"
Функция ПреобразоватьUnicode(Unicode) Экспорт
	
	СтрUnicode = "";
	
	МассивПодстрок = СтрРазделить(Unicode,"%",Ложь);
	Для Каждого Подстрока Из МассивПодстрок Цикл
		Если Сред(Подстрока,1,1) = "u" Тогда 		//Это UTF-16
			СтрUnicode = СтрUnicode + "%" + Подстрока;
			Продолжить;
		Иначе										//Это UTF-8
			ПервыеДваСимвола = Сред(Подстрока,1,2);
			ПоследниеСимволы = Сред(Подстрока,3);
			Подстрока = "u00" + ПервыеДваСимвола + ПоследниеСимволы;
			СтрUnicode = СтрUnicode + "%" + Подстрока;
		КонецЕСли;
	КонецЦикла;
	
	СтрUnicode  = СтрЗаменить(СтрUnicode,"%","\");		//Подготовим для JSON
		
	ЧтениеJSON = Новый ЧтениеJSON;		
	
	Стр = "{""Текст"":"""+СтрUnicode + """}";
	
	ЧтениеJSON.УстановитьСтроку(Стр);
	
    Соответствие    =  ПрочитатьJSON(ЧтениеJSON, Истина);
    Результат    = Соответствие.Получить("Текст");
	
	Возврат Результат;
КонецФункции

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

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

Пауза() при выполнении кода 1С

Продолжается поиск оптимального решения формирования Паузы в коде 1С. Известные способы формирования Паузы, имеют некоторые недостатки. Использование ping() - не стабильно. Использование HTTPСоединение - пауза ограничена 20 сек (по отзывам пользователей). Использование WshShell позволяет обойти эти ограничения.
// Пауза от 1 до 999 сек
// Без показа дополнительных окон
Процедура Пауза(Секунд) Экспорт
	
	WshShell = Новый COMОбъект("WScript.Shell");
	
	СтрокаКоманды = "timeout /t "+Секунд+" /nobreak";
	СтрокаКоманды = "cmd /c "+СтрокаКоманды;					// Закрываем окно после завершения (ключ /с)
	
	ОжидатьЗавершения = Истина;
	WshShell.Run(СтрокаКоманды, 0,ОжидатьЗавершения);			// 0 - не показывать окно командного интерпритатора

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

Процедура КомандаСистемы() без отображения окна командного интерпритатора

При решении различных задач программирования 1С, иногда возникает необходимость выполнения программ операционной системы. Для этого используются функции 1С КомандаСистемы() или ЗапуститьПриложение(). Однако при выполнении этих команд видно открытие окна командного интерпритатора. При периодичном вызове этих процедур это создает мерзкое впечатление. Используя WshShell, эту проблему можно обойти.
Процедура КомандаСистемыWshShell(Команда, ИмяКаталога = "", ЗакрыватьОкно = Истина, ПоказыватьОкно = Ложь, ОжидатьЗавершения = Истина)	
	//В командной строке можно выполнить несколько команд
	//В этом случае команды отделяются " && "
	
	Отладка = Ложь;
	Если Отладка = Истина Тогда
		ЗакрыватьОкно = Ложь; 
		ПоказыватьОкно = Истина;
	КонецЕСли;
	
	WshShell = Новый COMОбъект("WScript.Shell");

	СтрокаКоманды = Команда;
	Если ЗначениеЗаполнено(ИмяКаталога) Тогда
		МассивПодстрок = СтрРазделить(ИмяКаталога, ":\",Ложь);
		Если МассивПодстрок.Количество() = 2 Тогда
			ИмяДиска = МассивПодстрок.Получить(0)+":";
			КомандаСменитьКаталог = " "+ИмяДиска + " && " + " cd " + ИмяКаталога;
			
			СтрокаКоманды = КомандаСменитьКаталог + " && " + СтрокаКоманды;
		КонецЕСли;
	КонецЕсли;
	
	Если ЗакрыватьОкно = Истина Тогда
		СтрокаКоманды = "cmd /c "+СтрокаКоманды;
	Иначе
		СтрокаКоманды = "cmd /k "+СтрокаКоманды;
	КонецЕСли;
	
	//Запустить командный Интерпритатор, установить каталог по умолчанию, запустить программу, закрыть Окно интерпритатора (ключ /с)
	//     cmd /c c: && cd c:\OpenSSL && OpenSSL.exe
	//
	//Запустить командный Интерпритатор, использовать каталог по умолчанию, запустить программу, НЕ закрывать Окно интерпритатора (ключ /k)
	//     cmd /k OpenSSL.exe
	//
	
	Если ПоказыватьОкно = Истина Тогда
		WshShell.Run(СтрокаКоманды, 1,ОжидатьЗавершения);
	Иначе
		WshShell.Run(СтрокаКоманды, 0,ОжидатьЗавершения);
	КонецЕСли;
	
КонецПроцедуры

Процедура ПодписатьOpenSSL()
	
	ИмяКаталога 			= "c:\OpenSSL";
	ИмяФайлаДляПодписания 	= "Тест.txt";
	ИмяФайлаПодписано 		= "Sign.txt";
	ИмяФайлаПриватногоКлюча = "Server.key";

	СтрокаКоманды = "openssl.exe dgst -sha256 -sign "+ИмяФайлаПриватногоКлюча+" -out "+ИмяФайлаПодписано+" " + ИмяФайлаДляПодписания;	
	
	ЗакрыватьОкно = Истина;
	ПоказыватьОкно = Ложь;
	ОжидатьЗавершениеКоманды = Истина;
	
	КомандаСистемыWshShell(СтрокаКоманды,ИмяКаталога, ЗакрыватьОкно, ПоказыватьОкно, ОжидатьЗавершениеКоманды);
	
КонецПроцедуры

Установка отбора Списка по СпискуЗначений

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

МассивИзДереваЗначенийНаСервере

НаСервере Процедура МассивИзДереваЗначенийНаСервере() ВыгрузкаДЗ = РеквизитФормыВЗначение(Дерево); ИмяВременнойКолонки = _ВременнаяКолонка_; ВыгрузкаДЗ.Колонки.Добавить(ИмяВременнойКолонки); Отбор = Новый Структура(ИмяВременнойКолонки, Нео...
flashman 8 1

TurboTrackerEva

Скрипт для использования трекера Eva (https://www.evateam.ru/) как источника данных для ТурбоТрекера
Бесплатно

Отладка методов серверных модулей через внешнюю обработку

Схема известная. В обработку помещаешь метод, который нужно отладить. И его дорабатываешь до готовности. Потом переносишь в конфигурацию. Если база серверная, то обработку кладешь в сетевую папку. Такой способ позволяет не тратить время на ожидание пер...
AntonSm 10 1

Программное добавление условного оформления документа

1С ERP УП 2 (УФ) // Процедура НастроитьУсловноеОформление предназначена для создания и настройки условного оформления документа. // // НаСервере Процедура НастроитьУсловноеОформление() // Создание элемента условного оформления ЭлементОформления ...
1C 6 1

Закрытие терминальной сессии

При закрытии 1С не всегда происходит завершение терминальной сессии. В памяти висит процесс (splwow64.exe), который не дает закрыть. Решение удалить процесс перед закрытием 1с. В глобальном модуле добавляем строку в процедуру "ПризавершенииРаботыСистемы"
Leonid 11 1
ЗапуститьПриложение("taskkill /f /im splwow64.exe");

ИР Открыть объект метаданных

Эта команда адаптера открывает активный объект метаданных в интерфейсной панели ИР. В ней есть большое контекстное меню для открытия других инструментов с передачей этого объекта метаданных.
tormozit 21 1 1

ИР Подписки на события

Эта команда адаптера открывает в приложении ИР инструмент "Подписки на события" и передает в него активный объект метаданных либо событие активной подписки. Из результата отчета двойным кликом можно открыть подписку или обработчик в конфигураторе. Также мо...
tormozit 21 1 1

Создание записи в журнал регистрации

&НаСервере
Процедура ДобавитьЗаписьВЖурналРегистрации()

    //Индексы хранятся в каталоге 1Cv8Log в файлах с расширением .lgx
    ЗаписьЖурналаРегистрации("Обновление1С", УровеньЖурналаРегистрации.Информация,,,
    "Выполнено", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
    //ЗаписьЖурналаРегистрации(<ИмяСобытия>, <Уровень>, <ОбъектМетаданных к которому относится событие>, <Данные>, <Комментарий>, <РежимТранзакции>)
    //Обработчик...

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

&НаСервере
Процедура ДобавитьЗаписьВЖурналРегистрацииЧерезСтруктуру()

   СписокЗаписейЖурнала = Новый СписокЗначений();

   ЗаписьЖурналаНачало = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий,ДатаСобытия");
   ЗаписьЖурналаНачало.ИмяСобытия = "НачалоОбновления1С";
   ЗаписьЖурналаНачало.ПредставлениеУровня = "Информация"; //"Предупреждение", "Ошибка", "Предупреждение", "Примечание".
   ЗаписьЖурналаНачало.Комментарий = "Начато обновление конфигурации до версии 3.7.41";
   ЗаписьЖурналаНачало.ДатаСобытия = ТекущаяДата();
   СписокЗаписейЖурнала.Добавить(ЗаписьЖурналаНачало);

   //... здесь по аналогии журналируем поэтапно сам процесс

   ЗаписьЖурналаКонец = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий,ДатаСобытия");
   ЗаписьЖурналаКонец.ИмяСобытия = "ОкончаниеОбновления1С";
   ЗаписьЖурналаКонец.ПредставлениеУровня = "Информация"; //"Предупреждение", "Ошибка", "Предупреждение", "Примечание".
   ЗаписьЖурналаКонец.Комментарий = "Завершено обновление конфигурации до версии 3.7.41";
   ЗаписьЖурналаКонец.ДатаСобытия = ТекущаяДата();
   СписокЗаписейЖурнала.Добавить(ЗаписьЖурналаКонец);

   ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СписокЗаписейЖурнала);

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

ИР Анализ замера

По сравнению со штатным окном просмотра замера производительности конфигуратора команда адаптера покажет отчет, где есть в частности: имена методов каждой строки кода среднее время каждой строки кода группировки При выполнении команды замер из активного ок...
tormozit 21 1 1

mxl в таблицу значений

Преобразование mxl файла в таблицу значений
ТабДок = Новый ТабличныйДокумент; 
ТабДок.Прочитать("C:\load\vigr.mxl");
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());//передаем ТЗ
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТЗ = ПЗ.Результат.Выгрузить();

Вывод картинки при печати в Табличный документ

Вывод картинки на макет, используя функции БСП
Pah_Pah 8 1
  //В свойствах ячейки Параметра Фото1 - на вкладке Макет ПараметрКартинки указать Фото1
  //шрифт Параметра в ячейке делаем Белым, чтобы не было видно "Картинка"
  ФайлКартинки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
		Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТовары.Номенклатура),
		"ФайлКартинки");
		
		Если ЗначениеЗаполнено(ФайлКартинки.Наименование) Тогда
			
			ДвоичныеДанныеФайла                   = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);	
			Если ТипЗнч(ДвоичныеДанныеФайла)      = Тип("Картинка") Тогда
				Картинка                          = ДвоичныеДанныеФайла;
			ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
				Картинка                          = Новый Картинка(ДвоичныеДанныеФайла);
			Иначе
				Картинка                          = Новый Картинка;
			КонецЕсли;
			ОбластьСтрокаТаблицыТовары.Параметры.Фото1         = Картинка;
			
		КонецЕсли;
		ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыТовары);

Подчеркнуть текст в макете

Lina Dimitrescu 46 2 4
Функция ПодчеркнутьТекстВМакете(Строка) Экспорт
    Результат = "";
    Для Индекс = 1 По СтрДлина(Строка) Цикл
        Если Найти(" _-", Сред(Строка, Индекс, 1)) = 0 Тогда 
            Результат = Результат + Символ(863);
        КонецЕсли;
        Результат = Результат + Сред(Строка, Индекс, 1);
    КонецЦикла;

    Возврат Результат;
КонецФункции

Шаблон модуля команды для включения варианта внешнего отчета в интерфейс отдельной строкой

Для создания общей команды для запуска конкретного варианта внешнего отчета. Сам отчет включается в дополнительные, а в команде можно указать наименование встроенного варианта отчета (СКД) или добавленного пользователем. Если пользовательский вариант буде...
СергейТ 101 4 9