Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

22.03.22

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

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

Для чего я решил написать данную статью? Изначально ставилась задача правильно и быстро получать наиболее полную информацию об организации, контрагентах в одних из самых ходовых конфигурациях - бухгалтерия предприятия и управление торговлей для применения этой информации при разработке печатных форм (и вообще в обработках).

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

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

Отмечу сразу, это не функции БСП и отношения к библиотеке стандартных подсистем никакого не имеют.

Все что получилось - привожу ниже по тексту. Надеюсь, что данный материал будет вам полезен. Начну описание с одной из самых базовых функций:

 

Функция 1.

СведенияОЮрФизЛице(ЮрФизЛицо, ДатаПериода, ДляФизЛицаТолькоИнициалы = Истина, Знач БанковскийСчет = Неопределено)

Ничего не нужно сочинять - данная функция вернет вам структуру с информацией об организации или контрагенте на заданных период времени. Параметр ЮрФизЛицо - это может быть Организация либо Контрагент.

 

Возвращает структуру следующего содержания:

Сведения = Новый Структура("Представление, СокращенноеНаименование, ПолноеНаименование, НаименованиеДляПечатныхФорм,
		|КодПоОКПО, КодОКВЭД, ИНН, КПП, Телефоны, ЮридическийАдрес, Банк, БИК, КоррСчет, НомерСчета");

 

Данная функция в Управлении Торговли 11.4 находится в модуле ФормированиеПечатныхФорм.

В Бухгалтерии 3.0 находится в модуле БухгалтерскийУчетПереопределяемый и она немного отличается входящими параметрами от функции торговли СведенияОЮрФизЛице(ЮрФизЛицо, ДатаПериода, ДляФизЛицаТолькоИнициалы = Истина, Знач БанковскийСчет = Неопределено), но возвращает то же самое.

Полезная функция, запомните ее.

 

Следующая, одна из полезнейших готовых функций

 

Функция 2.

ОписаниеОрганизации(СписокСведений, Список = "", СПрефиксом = Истина)

Данная функция позволяет получить необходимые данные об организации, контрагенте или физическом лице. Возвращает описание строкой такого вида:

ОписаниеОрг =  ФормированиеПечатныхФорм.ОписаниеОрганизации(СписокСведений,,Истина);

 

В качестве основного параметра СписокСведений - это результат - структура предыдущей функции СведенияОЮрФизЛице.

Данная функция в Управлении Торговли 11.4 находится в модуле ФормированиеПечатныхФорм.

Возвращаемый результат такой:

//ИП ****** К.В., ИНН 42*****, 65*****, Кемеровская область - Кузбасс, Новокузнецк г., ул. С*****, дом ***, квартира ****, тел.: +7 (3843) ******

 

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

Так же применяешь функцию, не придумывая что-то свое.

 

Функция 3.

ПолучитьАдресИзКонтактнойИнформации(Объект, ТипАдреса = "", Дата = Неопределено) Экспорт

Получаем сразу адрес объекта, ТипАдреса может быть "Юридический", "Регистрации", "Фактический" на дату (у меня указана ТекущаяДата())

АдрКонтр = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(Контр,"Фактический",ТекущаяДата());
Сообщить(АдрКонтр); //65****, Кемеровская область - Кузбасс, Новокузнецк г., ул. С****, дом ***, квартира ****

Для получения адреса из контактной информации в Бухгалетрии 3.0, я использую ранее упомянутую функцию ОписаниеОрганизации.

 

Функция 4.

ПолучитьТелефонИзКонтактнойИнформации(Объект) Экспорт

Получаем напрямую телефон с помощью функции Управления Торговлей 11.4

ТелКонтр = ФормированиеПечатныхФорм.ПолучитьТелефонИзКонтактнойИнформации(Контр);
Сообщить(ТелКонтр); // +7 (3843) ****

В глубинах бухгалтерии нарыты такие интересные функции для работы с телефонами:

В обработке ОбщиеОбъектРеглОтчетности. Функция приводит формату 89012345678. Это неэкспортная функция, придется копировать в свой код.

&НаСервере
Функция НормализованныйНомерТелефона(Знач Телефон) 
	
	Телефон = СокрЛП(Телефон);
	Телефон = СтрЗаменить(Телефон, " ", "");
	Телефон = СтрЗаменить(Телефон, "(", "");
	Телефон = СтрЗаменить(Телефон, ")", "");
	
	Если СтрНачинаетсяС(Телефон, "7") Тогда 
		Телефон = "8" + Сред(Телефон, 2);
	ИначеЕсли СтрНачинаетсяС(Телефон, "+7") Тогда 
		Телефон = "8" + Сред(Телефон, 3);
	КонецЕсли;
	Если СтрДлина(Телефон) < 11 Тогда
		Телефон = "";
	КонецЕсли;
	
	Возврат Телефон;
	
КонецФункции

так же есть "полуискусственная" функция, которая требует адаптации в вашем коде.

Здесь ЗаписиКонтактнойИнформации - это некая табличная часть, в которой содержится вся контактная информация.

&НаСервере
Функция ТелефонИзКонтактнойИнформацииПоВиду(ЗаписиКонтактнойИнформации, ВидКонтактнойИнформации)
	
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Вид", ВидКонтактнойИнформации); 
	
	СтрокиСТелефоном = ЗаписиКонтактнойИнформации.НайтиСтроки(ПараметрыОтбора);	
	Если СтрокиСТелефоном.Количество() > 0 Тогда 
		НомерТелефона = НормализованныйНомерТелефона(СтрокиСТелефоном[0].Представление);
		Возврат НомерТелефона;
	КонецЕсли;
	
	Возврат "";
				
КонецФункции

 

Функция 5.

ФорматСумм(Сумма, Валюта, ЧН = "", ЧРГ = "") Экспорт

Стандартная для конфигурации Управление торговлей функция форматирования сумм

Сообщить(ФормированиеПечатныхФорм.ФорматСумм(444441.44,Справочники.Валюты.НайтиПоКоду("643"),"0","."));
// 444.441,44 RUB

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

обращаться к ней нужно так: ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма, Валюта, "0", ".");

 

Функция 6.

Функция СуммаРубКоп(Сумма, Валюта, ВалютаРегламентированногоУчета) Экспорт

Данная функция разбивает число "на входе" на валюты рег.учета.

РубКоп = ФормированиеПечатныхФорм.СуммаРубКоп(254.44, Справочники.Валюты.НайтиПоКоду("643") , Справочники.Валюты.НайтиПоКоду("643"));
Сообщить(РубКоп); // 254 руб. 44 коп.

 

Функция 7.

Функция КоличествоПрописью(Количество) Экспорт

Думаю, что данную функцию или что-то похожее придумывали все. Готовая функция работает вот так.:

КолвоПрописью =  ФормированиеПечатныхФорм.КоличествоПрописью(45444.55);
Сообщить(КолвоПрописью); // Сорок пять тысяч четыреста сорок четыре целых 55 сотых

Обращение в бухгалтерии:

КолвоПрописью =  ОбщегоНазначенияБПВызовСервера.КоличествоПрописью(45444.55);
Сообщить(КолвоПрописью); // Сорок пять тысяч четыреста сорок четыре целых 55 сотых

 

Функция 8.

СформироватьСуммуПрописью(Сумма, Валюта) Экспорт

Обращение к этой готовой функции из бухгалтерии

	СуммаПрописью = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(225.3, Справочники.Валюты.НайтиПоКоду("643"));
	Сообщить(СуммаПрописью); //Двести двадцать пять рублей 30 копеек

Функция выглядит вот и состоит из двух функций - вышеупомянуюто ФорматСумм и встроенной в платформу ЧислоПрописью

Функция СформироватьСуммуПрописью(Сумма, Валюта) Экспорт

	Если Валюта.ПараметрыПрописи = "" Тогда
		Возврат ФорматСумм(Сумма);
	Иначе
		Возврат ЧислоПрописью(Сумма, ,Валюта.ПараметрыПрописи);
	КонецЕсли;

КонецФункции

 

Функция 9.

ДанныеФизЛица(Организация, ФизЛицо, ДатаСреза, ФИОКратко = Истина) Экспорт

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

//     - Фамилия
//     - Имя
//     - Отчество
//     - Представление (Фамилия И.О.)
//     - Подразделение
//     - ВидДокумента
//     - Серия
//     - Номер
//     - ДатаВыдачи
//     - КемВыдан
//     - КодПодразделения

Выглядит она так - просто экспортирует функцию УчетЗарплаты.ДанныеФизическихЛиц(Организация, ФизЛицо, ДатаСреза, ФИОКратко)

Функция ДанныеФизЛица(Организация, ФизЛицо, ДатаСреза, ФИОКратко = Истина) Экспорт
	
	Возврат УчетЗарплаты.ДанныеФизическихЛиц(Организация, ФизЛицо, ДатаСреза, ФИОКратко);

КонецФункции

 

Функция 10.

ПолучитьФамилиюИмяОтчество(Фамилия = " ", Имя = " ", Отчество = " ", ФИОКратко = Истина) Экспорт

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

Функция ПолучитьФамилиюИмяОтчество(Фамилия = " ", Имя = " ", Отчество = " ", ФИОКратко = Истина) Экспорт

	Если ФИОКратко Тогда
		Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." +
				?(НЕ ПустаяСтрока(Отчество) ,
				Лев(Отчество,1)+".", ""), ""), "");
	Иначе
		Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Имя +
				?(НЕ ПустаяСтрока(Отчество) , " " + Отчество, ""), ""), "");
	КонецЕсли;

КонецФункции

Данная функция возвращает фамилия, имя, отчество одной строкой. По-умолчанию - кратко.

 

Процедура 1 и Процедура 2.

Так же хочу упомянуть о двух готовых процедурах в УТ - это Процедура ВывестиЛоготипВТабличныйДокумент(Макет, ОбластьМакета, ИмяОбласти, Организация) Экспорт и Процедура ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, Организация, ПараметрыПечати = Неопределено) Экспорт.

Логика работы этих процедур практически одинакова - берется готовый макет, область и по передаваемой организации вставляется картинка:

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

Сразу можно обращаться к готовым процедурам в УТ:

ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, Организация, )

 

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

 

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

Так же вы можете подписаться на мой телеграмм канал https://t.me/quazareline

 

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

сравнение функций бухгалтерия управление торговлей

См. также

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

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

21.05.2024    21467    dimanich70    81    

146

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4186    3    John_d    11    

57

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

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

12.02.2024    19960    atdonya    24    

58

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

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5642    ke.92@mail.ru    17    

65

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

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15246    YA_418728146    7    

169

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3714    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18673    173    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Roootru 5 10.07.20 09:26 Сейчас в теме
Хорошая шпаргалка, спасибо вам!
NewLifeMan; fomix; quazare; +3 Ответить
2. Dempingator 161 10.07.20 15:13 Сейчас в теме
Автору однозначно плюс!

Может быть так и составим документацию по БСП (общими усилиями сообщества), пока очередное обновление не вышло )
katakuna; darkultro37; +2 Ответить
3. quazare 3818 10.07.20 19:53 Сейчас в теме
(2) ну я бы сказал, что данные функции сами по-себе используют БСП где-то внутри себя, но по-факту - эти функции написаны отдельно для каждой конфигурации
4. darkultro37 10 15.07.20 11:37 Сейчас в теме
(2)До следующего обновления, где бах и что-то поменялось :) Как-то это не так должно работать.
По этой же причине внешние печатные формы с обращениями к экспортным процедурам/функциям при обновлении успешно перестают работать.
5. Automatik 962 16.07.20 08:00 Сейчас в теме
Про подобные методы ЗУП хорошо бы написать
nikola17; sbbsergey; quazare; +3 Ответить
6. Mark72 19.07.22 17:19 Сейчас в теме
Спасибо, добавил в шаблоны кода
7. HolyRadiance 11.10.22 07:07 Сейчас в теме
Добавьте содержание пожалуйста.
Оставьте свое сообщение