Готовые типовые возможности программной работы с конфигурацией Бухгалтерия 3.0. Часть 1

31.01.23

Разработка - Механизмы типовых конфигураций

В предлагаемой новой статье решил собрать некоторые типовые программные возможности программной работы в 1С:Бухгалтерии 3.0.

Введение

Всем привет! Представляю вам очередную статью - справку, где привожу типовые возможности работы в конфигурации 1С:Бухгалтерия предприятия 3.0 для их использования сразу на практике.

Данное практическое руководство поможет вам, как всегда, сэкономить время - найти и применить описанные готовые функции.

Материал довольно известный, но, я думаю, будет полезен для всех как обновленная "шпаргалка-мануал". Для работы примеров я буду использовать самую последнюю (на конец января 2023) - 1С: Бухгалтерию предприятия 3.0 КОРП (3.0.129.19) и 1С:Платформу 8.3.22.1750.

Статью я разобью на две части, в первой - я опишу функции работы с контрагентами и организациями (точнее, получение информации о них), а во второй - посмотрим некоторые микро-функции для быстрой работы с примитивными типами - строками и датами в рамках конфигурации 1С:Бухгалтерия 3.0 (без библиотеки стандартных подсистем).

Перехожу к практическим примерам функций:

 

Примеры использования

1. Полезные функции работы с контрагентами и организациями.

1.1. Функция СведенияОЮрФизЛице(Компания, Период = '00010101', Знач БанковскийСчет = Неопределено, ПлатежВБюджет = Ложь, ГосКонтракт = Неопределено) Экспорт

Данная функция возвращает структуру - полные реквизиты компании (юридического лица или предпринимателя). Например:

СведенияОКонтрагенте = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Контрагент.ССылка, ТекущаяДата());

 

Структура выглядит вот так:

 

Рис.1 Результат применения функции СведенияОЮрФизЛице().

 

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

Функция преобразовывает структуру данных, которую получили в предыдущем примере в строку. Применение функции:

СтрокаКонтрагент = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОКонтрагенте,"",);

 

Результат применения вот такой:

// ООО "Автотрейд", ИНН 7799555720, 142770, Москва г, МКАД 40-й (п Сосенское) км,
// владение № 1, строение 2, р/с 40702810100000000004, в банке ПАО СБЕРБАНК, БИК 044525225, 
// к/с 30101810400000000225

Вышеуказанные функции можно применять как для типа организация, так и для типа контрагент.

 

1.3. Функция СтруктураОрганизации(Организация) Экспорт

Данная функция вернет полную структуру организации, включая все обособленные подразделения с их реквизитами. Применяется вот так (работает только с "организациями):

ОрганизацияСтуркт = БухгалтерскийУчетПереопределяемый.СтруктураОрганизации(Организация.Ссылка);

 

Результат вот такой:

 

Рис.2 Результат применения функции СтруктураОрганизации(). "ГО" - это головная организация.

 

1.4. Функция ПолучитьБанковскийСчетПоУмолчанию(ЮрФизЛицо, Валюта = Неопределено) Экспорт

Далее, рассмотрим "вспомогательную" функцию, позволяющую получить банковский счет по-умолчанию. Работает для контрагента и организации так же. Применяется эта функция вот так:

БанкСчетСсылка = БухгалтерскийУчетПереопределяемый.ПолучитьБанковскийСчетПоУмолчанию(Орг1.ССылка, );

 

Результат - структура основного банковского счета:

 

Рис.3 Основной банковский счет контрагента или организации.

 

Во второй части материала я перейду к рассмотрению функций общего программного интерфейса.

 

2. Полезные функции программного интерфейса конфигурации

Данные микро-функции я решил разместить здесь в статье, преследуя цель разобраться в логику их работы. Как например, первая из них - "СинонимИЗИмени" работает по строке, а не по метаданным.

 

2.1. Функция СинонимИзИмени(ИмяРеквизита) Экспорт

Данная функция возвращает синоним реквизита:

 
 Вернет синоним из имени реквизита
Функция СинонимИзИмени(ИмяРеквизита) Экспорт
	
	ДопустимыеАббревиатуры = Новый Массив;
	ДопустимыеАббревиатуры.Добавить("ИНН");
	ДопустимыеАббревиатуры.Добавить("КПП");
	ДопустимыеАббревиатуры.Добавить("НДС");
	ДопустимыеАббревиатуры.Добавить("ОС");
	ДопустимыеАббревиатуры.Добавить("НМА");
	
	СловаСинонима = Новый Массив;
	
	УровниИмени = СтрРазделить(ИмяРеквизита, ".", Истина);
	Для каждого УровеньИмени Из УровниИмени Цикл
		
		ЧастьСинонима = СтрокаСПробеламиИзСтиляТРегБезПробелов(УровеньИмени, ДопустимыеАббревиатуры); 
		
		СловаСинонима.Добавить(КапитализироватьСтроку(ЧастьСинонима));
		
	КонецЦикла;
	
	Возврат СтрСоединить(СловаСинонима, ".");
	
КонецФункции

 

 

2.2. Функция СтрокаСПробеламиИзСтиляТРегБезПробелов(СтрокаВСтилеТРегБезПробелов, МассивАббревиатур, ДекапитализироватьПервоеСлово = Ложь)

Данная функция вернет строку с пробелами, используя заглавные буквы. МассивАббревиатур - это массив исключений:

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

 

 

 

2.3. Функция ДобавитьПериод(Дата, Периодичность, КоличествоПериодов = 1) Экспорт

Данная функция добавляет период к дате в формате перечисления - "периодичности":

 
 Добавление периода
Функция ДобавитьПериод(Дата, Периодичность, КоличествоПериодов = 1) Экспорт
	
	День = 24 * 60 * 60; // Количество секунд в дне
	
	Если Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Год") Тогда
		
		Возврат ДобавитьМесяц(Дата, 12 * КоличествоПериодов);
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Полугодие") Тогда
		
		Возврат ДобавитьМесяц(Дата, 6 * КоличествоПериодов);
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Квартал") Тогда
		
		Возврат ДобавитьМесяц(Дата, 3 * КоличествоПериодов);
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Месяц") Тогда
		
		Возврат ДобавитьМесяц(Дата, 1 * КоличествоПериодов);
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Неделя") Тогда
		
		Возврат Дата + 7 * День * КоличествоПериодов;
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Декада") Тогда
		
		Возврат Дата + 10 * День * КоличествоПериодов;
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.День") Тогда
		
		Возврат Дата + 1 * День * КоличествоПериодов;
		
	Иначе
		
		Возврат Дата;
		
	КонецЕсли;
	
КонецФункции

 

 

2.4. Функция РазностьДат(ДатаНачала, ДатаОкончания, Периодичность) Экспорт

Данная функция возвращает разность дат по перечислению периодичности:

 
 Разность дат в заданной периодичности

 

Функция РазностьДат(ДатаНачала, ДатаОкончания, Периодичность) Экспорт
	
	Разность = 0;
	
	День = 24 * 60 * 60; // Количество секунд в дне
	
	Если Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Год") Тогда
		Разность = Год(ДатаОкончания) - Год(ДатаНачала);
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Полугодие") Тогда
		Разность =
			?(Месяц(ДатаОкончания) > 6, 2, 1) - ?(Месяц(ДатаНачала) > 6, 2, 1) + 2 * (Год(ДатаОкончания) - Год(ДатаНачала));
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Квартал") Тогда
		Разность = Цел(Месяц(НачалоКвартала(ДатаОкончания)) / 3) - Цел(Месяц(НачалоКвартала(ДатаНачала)) / 3)
			+ 4 * (Год(ДатаОкончания) - Год(ДатаНачала));
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Месяц") Тогда
		Разность = Месяц(ДатаОкончания) - Месяц(ДатаНачала) + 12 * (Год(ДатаОкончания) - Год(ДатаНачала));
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Декада") Тогда
		Разность = Цел((ДатаОкончания - ДатаНачала) / (10 * День));
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Неделя") Тогда
		Разность =
			Цел((НачалоНедели(ДатаОкончания) - НачалоНедели(ДатаНачала)) / (7 * День));
		
	ИначеЕсли Периодичность = ПредопределенноеЗначение("Перечисление.Периодичность.День") Тогда
		Разность = (ДатаОкончания - ДатаНачала) / День;
		
	КонецЕсли;
	
	Возврат Разность;
	
КонецФункции

 

2.5. Функция КоличествоЦелыхЛет(ДатаНачала, ДатаОкончания) Экспорт

Определяет количество целых лет в выбранном периоде:

 
 Количество целых лет

 

Функция КоличествоЦелыхЛет(ДатаНачала, ДатаОкончания) Экспорт

	Если НЕ ЗначениеЗаполнено(ДатаНачала)
		ИЛИ НЕ ЗначениеЗаполнено(ДатаОкончания)
		ИЛИ ДатаОкончания <= ДатаНачала Тогда
		Возврат 0;
	КонецЕсли;
	
	Результат = Год(ДатаОкончания) - Год(ДатаНачала);
	
	Месяц1 = Месяц(ДатаНачала);
	Месяц2 = Месяц(ДатаОкончания);
	
	Если Месяц1 > Месяц2 Тогда
		Результат = Результат - 1;
	ИначеЕсли Месяц1 = Месяц2 
		И День(ДатаНачала) > День(ДатаОкончания) Тогда
		Результат = Результат - 1;
	КонецЕсли;

	Возврат Результат;

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

 

2.6. Функция КоличествоЦелыхМесяцев(ДатаНачала, ДатаОкончания) Экспорт

Вернет количество целых месяцев между двумя датами:

 
 Определить количество целых месяцев

 

Функция КоличествоЦелыхМесяцев(ДатаНачала, ДатаОкончания) Экспорт

	Если НЕ ЗначениеЗаполнено(ДатаНачала)
		ИЛИ НЕ ЗначениеЗаполнено(ДатаОкончания)
		ИЛИ ДатаОкончания <= ДатаНачала Тогда
		Возврат 0;
	КонецЕсли;

	Результат = (Год(ДатаОкончания) - Год(ДатаНачала)) * 12 + (Месяц(ДатаОкончания) - Месяц(ДатаНачала));

	Если День(ДатаНачала) > День(ДатаОкончания) Тогда
		Результат = Результат - 1;
	КонецЕсли;
	
	Возврат Результат;

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

 

2.7. Функция НомерКвартала(Дата) Экспорт

Функция вернет номер квартала, к которому принадлежит аргумент - дата:

 
 Номер квартала

 

Функция НомерКвартала(Дата) Экспорт
	
	Возврат Месяц(КонецКвартала(Дата)) / 3;
	
КонецФункции

 

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

Перейдем к заключению и сделаем выводы:

 

Заключение и выводы статьи

В материале я разобрал (обновил) информацию о типовых программных возможностях - функциях и процедурах, которые уже встроены в типовую 1С:Бухгалтерию 3.0. Данный функционал - готов к применению, он не имеет отношения к Библиотеке стандартных подсистем.

Хотя я и использовать КОРП версию (3.0.129.19) эти возможности так же справедливы для базовой и проф версии данной конфигурации.  При написании данной статьи, я использовал так же одну из последний платформ - 8.3.22.1750.

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

Всем кому интересно - можете так же ознакомиться с другими моими материалами:

 

Система контроля ведения учета [БСП]

Базовые принципы работы с регламентными заданиями подсистем БСП

Стандартные подсистемы БСП - параметры работы клиента и возможности диалогов

Основные возможности работы с файлами в типовой конфигурации на БСП

 

В заключение статьи напишу:

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

Спасибо за изучение статьи и оценку материала. Всем привет - пока и до новых встреч!

бухгалтерия типовые возможности организация контрагенты 3.0 КОРП функции процедуры

См. также

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    1752    PROSTO-1C    0    

18

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    1759    Vidz    0    

11

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

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1111    olja-ljaaa    0    

3

Механизмы типовых конфигураций Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Проблемы при создании ресурсной спецификации. Связь настроек спецификации и настроек структуры заказа в ЕРП 2.5.

06.05.2024    1200    It-digit    1    

2

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

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

1 стартмани

11.04.2024    1066    tango    5    

3
Отзывы
8. quazare 3802 03.02.23 10:06 Сейчас в теме
Всем спасибо за комментарии, вторая часть статьи использует функционал общего модуля БП 3.0 - ОбщегоНазначенияБПКлиентСервер


Все анонсы на новые публикации вы можете прочитать у меня на телеграм канале quazareline
shu_vol; Cmapnep; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6915 31.01.23 22:42 Сейчас в теме
Где ты вчера был? =)))
quazare; vld1973; erutan; +3 Ответить
2. vld1973 90 01.02.23 10:13 Сейчас в теме
Как всегда спасибо за статью, положу в базу знаний
3. babys 90 01.02.23 10:32 Сейчас в теме
Вот реально что должно быть в ЖКК для поддержки программистов.
klaus38; quazare; user840914; +3 Ответить
4. kser87 2470 01.02.23 11:11 Сейчас в теме
Крутейшая подборка! Спасибо!
5. RustIG 1747 01.02.23 13:39 Сейчас в теме
(0)
Пункт 2.3
я бы написал так - более элегантно что ли:
Перем СоответствиеМесяцев;
Перем СоответствиеДней;

Функция ДобавитьПериод(Дата, Периодичность, КоличествоПериодов = 1) Экспорт
	
	КолвоМесяцев = СоответствиеМесяцев.Получить(Периодичность);
	Если КолвоМесяцев <> Неопределено Тогда
		Возврат ДобавитьМесяц(Дата, КолвоМесяцев * КоличествоПериодов); 
	Иначе
		КолвоДней = СоответствиеДней.Получить(Периодичность);
		Если КолвоДней <> Неопределено Тогда
			Возврат Дата + КолвоДней * 86400 * КоличествоПериодов;
		Иначе
			Возврат Дата;
		КонецЕсли;
	КонецЕсли;		 	
	
КонецФункции 

СоответствиеМесяцев = Новый Соответствие;
СоответствиеМесяцев.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.Год"), 12); 
СоответствиеМесяцев.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.Полугодие"), 6);
СоответствиеМесяцев.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.Квартал"), 3);
СоответствиеМесяцев.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.Месяц"), 1);

СоответствиеДней = Новый Соответствие;
СоответствиеДней.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.Неделя"), 7);
СоответствиеДней.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.Декада"), 10); 
СоответствиеДней.Вставить(ПредопределенноеЗначение("Перечисление.Периодичность.День"), 1);
Показать


https://infostart.ru/1c/articles/1768304/
6. Cmapnep 19 01.02.23 13:53 Сейчас в теме
Спасибо, полезно!
Просьба добавить для функций раздела 2 указание на модуль, в котором они находятся или строку их вызова, как в разделе 1
7. rutadmeen 84 01.02.23 15:37 Сейчас в теме
Хорошая статья. еще бы везде были примеры вызова и получаемого результата
8. quazare 3802 03.02.23 10:06 Сейчас в теме
Всем спасибо за комментарии, вторая часть статьи использует функционал общего модуля БП 3.0 - ОбщегоНазначенияБПКлиентСервер


Все анонсы на новые публикации вы можете прочитать у меня на телеграм канале quazareline
shu_vol; Cmapnep; +2 Ответить
9. triviumfan 97 07.02.23 10:05 Сейчас в теме
Почему типовое описание функций не указываете?
Оставьте свое сообщение