Универсальные процедуры и функции » История » Версия 17
« Предыдущее -
Версия 17/38
(Разница(diff)) -
Следующее » -
Текущая версия
Всеволод Дорофеев, 05.03.2017 19:09
Универсальные процедуры и функции¶
Проверка битых ссылок¶
ЭтоБитаяСсылка = не ЗначениеЗаполнено(Ссылка.ВерсияДанных);
Возвращает полное имя объекта метаданных по переданному значению ссылки¶
// Возвращает полное имя объекта метаданных по переданному значению ссылки // Например, // "Справочник.Номенклатура"; // "Документ.ПриходнаяНакладная" // // Параметры: // Ссылка - ЛюбаяСсылка - значение ссылки, для которого необходимо получить имя таблицы ИБ // // Возвращаемое значение: // Строка - полное имя объекта метаданных для указанного значения ссылки // Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт Возврат Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя(); КонецФункции
МенеджерИсторииРаботыПользователя¶
// Добавить событие в историю работы пользователя ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка));
ОтображениеСостояния¶
Очистка окна сообщений¶
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пример:
ОчиститьСообщения();
Отбор в таблице значений (табличной части) с помощью построителя запроса¶
&НаСервере Функция ПолучитьКоличествоПодобраноПоСтрокеНаСервере(ИсходнаяНоменклатура) ПостроительЗапр = Новый ПостроительЗапроса; ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(Объект.НоваяНоменклатура.Выгрузить()); Отбор = ПостроительЗапр.Отбор.Добавить("ИсходнаяНоменклатура"); Отбор.ВидСравнения = ВидСравнения.Равно; Отбор.Значение = ИсходнаяНоменклатура; Отбор.Использование = Истина; ПостроительЗапр.Выполнить(); ПостроительЗапр.Результат.Выгрузить().Итог("Количество"); КонецФункции
Запись справочника¶
Функция ЗаписатьСправочник(ТекущийОбъект,Заголовок="",РежимСообщений="Все",РежимЗагрузки=Ложь) Экспорт ДействиеВыполнено = Ложь; ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь); ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь); Попытка Если РежимЗагрузки Тогда ТекущийОбъект.ОбменДанными.Загрузка = Истина; КонецЕсли; ТекущийОбъект.Записать(); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Записан справочник """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось записать справочник """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; Возврат ДействиеВыполнено; КонецФункции //ЗаписатьПровестиДокумент()
Запись и проведение документа¶
// Процедура выполняет запись/проведение/отмену проведения документа. // // Параметры: // ТекущийОбъект – ДокументОбъект,СправочникОбъект. // РежимЗаписи - РежимЗаписиДокумента. // Заголовок - Строка. // РежимСообщений - Строка: "Нет","Все","Ошибки". // // Возвращаемое значение: // ДействиеВыполнено – Булево. // Функция ЗаписатьПровестиДокумент(ТекущийОбъект,РежимЗаписи,Заголовок="",РежимСообщений="Все") Экспорт ДействиеВыполнено = Ложь; ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь); ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь); Если РежимЗаписи = РежимЗаписиДокумента.Запись ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Попытка ТекущийОбъект.Записать(РежимЗаписиДокумента.Запись); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Записан документ """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось записать документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; КонецЕсли; Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Попытка ТекущийОбъект.Записать(РежимЗаписиДокумента.Проведение); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Проведен документ """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось провести документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; КонецЕсли; Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда Попытка ТекущийОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); ДействиеВыполнено = Истина; Если ВыводитьИнформацию Тогда ТекстСообщения = "Отменено проведение документа """+ТекущийОбъект.Ссылка+""". "; СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация); КонецЕсли; Исключение ДействиеВыполнено = Ложь; Если ВыводитьОшибки Тогда ТекстСообщения = "Не удалось отменить проведение документа """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки(); СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное); КонецЕсли; КонецПопытки; КонецЕсли; Возврат ДействиеВыполнено; КонецФункции // ЗаписатьПровестиДокумент()
Проверка на пустую дату¶
Пустая дата
Дата("00010101"); Дата(1, 1, 1); Дата("00010101000000"); Дата("0001-01-01");
Создание структуры со свойствами, как колонки таблицы, переданной строки¶
// Функция СтрокаТаблицыЗначенийВСтруктуру создает // структуру со свойствами, как колонки таблицы // значений передаваемой строки // и устанавливает этим свойствам значения // из строки таблицы значений. // // Параметры: // СтрокаТаблицыЗначений - СтрокаТаблицыЗначений. // // ВозвращаемоеЗначение: // Структура // Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт Структура = Новый Структура; Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]); КонецЦикла; Возврат Структура; КонецФункции
Загрузка таблицы/соответствия из макета с помощью построителя отчета¶
Функция ЗаполнитьСоответствиеИзМакета(ИмяМакета) Макет = ПолучитьМакет(ИмяМакета); ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область()); ТЗ = ПостроительЗапроса.Результат.Выгрузить(); Результат = Новый Соответствие; Для каждого Стр Из ТЗ Цикл Результат.Вставить(Стр.Колонка1, Стр.Колонка2); КонецЦикла; Возврат Результат; КонецФункции
Варианты преобразования даты из строки (конвертация строки в дату)¶
Проще всего преобразовать строку вида «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);