👨‍💼 Освойте программирование в 1С за 60 минут: самоучитель для начинающих

Попробуйте себя в роли автоматизатора бизнес-процессов предприятия. На простом примере всего за час вы освоите базовые концепции программирования в 1С и поймете, что именно отличает «1С: Предприятие» от других систем разработки.

Вместо введения. Что такое “Платформа” и “Конфигурация”
Если вы только начинаете осваиваться в мире 1С: Предприятия, то можете услышать о некой “Платформе” и “Конфигурациях”, которые на ней разрабатываются. Это ключевое отличие системы разработки приложений 1С от других сред программирования. Например, веб-технологий, когда можно просто скачать/установить приложение и пользоваться им.

В 1С подход иной. Сначала вы приобретаете платформу 1С: Предприятие у фирмы “1С” или ее партнера. Затем покупаете одно из прикладных решений – конфигурацию. Ее вы можете использовать “как есть”, вносить свои доработки, чтобы адаптировать под специфику бизнеса, либо разработать собственную конфигурацию с нуля. Это похоже на прослушивание пластинок с помощью проигрывателя. Достаточно иметь одну платформу (проигрыватель) “1С: Предприятие”, – и можно разрабатывать или использовать любые конфигурации (пластинки), будь то “1С: Бухгалтерия предприятия”, “1С: Управление торговлей” или собственное решение. И также, как пластинка без проигрывателя – всего лишь кусок пластика, так и конфигурацией вы никак не сможете воспользоваться, не имея платформы 1С.

Разработка начинается с конфигуратора

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

Рис. 1. Окно запуска 1С: Предприятия.

Кнопка “Конфигуратор” перенесет вас в среду разработки – главное окно конфигуратора. И первое, что необходимо сделать, – это открыть конфигурацию. Зайдите в меню “Конфигурация – Открыть конфигурацию” или нажмите соответствующую кнопку в панели инструментов, и дождитесь открытия окна дерева метаданных.

Итак, мы находимся в главном окне конфигуратора – рабочей среде программиста 1С. Давайте осмотримся на местности.

Рис. 2. Главное окно конфигуратора.

Верхняя часть окна – меню и панели инструментов – достаточно типичная и останавливаться на них не будем. О предназначении отдельных команд будем говорить по мере необходимости в их использовании.

Главный инструмент разработчика – это окно Конфигурация, открытое слева. Еще его называют дерево метаданных. Это описание всей структуры вашей базы, с указанием структуры каждого отдельного объекта, правил взаимодействий объектов между собой, настройками интерфейсов, прав доступа и много другого. Каждый элемент дерева имеет свою специфику использования и набор инструментов для работы с ним. Так, если дважды щелкнуть по любому справочнику или документу, то откроется окно редактирования объекта (рис. 3), а если выбрать в контекстном меню пункт Свойства, справа появится панель свойств текущего объекта. Это второй основной инструмент разработчика, с которым он взаимодействует чаще всего. На рисунке 4 представлен пример рабочей среды с открытой панелью свойств.

Рис. 3. Пример окна редактирования объекта метаданных.
Рис. 4. Пример рабочей среды в процессе разработки.

Задача на разработку: создание реестра счетов-фактур

У вас уже есть платформа 1С: Предприятие и установленная на ней конфигурация “1С: Бухгалтерия предприятия”. И теперь руководитель ставит перед вами задачу выполнить разработку нового функционала. В реальной жизни происходит примерно то же самое: на предприятии установлено некое типовое решение, но со временем появляется потребность адаптировать функционал конфигурации под специфику учета конкретного предприятия. Этим и займемся.

Ваша задача – разработать реестр счетов-фактур – вывести список документов, отобранный и отсортированный по определенным правилам.

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

Создание внешнего отчета

Существует три фундаментальных подхода к внесению доработок в 1С:

  • Внешние отчеты и обработки. Используются, как правило, для реализации разовых сервисных задач. Отчет/обработка – это отдельный внешний файл, который можно открыть в режиме использования 1С через меню Файл – Открыть и выполнить заложенную в него функцию. При этом сама конфигурация остается нетронутой;
  • Внесение изменений непосредственно в конфигурацию. Наиболее часто используемый подход при адаптации типовых решений. Конфигурация снимается с полной поддержки поставщика, и разработчик может вносить доработки непосредственно в объекты самой конфигурации. При этом появляется дополнительная необходимость в поддержке конфигурации при ее обновлении на новые версии поставщиком;
  • Разработка расширений. Это возможность расширить функционал конфигурации, не снимая ее с поддержки, с помощью дополнительно устанавливаемых “плагинов”, или “патчей”. Относительно молодая технология, которая стремительно набирает обороты и с каждой новой версией платформы предоставляет все больше возможностей.

Воспользуемся самым простым вариантом и создадим внешний отчет “Реестр счетов-фактур”. Для этого в меню “Файл” выбираем пункт “Новый” и создаем новый внешний отчет (рисунок 5).

В графе “Имя” напишите РеестрСчетовФактур, синоним будет присвоен автоматически, исправьте его на “Реестр счетов-фактур”. В поле “Форма отчета” нажмите кнопку открытия (с изображение лупы), откроется конструктор новой формы. Нажмите кнопку Готово, новая форма будет создана и открыта для редактирования.

Про имена и синонимы
Эти два свойства вы будете встречать практически везде: у объектов конфигурации, у подчиненных им объектов (форм, макетов и т.д.), у элементов формы, и… да везде. Сразу внесем ясность. Имя - это идентификатор объекта, который должен соответствовать определенным требованиям, например, начинаться с буквы и не иметь пробелов. По имени объекта к нему можно обращаться из языка программирования 1С. Синоним – это представление объекта для пользователя. Именно в таком виде он будет представлен в интерфейсе приложения. На строку синонима не накладывается никаких ограничений.
Рис. 5. Создание нового внешнего отчета.
Рис. 6. Создание новой формы отчета.

Редактор формы

Обзор редактора формы

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

Рис. 7. Окно редактора формы.

Визуальный редактор формы состоит из нескольких областей:

  • Область управления контентной частью формы (вверху справа). Отсюда начинается разработка формы – перечисляются реквизиты и команды, необходимые для размещения и управления информацией;
  • Область структуры элементов (вверху слева). Здесь находится перечень всех элементов формы и их структура размещения в виде дерева. Эта часть отвечает за то, как форма будет выглядеть, и за какие “ниточки” нужно потянуть, чтобы получить от нее желаемое поведение;
  • Область визуального представления (внизу). Представление того, какой эту форму будет видеть пользователь.

Для формирования реестра нам понадобится:

  • Выбор периода, за который формируется реестр;
  • Отбор по организации;
  • Кнопка формирования отчета;
  • Область вывода отчета.

Реквизиты формы

  • На вкладке “Реквизиты” создайте новый элемент, дайте ему имя ПериодОтчета и задайте тип СтандартныйПериод.
Рис. 8. Добавление реквизита “Период отчета”.
  • Теперь с помощью мыши перетащите новый реквизит в левую область, на вкладку Элементы. При этом период отобразится на форме в нижней части редактора.
  • Двойным щелчком по элементу откройте его свойства, и для свойства АвтоОтметкаНезаполненного укажите значение “Да”. Период на форме будет подчеркнут красным пунктиром, который появляется в случае, когда период не заполнен. Это – сигнал пользователю о том, что реквизит является обязательным, и без его заполнения отчет не сформируется.
  • Добавьте второй реквизит с именем Организация и типом СправочникСсылка.Организации. По аналогии разместите его на форме, только вместо свойства АвтоОтметкаНезаполненного установите свойство КнопкаОчистки в значение “Да”. У элемента Организация появится кнопка очистки в виде крестика. То есть, отчет можно будет сформировать как с отбором по определенной, выбранной, организации, так и с пустым значением этого поля. или по всем организациям базы данных.
Рис. 9. Новый реквизит и элемент формы Организация.
  • И наконец добавьте третий реквизит формы ПолеОтчета с типом ТабличныйДокумент, разместите его на форме и установите свойство ПоложениеЗаголовка в значение “Нет”. В это поле мы и будем выводить наш отчет.
  • Чтобы проверить, как форма будет выглядеть для пользователя, нажмите кнопку Проверка в командной панели области элементов. Форма должна иметь вид, представленный на рисунке 10.
Рис. 10. Проверка формы.

Основная компоновка формы завершена, но остался еще один важный элемент – кнопка, по нажатию на которую должно все произойти. Исправим этот недостаток.

Команды формы

Откройте вкладку Команды и создайте новый элемент. Задайте новой команде имя Сформировать, присвойте картинку СформироватьОтчет из библиотеки стандартных картинок, а свойству Отображение задайте значение “Картинка и текст”.

Рис. 11. Добавление команды “Сформировать отчет”.

Чтобы разместить кнопку на форме, перетащите ее на элемент “Командная панель” во вкладке Элементы и включите для созданного элемента “Кнопка” свойство КнопкаПоУмолчанию. Отображение кнопки на форме вы сразу не увидите, это связано с тем, что по умолчанию главная командная панель формы отключена. Зайдите в панель свойств самой формы (корневой элемент “Форма” во вкладке Элементы), и для свойства ОтображениеКоманднойПанели установите значение “Авто”.

Рис. 12. Размещение основной кнопки в командной панели формы.

В завершение конструирования формы создадим обработчик для нашей команды. Обработчик связывает элемент формы – или какое-либо действие над элементом – с кодом программы.

Откройте панель свойств команды и рядом со свойством Действие нажмите кнопку открытия. Среди предложенных вариантов обработчиков выберите “Создать на клиенте и процедуру на сервере” и нажмите ОК. После этого активируется редактор модуля формы, где уже заготовлена процедура для реализации алгоритма действия команды.

Рис. 13. Создание обработчика команды в модуле формы.

Проверка формы в режиме “1С: Предприятие”

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

Сохраните результаты своей работы (меню Файл – Сохранить). Файл внешнего отчета 1С имеет расширение .erf.

Запустите “Бухгалтерию предприятия” в пользовательском режиме, если она еще не запущена. Сделать это можно прямо из конфигуратора, через меню Сервис – 1С: Предприятие. В открывшемся окне информационной базы зайдите в главное меню, выберите пункт Файл – Открыть… и откройте ваш внешний отчет. Сейчас можно проверить, как работает выбор периода и организации.

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

Рис. 14. Пользовательский режим информационной базы.

Ваш первый код: собираем данные для отчета

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

Редактирование кода формы происходит в модуле формы, которая находится на вкладке Модуль окна редактора формы. Здесь уже создана основа обработчика для кнопки “Сформировать”.

Клиент-серверное программирование логики

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

Как видно на рисунке 13, для разделения контекста выполнения процедуры используются директивы компиляции перед объявлением метода, начинающиеся с символа "&". Обработчики событий элементов формы активируются на стороне клиента. В нашем случае это процедура Сформировать(), в которой мы опишем проверку заполнения реквизитов формы и выдачу предупреждения пользователю. Здесь же вызывается серверная процедура СформироватьНаСервере(), в которой уже будем работать с данными таблиц базы, поскольку эти данные с клиента недоступны. Именно с этой целью на этапе создания обработчика мы выбрали вариант создания на клиенте с процедурой на сервере.

Первый код процедур

Напишите код клиентской процедуры Сформировать(), как показано ниже:

&НаКлиенте
Процедура Сформировать(Команда)
	
	Если НЕ ЗначениеЗаполнено(ПериодОтчета.ДатаНачала)
		ИЛИ НЕ ЗначениеЗаполнено(ПериодОтчета.ДатаОкончания) Тогда
		
		ПоказатьПредупреждение(, "Не заполнен период отчета.", , "Ошибка");
		Возврат;
		
	КонецЕсли;
	
	СформироватьНаСервере();
	
КонецПроцедуры

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

Теперь немного по конструкциям языка:

  • Каждая команда языка заканчивается точкой с запятой;
  • В одной строке может быть более одной команды, разделенных точкой с запятой;
  • Одна команда может располагаться на нескольких строках, отдельные части можно разделять произвольным числом пробелов, табуляций и переносов строк.

Проверка условий в 1С выполняется с использованием ключевых слов Если… Тогда… КонецЕсли. В общем случае синтаксис условия такой:

Если <условие> Тогда
    // код при выполнении <условие>. Так, кстати, пишутся комментарии в коде
ИначеЕсли <альтернативное условие> Тогда
    // код при выполнении <альтернативное условие>
Иначе
    // код при невыполнении ни одного условия
КонецЕсли;
  • Булева логика условий строится с использованием ключевых слов И,ИЛИ, НЕ.
  • Обращение к реквизиту формы (ПериодОтчетав нашем примере) выполняется простым указанием имени реквизита.
  • Специализированный тип данных СтандартныйПериод – это конструкция со свойствами ДатаНачала и ДатаОкончания, обращение к которым производится через точку.
  • Проверку на заполнение значения переменной выполняем с помощью универсальной функции глобального контекста ЗначениеЗаполнено().
  • Еще одна функция языка ПоказатьПредупреждение() отвечает за интерактивную выдачу предупреждения пользователю.
Рис. 15. Предупреждение пользователя.
  • Ключевое слово Возврат выполняет безусловный выход из процедуры, прекращая выполнение всего последующего кода этой процедуры.
  • В серверной процедуре СформироватьНаСервере() будем выполнять обход всех документов вида “Счет-фактура выданный” за указанный период. Для обращения к коллекции документов платформы используется ключевое слово Документы, и через точку указывается вид документа так, как он задан в дереве метаданных. Кстати, перенести любой идентификатор из дерева метаданных в код модуля можно простым перетаскиванием мышью.

Код нашей серверной процедуры будет выглядеть следующим образом:

&НаСервере
Процедура СформироватьНаСервере()
	
	ДатаС = ПериодОтчета.ДатаНачала; // Объявление новой переменной
	ДатаПо = ПериодОтчета.ДатаОкончания;
	
	// Открытие выборки документов за период, с сортировкой по дате
	Выборка = Документы.СчетФактураВыданный.Выбрать(ДатаС, ДатаПо, , "Дата");
	
	// Обход выборки в цикле
	Пока Выборка.Следующий() Цикл
		
		// Проверка отбора по организации
		// и сравнение реквизита формы с реквизитом документа
		Если ЗначениеЗаполнено(Организация)
			И Выборка.Организация <> Организация Тогда
			Продолжить; // Уходим на следующую итерацию, игнорируя тело цикла
		КонецЕсли;
		
		// ...
		// Обработка очередного документа
		// ...
		
	КонецЦикла;
	
КонецПроцедуры

Думаю, назначение отдельных конструкций и команд понятно из комментариев.

Синтакс-помощник – путеводитель по языку программирования

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

К счастью. в платформе 1С есть палочка-выручалочка программиста – синтакс-помощник, который открывается из меню Справка – Синтакс-помощник. А если интересует справка по конкретному методу, то встаньте на него в коде модуля и нажмите сочетание клавиш Ctrl+F1. Синтакс-помощник откроется на статье с описанием этого метода.

Рис. 16. Получение справки по функции Следующий() в синтакс-помощнике.

А как отчет будет выглядеть? Знакомимся с макетом

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

Рис. 17. Создание макета отчета.
  • Из основного окна внешнего отчета, на ветке структуры Макеты вызовите команду “Добавить” контекстного меню. Откроется Конструктор макета, в котором укажите имя “Реестр” и оставьте тип “Табличный документ”. После нажатия кнопки “Готово” откроется пустой макет, похожий на таблицу MS Excel.
  • Работа с ячейками таблицы макета не должна вызвать затруднений, все настройки параметров и свойств выполняются все в той же Панели свойств.
  • В первой ячейке первой строки напишите заголовок отчета “Реестр счетов-фактур”. Увеличьте шрифт и задайте полужирное начертание.
  • В третьей строке дайте заголовки таблицы реестра в каждой отдельной ячейке столбца, в порядке: Дата, Номер, Контрагент, Сумма. Установите полужирное начертание и обведите контуры ячеек сплошной линией (рис. 18). Если выделить диапазон ячеек, то свойства можно менять для всех ячеек сразу.
Рис. 18. Настройка ячеек макета.
  • Теперь выделим оформленную шапку реестра в отдельную область, чтобы можно было к ней обращаться из кода программы. Для этого выделите строки шапки и нажмите кнопку Назначить имя в панели инструментов редактора макета. Задайте для области имя Шапка.
Рис. 19. Создание области макета.
  • Аналогично, четвертую строку выделите в отдельную область “Строка”, заполните ячейки строки теми же именами: Дата, Номер, Контрагент, Сумма. Установите свойство Заполнение этих ячеек в значение “Параметр”. Тем самым мы определили для области макета собственные параметры-ячейки, которые становятся доступны для заполнения из программного кода.

Внешний вид ячеек строки настройте на свое усмотрение. Для указания правил отображения даты и суммы используйте свойство Формат.

Рис. 20. Готовый макет реестра.

Выводим данные в табличный документ

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

ТабДок = Новый ТабличныйДокумент;

Для чтения данных из макета “Реестр” необходимо сначала получить программный объект этого макета:

ЭтотОтчет = РеквизитФормыВЗначение("Отчет");
Макет = ЭтотОтчет.ПолучитьМакет("Реестр");

Теперь в переменной Макет находится объект макета, через который можно обращаться к отдельным областям и параметрам. Получение и вывод шапки в отчет выполняют следующие команды:

ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); // Объявляем переменную области макета
ТабДок.Вывести(ОбластьШапка); // Выводим область в табличный документ

Далее, в цикле выводим данные документа в строку, предварительно заполнив параметры через свойство области Параметры:

// Выводим очередной документ в строку реестра
ОбластьСтрока.Параметры.Дата = Выборка.Дата;
ОбластьСтрока.Параметры.Номер = Выборка.Номер;
ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
ОбластьСтрока.Параметры.Сумма = Выборка.Сумма;

ТабДок.Вывести(ОбластьСтрока);

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

ПолеОтчета = ТабДок;

Полный текст процедуры:

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

Сохраните изменения во внешнем отчете и проверьте его работу в пользовательском режиме.

Рис. 21 Готовый отчет

Итоги

Поздравляю! Ваш первый отчет на 1С готов. За этот час вы освоили довольно много материала:

  • Познакомились с конфигуратором 1С: Предприятия;
  • Создали новый внешний отчет;
  • Освоили работу в редакторе формы;
  • Разработали макет печатной формы;
  • Научились получать данные документов, обрабатывать действия пользователя, работать с макетом и табличным документом с помощью языка программирования 1С.
Конечно, в каждой из затронутых нами тем еще есть куда копнуть. Это и язык запросов для структурированного получения данных из базы, и СКД для построения отчетов, и универсальные коллекции языка программирования, которые обогащают работу с ним.

И если вам интересно погрузитья в тонкости разработки, то вас ждет захватывающее путешествие в мир 1С. До новых встреч!

***

Если вы только собираетесь освоить платформу и хотите заниматься с практикующими профессионалами по систематизированной программе, обратите внимание на Факультет 1С-разработки от GeekBrains. Курс подойдет как начинающим программистам, так и пользователям системы 1С.

Всего за 8 месяцев вы научитесь разрабатывать конфигурации, сможете делать отчеты, обрабатывать информацию и конфигурировать ее. Овладеете грамотным составлением ТЗ, разберете реальные задачи, попрактикуетесь в создании кейсов. Вас подготовят вас к экзаменам «1С: Профессионал» и «1С: Специалист», а опытные HR-менеджеры помогут составить резюме и найти первую работу. Успешно завершившие курс студенты добавят в портфолио несколько кейсов и получат диплом о профессиональной переподготовке.

Онлайн-платформа гарантирует ваше трудоустройство после получения сертификата и сдачи экзамена.

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

eFusion
08 января 2020

11 типов современных баз данных: краткие описания, схемы и примеры БД

Любые данные где-то хранятся. Будь это интернет вещей или пароли в *nix. По...
admin
23 февраля 2017

SQL за 20 минут

Предлагаем вашему вниманию статью с кричащим названием "SQL за 20 минут". К...