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

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

Обновить список документов - аналог кнопки F5

Автор: HostHost

FastCode 66 8
ОповеститьОбИзменении(Тип("ДокументСсылка.РаботаВВыходныеИПраздничныеДни"));

Удаление повторяющихся символов в начале или конце текста

Функции СокрЛ, СокрП, СокрЛП удаляют любое количество пробелов в начале или конце строки. Этим можно воспользоваться, чтобы удалить другие начальные или конечные повторяющиеся символы, заменив их на пробел, а затем выполнив обратную замену.

Автор: ildarovich

FastCode 66 8
//Например, чтобы удалить любое количество точек в конце строки, можно воспользоваться выражением:
СтрЗаменить(СокрП(СтрЗаменить(ИсходнаяСтрока, ".", " ")), " ", ".")

//Правда, если исходная строка изначально содержит пробелы, то результат будет неправильным. В этом случае предварительно требуется заменить пробелы каким-либо редким сочетанием символов, а после преобразования выполнить обратную замену.

СтрЗаменить(СтрЗаменить(СокрП(СтрЗаменить(СтрЗаменить(ИсходнаяСтрока, " ", Символы.НПП), ".", " ")), " ", "."), Символы.НПП, " ")

FastCode - сервис для программистов 1С Промо

Огромная база полезных шаблонов кода, статьи, курсы, интересные разработки, поиск по БСП, ответы на вопросы, помощь сообщества разработчиков. Клиент для поиска прямо в Конфигураторе!
bolsun
Бесплатно

Подсистема "Инструменты разработчика" для 1С 8.2 и 8.3

Продукт представляет собой интегрированный в подсистему набор мощных инструментов разработчика на платформе 1С 8. Почти все они выполнены на обычных формах и потому работают только в толстых клиентах. Подсистема получила награду "Лучшая разработка" на конференции Infostart Event Evolution 2013.
Бесплатно

Определение, вместится ли текст в ячейку табличного документа

Функция для определения вместимости текста в ячейку табличного документа
ChOP 30 5
//Функция для определения вместится ли текст в ячейку:
//
// Параметры:
//  пОбласть -Область табличного документа- Область табличного документа, которую надо проверить на вместимости.
//	"пОбласть = пТабДок.Области.ТекстЗаготовки;". "ТекстЗаготовки" имя ячейки.
//
//  Для возможности использования этого метода необходимо соблюдать следующие условия:
// 
//	пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
//  "пТабДок = Макет.ПолучитьОбласть("ТекстЗаготовки");"
//
//  пТекст - Строка - Проверяемый текст.
//
//	1. Необходимо как-нибудь назвать область.
//	2. Заполнение области = Текст, а не Параметр или Шаблон.
//	Во всяком случае, я ничего простого не придумал. И так как жизнь это усложняет не сильно не стал заморачиваться из-за этого.
//	3. Размещение текста (Параметр ячейки) = Перенос. Вот это нужно обязательно! Размещение текста програмно поставить можно, но эффект от изменения,
//	насколько я понял, появляется только после отображения табличного документа с этой ячейкой.
//
// Возвращаемое значение:
//  Булево.
//
Функция ТекстУмещаетсяВЯчейке(пОбласть, пТабДок, пТекст) Экспорт
	
	ВысотаДо = ВысотаОбластиВмм(пОбласть, пТабДок);
	
	// Скопируем область в новый табличный документ.
	// И там уже будем играть с её свойствами.
	ВремТабДок = Новый ТабличныйДокумент;
	ВремТабДок.Вывести(пТабДок);
	ВремОбласть = ВремТабДок.Область(пОбласть.Имя);
	
	ВремОбласть.АвтоВысотаСтроки = Истина;
	ВремОбласть.ВысотаСтроки     = 0;
	
	ВремОбласть.Текст = пТекст + "Щ"; // Для исключения ситуаций вида "на грани переноса"
	ВысотаПосле       = ВысотаОбластиВмм(ВремОбласть, ВремТабДок);
	
	Возврат ВысотаДо >= ВысотаПосле;
	
КонецФункции


//Функция возвращает высоту области таб. документа в мм
//
// Параметры:
// пОбласть - Область табличного документа -  Область табличного документа которую надо проверить.
// 
// пТабДок - Табличный документ - Табличный документ, в котором происходит проверка.
//
// Возвращаемое значение:
// число.
//
Функция ВысотаОбластиВмм(пОбласть, пТабДок)
    
    Надпись = пТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);    
    Надпись.Расположить(пОбласть);    
    Высота = Надпись.Высота;    
    пТабДок.Рисунки.Удалить(Надпись);
    
    Возврат(Высота);
    
КонецФункции

1С RabbitMQ. Вебинар от Алексея Лустина

Научись создавать систему обмена сообщениями 1С RabbitMQ за 5 часов
FastCode 66 8
-10%

1С + Kafka. Вебинар от Алексея Лустина

Научись создавать систему обмена сообщениями для 1С на Apache Kafka за 5 часов
FastCode 66 8
-10%

Актуальные символы препроцессора

Возвращает массив символов препроцессора актуальных при вызове. Функция может быть полезна в процессе изучения/освоения особенностей клиент-серверного взаимодействия. <Символ препроцессора> = {НаКлиенте | НаСервере | ТолстыйКлиентОбычноеПриложение | ТолстыйКлиентУправляемоеПриложение | Клиент | Сервер | ВнешнееСоединение }
SDV 38 8
&НаКлиентеНаСервере
Функция АктуальныеСимволыПрепроцессора() Экспорт
    
    Результат = новый Массив;
    
    #Если НаКлиенте Тогда
        Результат.Добавить("НаКлиенте");
    #КонецЕсли
    
    #Если НаСервере Тогда
        Результат.Добавить("НаСервере");
    #КонецЕсли
    
    #Если Клиент Тогда
        Результат.Добавить("Клиент");
    #КонецЕсли
    
    #Если Сервер Тогда
        Результат.Добавить("Сервер");
    #КонецЕсли
    
    #Если МобильноеПриложениеКлиент Тогда
        Результат.Добавить("МобильноеПриложениеКлиент");
    #КонецЕсли
    
    #Если МобильноеПриложениеСервер Тогда
        Результат.Добавить("МобильноеПриложениеСервер");
    #КонецЕсли
    
    #Если МобильныйКлиент Тогда
        Результат.Добавить("МобильныйКлиент");
    #КонецЕсли
    
    #Если ТолстыйКлиентОбычноеПриложение Тогда
        Результат.Добавить("ТолстыйКлиентОбычноеПриложение");
    #КонецЕсли
        
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Результат.Добавить("ТолстыйКлиентУправляемоеПриложение");
    #КонецЕсли
    
    #Если ВнешнееСоединение Тогда
        Результат.Добавить("ВнешнееСоединение");
    #КонецЕсли
    
    #Если ТонкийКлиент  Тогда
        Результат.Добавить("ТонкийКлиент");
    #КонецЕсли
    
    #Если ВебКлиент  Тогда
        Результат.Добавить("ВебКлиент");
    #КонецЕсли
    
    Возврат Результат;

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

Создание регламентного задания из внешней обработки

buketoff 35 7
// Функция возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
	
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");

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


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


Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


Процедура ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт
	
	// Тело процедуры
					
КонецПроцедуры

Отслеживание трека почта России

Добрый день! Так как начинающий программист , не могу понять как из 1С парсить web странички. Решил спросить , может кто делал подобное, вообщем нужно функция отслеживания трека с сайта почта россии, можно платно но в рамках разумного )

Расчет ручной скидки &НаСервере

//добавим скидку на товары
Если НЕ СуммаСкидки = 0 Тогда
			
Ограничения = Новый ТаблицаЗначений;
Ограничения.Колонки.Добавить("ЦеноваяГруппа");
Ограничения.Колонки.Добавить("СуммаБезСкидки");
Ограничения.Колонки.Добавить("СуммаРучнойСкидки");
Ограничения.Колонки.Добавить("СуммаАвтоматическойСкидки");
Ограничения.Колонки.Добавить("МаксимальныйПроцентРучнойСкидки");
Ограничения.Колонки.Добавить("МаксимальныйПроцентРучнойНаценки");
Ограничения.Колонки.Добавить("МаксимальнаяСуммаРучнойСкидки");
Ограничения.Колонки.Добавить("МаксимальнаяСуммаРучнойНаценки");
			
СтрОграничения 									= Ограничения.Добавить();
СтрОграничения.ЦеноваяГруппа 					= Справочники.ЦеновыеГруппы.ПустаяСсылка();
СтрОграничения.СуммаБезСкидки                   = ЗаказКлиентаОбъект.Товары.Итог("Сумма");
СтрОграничения.СуммаРучнойСкидки                = 0;
СтрОграничения.СуммаАвтоматическойСкидки        = 0;
СтрОграничения.МаксимальныйПроцентРучнойСкидки  = 999.99;
СтрОграничения.МаксимальныйПроцентРучнойНаценки	= 999.99;
СтрОграничения.МаксимальнаяСуммаРучнойСкидки	= (ЗаказКлиентаОбъект.Товары.Итог("Сумма")*999.99)/100;
СтрОграничения.МаксимальнаяСуммаРучнойНаценки   = (ЗаказКлиентаОбъект.Товары.Итог("Сумма")*999.99)/100;

ТЗ_Товары = ЗаказКлиентаОбъект.Товары.Выгрузить(); 
ТЗ_Товары.Колонки.Добавить("ЦеноваяГруппа");

АдресВремХранилища = ПоместитьВоВременноеХранилище(Новый Структура("Ограничения, Товары, ИспользоватьОграниченияРучныхСкидок", Ограничения, ТЗ_Товары, Ложь), Новый УникальныйИдентификатор());

СкидкиНаценкиСервер.НазначитьРучнуюСкидку(ЗаказКлиентаОбъект,"Товары", СуммаСкидки,Ложь,Ложь,Ложь,Ложь,Неопределено,АдресВремХранилища,Ложь);	

КонецЕсли;

Программное добавление элементов управления на форму (ОФ)

Добавляет страницу, надпись и поле ввода на форму элемента справочника "Номенклатура". Обычные формы. Конфигурация БГУ 1.0
SDV 38 8
Процедура МодифицироватьНоменклатураФормаЭлемента(ЭтаФорма) Экспорт
     
     ЭлементыФормы = ЭтаФорма.ЭлементыФормы;
     ШиринаНадписи = 160;
     ВерхНадписи = 5;
     ЛевоНадписи = 5;
     СтраницаАнализПитания = ЭлементыФормы.ПанельСвойствНоменклатуры.Страницы.Добавить("АнализПитания", "Анализ питания");
     ЭлементыФормы.ПанельСвойствНоменклатуры.ТекущаяСтраница = СтраницаАнализПитания;
     НадписьГруппаПродуктовПитания = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"), "НадписьГруппаПродуктовПитания", Истина,                 ЭлементыФормы.ПанельСвойствНоменклатуры);
     НадписьГруппаПродуктовПитания.Заголовок = "Группа продуктов питания: ";
     НадписьГруппаПродуктовПитания.Ширина = ШиринаНадписи;
     НадписьГруппаПродуктовПитания.Верх = ВерхНадписи;
     НадписьГруппаПродуктовПитания.Лево =  ЛевоНадписи;
     ПолеГруппаПродуктовПитания = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), "ПолеГруппаПродуктовПитания", Истина, ЭлементыФормы.ПанельСвойствНоменклатуры);
     ПолеГруппаПродуктовПитания.Данные = "ГруппаПродуктовПитания";
     ПолеГруппаПродуктовПитания.Ширина = 150;
     ПолеГруппаПродуктовПитания.Верх = ВерхНадписи;
     ПолеГруппаПродуктовПитания.Лево =  ЛевоНадписи + ШиринаНадписи + 5;
     ЭлементыФормы.ПанельСвойствНоменклатуры.ТекущаяСтраница = ЭлементыФормы.ПанельСвойствНоменклатуры.Страницы.Общее;
     
КонецПроцедуры

Подключение к базе через COM соединение и создание нового документа

buketoff 35 7
//выбираем сотрудника

ЗапросВ = КомСоединение.NewObject("Запрос");
ЗапросВ.Текст = "
|ВЫБРАТЬ первые 1 
|Сотрудники.Ссылка КАК Сотрудник
|ИЗ
|Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|НЕ Сотрудники.СтруктураКомпании = ЗНАЧЕНИЕ(Справочник.СтруктураКомпании.ПустаяСсылка)
|И Сотрудники.ФизическоеЛицо.Наименование = &ФизическоеЛицо
|И Сотрудники.ПометкаУдаления = ЛОЖЬ
|";

ЗапросВ.УстановитьПараметр("ФизическоеЛицо", СтруктураДанных.Сотрудник.Наименование);

com_Результат     = ЗапросВ.Выполнить().Выбрать();// COM объект    

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

Получить имя формы выбора по ссылке


&НаСервереБезКонтекста
Функция ПолучитьИмяФормыВыбора(Ссылка)
  
	Возврат Ссылка.Метаданные().ПолноеИмя() + ".ФормаВыбора";
	
КонецФункции

УТ 11.4. Выбрать все документы, по определенному виду номенклатуры

Список типов документов можно наполнить нужными. ВидНоменклатуры - реквизит на форме обработке или указывать программно
buketoff 35 7
&НаСервере
Процедура ВыбратьДокументыНаСервере()
	
	ТЗДокументы.Очистить();
	
	СписокИменДокументов = СформироватьСписокСТипамиДокументов();
	
	ТекстЗапроса = "";
	
	Для каждого Вид Из СписокИменДокументов Цикл
		
		Если ТекстЗапроса<>"" Тогда
			ТекстЗапроса=ТекстЗапроса+"
			|ОБЪЕДИНИТЬ ВСЕ ";
		КонецЕсли;
			                           
		Шаблон =
		"ВЫБРАТЬ
		|  ТЧ.Ссылка КАК Ссылка,
		|  ТЧ.Номенклатура КАК Номенклатура
		|ИЗ
		|  Документ.ПриобретениеТоваровУслуг.Товары КАК ТЧ
		|ГДЕ ТЧ.Ссылка.Проведен И ТЧ.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
		
		ТекстЗапроса = ТекстЗапроса+СтрЗаменить(Шаблон, "ПриобретениеТоваровУслуг", Вид);
		
	КонецЦикла; 	
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		НоваСтрокаТЗ = ТЗДокументы.Добавить();
		НоваСтрокаТЗ.Документ = Выборка.Ссылка;
	КонецЦикла;
	
КонецПроцедуры

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

Найти значение в строке

Добрый день, помогите пожалуйста, есть строка вида 355035|uin=18810150201111703544|TechCode=03|ruleId=18810150201111703544|quittDate=11.11.2020| Разложил по разделители | в массив. Массив. Найти не помогает так как допустим мне нужно uin= но после равно ка...

Выгрузить схему компоновки данных (скд) в файл/строку

Позволяет получить выходной xml схемы компоновки данных (скд) из переданной схемы, программно. Аналогично нажатию на кнопку "сохранить схему в файл". Полезно когда необходимо отладить схему формирующуюся программно.
&НаСервере
Функция СхемаКомпоновкиСтрокой(Схема) Экспорт
	
	СтрокаСхемы = "";
	
	ЗаписьXML = Новый ЗаписьXML;
	
	Путь = ПолучитьИмяВременногоФайла("xml");
	
	ЗаписьXML.ОткрытьФайл(Путь);
	
	СериализаторXDTO.ЗаписатьXML(
                               ЗаписьXML, 
                               Схема, 
                               "dataComposition", 
                               "http://v8.1c.ru/8.1/data-composition-system/composition-template");
	
	ЗаписьXML.Закрыть();
	
	ЧтениеТекста = Новый ЧтениеТекста(Путь);
	
	СтрокаСхемы = ЧтениеТекста.Прочитать();
	
	ЧтениеТекста.Закрыть();
	
	Возврат СтрокаСхемы;
	
КонецФункции

Выгрузка данных в формате CSV

выгрузка данных в формате CSV, для ут 10.3, УПП

мой код

Процедура ВыполнитьНажатие(Команда) 
	ИмяФайла = "Обмен";
	//ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	//
	//ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайла+".csv";
	//ДиалогОткрытияФайла.Каталог = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки";
	Режим        = РежимДиалогаВыбораФайла.Открытие;
	ДиалогВыбора = новый ДиалогВыбораФайла(Режим);
	//ДиалогВыбора.ПолноеИмяФайла = "";
	//Фильтр       = "Файл данных (*.csv)|*.csv";
	//ДиалогВыбора.Фильтр = Фильтр;
	ДиалогВыбора.Заголовок = "Выберите Каталог";    
	Если ДиалогВыбора.Выбрать() Тогда
		ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
	КонецЕсли;
	//ИмяФайла = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки"+"Обмен.csv";
	ВыгрузитьВCSV(ИмяФайла);
	
КонецПроцедуры

Функция ВыгрузитьВCSV(имяФайлаCSV);
	разделитель = ";";
	ТаблицаЗначений = ПолучитьНоменклатуру();
	//Тут может быть любое получение данных, в моем случае номенклатура, цены, бренд и остатки
	текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
	ЗаписатьCSV(текст,имяФайлаCSV);
	
КонецФункции

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

Функция ЗаписатьCSV(текст,имяФайла)              
	кодировка = КодировкаТекста.ANSI;
	ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);            
	//ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
	ТекстовыйФайлЗапись.Записать(текст);
	ТекстовыйФайлЗапись.Закрыть();    
	Возврат 0;
	
КонецФункции 

Вывести список пользователей с пустым паролем

Вывести список пользователей ИБ, у которых не заполнен пароль
&НаСервере

мПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
	
Для Каждого мПользователь Из мПользователи Цикл

	Если ПустаяСтрока(
		мПользователь.СохраняемоеЗначениеПароля)
		И мПользователь.АутентификацияСтандартная Тогда

		Сообщить(мПользователь);

	КонецЕсли;

КонецЦикла;

Создание пользователя и добавление в группу доступа (БСП)

Демонстрация процесса создания пользователя, добавления его в группу доступа и назначения основных прав в системе, в конфигурации с БСП
&НаСервере
Процедура СоздатьПользователя(ИмяПользователя, ПолноеИмя, Пароль, ГруппаДоступа)
	
	ОписаниеПользователяИБ 								= Пользователи.НовоеОписаниеПользователяИБ();
	ОписаниеПользователяИБ.Имя 							= ИмяПользователя;
	ОписаниеПользователяИБ.ПолноеИмя					= ПолноеИмя;
	ОписаниеПользователяИБ.Пароль						= Пароль;
	ОписаниеПользователяИБ.ПарольУстановлен				= Истина;
	ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора		= Истина;
	ОписаниеПользователяИБ.АутентификацияСтандартная	= Истина;
	ОписаниеПользователяИБ.АутентификацияОС				= Ложь;
			
	СоздаватьПользователяИБ = Истина;

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

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

Итоги в подвале таблицы с учетом отбора

Штатные итоги в таблицах выводятся без учета установленных отборов
&НаКлиенте
Процедура ОбновитьИтоги(Команда)

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