Готовые типовые возможности программной работы с конфигурацией Бухгалтерия 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С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    537    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

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

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    418    tango    5    

4

Ценовая власть. Второй сезон

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

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

08.04.2024    787    tango    0    

2

Ценовая власть (УТ 11.5) - 2

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

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    480    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

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

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    587    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

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

07.02.2024    2671    YA_418728146    11    

45

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

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

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1203    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

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

28.12.2023    5028    mrXoxot    11    

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


Все анонсы на новые публикации вы можете прочитать у меня на телеграм канале quazareline
shu_vol; Cmapnep; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6807 31.01.23 22:42 Сейчас в теме
Где ты вчера был? =)))
quazare; vld1973; erutan; +3 Ответить
2. vld1973 85 01.02.23 10:13 Сейчас в теме
Как всегда спасибо за статью, положу в базу знаний
3. babys 90 01.02.23 10:32 Сейчас в теме
Вот реально что должно быть в ЖКК для поддержки программистов.
klaus38; quazare; user840914; +3 Ответить
4. kser87 2441 01.02.23 11:11 Сейчас в теме
Крутейшая подборка! Спасибо!
5. RustIG 1615 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 18 01.02.23 13:53 Сейчас в теме
Спасибо, полезно!
Просьба добавить для функций раздела 2 указание на модуль, в котором они находятся или строку их вызова, как в разделе 1
7. rutadmeen 80 01.02.23 15:37 Сейчас в теме
Хорошая статья. еще бы везде были примеры вызова и получаемого результата
8. quazare 3607 03.02.23 10:06 Сейчас в теме
Всем спасибо за комментарии, вторая часть статьи использует функционал общего модуля БП 3.0 - ОбщегоНазначенияБПКлиентСервер


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