Произношение текста голосом

произносит заданную фразу
Диалог Сообщить Голос Звук
10 Добавил: Jratdroid
Voice = Новый COMObject("SAPI.SpVoice");
Voice.Speak("Привет!");

Задать вопрос

Вопрос и обработка ответа без синхронных методов (не модально)
Вопрос Оповещение Диалог Немодально
5 Добавил: Jratdroid
&НаКлиенте
Процедура ДиалогСВопросом(Команда)
     Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);	
     ПоказатьВопрос(Оповещение,  "Текст вопроса",  
        РежимДиалогаВопрос.ДаНетОтмена,
        0, // таймаут в секундах
        КодВозвратаДиалога.Да, // кнопка по умолчанию
        "Заголовок" 
    );    
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
     Если Результат = КодВозвратаДиалога.Да Тогда
        Сообщить("Ответ Да!");
    КонецЕсли;	
 КонецПроцедуры

Преобразование ЧтениеJSON в Соответствие

Преобразует ЧтениеJSON любой глубины в Соответствие. Пример вызова: //JSONТекст - исходный текст в формате JSON Результат = Неопределено; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(JSONТекст); ОбработатьJSON(ЧтениеJSON, Результат); //Здесь на выходе из процедуры Результат = Соответствие;
ЧтениеJSON JSON Соответствие.
6 Добавил: nytlenc
&НаСервере
Процедура ОбработатьJSON(ЧтениеJSON, Результат)
	
	ИмяСвойства = Неопределено;
	
	Пока ЧтениеJSON.Прочитать() Цикл
		TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
		
		Если TипJSON = ТипЗначенияJSON.НачалоОбъекта 
			ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
			НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);
			
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(НовыйОбъект);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда
				Результат.Вставить(ИмяСвойства, НовыйОбъект);
			КонецЕсли;
			
			ОбработатьJSON(ЧтениеJSON, НовыйОбъект);
			
			Если Результат = Неопределено Тогда
				Результат = НовыйОбъект;
			КонецЕсли;
		ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
			ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
		ИначеЕсли TипJSON = ТипЗначенияJSON.Число 
			ИЛИ TипJSON = ТипЗначенияJSON.Строка 
			ИЛИ TипJSON = ТипЗначенияJSON.Булево 
			ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(ЧтениеJSON.ТекущееЗначение);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") Тогда
				Результат.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
			КонецЕсли;
		Иначе
			Возврат;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

Последняя строка таблицы на одной странице вместе с подвалом

ВместеСоСледующим
1 Добавил: Dmitry Zhurbenko
 //После цикла вывода строк

ТабДок.Область(ТабДок.ВысотаТаблицы, ,ТабДок.ВысотаТаблицы,).ВместеСоСледующим = Истина;

Чтение файлов Excel в таблицу значений (автоматическое наименование столбцов)

Функция считывает содержимое страницы файла Excel в таблицу значений, автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на "".
Таблица значений чтение Excel Excel
20 Добавил: eXtend88
&НаСервере
Функция ПодготовитьТаблицуСДанными(ФайлАдресВХранилище)
	
	ИмяФайлаСервер = ПолучитьИмяВременногоФайла(".xlsx");
	ФайлИмпорта = ПолучитьИзВременногоХранилища(ФайлАдресВХранилище);
	ФайлИмпорта.Записать(ИмяФайлаСервер);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Попытка
		ТабличныйДокумент.Прочитать(ИмяФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;	
	
	ПЗ = Новый ПостроительЗапроса;
	ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
	ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
	ПЗ.ЗаполнитьНастройки();
	ПЗ.Выполнить();
	
	ТаблицаПромежуточныхДанных = ПЗ.Результат.Выгрузить();
	
	Возврат	ТаблицаПромежуточныхДанных;
	
КонецФункции

Отбор по таблице значений

Отбор строк по таблице значений
отбор ТаблицаЗначений ТЗ таблица значений
1 Добавил: gorenski
СтруктураОтбора = Новый Структура("Номенклатура,ХарактеристикаНоменклатуры", ЗначениеОтбора.Номенклатура, ЗначениеОтбора.ХарактеристикаНоменклатуры);
РезультатОтбора = ТаблицаЗначений.НайтиСтроки(СтруктураОтбора);
//Если РезультатОтбора.Количество() > 0 Тогда
//	СтрокаОтбора = РезультатОтбора[0];
//КонецЕсли;
Для каждого СтрокаОтбора Из РезультатОтбора Цикл
	
КонецЦикла;

Прибавить к дате день

Прибавить, добавить, дата, день
Дата
1 Добавил: Александр Near IT
&НаСервереБезКонтекста
Функция ПрибавитьКДатеДень(Дата, КоличествоДней = 1)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("КоличествоДней", КоличествоДней);
	Запрос.Текст =
		"ВЫБРАТЬ
		|	ДОБАВИТЬКДАТЕ(&Дата, ДЕНЬ, &КоличествоДней) КАК Дата";
		
	Результат = Запрос.Выполнить().Выбрать();
	Результат.Следующий();
	Возврат  Результат.Дата;
	
КонецФункции

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

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

Таблица значений

обход таблицы и работа с ней по условию
ТЗ таблица значений
Добавил: Максим1C
//Создаем таблицу значений
	ТабЗнч = Новый ТаблицаЗначений;
	ТабЗнч.Колонки.Добавить("Наименование");
	ТабЗнч.Колонки.Добавить("Значение");
	
	//Заполняем ТЗ
	Для н=1 По 100 Цикл
		
		СтрокаТЗ = ТабЗнч.Добавить();
		СтрокаТЗ.Наименование = "Н"+н;
		СтрокаТЗ.Значение = "К"+н;
		
		//Здесь каждый 10-й элемент делаем дубляжом
		Если (н%10)=0 Тогда
			СтрокаТЗ2 = ТабЗнч.Добавить();
			СтрокаТЗ2.Наименование = "Н"+н;
			СтрокаТЗ2.Значение = "К"+н;
		КонецЕсли;
		
	КонецЦикла;
	
	//Перебираем заполненное ТЗ
	Для й=0 По ТабЗнч.Количество()-1 Цикл
		
		//Не даем провалиться индексу за грани
		Если й>ТабЗнч.Количество()-1 Тогда
			
			Прервать;
			
		КонецЕсли;
		
		//Пропускаем первый элемент
		Если й=0 Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		//Ну и собственно сравниваем значения текущего с предыдущем
		Если ТабЗнч[й].Наименование = ТабЗнч[й-1].Наименование Тогда
			
			ТабЗнч[й-1].Значение = ТабЗнч[й-1].Значение + ", " + ТабЗнч[й].Значение;
			
			ТабЗнч.Удалить(й);
			
		КонецЕсли;
		
	КонецЦикла;

Получить Реквизиты Объекта В Структуру

Возвращает значение или структуру с именами и значениями реквизитов произвольного объекта ссылочного типа прочитанные из информационной базы
Реквизит Объект Структура Получить
3 Добавил: Александр Near IT
// Возвращает значение или структуру с именами и значениями реквизитов произвольного объекта ссылочного типа
// прочитанные из информационной базы
//
// Параметры:
//  Ссылка - произвольный объект ссылочного типа (справочник, документ, план обмена, ПВХ, задача)
//  СтруктураРеквизитов - Необязательно. Может содержать значения:
//                      строка - имя реквизита объекта.
//                      строка - имена реквизитов, перечисленные через запятую, в формате требований к свойствам структуры.
//                      структура - структура с именами реквизитов.
//
//
// Возвращаемое значение:
//  Структура - если СтруктураРеквизитов имеет тип Структура и заполнен - структура с именами и значениями указанных реквизитов
//  Структура - если СтруктураРеквизитов не указан или не заполнен - структура с именами и значениями всех реквизитов объекта
//  Произвольный - если СтруктураРеквизитов строкового типа - значение данного реквизита
//
Функция ПолучитьРеквизитыОбъекта(Знач Ссылка, Знач СтруктураРеквизитов = Неопределено) Экспорт

    МетаданныеОбъекта = Ссылка.Метаданные();
    ИмяТаблицы = МетаданныеОбъекта.ПолноеИмя();

    ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоПланОбмена = ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоПВХ = ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоПланВидовРасчета = ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоДокумент = (Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) ИЛИ БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)));
    ЭтоЗадача = Задачи.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));

    ТекстЗапроса = "ВЫБРАТЬ ";

    //Формируем список реквизитов объекта для запроса
    Если ТипЗнч(СтруктураРеквизитов) = Тип("Строка") И ЗначениеЗаполнено(СтруктураРеквизитов) Тогда

        ТекстЗапроса = ТекстЗапроса + СокрЛП(СтруктураРеквизитов);
        //Если передали список реквизитов, инициализируем структуру
        Если Найти(СтруктураРеквизитов, ",") <> 0 Тогда
            СтруктураРеквизитов = Новый Структура(СтруктураРеквизитов);
        КонецЕсли;

    ИначеЕсли ТипЗнч(СтруктураРеквизитов) = Тип("Структура") И СтруктураРеквизитов.Количество() > 0 Тогда

        Для каждого Реквизит Из СтруктураРеквизитов Цикл ТекстЗапроса = ТекстЗапроса + Реквизит.Ключ + ","; КонецЦикла;

        //Отрезаем последнюю запятую
        ТекстЗапроса = Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1);

    Иначе

        //Определяем список реквизитов объектов для подстановки в текст запроса
        СписокРеквизитов = "";
        Если ЭтоСправочник ИЛИ ЭтоПланОбмена ИЛИ ЭтоПВХ ИЛИ ЭтоПланВидовРасчета Тогда
            Если МетаданныеОбъекта.ДлинаКода > 0 Тогда
                СписокРеквизитов = "Код,";
            КонецЕсли;
            Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
                СписокРеквизитов = СписокРеквизитов + "Наименование,";
            КонецЕсли;
            Если ЭтоСправочник ИЛИ ЭтоПВХ Тогда
                Если МетаданныеОбъекта.Иерархический Тогда
                    СписокРеквизитов = СписокРеквизитов + "Родитель,";
                КонецЕсли;
                Если ЭтоСправочник И (МетаданныеОбъекта.Владельцы.Количество() <> 0) Тогда
                    СписокРеквизитов = СписокРеквизитов + "Владелец,";
                КонецЕсли;
            КонецЕсли;
        ИначеЕсли ЭтоДокумент Тогда
            Если МетаданныеОбъекта.ДлинаНомера > 0 Тогда
                СписокРеквизитов = "Номер,";
            КонецЕсли;
            СписокРеквизитов =  СписокРеквизитов + "Дата,";
        ИначеЕсли ЭтоЗадача Тогда
            Если МетаданныеОбъекта.ДлинаНомера > 0 Тогда
                СписокРеквизитов = "Номер,";
            КонецЕсли;
            СписокРеквизитов =  СписокРеквизитов + "Дата,";
            Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
                СписокРеквизитов = СписокРеквизитов + "Наименование,";
            КонецЕсли;
        КонецЕсли;

        СписокРеквизитов = СписокРеквизитов + "ПометкаУдаления,";

        Для каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл СписокРеквизитов = СписокРеквизитов + Реквизит.Имя + ","; КонецЦикла;

        //Отрезаем последнюю запятую
        СписокРеквизитов = Лев(СписокРеквизитов, СтрДлина(СписокРеквизитов) - 1);
        СтруктураРеквизитов = Новый Структура(СписокРеквизитов);

        ТекстЗапроса = ТекстЗапроса + СписокРеквизитов;

    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса + "
        |ИЗ " + ИмяТаблицы + "
        |ГДЕ Ссылка = &Ссылка";

    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

    Возврат Неопределено;

КонецФункции //ПолучитьРеквизитыОбъекта()