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

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

Свернуть таблицу значений на клиенте (ДанныеФормыЗначение)

Сворачивает реквизит формы типа "ТаблицаЗначений" на клиенте. Процедуру можно вставить в клиентский общий модуль и использовать для сворачивания таблицы значений (ДанныеФормыКоллекция) без серверного вызова. // Сворачивает ДанныеФормыКоллекция по указан...
Little Friend 28 2 1

Преобразование Хранилище Значения в Двоичные данные и обратно

При обмене данными через WEB сервисы иногда возникает задача передавать данные в сжатом виде. Для этого лучше всего использовать объект 1С ХранилищеЗначения. Тут возникает проблема преобразования ХранилищаЗначения в ДвоичныеДанные и обратно. Внятного алгоритма реализации этого алгоритма 1С не предоставляет.
ProxyInspector 78 4 3
Процедура КнопкаТестироватьХранилищеЗначенияНажатие(Элемент)
		
	СтрокаJSON = "Строка для преобразования";
	
	//Преобразуем Строку в Хранилище значения со сжатием.
	СжатиеДанных = Новый СжатиеДанных(9);
	ХранилищеЗначения = Новый ХранилищеЗначения(СтрокаJSON,СжатиеДанных);

	//Преобразуем Хранилище Значения в Двоичные данные
	СтрBase64 = XMLСтрока(ХранилищеЗначения);					
	ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрBase64,"UTF-8", Ложь);
	
	
	//Преобразуем Двоичные данные в Хранилище значений
	РезультатСтрBase64 = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные,"UTF-8");
	РезультатХранилище = XMLЗначение(Тип("ХранилищеЗначения"), РезультатСтрBase64);	
	
	//Получим строку из Хранилища
	СтрокаJSONизХранилища = РезультатХранилище.Получить();
	
	
КонецПроцедуры

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

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

Создание дополнительного реквизита в наборе

flashman 11 1
// Создает в базе дополнительный реквизит в наборе, по значению переданных на вход параметров.
// При отсутствии создает набор по имени
// ИмяСвойства 					- (Строка) Для поиска (создания при отсутствии) свойства.
// ТипЗначения 					- (Описание типов) Для создания нового свойства, при отсутствии.
// НаименованиеНабора 			- (Строка) Для поиска (создания при отсутствии) набора свойств
//									и для включения дополнительного реквизита в набор.
// ИмяПредопределенногоНабора 	- Для проявления вновь созданного набора в списке.
// 									Для полноценного использования (видимости в форме)
//									его придется сделать предопределенным.
// МассивЗначений 				- Массив строковых значений, если хотим сделать перечисление
//									на основе справочника "ЗначенияСвойствОбъектов".
// НаименованиеСвойства 		- (Строка) (если хотим, чтобы наименование и заголовок реквизита отличались от имени)
Процедура СоздатьДопРеквизит(ИмяСвойства, ТипЗначения, НаименованиеНабора, ИмяПредопределенногоНабора = "",
							 МассивЗначений = Неопределено, НаименованиеСвойства = "") Экспорт

	Набор = Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию(НаименованиеНабора);
	Если Не ЗначениеЗаполнено(Набор) Тогда
		НаборОбъект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();
		НаборОбъект.Наименование = НаименованиеНабора;
		НаборОбъект.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора;
		НаборОбъект.Используется = Истина;
		НаборОбъект.Записать();
		Набор = НаборОбъект.Ссылка;
	КонецЕсли;

	Если ЗначениеЗаполнено(ИмяПредопределенногоНабора) И Не Набор.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора Тогда
	    НаборДополнительныхРеквизитов = Набор.ПолучитьОбъект();
		НаборДополнительныхРеквизитов.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора;
		НаборДополнительныхРеквизитов.Записать();
	КонецЕсли;

	Свойство = ПолучитьСоздатьСвойство(ИмяСвойства, ТипЗначения, , Ложь, Набор, НаименованиеСвойства);

	Если Не Свойство = Неопределено И Не МассивЗначений = Неопределено Тогда

			ТаблицаНужныхЗначений = Новый ТаблицаЗначений();
		    ТаблицаНужныхЗначений.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(100)));
			Для Сч = 1 По МассивЗначений.Количество() Цикл
			    ТаблицаНужныхЗначений.Добавить();
			КонецЦикла;
		    ТаблицаНужныхЗначений.ЗагрузитьКолонку(МассивЗначений, "Наименование");

			ЗапросЗначения = Новый Запрос();
			ЗапросЗначения.УстановитьПараметр("Владелец", Свойство);
			ЗапросЗначения.УстановитьПараметр("ТаблицаНужныхЗначений", ТаблицаНужныхЗначений);
			ЗапросЗначения.Текст = "ВЫБРАТЬ
			                       |	ТаблицаНужныхЗначений.Наименование КАК Наименование
			                       |ПОМЕСТИТЬ ТаблицаНужныхЗначений
			                       |ИЗ
			                       |	&ТаблицаНужныхЗначений КАК ТаблицаНужныхЗначений
			                       |;
			                       |
			                       |////////////////////////////////////////////////////////////////////////////////
			                       |ВЫБРАТЬ
			                       |	ТаблицаНужныхЗначений.Наименование КАК Наименование
			                       |ИЗ
			                       |	ТаблицаНужныхЗначений КАК ТаблицаНужныхЗначений
			                       |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
			                       |		ПО ТаблицаНужныхЗначений.Наименование = ЗначенияСвойствОбъектов.Наименование
			                       |			И (ЗначенияСвойствОбъектов.Владелец = &Владелец)
			                       |ГДЕ
			                       |	ЗначенияСвойствОбъектов.Наименование ЕСТЬ NULL";

			Результат = ЗапросЗначения.Выполнить();
			Если Не Результат.Пустой() Тогда
				Выборка = Результат.Выбрать();
				Пока Выборка.Следующий() Цикл
					НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
					НовоеЗначение.Владелец = Свойство;
					НовоеЗначение.Наименование = Выборка.Наименование;
					НовоеЗначение.Записать();
				КонецЦикла;
			КонецЕсли;

	КонецЕсли;

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

Локализация объекта по уникальному значению свойства

flashman 11 1
&НаСервере
Процедура ПримерПолученияОбъекта(УИД) Экспорт
	НужныйОбъект = ПолучитьОбъектПоЗначениюСвойства("УИД_НашегоДокумента", УИД, "Документ.ЗаказКлиента");
КонецПроцедуры

&НаСервере
// Универсальная функция. Получает объект определенного типа по уникальному значению свойства.
// Свойство - Либо свойство (ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения), либо Имя (строка)
// ЗначениеСвойства - значение, передаваемое для поиска объекта.
// ИмяМетаданные - Имя метаданных ("Документ.ЗаказКлиента"). Сильно ускоряет запрос.
Функция ПолучитьОбъектПоЗначениюСвойства(Свойство_Или_Имя, ЗначениеСвойства, ИмяМетаданные) Экспорт

	Ответ = Неопределено;

	Если ТипЗнч(Свойство_Или_Имя) = Тип("Строка") Тогда
		Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
	Иначе
		Свойство = Свойство_Или_Имя;
	КонецЕсли;

	Если Не Свойство = Неопределено Тогда

		Запрос = Новый Запрос();
		Запрос.Текст =
		"ВЫБРАТЬ
		|	ДополнительныеСведения.Объект КАК Объект,
		|	ДополнительныеСведения.Свойство КАК Свойство,
		|	ДополнительныеСведения.Значение КАК Значение
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		|ГДЕ
		|	ДополнительныеСведения.Значение = &ЗначениеСвойства
		|	И ДополнительныеСведения.Свойство = &Свойство
		|	И ДополнительныеСведения.Объект ССЫЛКА Справочник.Номенклатура";


		Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Номенклатура", ИмяМетаданные);

		Запрос.УстановитьПараметр("Свойство", Свойство);
		Запрос.УстановитьПараметр("ЗначениеСвойства", ЗначениеСвойства);
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			Ответ = Выборка.Объект;
		КонецЕсли;

	КонецЕсли;

	Возврат Ответ;

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

Работа со значением свойства

flashman 11 1
&НаСервере
Процедура ПримерыВызова(ТаблицаОбъектов) Экспорт

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

	//Для разового вызова
	Если ТаблицаОбъектов.Количество() > 0 Тогда
		УИД = ПолучитьУстановитьЗначениеСвойства("УИД_НашегоДокумента", ТаблицаОбъектов[0].СсылкаНаОбъект);
		НовыйУИД = СтрЗаменить(УИД, "1", "2");
		Результат = ПолучитьУстановитьЗначениеСвойства("УИД_НашегоДокумента", ТаблицаОбъектов[0].СсылкаНаОбъект, НовыйУИД);
	КонецЕсли;

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

&НаСервере
// Универсальная функция. Получает значение свойства. При заполненном параметре ЗначениеСвойства может свойство установить.
// Свойство - Либо свойство (ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения), либо Имя (строка)
// СсылкаНаОбъект - Объект в регистре сведений "ДополнительныеСведения"
// ЗначениеСвойства - Значение, передаваемое для установки.
Функция ПолучитьУстановитьЗначениеСвойства(Свойство_Или_Имя, СсылкаНаОбъект, ЗначениеСвойства = Неопределено) Экспорт

	Ответ = Неопределено;

	Если ТипЗнч(Свойство_Или_Имя) = Тип("Строка") Тогда
		Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
	Иначе
		Свойство = Свойство_Или_Имя;
	КонецЕсли;

	Если Не Свойство = Неопределено Тогда
		Попытка
			МЗ = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
			МЗ.Объект = СсылкаНаОбъект;
			МЗ.Свойство = Свойство;
			МЗ.Прочитать();
			Если Не МЗ.Выбран() Или (Не ЗначениеСвойства = Неопределено И Не МЗ.Значение = ЗначениеСвойства) Тогда
				Если Не ЗначениеСвойства = Неопределено Тогда
					МЗ.Объект = СсылкаНаОбъект;
					МЗ.Свойство = Свойство;
					МЗ.Значение = ЗначениеСвойства;
					МЗ.Записать();
				КонецЕсли;
			КонецЕсли;
			Если ЗначениеЗаполнено(МЗ.Значение) Тогда
				Ответ = МЗ.Значение;
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЕсли;

	Возврат Ответ;

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


&НаСервере
Процедура ПримерВызова2() Экспорт

	ТипЗначения = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(36));
	ПолучитьСоздатьСвойство("СДЭК_КодПВЗ", ТипЗначения, , , , "Код ПВЗ СДЭК");
	ПолучитьСоздатьСвойство("СДЭК_КодТарифа", ТипЗначения, , , , "Код тарифа СДЭК");
	ПолучитьСоздатьСвойство("СДЭК_УИД", ТипЗначения, , , , "УИД от СДЭК");
	ПолучитьСоздатьСвойство("СДЭК_УИД_ШК", ТипЗначения, , , , "УИД ШК от СДЭК");
	ПолучитьСоздатьСвойство("СДЭК_ИД", ТипЗначения, , , , "Account");
	ПолучитьСоздатьСвойство("СДЭК_ApiKey", ТипЗначения, , , , "Secure password");
	ПолучитьСоздатьСвойство("СДЭК_Сайт", ТипЗначения, , , , "Сайт");
	ПолучитьСоздатьСвойство("СДЭК_ВерсияAPI", ТипЗначения, , , , "Версия");

	ТипЗначения = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(500));
	ПолучитьСоздатьСвойство("СДЭК_ОшибкиЗапроса", ТипЗначения, , , , "Сообщение СДЭК");
	ПолучитьСоздатьСвойство("СДЭК_URL_ШК", ТипЗначения, , , , "URL ШК СДЭК");

	ТипЗначения = Новый ОписаниеТипов("Булево");
	ПолучитьСоздатьСвойство("Это_СДЭК", ТипЗначения, , , , "Признак СДЭК");

	ТипЗначения = Новый ОписаниеТипов("Число");
	ПолучитьСоздатьСвойство("СДЭК_Порт", ТипЗначения, , , , "Порт");
	ПолучитьСоздатьСвойство("СДЭК_Вес", ТипЗначения, , , , "Вес");
	ПолучитьСоздатьСвойство("СДЭК_Глубина", ТипЗначения, , , , "Глубина");
	ПолучитьСоздатьСвойство("СДЭК_Ширина", ТипЗначения, , , , "Ширина");
	ПолучитьСоздатьСвойство("СДЭК_Высота", ТипЗначения, , , , "Высота");

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

Получить свойство по имени, создать его при отсутствии

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

	Свойство = Неопределено;

	СоздатьСвойство = Ложь;

	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("ИмяСвойства", ИмяСвойства);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
	|ИЗ
	|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
	|ГДЕ
	|	ДополнительныеРеквизитыИСведения.Имя = &ИмяСвойства
	|	И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления";

	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Свойство = Выборка.Ссылка;
	Иначе
		Если Не ТипЗначения = Неопределено Тогда
			СоздатьСвойство = Истина;
		КонецЕсли;
	КонецЕсли;

	Если СоздатьСвойство Или ЗначениеЗаполнено(НаименованиеСвойства) И Не Свойство.Наименование = НаименованиеСвойства Тогда
		Попытка
			Если СоздатьСвойство Тогда
				СвойствоОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
			Иначе
				СвойствоОбъект = Свойство.ПолучитьОбъект();
			КонецЕсли;
			СвойствоОбъект.Наименование = ?(ЗначениеЗаполнено(НаименованиеСвойства), НаименованиеСвойства, ИмяСвойства);
			СвойствоОбъект.Имя = ИмяСвойства;
			СвойствоОбъект.Доступен = Истина;
			СвойствоОбъект.ТипЗначения = ТипЗначения;
			СвойствоОбъект.ЭтоДополнительноеСведение = ЭтоДополнительноеСведение;
			СвойствоОбъект.Комментарий = Комментарий;
			СвойствоОбъект.Заголовок = СвойствоОбъект.Наименование;
			СвойствоОбъект.ДополнительныеЗначенияИспользуются = Истина;
			СвойствоОбъект.Виден = Истина;
			СвойствоОбъект.НаборСвойств = НаборСвойств;
			СвойствоОбъект.Записать();
			Свойство = СвойствоОбъект.Ссылка;
			Если СоздатьСвойство И ЗначениеЗаполнено(НаборСвойств) Тогда
				ИмяТабчасти = ?(ЭтоДополнительноеСведение, "ДополнительныеСведения", "ДополнительныеРеквизиты");
				ИмяРеквизитаКоличества = ?(ЭтоДополнительноеСведение, "КоличествоСведений", "КоличествоРеквизитов");
				Если НаборСвойств[ИмяТабчасти].Найти(Свойство, "Свойство") = Неопределено Тогда
					НаборОбъект = НаборСвойств.ПолучитьОбъект();
					ТабЧасть = НаборОбъект[ИмяТабчасти];
					НоваяСтрока = ТабЧасть.Добавить();
					НоваяСтрока.Свойство = Свойство;
					НаборОбъект[ИмяРеквизитаКоличества] = ТабЧасть.Количество();
					НаборОбъект.Записать();
				КонецЕсли;
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЕсли;

	Возврат Свойство;

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

Найти объект в базе по GUID

Найти объект в базе по УИД
kelehsaev 12 1
Функция ПолучитьОбъектПоУИД(УИДОбъекта)  

    СсылкаНаОбъект = Неопределено;
    
    // все объекты по которым можно получить ссылку 
    СписокОбъектовМетаданных = Новый Массив;
    СписокОбъектовМетаданных.Добавить(Справочники);
    СписокОбъектовМетаданных.Добавить(Документы);
    СписокОбъектовМетаданных.Добавить(ПланыВидовХарактеристик);
    СписокОбъектовМетаданных.Добавить(ПланыСчетов);
    СписокОбъектовМетаданных.Добавить(ПланыОбмена);
    СписокОбъектовМетаданных.Добавить(БизнесПроцессы);
    СписокОбъектовМетаданных.Добавить(Задачи);
    
    Для Каждого текСтрМетаданных Из СписокОбъектовМетаданных Цикл   
        Для Каждого текСтрМенеджер Из текСтрМетаданных Цикл 
            СсылкаНаОбъект = текСтрМенеджер.ПолучитьСсылку(УИДОбъекта);
            Если СсылкаНаОбъект.ПолучитьОбъект() <> Неопределено Тогда          
                Возврат СсылкаНаОбъект //нашли
            КонецЕсли;      
        КонецЦикла;
    КонецЦикла;
    
    Возврат СсылкаНаОбъект //не нашли
    
КонецФункции

ИР Кнопка "Сравнить" в окне "Выражение"

Эта кнопка адаптера при нечетном нажатии запоминает значение текущего свойства для сравнения, а при четном открывает анализ различий между первым и вторым значением. Допускается сравнение двух состояний одного объекта. В этом случае сравниваются одноуровне...
tormozit 29 1 3

ИР Редактировать таблицу

Эта команда адаптера в редакторе табличного документа сохраняет документ во временный файл, конвертирует его в таблицу значений и открывает модально ее редактор. При нажатии ОК в редакторе таблицы из нее создается новый табличный документ и загружается в р...
tormozit 29 1 3

ИР Найти в окнах

Эта команда адаптера анализирует дочерние окна текущего конфигуратора и активирует в них текущий объект метаданных Для метаданных верхнего уровня - во всех окнах сравнения конфигураций и файлов конфигураций и файлов расширений конфигураций и активирует пер...
tormozit 29 1 3

ИР Кнопка "Условие останова" в окне "Выражение"

Эта кнопка адаптера добавляет условие в точку останова текущей строки модуля по значению выделенного свойства объекта .
tormozit 29 1 3

ИР кнопки "Вертикаль" и "Горизонталь" окна "Тип элемента" редактора формы

Эти кнопки адаптера в окне выбора типа создаваемого элемента управляемой формы создают обычную группу с установкой свойства "Группировка"="Вертикальная"/"Горизонталь". Такое значение свойства избавляет от неожиданного изменения расположения элементов формы...
tormozit 29 1 3

ИР Кнопка "Список" в окне <Коллекция>

Эта кнопка адаптера открывает расширенную форму выбора элемента коллекции (редактор таблицы значений ИР) и выборе активирует элемент в родном списке. В расширенной форме выбора доступна удобная фильтрация и множество других функций.
tormozit 29 1 3

ИР Кнопка "Перейти" в окне "Событие"

Эта кнопка адаптера выполняет переход к строке модуля, на которую указывает поле "Комментарий".
tormozit 29 1 3

ИР Редактировать компоновку

Эта команда адаптера в окне конструктора схемы компоновки сохраняет схему во временный файл, открывает консоль компоновки данных ИР в режиме редактора и загружает туда схему из временного файла. После завершения редактирования сохраненную в файл схему нужн...
tormozit 29 1 3

ИР Кнопка "Из результатов поиска" в окне "Точки останова"

Эта кнопка адаптера добавляет точки останова из уже выделенных результатов поиска, копируя настройки текущей точки.
tormozit 29 1 3

ИР Кнопка "Изменить" в окне "Пользователь"

Эта кнопка адаптера активирует окно приложения ИР и немодально открывает там расширенный редактор текущего пользователя. Расположение кнопки: Окно редактора пользователя ИР, где в частности есть команда запуска приложения от имени пользователя:
tormozit 29 1 3

ИР Кнопка "Список" в окне "Выбор картинки"

Эта кнопка адаптера открывает расширенную форму выбора картинок и при выборе там строки активирует ее в штатном списке. В расширенной форме выбора доступны история выбора фильтр с историей колонки свойств картинок матричный выбор
tormozit 29 1 3

ИР Кнопка "Сравнить" в окне "Различие между"

Эта кнопка адаптера открывает немодальное сравнение первого текста со вторым (с учетом программного языка на платформе 1С 8.3.15+) в главном окне приложения ИР. Этот сравнение показывает различия детальнее, чем штатное, и позволяет быстрее принимать решени...
tormozit 29 1 3

ИР Кнопка "Сравнить" в окне "Сравнение модулей"

Эта кнопка адаптера открывает модальное сравнение первого текста со вторым (с учетом программного языка на платформе 1С 8.3.15+) в сравнении текстов ИР. Этот сравнение показывает различия детальнее, чем штатное, и позволяет быстрее принимать решения. Смотр...
tormozit 29 1 3