Для чего я решил написать данную статью? Изначально ставилась задача правильно и быстро получать наиболее полную информацию об организации, контрагентах в одних из самых ходовых конфигурациях - бухгалтерия предприятия и управление торговлей для применения этой информации при разработке печатных форм (и вообще в обработках).
Решено было сделать анализ - сравнение на возможность применения уже готовых функций в этих конфигурациях.
Кроме того, в статье я привожу описание применения еще нескольких полезных функций работы с числами, суммами, строками.
Отмечу сразу, это не функции БСП и отношения к библиотеке стандартных подсистем никакого не имеют.
Все что получилось - привожу ниже по тексту. Надеюсь, что данный материал будет вам полезен. Начну описание с одной из самых базовых функций:
Функция 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
Спасибо, что дочитали данную статью до конца. Так же, прошу ознакомиться с моей предыдущей статьей Возможности работы со строками при помощи БСП, которые должен знать каждый программист.