Универсальные процедуры и функции » История » Версия 33
Версия 32 (Всеволод Дорофеев, 08.12.2021 14:28) → Версия 33/38 (Всеволод Дорофеев, 08.12.2021 14:29)
h1. Универсальные процедуры и функции
{{TOC}}
{{collapse(h3. Процедуры и функции общего назначения)
h3. Процедуры и функции общего назначения
<pre>
КонтактноеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователи.ТекущийПользователь(), "ФизическоеЛицо");
</pre>
}}
h3. Проверить, что описание типа состоит из единственного типа значения и совпадает с нужным типом.
<pre>
// Проверить, что описание типа состоит из единственного типа значения и
// совпадает с нужным типом.
//
// Возвращаемое значение:
// Булево - Совпадает или нет
//
Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт
Если ОписаниеТипа.Типы().Количество() = 1
И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
</pre>
УТ11:
<pre>
ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево"));
</pre>
h3. Функция ЕстьРеквизитОбъекта - проверяет наличие у произвольного объекта реквизита с указанным именем (УТ11.ОбщегоНазначенияУТКлиентСервер)
<pre>
#Область МетодыРаботыСРеквизитамиОбъектов
// Проверяет наличие у произвольного объекта реквизита с указанным именем.
//
Функция ЕстьРеквизитОбъекта(Объект, ИмяРеквизита) Экспорт
КлючУникальности = Новый УникальныйИдентификатор;
СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
КонецФункции
#КонецОбласти
</pre>
h3. Проверка битых ссылок
<pre>
ЭтоБитаяСсылка = не ЗначениеЗаполнено(Ссылка.ВерсияДанных);
</pre>
h3. МенеджерИсторииРаботыПользователя
<pre>
// Добавить событие в историю работы пользователя
ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка));
</pre>
h3. ОтображениеСостояния
h3. Очистка окна сообщений
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пример:
<pre>
ОчиститьСообщения();
</pre>
h3. Отбор в таблице значений (табличной части) с помощью построителя запроса
<pre>
&НаСервере
Функция ПолучитьКоличествоПодобраноПоСтрокеНаСервере(ИсходнаяНоменклатура)
ПостроительЗапр = Новый ПостроительЗапроса;
ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(Объект.НоваяНоменклатура.Выгрузить());
Отбор = ПостроительЗапр.Отбор.Добавить("ИсходнаяНоменклатура");
Отбор.ВидСравнения = ВидСравнения.Равно;
Отбор.Значение = ИсходнаяНоменклатура;
Отбор.Использование = Истина;
ПостроительЗапр.Выполнить();
ПостроительЗапр.Результат.Выгрузить().Итог("Количество");
КонецФункции
</pre>
h3. Запись справочника
<pre>
Функция ЗаписатьСправочник(ТекущийОбъект,Заголовок="",РежимСообщений="Все",РежимЗагрузки=Ложь) Экспорт
ДействиеВыполнено = Ложь;
ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
Попытка
Если РежимЗагрузки Тогда
ТекущийОбъект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
ТекущийОбъект.Записать();
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Записан справочник """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось записать справочник """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
Возврат ДействиеВыполнено;
КонецФункции //ЗаписатьПровестиДокумент()
</pre>
h3. Запись и проведение документа
<pre>
// Процедура выполняет запись/проведение/отмену проведения документа.
//
// Параметры:
// ТекущийОбъект – ДокументОбъект,СправочникОбъект.
// РежимЗаписи - РежимЗаписиДокумента.
// Заголовок - Строка.
// РежимСообщений - Строка: "Нет","Все","Ошибки".
//
// Возвращаемое значение:
// ДействиеВыполнено – Булево.
//
Функция ЗаписатьПровестиДокумент(ТекущийОбъект,РежимЗаписи,Заголовок="",РежимСообщений="Все") Экспорт
ДействиеВыполнено = Ложь;
ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
Если РежимЗаписи = РежимЗаписиДокумента.Запись ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Попытка
ТекущийОбъект.Записать(РежимЗаписиДокумента.Запись);
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Записан документ """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось записать документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Попытка
ТекущийОбъект.Записать(РежимЗаписиДокумента.Проведение);
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Проведен документ """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось провести документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Попытка
ТекущийОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Отменено проведение документа """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось отменить проведение документа """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
КонецЕсли;
Возврат ДействиеВыполнено;
КонецФункции // ЗаписатьПровестиДокумент()
</pre>
h3. Проверка на пустую дату
Пустая дата
<pre>
Дата("00010101");
Дата(1, 1, 1);
Дата("00010101000000");
Дата("0001-01-01");
</pre>
h3. Создание пустой таблицы значение на основании табличной части Документа
<pre>
Товары = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка().Товары.ВыгрузитьКолонки();
</pre>
h3. Создание структуры со свойствами, как колонки таблицы, переданной строки
<pre>
// Функция СтрокаТаблицыЗначенийВСтруктуру создает
// структуру со свойствами, как колонки таблицы
// значений передаваемой строки
// и устанавливает этим свойствам значения
// из строки таблицы значений.
//
// Параметры:
// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений.
//
// ВозвращаемоеЗначение:
// Структура
//
Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
Структура = Новый Структура;
Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
КонецЦикла;
Возврат Структура;
КонецФункции
</pre>
h3. Загрузка таблицы/соответствия из макета с помощью построителя отчета
<pre>
Функция ЗаполнитьСоответствиеИзМакета(ИмяМакета)
Макет = ПолучитьМакет(ИмяМакета);
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область());
ТЗ = ПостроительЗапроса.Результат.Выгрузить();
Результат = Новый Соответствие;
Для каждого Стр Из ТЗ Цикл
Результат.Вставить(Стр.Колонка1, Стр.Колонка2);
КонецЦикла;
Возврат Результат;
КонецФункции
</pre>
h3. Получение прописью месяца в родительном падеже
<pre>
ОбластьТела.Параметры.ДатаУдостоверенияМесяц = Сред(Формат(ДатаУдостоверения, "ДФ=ddMMMM"),3);
</pre>
h3. Число прописью
<pre>
//
ЧислоПрописью(СтруктураОснований.Сумма, "Л=ru_RU;ДП=Истина", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2");
//без дробной части
Числопрописью = ЧислоПрописью(ДанныеПечати.МассаБрутто, "Л=ru_RU; НП=Ложь",",,,,,,,,0")
</pre>
h3. Склонения по падежам
https://spb.koderline.ru/expert/programming/article-sklonenie-v-1s/#jakor6
<pre>
//Возвращает массив
Массив = ПолучитьСклоненияСтрокиПоЧислу("место", ДанныеПечати.ссылка.г_КоличествоМестТН, "", "ЧС=Количественное", "ПД=Именительный")
</pre>
h3. Варианты преобразования даты из строки (конвертация строки в дату)
Проще всего преобразовать строку вида «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));
h3. Генератор случайных чисел
<pre>
ГСЧ = Новый ГенераторСлучайныхЧисел();
СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 100000);
</pre>
h3. Пересохранение книги в Эксель (Excel) с отображением листов
http://infostart.ru/public/323606/
Код:
Для v8:
<pre>
ТабДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.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() // если просто выходим
</pre>
Для v7.7:
<pre>
ТабДокумент.Записать(ПолноеИмяФайла, "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() // если просто выходим
</pre>
h3. Функция ВернутьТолькоЦифры
<pre>
Функция ВернутьТолькоЦифры(прСтрока)
Рез = "";
Для п = 1 По СтрДлина(прСтрока) Цикл
Симв = Сред(прСтрока, п, 1);
Если Симв>="0" И Симв<="9" Тогда
Рез = Рез + Симв;
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции
</pre>
h3. Установить новую ссылку для еще не записанного объекта.
Например, в модуле объекта
<pre>
Если ЭтоНовый() Тогда
СсылкаНаОбъект = ПолучитьСсылкуНового();
Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
СсылкаНаОбъект = Документы.ЗаданиеНаПеревозку.ПолучитьСсылку();
УстановитьСсылкуНового(СсылкаНаОбъект);
КонецЕсли;
Иначе
СсылкаНаОбъект = Ссылка;
КонецЕсли;
</pre>
h3. Получение документа (паспорт) физического лица
#Паспорт #УТ11 ФизЛицо #РегистрСведений.ДокументыФизическихЛиц #Паспорт #Удостоверение
<pre>
ПаспортныеДанные = ?(ЗначениеЗаполнено(РезультатШапкаДокументов.Ссылка.Водитель),
ФизическиеЛицаУТ.ПолучитьДокументФизическогоЛицаПоУмолчанию(РезультатШапкаДокументов.Ссылка.Водитель,Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ, РезультатШапкаДокументов.Дата),
"");
</pre>
{{TOC}}
{{collapse(h3. Процедуры и функции общего назначения)
h3. Процедуры и функции общего назначения
<pre>
КонтактноеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователи.ТекущийПользователь(), "ФизическоеЛицо");
</pre>
}}
h3. Проверить, что описание типа состоит из единственного типа значения и совпадает с нужным типом.
<pre>
// Проверить, что описание типа состоит из единственного типа значения и
// совпадает с нужным типом.
//
// Возвращаемое значение:
// Булево - Совпадает или нет
//
Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт
Если ОписаниеТипа.Типы().Количество() = 1
И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
</pre>
УТ11:
<pre>
ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево"));
</pre>
h3. Функция ЕстьРеквизитОбъекта - проверяет наличие у произвольного объекта реквизита с указанным именем (УТ11.ОбщегоНазначенияУТКлиентСервер)
<pre>
#Область МетодыРаботыСРеквизитамиОбъектов
// Проверяет наличие у произвольного объекта реквизита с указанным именем.
//
Функция ЕстьРеквизитОбъекта(Объект, ИмяРеквизита) Экспорт
КлючУникальности = Новый УникальныйИдентификатор;
СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
КонецФункции
#КонецОбласти
</pre>
h3. Проверка битых ссылок
<pre>
ЭтоБитаяСсылка = не ЗначениеЗаполнено(Ссылка.ВерсияДанных);
</pre>
h3. МенеджерИсторииРаботыПользователя
<pre>
// Добавить событие в историю работы пользователя
ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка));
</pre>
h3. ОтображениеСостояния
h3. Очистка окна сообщений
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пример:
<pre>
ОчиститьСообщения();
</pre>
h3. Отбор в таблице значений (табличной части) с помощью построителя запроса
<pre>
&НаСервере
Функция ПолучитьКоличествоПодобраноПоСтрокеНаСервере(ИсходнаяНоменклатура)
ПостроительЗапр = Новый ПостроительЗапроса;
ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(Объект.НоваяНоменклатура.Выгрузить());
Отбор = ПостроительЗапр.Отбор.Добавить("ИсходнаяНоменклатура");
Отбор.ВидСравнения = ВидСравнения.Равно;
Отбор.Значение = ИсходнаяНоменклатура;
Отбор.Использование = Истина;
ПостроительЗапр.Выполнить();
ПостроительЗапр.Результат.Выгрузить().Итог("Количество");
КонецФункции
</pre>
h3. Запись справочника
<pre>
Функция ЗаписатьСправочник(ТекущийОбъект,Заголовок="",РежимСообщений="Все",РежимЗагрузки=Ложь) Экспорт
ДействиеВыполнено = Ложь;
ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
Попытка
Если РежимЗагрузки Тогда
ТекущийОбъект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
ТекущийОбъект.Записать();
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Записан справочник """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось записать справочник """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
Возврат ДействиеВыполнено;
КонецФункции //ЗаписатьПровестиДокумент()
</pre>
h3. Запись и проведение документа
<pre>
// Процедура выполняет запись/проведение/отмену проведения документа.
//
// Параметры:
// ТекущийОбъект – ДокументОбъект,СправочникОбъект.
// РежимЗаписи - РежимЗаписиДокумента.
// Заголовок - Строка.
// РежимСообщений - Строка: "Нет","Все","Ошибки".
//
// Возвращаемое значение:
// ДействиеВыполнено – Булево.
//
Функция ЗаписатьПровестиДокумент(ТекущийОбъект,РежимЗаписи,Заголовок="",РежимСообщений="Все") Экспорт
ДействиеВыполнено = Ложь;
ВыводитьОшибки = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
Если РежимЗаписи = РежимЗаписиДокумента.Запись ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Попытка
ТекущийОбъект.Записать(РежимЗаписиДокумента.Запись);
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Записан документ """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось записать документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Попытка
ТекущийОбъект.Записать(РежимЗаписиДокумента.Проведение);
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Проведен документ """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось провести документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Попытка
ТекущийОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ДействиеВыполнено = Истина;
Если ВыводитьИнформацию Тогда
ТекстСообщения = "Отменено проведение документа """+ТекущийОбъект.Ссылка+""". ";
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
КонецЕсли;
Исключение
ДействиеВыполнено = Ложь;
Если ВыводитьОшибки Тогда
ТекстСообщения = "Не удалось отменить проведение документа """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
КонецЕсли;
КонецПопытки;
КонецЕсли;
Возврат ДействиеВыполнено;
КонецФункции // ЗаписатьПровестиДокумент()
</pre>
h3. Проверка на пустую дату
Пустая дата
<pre>
Дата("00010101");
Дата(1, 1, 1);
Дата("00010101000000");
Дата("0001-01-01");
</pre>
h3. Создание пустой таблицы значение на основании табличной части Документа
<pre>
Товары = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка().Товары.ВыгрузитьКолонки();
</pre>
h3. Создание структуры со свойствами, как колонки таблицы, переданной строки
<pre>
// Функция СтрокаТаблицыЗначенийВСтруктуру создает
// структуру со свойствами, как колонки таблицы
// значений передаваемой строки
// и устанавливает этим свойствам значения
// из строки таблицы значений.
//
// Параметры:
// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений.
//
// ВозвращаемоеЗначение:
// Структура
//
Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
Структура = Новый Структура;
Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
КонецЦикла;
Возврат Структура;
КонецФункции
</pre>
h3. Загрузка таблицы/соответствия из макета с помощью построителя отчета
<pre>
Функция ЗаполнитьСоответствиеИзМакета(ИмяМакета)
Макет = ПолучитьМакет(ИмяМакета);
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область());
ТЗ = ПостроительЗапроса.Результат.Выгрузить();
Результат = Новый Соответствие;
Для каждого Стр Из ТЗ Цикл
Результат.Вставить(Стр.Колонка1, Стр.Колонка2);
КонецЦикла;
Возврат Результат;
КонецФункции
</pre>
h3. Получение прописью месяца в родительном падеже
<pre>
ОбластьТела.Параметры.ДатаУдостоверенияМесяц = Сред(Формат(ДатаУдостоверения, "ДФ=ddMMMM"),3);
</pre>
h3. Число прописью
<pre>
//
ЧислоПрописью(СтруктураОснований.Сумма, "Л=ru_RU;ДП=Истина", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2");
//без дробной части
Числопрописью = ЧислоПрописью(ДанныеПечати.МассаБрутто, "Л=ru_RU; НП=Ложь",",,,,,,,,0")
</pre>
h3. Склонения по падежам
https://spb.koderline.ru/expert/programming/article-sklonenie-v-1s/#jakor6
<pre>
//Возвращает массив
Массив = ПолучитьСклоненияСтрокиПоЧислу("место", ДанныеПечати.ссылка.г_КоличествоМестТН, "", "ЧС=Количественное", "ПД=Именительный")
</pre>
h3. Варианты преобразования даты из строки (конвертация строки в дату)
Проще всего преобразовать строку вида «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));
h3. Генератор случайных чисел
<pre>
ГСЧ = Новый ГенераторСлучайныхЧисел();
СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 100000);
</pre>
h3. Пересохранение книги в Эксель (Excel) с отображением листов
http://infostart.ru/public/323606/
Код:
Для v8:
<pre>
ТабДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.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() // если просто выходим
</pre>
Для v7.7:
<pre>
ТабДокумент.Записать(ПолноеИмяФайла, "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() // если просто выходим
</pre>
h3. Функция ВернутьТолькоЦифры
<pre>
Функция ВернутьТолькоЦифры(прСтрока)
Рез = "";
Для п = 1 По СтрДлина(прСтрока) Цикл
Симв = Сред(прСтрока, п, 1);
Если Симв>="0" И Симв<="9" Тогда
Рез = Рез + Симв;
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции
</pre>
h3. Установить новую ссылку для еще не записанного объекта.
Например, в модуле объекта
<pre>
Если ЭтоНовый() Тогда
СсылкаНаОбъект = ПолучитьСсылкуНового();
Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
СсылкаНаОбъект = Документы.ЗаданиеНаПеревозку.ПолучитьСсылку();
УстановитьСсылкуНового(СсылкаНаОбъект);
КонецЕсли;
Иначе
СсылкаНаОбъект = Ссылка;
КонецЕсли;
</pre>
h3. Получение документа (паспорт) физического лица
#Паспорт #УТ11 ФизЛицо #РегистрСведений.ДокументыФизическихЛиц #Паспорт #Удостоверение
<pre>
ПаспортныеДанные = ?(ЗначениеЗаполнено(РезультатШапкаДокументов.Ссылка.Водитель),
ФизическиеЛицаУТ.ПолучитьДокументФизическогоЛицаПоУмолчанию(РезультатШапкаДокументов.Ссылка.Водитель,Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ, РезультатШапкаДокументов.Дата),
"");
</pre>