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

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

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

	// загружаем табдок в таблицу значений
	ОбластиТаб = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
	//
	Построитель = Новый ПостроительЗапроса;
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластиТаб);  
	Построитель.Выполнить();
	
	ТабДанные = Построитель.Результат.Выгрузить();

ИР Запомнить для сравнения

Команда ИР адаптера "Запомнить для сравнения" запоминает для сравнения выделенный или весь текст из текущего текстового поля и выводит уведомление о количестве запомненных строк текста. При каждом втором вызове открывает немодальное сравнение первого текст...
tormozit 25 1 2

1С Менеджер конфигураций Наш выбор

1С Менеджер конфигураций — альтернативный стартер информационных баз 1С:Предприятие.
1 200 руб.

Програмное перемещение строк ДанныхФормКоллекции(Таблица значений) на Клиенте

Вместо ТаблицаСоСпискомСтрок подставьте свою таблицу, с колонкой ПорядковыйНомер НаКлиенте Процедура ПереместитьСтрокуВверх(Команда) ПереместитьСтроку(-1); КонецПроцедуры НаКлиенте Процедура ПереместитьСтрокуВниз(Команда) ПереместитьСтроку(1); ...
Lega 6 1

Получение ссылки по навигационной ссылке

9815 13 1
    ПерваяТочка = Найти(НС, "e1cib/data/");
    ВтораяТочка = Найти(НС, "?ref=");
    
    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
    Ссылка = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);

Скрипт по соединению строк (аналог Vim Join)

Соединяет текущую и нижестоящую строки в одну
vigor 1
Бесплатно

Сжатие длинной Сроки

Иногда бывает необходимо сжать длинную строку. А потом восстановить эту строку
ProxyInspector 47 1 4
Функция СжатьСтроку(СтрокаJSON)
	//Для СтрокаJSON длиной 1 000 000 байт
	//СтрокаBase64 имеет длину 36 000 байт
	
	СжатиеДанных = Новый СжатиеДанных(9);
	Значение = Новый ХранилищеЗначения(СтрокаJSON,СжатиеДанных);
	СтрокаBase64 = XMLСтрока(Значение);								//Преобразуем в Base64 			
	Возврат СтрокаBase64;
КонецФункции

Функция ВосстановитьСтроку(Стр)

	Результат = Стр;
	
	Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), Стр);	
	СтрокаJSONизХранилища = Хранилище.Получить();
	Если НЕ СтрокаJSONизХранилища = Неопределено Тогда		//  Исползовалось Сжатие через ХранилищеЗначения
		Результат = СтрокаJSONизХранилища;
	КонецЕсли;				

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

ЗначениеПеречисленияПоСинониму

9815 13 1
Функция ЗначениеПеречисленияПоСинониму(ИмяПеречисления, ЗначениеСинонимаТекст)
	
	ЭлементПеречисления = Перечисления[ИмяПеречисления].ПустаяСсылка();
	Для каждого ТекЭлемент Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл
		Если ВРег(ТекЭлемент.Синоним) = ВРег(ЗначениеСинонимаТекст) Тогда
			ЭлементПеречисления = Перечисления[ИмяПеречисления][ТекЭлемент.Имя];
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ЭлементПеречисления;
	
КонецФункции

Как в TurboConf заменить Ctrl+Click для перехода к объекту на горячую клавишу

В TurboConf есть полезная команда "Перейти к объекту", которая помогает быстро перейти к объекту, например из поля Тип реквизита. Если мы кликнем мышью в поле тип, удерживая клавишу Control, то TurboConf выполнит переход к объекту. Но некоторые пользовател...
bolsun 484 6 11 10

Функция копирования колонок в таблицу или дерево значений (конструктор таблиц и деревьев значений)

Данная функция может использоваться как конструктор для создания таблицы или дерева значений из других объектов, имеющих коллекцию колонок, включая РезультатЗапроса. А также дополнения колонок из других коллекций.
Sokolin D.A. 48 2 3
// СкопироватьКолонки  —  Копирует заданные колонки из Источника в Приемник с учетом исключений
// 
// Параметры: 
// Приемник — ТаблицаЗначений, ДеревоЗначений — коллекция в которой создаются колонки
// Источник — РезультатЗапроса, ТаблицаЗначений, ДеревоЗначений — коллекция из которой копируются свойства колонок
//          — СтрокаДереваЗначений, СтрокаТаблицыЗначений — строка коллекции из которой копируются свойства колонок
// ИменаКолонок — Строка — разделенные запятыми имена колонок, которые подлежат копированию
//              — Массив, ФиксированныйМассив — массив имен колонок, которые подлежат копированию              
//              — Неопределено — копируются все колонки с учетом исключений              
// ИменаКолонокИсключений — Строка — разделенные запятыми имена колонок, которые исключены из копирования
//              		  — Массив, ФиксированныйМассив — массив имен колонок, которые исключены из копирования
//              		  — Неопределено — нет исключений              
//
// Возвращаемое значение: 
//      — ТаблицаЗначений, ДеревоЗначений — значение параметра Приемник
// Пример:
//       Дерево = СкопироватьКолонки(Новый ДеревоЗначений(), РезультатЗапроса);
//
Функция СкопироватьКолонки(Приемник, Знач Источник, Знач ИменаКолонок = Неопределено, Знач ИменаКолонокИсключений = Неопределено) Экспорт
	Перем Колонка, КоллекцияИмен, КоллекцияИменИсключений, КолонкиИсточника;        
	
	Если ЗначениеЗаполнено(ИменаКолонок) Тогда 
		Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда
		    КоллекцияИмен = РазложитьСтрокуВМассивПодстрок(ИменаКолонок, ",", Истина, Истина);
		Иначе	
		    КоллекцияИмен = ИменаКолонок;
		КонецЕсли;                      
	Иначе 
		КоллекцияИмен = Неопределено;
	КонецЕсли;     

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

Функции копирования настроек компоновки данных

С помощью этих функций можно скопировать однотипные коллекции элементов настроек компоновки, например, загрузить в компоновщик ранее сохраненные в XML настройки или, наоборот, выгрузить в XML (см. примеры в комментариях). Функции рекомендуется разместить в клиент-серверном общем модуле.
Sokolin D.A. 48 2 3

// СкопироватьЭлементыНастроекКомпоновкиДанных  —  копирует однотипные коллекции элементов настроек Компоновки Данных
// 
// Параметры: 
// КоллекцияПриемник —  — приемник,коллекция элементов Компоновки Данных, того же типа, что и источник 
// КоллекцияИсточник —  — источник, любая коллекция элементов Компоновки Данных
// ОчищатьПриемник — Булево — при значении Истина (по умолчанию) предварительно очищается коллекция приемник
//
// Пример:
//А.  
//	ЗаписьXML = Новый ЗаписьXML;
//	ЗаписьXML.УстановитьСтроку();     
//	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, НастройкиОтбора , "Filter", "http://v8.1c.ru/8.1/data-composition-system/settings");
//  УсловияСопоставленияДокументовXML = ЗаписьXML.Закрыть();
//  ......
//	ЧтениеXML = Новый ЧтениеXML;   
//	ЧтениеXML.УстановитьСтроку(УсловияСопоставленияДокументовXML);
//	НастройкиОтбораДокументов = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("ОтборКомпоновкиДанных")); 
//      СкопироватьЭлементыНастроекКомпоновкиДанных(КомпоновщикНастроек.Настройки.Отбор, НастройкиОтбораДокументов, Истина);
//  
//Б. 
//	СкопироватьЭлементыНастроекКомпоновкиДанных(ОтчетОбъект.КомпоновщикНастроек.Настройки.Порядок, Настройки.Порядок, Истина);
Процедура СкопироватьЭлементыНастроекКомпоновкиДанных(Знач КоллекцияПриемник, Знач КоллекцияИсточник, Знач ОчищатьПриемник = Истина) Экспорт
    
    Если ТипЗнч(КоллекцияИсточник) = Тип("УсловноеОформлениеКомпоновкиДанных")
        ИЛИ ТипЗнч(КоллекцияИсточник) = Тип("ВариантыПользовательскогоПоляВыборКомпоновкиДанных")
        ИЛИ ТипЗнч(КоллекцияИсточник) = Тип("ОформляемыеПоляКомпоновкиДанных")
        ИЛИ ТипЗнч(КоллекцияИсточник) = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда
        СоздаватьПоТипу = Ложь;
    Иначе
        СоздаватьПоТипу = Истина;
    КонецЕсли;
    
    ПриемникЭлементов = КоллекцияПриемник.Элементы;
    Если ОчищатьПриемник Тогда
        ПриемникЭлементов.Очистить();
    КонецЕсли;
    ИсточникЭлементов = КоллекцияИсточник.Элементы;
    
    Для каждого ЭлементИсточник Из ИсточникЭлементов Цикл
        
        Если ТипЗнч(ЭлементИсточник) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда
            Индекс = ИсточникЭлементов.Индекс(ЭлементИсточник);                            // Элементы порядка добавляем в начало

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

// ЗаполнитьЭлементыНастроекКомпоновкиДанных  —  копирует однотипные коллекции значений параметров настроек Компоновки Данных
// 
// Параметры: 
// ПриемникЗначения —  — приемник, коллекция однотипная с источником 
// ИсточникЗначения —  — источник, любая коллекция значений параметров настроек Компоновки Данных
// ПредыдущийУровень —  — предыдущий уровень в иерархии приемника
//
Процедура ЗаполнитьЭлементыНастроекКомпоновкиДанных(Знач ПриемникЗначения, Знач ИсточникЗначения, Знач ПредыдущийУровень = Неопределено) Экспорт
    
    Если ТипЗнч(ПриемникЗначения) = Тип("КоллекцияЗначенийПараметровКомпоновкиДанных") Тогда
        КоллекцияЗначений = ИсточникЗначения;
    Иначе
        КоллекцияЗначений = ИсточникЗначения.Элементы;
    КонецЕсли;
    
    Для каждого ЭлементИсточник Из КоллекцияЗначений Цикл
        Если ПредыдущийУровень = Неопределено Тогда
            ЭлементПриемник = ПриемникЗначения.НайтиЗначениеПараметра(ЭлементИсточник.Параметр);
        Иначе
            ЭлементПриемник = ПредыдущийУровень.НайтиЗначениеПараметра(ЭлементИсточник.Параметр);
        КонецЕсли;
        Если ЭлементПриемник = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник);
        Если ТипЗнч(ЭлементИсточник) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда
            Если ЭлементИсточник.ЗначенияВложенныхПараметров.Количество() <> 0 Тогда
                ЗаполнитьЭлементыНастроекКомпоновкиДанных(ЭлементПриемник.ЗначенияВложенныхПараметров, ЭлементИсточник.ЗначенияВложенныхПараметров, ПриемникЗначения);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Присоединение печатной формы в виде файла к объекту-основанию

Решение задачи по подключении печатной формы через подсистему БСП и активации функционала по прикреплению ПФ к документу-основанию! Выделенный красной линей функционал недоступен по умолчанию при подключению ПФ, ВПФ (через БСП), для того чтобы активиров...
andrey5565 286 5 7 10

Функция сортировки массива или списка значений (ссылок одного типа) по реквизитам соответствующих объектов

Например: СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Дата УБЫВ");
Sokolin D.A. 48 2 3
// СортироватьСсылкиПоРеквизитам  —  сортирует массив или список значений (ссылок одного типа) по реквизитам соответствующих объектов
// 
// Параметры: 
// КоллекцияСсылок — Массив, СписокЗначений — сортируемая коллекция однотипных ссылок
// РеквизитыСортировки — Строка — Список имен реквизитов, разделенных запятыми, по которым производится сортировка коллекции. 
//								  После каждого имени колонки через пробел может быть указано направление сортировки. 
//								  Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. 
//								  По умолчанию сортировка производится по возрастанию. Порядок указания имен реквизитов определяет порядок сортировки. 
//								  При пустом значении производится автоупорядочивание ссылок.
// Возвращаемое значение: 
//      — Массив — 
//      — СписокЗначений — 
// Пример:
//     СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Код УБЫВ");
Функция СортироватьСсылкиПоРеквизитам(Знач КоллекцияСсылок, Знач РеквизитыСортировки = Неопределено) Экспорт
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(
			"ОбщегоНазначения.СортироватьСсылкиПоРеквизитам"
			, "КоллекцияСсылок"
			, КоллекцияСсылок
			, Новый ОписаниеТипов("Массив, СписокЗначений"));
			
	Если Не ЗначениеЗаполнено(КоллекцияСсылок) Тогда
		Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
			Возврат Новый Массив;
		ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда	
			Возврат Новый СписокЗначений(); 
		КонецЕсли;
	КонецЕсли;           

	Если НЕ ЗначениеЗаполнено(РеквизитыСортировки) Тогда
		РеквизитыСортировки = "Ссылка";
	КонецЕсли;
	
	Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
		МассивСсылок = КоллекцияСсылок; 
	ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда	
		МассивСсылок = КоллекцияСсылок.ВыгрузитьЗначения(); 
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Ссылка КАК Ссылка 
		|ИЗ
		|	" + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
		|ГДЕ
		|	Таблица.Ссылка В (&МассивСсылок)
	    |УПОРЯДОЧИТЬ ПО
	    |	" + РеквизитыСортировки + "
	    |АВТОУПОРЯДОЧИВАНИЕ";

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

Определение в текущей транзакции значения РежимУправленияБлокировкойДанных

В конфигурациях в которых возможно использование обоих режимов блокировки иногда требуется определить режим текущей транзакции, например, для того чтобы начать вложенную.
Sokolin D.A. 48 2 3
Функция ОпределитьРежимУправленияБлокировкойДанных() Экспорт
    Если НЕ ТранзакцияАктивна() Тогда
        Возврат Неопределено;
    КонецЕсли;  
	
    Попытка
        НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
        ЗафиксироватьТранзакцию();
    Исключение
        Возврат РежимУправленияБлокировкойДанных.Управляемый;
    КонецПопытки; 
    Возврат РежимУправленияБлокировкойДанных.Автоматический;	
КонецФункции

Реализация функции Пауза() из 1С ERP

Оптимальное решение формирования Паузы в коде 1С. Другие способы имеют недостатки, не буду описывать все. Например, бесконечный цикл с проверкой истечения времени грузит процессор, а WshShell не будет работать под Linux.

Подсмотрено в конфигурации 1С ERP.

Sokolin D.A. 48 2 3
//Процедуру следует разместить в модуле КакойтоСерверныйОбщийМодуль :)

// Делает паузу выполнения кода
// 
// Параметры:
// 	КоличествоСекунд - Число - длительность паузы

Процедура Пауза(КоличествоСекунд) Экспорт
	Если ТипЗнч(КоличествоСекунд) <> Тип("Число") ИЛИ КоличествоСекунд < 1 ИЛИ КоличествоСекунд > 180 Тогда
		Возврат;
	КонецЕсли;

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

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

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

MenuHotkeys

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

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

Часто сайты возвращают ответ в кодировке UNICODE, при этом в ответе встречаются текст в кодировке UTF-16 и UTF-8 прочитать подобный текст для 1С - большая проблема
ProxyInspector 47 1 4
//Отдельные сайты шлют ответы в перемешку 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 286 5 7 10
		СписокСхема 		= Элементы.СписокДокументов.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
		Настройки			= Элементы.СписокДокументов.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
		
		КомпоновщикМакета 	= Новый КомпоновщикМакетаКомпоновкиДанных;
		МакетКомпоновки   	= КомпоновщикМакета.Выполнить(СписокСхема, Настройки, , 
                ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
		
		ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
		ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
		
		ПроцессорВывода 	= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
		
		ПолученныеДанные	= ПроцессорВывода.Вывести(ПроцессорКомпоновки);  // Таблица значений.

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

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

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

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

При решении различных задач программирования 1С, иногда возникает необходимость выполнения программ операционной системы. Для этого используются функции 1С КомандаСистемы() или ЗапуститьПриложение(). Однако при выполнении этих команд видно открытие окна командного интерпритатора. При периодичном вызове этих процедур это создает мерзкое впечатление. Используя WshShell, эту проблему можно обойти.
ProxyInspector 47 1 4
Процедура КомандаСистемы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(СтрокаКоманды,ИмяКаталога, ЗакрыватьОкно, ПоказыватьОкно, ОжидатьЗавершениеКоманды);
	
КонецПроцедуры