Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

25.04.22

Разработка - Универсальные функции

В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.

 

Введение

Всем привет! Данная небольшая статья будет посвящена некоторым полезным процедурам и функциям, которые используются достаточно часто. Многие программисты их "изобретают" вновь и вновь с каждой задачей, а они уже существуют готовые, написаны и находятся в модулях "Общего назначения" в типовых конфигурациях, основа которых - это библиотека стандартных подсистем (БСП).

Посыл этой статьи - это прежде всего небольшая "шпаргалка для всех желающих", ну и, если можно так сказать, борьба с "велосипедами". Начинающим и опытным программистам, я надеюсь, что данная статья будет полезна.

Примеры будут приведены для типовой конфигурации БСП, сейчас это - версии 3.1.6.137 на Платформе 1с 8.3.20.1674.

 

Как обычно, я разобью статью на несколько частей:

1. Работа с данными - таблицы, структуры, массивы и соответствия.

2. Сохранение, чтение и удаление настроек из хранилища.

3. Оповещения пользователя.

 

Во всех частях я приведу примеры работы - таблицами, массивами, структурами, соответствиями, хранилищем, и типовым БСП оповещениями пользователя об ошибках.

Переходим к первой части статьи - работа с данными.

 

1.Работа с данными - таблицы, структуры, массивы и соответствия

В данном разделе, как указано в заголовке, привожу некоторые полезные примеры работы с таблицами, структурами, массивами и соответствиями. Перечисленные процедуры и функции находятся в модуле БСП - ОбщегоНазначенияКлиентСервер. Итак:

 

1.1. Процедура ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник) Экспорт

Процедура дополняет таблицу значений - приемник данными из таблицы значений - источника.

&НаКлиенте
Процедура ДополнитьТаблицуТаблицей(Команда)
	
	ВыполнитьНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ВыполнитьНаСервере()
	
	ТабДополнения = Новый ТаблицаЗначений();
	ТабДополнения.Колонки.Добавить("Дата");
	ТабДополнения.Колонки.Добавить("Номер");
	ТабДополнения.Колонки.Добавить("Сумма");
	
	НовСтрокаТабДоп = ТабДополнения.Добавить();
	НовСтрокаТабДоп.Дата = ТекущаяДата();
	НовСтрокаТабДоп.Номер = "11";
	НовСтрокаТабДоп.Сумма = 100;

	// из таблицы значений в табличную часть;	
	ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТабДополнения, Объект.НовТаб);
	
КонецПроцедуры	

 

1.2. Процедура ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля) Экспорт

Данная процедура дополняет таблицу значений Таблица значениями из массива.

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

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

 

1.3. Процедура ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт

Процедура дополняет массив приемник значениями из массива источника.

&НаКлиенте
Процедура ДополнитьМассивМассивом(Команда)
	
	Массив1 = Новый Массив();
	Массив1.Добавить("Красный");
	Массив1.Добавить("Зеленый");
	
	Массив2 = Новый Массив();
	Массив2.Добавить("Красный");
	Массив2.Добавить("Желтый");
	Массив2.Добавить("Синий");
	
	ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Массив1, Массив2, Истина); 

    Сообщить(Массив1.Количество());    // 4 - выборка только уникальных значений
	
КонецПроцедуры

 

1.4. Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт

Процедура дополняет структуру значениями из другой структуры.

&НаКлиенте
Процедура ДополнитьСтруктуру(Команда)
	
	Структ1 = Новый Структура("Дата, Номер, Сумма");
	Структ1.Дата = ТекущаяДата();
	Структ1.Номер = "22";
	Структ1.Сумма = 0;

	Структ2 = Новый Структура("Сумма");	
	Структ2.Сумма = 10;	
	
    ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Структ1,Структ2,Истина); // меняем значение из другой структуры

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

 

1.5. Процедура ДополнитьСоответствие(Приемник, Источник, Заменять = Неопределено) Экспорт

Данная процедура дополняет соответствие значениями из другого соответствия.

&НаКлиенте
Процедура ДополнитьСоответствие(Команда)
	
    НовСоотв1 = Новый Соответствие();
    НовСоотв1.Вставить("Цвет","Красный");
    НовСоотв1.Вставить("Название","Яблоко");
	
    НовСоотв2 = Новый Соответствие();
    НовСоотв2.Вставить("Цвет","Зеленый");
	
    ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(НовСоотв1,НовСоотв2,Истина); // заменит цвет
	
	//НовСоотв1.Получить("Цвет") // зеленый

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

 

1.6. Процедура УдалитьВсеВхожденияЗначенияИзМассива(Массив, Значение) Экспорт

Процедура удаляет все вхождения переданного значения из массива.

// здесь находим все индексы по значению и удаляем элементы по индексам 

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

 

1.7. Процедура УдалитьВсеВхожденияТипаИзМассива(Массив, Тип) Экспорт

Данная процедура удаляет все вхождения значений указанного типа.

// аналогична предыдущей процедуре, только поиск происходит по типу значения.

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

 

1.8. Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт

Процедура удаляет одно значение из массива.

// здесь ищем индекс по значению, удаляем элемент по индексу

Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт
	
	Индекс = Массив.Найти(Значение);
	Если Индекс <> Неопределено Тогда
		Массив.Удалить(Индекс);
	КонецЕсли;
	
КонецПроцедуры

 

1.9. Функция СвернутьМассив(Знач Массив) Экспорт

Функция возвращает копию исходного массива с уникальными значениями.

Функция СвернутьМассив(Знач Массив) Экспорт
	Результат = Новый Массив;
	ДополнитьМассив(Результат, Массив, Истина);
	Возврат Результат;
КонецФункции

 

1.10. Функция РазностьМассивов(Знач Массив, Знач МассивВычитания) Экспорт

Результат функции - разностью двух массивов, содержащая все элементы первого массива, не существующие во втором массиве.

&НаКлиенте
Процедура ДополнитьМассивМассивом(Команда)
	
	Массив1 = Новый Массив();
	Массив1.Добавить("Красный");
	Массив1.Добавить("Зеленый");
	
	Массив2 = Новый Массив();
	Массив2.Добавить("Красный");
	Массив2.Добавить("Желтый");
	Массив2.Добавить("Синий");
	
	А = ОбщегоНазначенияКлиентСервер.РазностьМассивов(Массив2, Массив1);

    Сообщить(А.Количество());    // 2 - "Желтый,Синий"
	
КонецПроцедуры

 

1.11. Функция СпискиЗначенийИдентичны(Список1, Список2) Экспорт

Функция сравнивает элементы списков значений или массивов по значениям.

// Возвращает истину или ложь

Функция СпискиЗначенийИдентичны(Список1, Список2) Экспорт
	
	СпискиИдентичны = Истина;
	
	Для Каждого ЭлементСписка1 Из Список1 Цикл
		Если НайтиВСписке(Список2, ЭлементСписка1) = Неопределено Тогда
			СпискиИдентичны = Ложь;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если СпискиИдентичны Тогда
		Для Каждого ЭлементСписка2 Из Список2 Цикл
			Если НайтиВСписке(Список1, ЭлементСписка2) = Неопределено Тогда
				СпискиИдентичны = Ложь;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Возврат СпискиИдентичны;
	
КонецФункции

 

1.12. Функция ЗначениеВМассиве(Значение) Экспорт

Данная функция создает массив и помещает в него переданное значение.

Функция ЗначениеВМассиве(Значение) Экспорт
	
	Массив = Новый Массив;
	Массив.Добавить(Значение);
	
	Возврат Массив;
	
КонецФункции

 

1.13. Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт

Результат работы функции - строка, содержащая ключи структуры, разделенные символом разделителя.

&НаКлиенте
Процедура ДополнитьСтруктуру(Команда)
	
	Структ1 = Новый Структура("Дата, Номер, Сумма");
	Структ1.Дата = ТекущаяДата();
	Структ1.Номер = "22";
	Структ1.Сумма = 0;
	
    КлючиСтруктуры = ОбщегоНазначенияКлиентСервер.КлючиСтруктурыВСтроку(Структ1,",");
	
	Сообщить(КлючиСтруктуры);  // Дата, Номер, Сумма

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

 

1.14. Функция СвойствоСтруктуры(Структура, Ключ, ЗначениеПоУмолчанию = Неопределено) Экспорт

Функция возвращает значение свойства структуры.

&НаКлиенте
Процедура ДополнитьСтруктуру(Команда)
	
	Структ1 = Новый Структура("Дата, Номер, Сумма");
	Структ1.Дата = ТекущаяДата();
	Структ1.Номер = "22";
	Структ1.Сумма = 0;
	
    СвойствоСтруктуры = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Структ1,"Дата",);
	
	Сообщить(СвойствоСтруктуры);  // Дата

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

 

1.15. Функция ПустойУникальныйИдентификатор() Экспорт

Функция возвращает пустой уникальный идентификатор.

Функция ПустойУникальныйИдентификатор() Экспорт
	
	Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	
КонецФункции

На этом закончим первую часть статьи - описании работы с данными и переходим ко второй - работа с хранилищем.

 

2. Сохранение, чтение и удаление настроек из хранилища.

Перечисленные процедуры и функции находятся в модуле БСП - ОбщегоНазначенияВызовСервера. Отмечу, что в данном разделе, я рассмотрю несколько примеров, касаемых данных форм.

 

2.1. Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, ОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт

Сохраняет настройку в хранилище настроек данных форм, как метод платформы Сохранить.

&НаКлиенте
Процедура ЗапистьВХранилище(Команда)
	
	СохранимНастройкиФормыВХранилище();
	
КонецПроцедуры

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

 

2.2. Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт

Загружает настройку из хранилища настроек данных форм, как метод платформы Загрузить.

&НаКлиенте
Процедура ПрочитатьХранилище(Команда)

	ВосстановитьНастройкиНаСервере();

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

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

 

2.3. Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт

Удаляет настройку из хранилища настроек данных форм, как метод платформы Удалить.

&НаКлиенте
Процедура ОчиститьЗаписьВХранилище(Команда)
	
	ОчиститьНастройкиНаСервере();

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

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

Далее, переходим к третьей части статьи - оповещение пользователя.

 

3. Оповещения пользователя.

Перечисленные процедуры и функции находятся в модуле БСП - ОбщегоНазначенияКлиентСервер.

 

3.1. Процедура ДобавитьОшибкуПользователю(Ошибки,ПолеОшибки, ТекстДляОднойОшибки, ГруппаОшибок = Неопределено,НомерСтроки = 0,ТекстДляНесколькихОшибок = "",ИндексСтроки = Неопределено) Экспорт

Процедура добавляет в список ошибок новую ошибку пользователя для дальнейшей отправки с помощью процедуры СообщитьОшибкиПользователю()

&НаКлиенте
Процедура СообщитьОбОшибке(Команда)

    // подготавливаем структуру ошибок, далее отправим ее в "Сообщить ошибки пользователю"
	
	Ошибки = Новый Структура;
	Ошибки.Вставить("СписокОшибок", Новый Массив);
	Ошибки.Вставить("ГруппыОшибок", Новый Соответствие);
	
	ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,"Банки[%1].Банк","Банк не определен 1",,5,"Банк в строке %5 не установлен 1",0);
	ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,"Банки[%1].Банк","Банк не определен 2",,6,"Банк в строке %5 не установлен 2",0);
	ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,"Банки[%1].Банк","Банк не определен 3",,7,"Банк в строке %5 не установлен 3",0);
	
КонецПроцедуры

 

3.2. Процедура СообщитьОшибкиПользователю(Ошибки, Отказ = Ложь) Экспорт

Процедура выводит накопленные методом ДобавитьОшибкуПользователю ошибки.

&НаКлиенте
Процедура СообщитьОбОшибке(Команда)
	
	Ошибки = Новый Структура;
	Ошибки.Вставить("СписокОшибок", Новый Массив);
	Ошибки.Вставить("ГруппыОшибок", Новый Соответствие);
	
	ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,"Банки[%1].Банк","Банк не определен 1",,5,"Банк в строке %5 не установлен 1",0);
	ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,"Банки[%1].Банк","Банк не определен 2",,6,"Банк в строке %5 не установлен 2",0);
	ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,"Банки[%1].Банк","Банк не определен 3",,7,"Банк в строке %5 не установлен 3",0);
	
	
	ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки,Ложь);
	
КонецПроцедуры

 

3.3. Функция ТекстОшибкиЗаполнения(ВидПоля = "Поле", ВидСообщения = "Заполнение", ИмяПоля = "", НомерСтроки = "", ИмяСписка = "", ТекстСообщения = "") Экспорт

Возвращает текст ошибки заполнения полей и списков.

&НаКлиенте
Процедура СообщитьОбОшибке(Команда)
	
	А = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Поле","Корректность","Банк",4,"","");
	Сообщить(А);
	
КонецПроцедуры

 

3.4. Функция ПутьКТабличнойЧасти(Знач ИмяТабличнойЧасти, Знач НомерСтроки, Знач ИмяРеквизита) Экспорт

Функция формирует путь к заданной строке НомерСтроки и колонке ИмяРеквизита.

Функция ПутьКТабличнойЧасти(
		Знач ИмяТабличнойЧасти,
		Знач НомерСтроки, 
		Знач ИмяРеквизита) Экспорт
	
	Возврат ИмяТабличнойЧасти + "[" + Формат(НомерСтроки - 1, "ЧН=0; ЧГ=0") + "]." + ИмяРеквизита;
	
КонецФункции

На этом, пожалуй, все - перейдем к заключению и выводам.

 

Заключение и выводы

Целью данной статьи, как я написал выше, - является создание небольшой "шпаргалки" для работы с классическими объектами в рамках возможностей библиотеки стандартных подсистем. Естественно, статья не претендует на новшества - их и нет тут, но под рукой ее будет держать полезно - просто быстро посмотрел, вспомнил, скопировал - сразу получил практический результат. Будет полезна всем.

 

Примеры данной статьи можете скачать на моем гит-хабе https://github.com/quazareline/general-function-modules

 

Так же, прошу обратить внимания на следующие статьи по функционалу библиотеки стандартных подсистем, написанных мной ранее. Уверен, что они так же будут полезны вам:

 

Мои предыдущие интересные материалы по использованию функционала БСП

 

Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки

Базовые приемы работы с кластером 1С при помощи БСП

Генерация штрихкодов с помощью БСП для программистов

Типовые методы конфигурации "Зарплата и управление персоналом", которые пригодятся каждому ЗУП программисту и не только

Печать макета MS Word в любом документе с помощью БСП

 

Спасибо за внимание, до новых встреч. Комментарии отключены - у кого есть вопросы - пишите в личку.

Вступайте в нашу телеграмм-группу Инфостарт

функции общего назначения таблицы соответствия массивы хранилище оповещение пользователя

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    8256    42    24    

45

БСП (Библиотека стандартных подсистем) Роли и права Программист 1С v8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Наткнулся на костыль по работе с ролями. Хочу поделиться, как не попасть на это странное поведение БСП.

07.05.2025    6366    dsdred    32    

87

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    38949    dimanich70    83    

156

БСП (Библиотека стандартных подсистем) Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    13141    John_d    15    

103

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    46181    atdonya    30    

65

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    8766    mrXoxot    11    

114