Публикации

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

Программное добавление нового пользователя

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

Процедура ДобавитьРолиНовомуПользователю(Имя);
    Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(Имя);
    Пользователь.Роли.Добавить(Метаданные.Роли.АдминистраторСистемы);
    Пользователь.Роли.Добавить(Метаданные.Роли.ПолныеПрава);
    Пользователь.Записать();
КонецПроцедуры

Чтение Excel через Табличный документ

chugindanil 12 1
//На клиенте

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите файл";

Если ДиалогВыбора.Выбрать() Тогда
	ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; 
	Команда1НаСервере(ИмяФайла);
	
КонецЕсли; 


//На сервере

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

ТабличныйДокумент = Новый ТабличныйДокумент;

ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

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

ПЗ = Новый ПостроительЗапроса;

ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());

ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;

ПЗ.ЗаполнитьНастройки();

ПЗ.Выполнить();

ТаблицаЗначений = ПЗ.Результат.Выгрузить();

OneTracker - трекер учета рабочего времени программиста 1С Промо

Программа автоматически замеряет время работы разработчика с 1С в режиме Конфигуратора или Предприятия. Учет ведется в разрезах задач, информационных баз или объектов конфигураций.
990 руб.

Выгрузка запроса в XML. Выгрузка объекта

chugindanil 12 1
&НаСервере
Процедура КомандаВыполнитьНаСервере()
	
	ИмяФайла = "d:\test.xml";
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	| Номенклатура.Код КАК Код,
	| Номенклатура.Наименование КАК Наименование,
	| Номенклатура.Артикул КАК Артикул,
	| Номенклатура.Ссылка КАК Номенклатура
	|ИЗ
	| Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	| Номенклатура.ЭтоГруппа = ЛОЖЬ");
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяФайла,"UTF-8");
	
	ВыборкаРезультата = Запрос.Выполнить().Выгрузить(); 
	ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
	Для каждого Выборка Из ВыборкаРезультата Цикл
		ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());           
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
	
КонецПроцедуры

Проверка заполненности сложных объектов

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

Создать объект ОписаниеТипов

Автор: HostHost

FastCode 51 7
НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаДата", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаЧисло", ОбщегоНазначения.ОписаниеТипаЧисло(12));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСтрока", ОбщегоНазначения.ОписаниеТипаСтрока(100));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСсылка", ОбщегоНазначения.ОписаниеТипаВсеСсылки());

HTTP в 1С для начинающих. Курс

Закрой все вопросы по работе с HTTP в 1C за одно занятие!
FastCode 51 7
-10%

Открытие формы выбора с отбором

Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий - также ОткрытьФормуМодально). Применение альтернативного способа, с получением формы и ее последующим...
Razlagutt 5 1

Интеграция 1С и Битрикс 24 через расширения. Курс

Разработка модуля интеграции ведется полностью в расширении, что позволит вам добавлять его даже в 1С:Fresh.
FastCode 51 7
-10%

1С мобильное приложение B2B. Видео курс по разработке

Интенсив по разработке мобильного приложения 1С, для внутри корпоративного использования. Разработка обмена, динамического интерфейса, авторизации, XDTO. В процессе изучения вы создадите мобильное приложение 1С для B2B с нуля до 100%.
FastCode 51 7
-10%

Разработка HTML интерфейса мобильного приложения 1С. Курс

Разработай красивое мобильное приложение 1С с помощью HTML и CSS
FastCode 51 7
-10%

Чат бот ВКонтакте на 1С. Курс

Интенсив по разработке чат бота ВКонтакте. Используя API ВКонтакте создавать чат бот ВКонтакте из 1С. Получить список пользователей группы ВКонтакте и разослать им сообщения.
FastCode 51 7
Бесплатно

1С XDTO для начинающих. Курс

Закрой все вопросы по XDTO за одно занятие!
FastCode 51 7
-10%

Преобразовать строку таблицы значений в структуру

Автор: HostHost

FastCode 51 7
ПараметрыСтроки = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаПоказателей[0]);

Значения реквизитов, прочитанных из информационной базы для нескольких объектов

Автор: HostHost

FastCode 51 7
ВидыРасчета = Новый Массив;

Для Каждого СтрокаИсточника Из ТаблицаВычислений Цикл

        ВидыРасчета.Добавить(СтрокаИсточника.ВидНачисления);

КонецЦикла;

ВидыРасчетаИнфо = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ВидыРасчета, "УчетВремениВЧасах,КатегорияНачисленияИлиНеоплаченногоВремени,ТребуетсяРасчетБазы");

Строковые функции. Альтернатива для СтрРазделить, СтрНайти и т.д.

В старых версиях конфигураций можно получить сообщение о том, что, например, СтрРазделить не найден. Тогда в качестве альтернативы стоит использовать ОбщийМодуль → СтроковыеФункцииКлиентСервер, где собраны необходимые функции по работе со строкой. Например...
Razlagutt 5 1

Формирование файла CSV с записью в файл на клиенте

buketoff 20 4

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

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

Функция ВыгрузитьВCSV(имяФайлаCSV);
	Текст = СоздатьДанныеCSV(ТаблицаДокументов,Разделитель);
	Возврат Текст;
КонецФункции

Функция СоздатьДанныеCSV(ТаблицаДокументов, Разделитель)
	Текст = "";
	Для Каждого Запись из ТаблицаДокументов Цикл
		Если Текст = "" тогда
			Текст = СоздатьЗаголовкиCSV(ТаблицаДокументов, Разделитель) + Символы.ПС;   	
		КонецЕсли;  
		Текст = Текст + Запись.snils + Разделитель + Запись.surname
		+ Разделитель + Запись.name + Разделитель + Запись.patronymic + Разделитель 
		+ Запись.oid + Разделитель + Запись.compaignId + Разделитель + Формат(Запись.dateOfBirth, "ДЛФ=Д") + Разделитель + Запись.citizenship + Разделитель 
		+ Запись.specialty + Разделитель + Запись.financingType + Разделитель + Запись.applicationDate + Разделитель + Запись.targetReception 
		+ Разделитель + Запись.testResultType + Разделитель + Запись.testResultOrganization + Разделитель + Запись.testResultYear + Символы.ПС;         	
	КонецЦикла;
	Возврат Текст;
КонецФункции

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

Таблица значений на УФ с динамическим набором колонок

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

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

Подставить свой макет в СКД

Автор: HostHost

FastCode 51 7
СхемаКомпоновкиДанных          = ПолучитьМакет("МакетСКД");

АдресСхемыКомпоновкиДанных     = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор);

ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);       

КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);

КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

Грабли при работе с макетом в СКД

На скринах показано как можно легко испортить Макет из-за своеобразной логики работы конструктора СКД
SDV 31 6

Загрузка в 1с из CSV. Обработка-шаблон для импорта из csv

buketoff 20 4
&НаКлиенте
Процедура ЗагрузитьCSV(Команда)  // выполняется при нажатии на кнопку
	ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); //!!!!!!!!!!!!
ДиалогФыбораФайла.Фильтр="csv файл с разделтелями (*.csv)|*.csv|";

ДиалогФыбораФайла.Заголовок = "Выберите файл";
ДиалогФыбораФайла.ИндексФильтра = 0;
описаниеОповещения = Новый ОписаниеОповещения("ГрузимИзФайла", ЭтотОбъект);
    
    ДиалогФыбораФайла.Показать(описаниеОповещения);	

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



&НаКлиенте
Процедура ГрузимИзФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт // вызываем диалог выбора файла
    
    Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда
      //  Сообщить("Файл выбран!");
//работаем с файлом
    Имяфайла=ВыбранныеФайлы[0];		
// Пишем в реестр
    сообщить(имяФайла); // вызываем дальнейшую процедуру обработки
	Путь=имяФайла; // для сохранения xml понадобится
// читаем файл	
ЗагружаемыйФайл = Новый ТекстовыйДокумент; 
ЗагружаемыйФайл.Прочитать(ИмяФайла);

Если лист="лист1" тогда
	обработатьCSV1(ЗагружаемыйФайл);
	конецЕсли;

    Иначе
        Сообщить("Файл не выбран!");
    КонецЕсли;
    

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

// процедуру обработатьCSV1(файл) - можно сделать на клиенте
&наСервере   
процедура обработатьCSV1(файл)
	для номерстроки=2 по файл.КоличествоСтрок() цикл // первую строку пропускаем т.к. там название полей
	строка=файл.получитьСтроку(номерСтроки);
	массив=РазложитьСтрокуВМассивПодстрок(строка,";"); // строка csv - файла, преобразованная в массив, дальше с этими данными можно делать что угодно 

		конецЦикла;
	конецПроцедуры
	
	// процедуру РазложитьСтрокуВМассивПодстрок - можно сделать на клиенте, если процедура "обработатьCSV1" тоже имеет директиву &наКлиенте
	&наСервере
	Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
   
КонецФункции // глРазложить