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