Универсальные процедуры и функции » История » Версия 37
« Предыдущее -
Версия 37/38
(Разница(diff)) -
Следующее » -
Текущая версия
Всеволод Дорофеев, 01.02.2023 23:24
Универсальные процедуры и функции¶
- Универсальные процедуры и функции
- Права и роли
- Прочее
- Процедуры и функции общего назначения
- Проверить, что описание типа состоит из единственного типа значения и совпадает с нужным типом.
- Функция ЕстьРеквизитОбъекта - проверяет наличие у произвольного объекта реквизита с указанным именем (УТ11.ОбщегоНазначенияУТКлиентСервер)
- Проверка битых ссылок
- МенеджерИсторииРаботыПользователя
- ОтображениеСостояния
- Очистка окна сообщений
- Отбор в таблице значений (табличной части) с помощью построителя запроса
- Запись справочника
- Запись и проведение документа
- Проверка на пустую дату
- Создание пустой таблицы значение на основании табличной части Документа
- Создание структуры со свойствами, как колонки таблицы, переданной строки
- Загрузка таблицы/соответствия из макета с помощью построителя отчета
- Получение прописью месяца в родительном падеже
- Число прописью
- Склонения по падежам
- Варианты преобразования даты из строки (конвертация строки в дату)
- Генератор случайных чисел
- Пересохранение книги в Эксель (Excel) с отображением листов
- Функция ВернутьТолькоЦифры
- Установить новую ссылку для еще не записанного объекта.
- Получение документа (паспорт) физического лица
- Значение реквизита объекта на клиенте и сервере
Права и роли¶
УправлениеДоступом.ЕстьРоль( ЕстьПраво ЧтениеРазрешено ИзменениеРазрешено
Прочее¶
h3. Процедуры и функции общего назначения
Проверить, что описание типа состоит из единственного типа значения и совпадает с нужным типом.¶
// Проверить, что описание типа состоит из единственного типа значения и // совпадает с нужным типом. // // Возвращаемое значение: // Булево - Совпадает или нет // Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт Если ОписаниеТипа.Типы().Количество() = 1 И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции
УТ11:
ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево"));
Функция ЕстьРеквизитОбъекта - проверяет наличие у произвольного объекта реквизита с указанным именем (УТ11.ОбщегоНазначенияУТКлиентСервер)¶
#Область МетодыРаботыСРеквизитамиОбъектов // Проверяет наличие у произвольного объекта реквизита с указанным именем. // Функция ЕстьРеквизитОбъекта(Объект, ИмяРеквизита) Экспорт КлючУникальности = Новый УникальныйИдентификатор; СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности); ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект); Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности; КонецФункции #КонецОбласти
Проверка битых ссылок¶
ЭтоБитаяСсылка = не ЗначениеЗаполнено(Ссылка.ВерсияДанных);
МенеджерИсторииРаботыПользователя¶
// Добавить событие в историю работы пользователя ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка));
ОтображениеСостояния¶
Очистка окна сообщений¶
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пример:
ОчиститьСообщения();
Отбор в таблице значений (табличной части) с помощью построителя запроса¶
&НаСервере Функция ПолучитьКоличествоПодобраноПоСтрокеНаСервере(ИсходнаяНоменклатура) ПостроительЗапр = Новый ПостроительЗапроса; ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(Объект.НоваяНоменклатура.Выгрузить()); Отбор = ПостроительЗапр.Отбор.Добавить("ИсходнаяНоменклатура"); Отбор.ВидСравнения = ВидСравнения.Равно; Отбор.Значение = ИсходнаяНоменклатура; Отбор.Использование = Истина; ПостроительЗапр.Выполнить(); ПостроительЗапр.Результат.Выгрузить().Итог("Количество"); КонецФункции
Запись справочника¶
Функция ЗаписатьСправочник(ТекущийОбъект,Заголовок="",РежимСообщений="Все",РежимЗагрузки=Ложь) Экспорт ДействиеВыполнено = Ложь; ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь); ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь); Попытка Если РежимЗагрузки Тогда ТекущийОбъект.ОбменДанными.Загрузка = Истина; КонецЕсли; ТекущийОбъект.Записать(); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Записан справочник """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось записать справочник """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; Возврат ДействиеВыполнено; КонецФункции //ЗаписатьПровестиДокумент()
Запись и проведение документа¶
// Процедура выполняет запись/проведение/отмену проведения документа. // // Параметры: // ТекущийОбъект – ДокументОбъект,СправочникОбъект. // РежимЗаписи - РежимЗаписиДокумента. // Заголовок - Строка. // РежимСообщений - Строка: "Нет","Все","Ошибки". // // Возвращаемое значение: // ДействиеВыполнено – Булево. // Функция ЗаписатьПровестиДокумент(ТекущийОбъект,РежимЗаписи,Заголовок="",РежимСообщений="Все") Экспорт ДействиеВыполнено = Ложь; ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь); ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь); Если РежимЗаписи = РежимЗаписиДокумента.Запись ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Попытка ТекущийОбъект.Записать(РежимЗаписиДокумента.Запись); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Записан документ """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось записать документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; КонецЕсли; Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Попытка ТекущийОбъект.Записать(РежимЗаписиДокумента.Проведение); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Проведен документ """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось провести документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; КонецЕсли; Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда Попытка ТекущийОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Отменено проведение документа """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось отменить проведение документа """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; КонецЕсли; Возврат ДействиеВыполнено; КонецФункции // ЗаписатьПровестиДокумент()
Проверка на пустую дату¶
Пустая дата
Дата("00010101"); Дата(1, 1, 1); Дата("00010101000000"); Дата("0001-01-01");
Создание пустой таблицы значение на основании табличной части Документа¶
Товары = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка().Товары.ВыгрузитьКолонки();
Создание структуры со свойствами, как колонки таблицы, переданной строки¶
СтруктураРез = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаДанных);
// Функция СтрокаТаблицыЗначенийВСтруктуру создает // структуру со свойствами, как колонки таблицы // значений передаваемой строки // и устанавливает этим свойствам значения // из строки таблицы значений. // // Параметры: // СтрокаТаблицыЗначений - СтрокаТаблицыЗначений. // // ВозвращаемоеЗначение: // Структура // Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт Структура = Новый Структура; Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]); КонецЦикла; Возврат Структура; КонецФункции
Загрузка таблицы/соответствия из макета с помощью построителя отчета¶
Функция ЗаполнитьСоответствиеИзМакета(ИмяМакета) Макет = ПолучитьМакет(ИмяМакета); ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область()); ТЗ = ПостроительЗапроса.Результат.Выгрузить(); Результат = Новый Соответствие; Для каждого Стр Из ТЗ Цикл Результат.Вставить(Стр.Колонка1, Стр.Колонка2); КонецЦикла; Возврат Результат; КонецФункции
Получение прописью месяца в родительном падеже¶
ОбластьТела.Параметры.ДатаУдостоверенияМесяц = Сред(Формат(ДатаУдостоверения, "ДФ=ddMMMM"),3);
Число прописью¶
// ЧислоПрописью(СтруктураОснований.Сумма, "Л=ru_RU;ДП=Истина", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2"); //без дробной части Числопрописью = ЧислоПрописью(ДанныеПечати.МассаБрутто, "Л=ru_RU; НП=Ложь",",,,,,,,,0")
Склонения по падежам¶
https://spb.koderline.ru/expert/programming/article-sklonenie-v-1s/#jakor6
//Возвращает массив Массив = ПолучитьСклоненияСтрокиПоЧислу("место", ДанныеПечати.ссылка.г_КоличествоМестТН, "", "ЧС=Количественное", "ПД=Именительный")
Варианты преобразования даты из строки (конвертация строки в дату)¶
Проще всего преобразовать строку вида «20151215204222» используя метод «Дата»:
Дата(«20151215204222») // 15.12.2015 20:42:22
Со строкой «15.12.2015 20:42:22» также прекрасно справляется типовой метод:
Дата(«15.12.2015 20:42:22») //15.12.2015 20:42:22
Второй вариант, если мы знаем отдельные составляющие даты в строковом формате: год, месяц, день и т.д:
Дата(«2015″,»12″,»15″,»20″,»42″,»22») // 15.12.2015 20:42:22
Пример преобразования строки вида «2015-12-15 20:42:22»:
СтроковаяДата = «2015-12-15 20:42:22»;
СтроковаяДата = СтрЗаменить(СтроковаяДата , «-«,»»);
СтроковаяДата = СтрЗаменить(СтроковаяДата , «:»,»»);
НоваяДата = Дата(СтроковаяДата ); // 15.12.2015 20:42:22
Если дата указан так «20:42:22 2015/12/15» можно преобразовать её следующим образом:
СтроковаяДата = «20:42:22 2015/12/15»;
СтроковаяДата = СтрЗаменить(СтроковаяДата , «/»,»»);
СтроковаяДата = СтрЗаменить(СтроковаяДата , «:»,»»);
НоваяДата = Дата(Прав(СтроковаяДата , 8) + Лев(СтроковаяДата ,6));
Генератор случайных чисел¶
ГСЧ = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 100000);
Пересохранение книги в Эксель (Excel) с отображением листов¶
http://infostart.ru/public/323606/
Код:
Для v8:
ТабДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS); Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ПолноеИмяФайла); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0.6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // если нужно поработать дальше с книгой //Excel.Application.Quit() // если просто выходим
Для v7.7:
ТабДокумент.Записать(ПолноеИмяФайла, "XLS"); Excel = СоздатьОбъект("Excel.Application"); Excel.WorkBooks.Open(ПолноеИмяФайла); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0.6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // если нужно поработать дальше с книгой //Excel.Application.Quit() // если просто выходим
Функция ВернутьТолькоЦифры¶
Функция ВернутьТолькоЦифры(прСтрока) Рез = ""; Для п = 1 По СтрДлина(прСтрока) Цикл Симв = Сред(прСтрока, п, 1); Если Симв>="0" И Симв<="9" Тогда Рез = Рез + Симв; КонецЕсли; КонецЦикла; Возврат Рез; КонецФункции
Установить новую ссылку для еще не записанного объекта.¶
Например, в модуле объекта
Если ЭтоНовый() Тогда СсылкаНаОбъект = ПолучитьСсылкуНового(); Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда СсылкаНаОбъект = Документы.ЗаданиеНаПеревозку.ПолучитьСсылку(); УстановитьСсылкуНового(СсылкаНаОбъект); КонецЕсли; Иначе СсылкаНаОбъект = Ссылка; КонецЕсли;
Получение документа (паспорт) физического лица¶
#Паспорт #УТ11 ФизЛицо #РегистрСведений.ДокументыФизическихЛиц #Паспорт #Удостоверение
ПаспортныеДанные = ?(ЗначениеЗаполнено(РезультатШапкаДокументов.Ссылка.Водитель), ФизическиеЛицаУТ.ПолучитьДокументФизическогоЛицаПоУмолчанию(РезультатШапкаДокументов.Ссылка.Водитель,Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ, РезультатШапкаДокументов.Дата), "");
Значение реквизита объекта на клиенте и сервере¶
//На клиенте СтрокаТЧ.СерияДатаПроизводства = ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(СтрокаТЧ.Серия, "ДатаПроизводства"); //НаСервере СтрокаТЧ.СерияДатаПроизводства = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТЧ.Серия, "ДатаПроизводства");