Полезные встроенные функции для работы с печатными формами и не только на УТ 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

 

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

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

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

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2910    Abysswalker    7    

43

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5773    DeerCven    15    

57

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

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

21.05.2024    47230    dimanich70    83    

167

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    7058    6    John_d    13    

59

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

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

12.02.2024    58656    atdonya    31    

69

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

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

30.11.2023    8795    ke.92@mail.ru    17    

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

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