Модули в конфигурации 1С Что такое программный модуль Программные модули в конфигурации системы «1С:Предприятие» не являются самостоятельными программами в общепринятом понимании этого слова, поскольку они являются только частью всей конфигурации. Программный модуль не имеет формальных границ своего описания типа: «Начало модуля» ‑ «Конец модуля». Структуру программного модуля можно подразделить на следующие разделы: ● раздел определения переменных, ● раздел процедур и функций, ● раздел основной программы. В конкретном программном модуле любой из разделов может отсутствовать. Раздел определения переменных размещается от начала текста модуля до первого оператора Процедура, или оператора Функция, или любого исполняемого оператора. В этом разделе могут находиться только операторы объявления переменных Перем. Раздел процедур и функций размещается от первого оператора Процедура или оператора Функция до любого исполняемого оператора вне тела описания процедур или функций. Раздел основной программы размещается от первого исполняемого оператора вне тела последней процедуры или функции до конца модуля. В этом разделе могут находиться только исполняемые операторы. Раздел основной программы исполняется в момент инициализации модуля. Обычно в разделе основной программы имеет смысл размещать операторы инициализации переменных какими-либо конкретными значениями, которые необходимо провести до первого вызова любой из процедур или функций модуля. Исходный текст программного модуля может состоять из операторов и комментариев. Место размещения конкретного программного модуля предоставляется конфигуратором в тех точках конфигурации, которые требуют описания специфических алгоритмов функционирования. Эти алгоритмы следует оформлять в виде процедур или функций, которые будут вызваны самой системой в заранее предусмотренных ситуациях (например, при нажатии кнопки в диалоговом окне). Каждый отдельный программный модуль воспринимается системой как единое целое, поэтому все процедуры и функции программного модуля выполняются в едином контексте. Каждый программный модуль связан с остальной частью конфигурации. Эта связь называется контекстом выполнения модуля. Следует различать два вида контекста: ● Глобальный контекст. Глобальный контекст виден всем программным модулям и определяет общую языковую среду конфигурации. ● Локальный контекст выполнения конкретного модуля. Локальный контекст модуля образуется тем конкретным местом конфигурации задачи, для которого использован программный модуль. Локальный контекст виден только конкретному программному модулю и определяет для модуля набор непосредственно доступных модулю объектов, их свойств и методов. Подсказки при наборе текста модуля Если известно хотя бы начало имени реквизита, переменной, параметра и т. п. и этот тип объекта точно известен в контексте редактируемого модуля, то в этом случае наиболее эффективно, не отрываясь от клавиатуры, набрать несколько первых символов имени, свойства или метода нужного программного объекта и воспользоваться контекстной подсказкой. Ее можно вызвать с помощью комбинации клавиш Ctrl + <Пробел> на любом этапе набора текста. Список контекстной подсказки включает имена системных перечислений, предопределенных элементов, свойств и методов программных объектов, наименования объектов, определенных в конфигурации, и пр. В начале каждой строки списка присутствуют пиктограммы, указывающие на вид объекта: например, черная черта – это свойства глобального контекста, красная черта – локальные переменные модуля, зеленые символы P() – процедуры прикладных объектов и т. д. Контекстная подсказка работает не всегда, а только тогда, когда тип объекта точно известен в контексте редактируемого модуля. Если объект конструируется в этом же модуле, то контекстная подсказка для него всегда работает. Кнопка Поиск строки в Синтакс-помощнике (Ctrl + F1) в панели инструментов конфигуратора - позволяет быстро найти описание метода в Синтакс-помощнике в случае такой необходимости. Перейти к известной процедуре модуля Если модуле которой содержится большое количество процедур и функций, просматривать большой модуль визуально – неудобно и неэффективно. Наиболее просто это сделать с помощью окна Процедуры и функции, вызывающегося кнопкой Процедуры и функции (Ctrl + Alt + P) в панели инструментов конфигуратора. В открывшемся окне будет отображаться список всех процедур и функций модуля: • Обработчики событий формы и ее элементов, • Обработчики команд формы, • Процедуры и функции, созданные разработчиком. Слева от имени процедур и функций находятся соответствующие пиктограммы. P() – для процедур, F(x) – для функций. Сначала в этом списке расположены процедуры, написанные разработчиками, а в конце, в угловых скобках, стандартные процедуры, обработчики которых еще не написаны. При нажатии кнопки Перейти текст выбранной процедуры или функции будет открыт в окне модуля. Находясь в месте вызова процедуры, перейти к ее содержимому Довольно часто требуется понять, что происходит в процедуре или функции, в месте вызова которой находится разработчик. Эта процедура может быть создана другими разработчиками или же это может быть собственная функция, написанная довольно давно, и ее нужно модифицировать. Искать определение процедуры или функции глобальным поиском по конфигурации долго и неудобно. Существует удобная возможность перехода к определению процедуры или функции из места ее вызова. Причем такой переход возможен не только внутри одного модуля. Переходить можно к определению экспортируемых процедур и функций общих модулей, модулей объектов и модуля приложения. Предположим, из модуля формы документа вызывается процедура общего модуля РассчитатьСумму() для пересчета данных по строке табличной части документа. В нее передается параметр, содержащий данные строки табличной части. Необходимо посмотреть и понять, как рассчитываются эти данные. Для этого необходимо установить курсор на место вызова этой процедуры в модуле формы документа, вызвать контекстное меню и выполнить пункт Перейти к определению (F12). Поскольку процедура пересчета определена в общем модуле, перед переходом к ней на экран будет выведен список объектов перехода: экспортируемая процедура общего модуля и сам общий модуль как объект конфигурации. Выбераем саму процедуру РассчитатьСумму() и сразу перейдем в тело этой процедуры в общем модуле. Таким же образом можно переходить и к определению переменных. Для того чтобы вернуться к точке, из которой был осуществлен переход к определению, следует нажать сочетание клавиш Ctrl + "-" (рядом с клавишей "="). Переход к определению процедур и функций может быть очень полезен также в случае, когда при проверке модуля вы получаете ошибку типа «Слишком много/недостаточно фактических параметров». Для устранения этой ошибки нужно сравнить количество и тип параметров в месте вызова и в месте определения процедуры или функции. Для этого также очень удобно использовать переход к определению по клавише F12. Узнать, в каких модулях используется данная процедура Необходимо установить курсор на имя процедуры, вызвать контекстное меню и выполнить пункт Найти использование (Alt + F12). В результате будет открыт список всех модулей конфигурации, откуда эта функция вызывается. Из списка модулей, как обычно, можно двойным щелчком мыши перейти к интересующему месту использования функции. В системе «1С:Предприятие» существуют несколько видов программных модулей. Они различаются по месту размещения и доступному контексту. Модуль управляемого приложения Модуль управляемого приложения расположен в корневом разделе конфигурации и выполняется при старте и окончании работы системы «1С: Предприятие» в режимах тонкого клиента, веб-клиента и толстого клиента в режиме управляемого приложения. В нем возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации (кроме модуля внешнего соединения). Их доступность также обеспечивается для неглобальных общих модулей с установленным свойством Клиент (управляемое приложение). Модуль управляемого приложения недоступен для процедур, работающих на сервере. Таким образом, процедуры и функции модуля управляемого приложения, а также переменные, для которых в заголовке указано ключевое слово Экспорт, являются доступными: ● в неглобальных клиентских общих модулях, ● клиентских процедурах и функциях модуля команды, ● клиентских процедурах и функциях модуля управляемой формы. В контексте модуля управляемого приложения доступны: ● часть глобального контекста, которая может исполняться в управляемом приложении; ● экспортируемые процедуры и функции любых клиентских общих модулей; ● экспортируемые процедуры и функции серверных неглобальных общих модулей, у которых установлено свойство Вызов сервера. Модуль внешнего соединения Модуль внешнего соединения расположен, как и модуль приложения, в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы в режиме внешнего соединения (СОМ-соединения). В модуле внешнего соединения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны для внешнего приложения. Объекты «1С:Предприятия», доступные извне через COM-соединение: ● экспортируемые процедуры/функции модуля внешнего соединения; ● экспортируемые процедуры/функции общих модулей: ● включение и исключение модулей целиком выполняются с помощью установки свойств общих модулей; ● включение и исключение фрагментов общих модулей выполняются с помощью инструкций препроцессора; ● глобальный контекст «1С:Предприятия». Модуль присутствует только в сессии внешнего соединения. В данном режиме характерно полное отсутствие пользовательского интерфейса. Модуль сеанса Модулем сеанса называется модуль, который автоматически выполняется при старте системы «1С:Предприятие» в момент загрузки конфигурации. Модуль сеанса предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы. Модуль сеанса может содержать только определения процедур и функций, может использовать процедуры из общих модулей конфигурации и не содержит экспортируемых процедур и функций и может использовать процедуры из общих модулей конфигурации. Общие модули В общих модулях хранятся процедуры и функции, которые вызываются из других модулей системы. Основным назначением общих модулей является содержание общих алгоритмов конфигурации, доступных из разных модулей. В общих модулях отсутствует раздел определения переменных и раздел основной программы, то есть они содержат только раздел процедур и функций. Чтобы открыть общий модуль, нужно раскрыть ветвь Общие в дереве объектов конфигурации, затем раскрыть ветвь Общие модули и дважды щелкнуть мышью на нужном модуле Модули объектов Набор прикладных объектов имеет собственные модули. К таким объектам относятся: ● Менеджеры значения константы, ● Справочники, ● Документы, ● Отчеты, ● Обработки, ● Планы видов характеристик, ● Планы счетов, ● Планы видов расчетов, ● Планы обмена, ● Бизнес-процессы, ● Задачи, ● Регистры. Модули располагаются в ветках конфигурации, в которых содержатся сами объекты, и являются свойствами объектов. Каждый объект имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с объектом извне во встроенном языке, дополняя контекст объекта. В контексте модуля прикладного объекта имеется доступ к реквизитам и табличным частям объекта, а также его методам и событиям. Модули менеджеров объектов Для каждого прикладного объекта существует менеджер, предназначенный для управления этим объектом как объектом конфигурации. С помощью менеджера можно создавать объекты, работать с формами и макетами. Модуль менеджера позволяет расширить функциональность менеджеров, предоставляемых системой, за счет написания процедур и функций на встроенном языке. Фактически это позволяет описать собственные методы для объекта конфигурации (например, справочника), которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации. Например, в модуле менеджера можно задать произвольное представление объекта в интерфейсе «1С:Предприятия». Чтобы открыть модуль менеджера, нужно в окне редактирования объекта конфигурации перейти на закладку Прочее и нажать кнопку Модуль менеджера (или через контекстное меню). Контекст модуля менеджера образуется: ● свойствами и методами глобального контекста; ● экспортируемыми процедурами и функциями глобальных общих модулей (если эти модули компилируются на сервере); ● экспортируемыми процедурами и функциями неглобальных общих модулей (если эти модули компилируются на сервере); ● локальным контекстом самого модуля. Модуль менеджера не может иметь переменных и тела модуля. Если функции или процедуры модуля менеджера объявлены как экспортируемые, к ним можно будет получить доступ через менеджер объекта. Модули форм Каждая форма, определенная в конфигурации, имеет свой собственный модуль. Этот модуль исполняется при создании объекта УправляемаяФорма встроенного языка. Этот объект создается системой в режиме 1С:Предприятие в тот момент, когда мы программно (методами ПолучитьФорму() или ОткрытьФорму()) или интерактивно открываем форму некоторого элемента. Чтобы открыть модуль формы, нужно открыть подчиненный объект Форма нужного объекта конфигурации и в окне редактора форм перейти на закладку Модуль. В модулях форм возможно объявление переменных, процедур и функций, которые будут доступны при работе с формой извне во встроенном языке, дополняя контекст формы. Контекст формы будет образован: ● локальным контекстом самого модуля формы, реквизитами формы, которой «принадлежит» модуль; ● свойствами и методами объекта ФормаКлиентскогоПриложения встроенного языка; ● свойствами и методами расширения формы, определяемого типом того объекта, данные которого содержатся в основном реквизите формы; ● глобальным контекстом, в том числе неглобальными общими модулями и экспортируемыми функциями и процедурами глобальных общих модулей, при этом нужно обеспечивать согласованность того, как описана процедура в модуле формы (&НаКлиенте, &НаСервере и т. д.), и того, какие свойства установлены у общего модуля (Клиент (управляемое приложение), Сервер и т. д.); ● экспортируемыми переменными, процедурами и функциями модуля управляемого приложения. Модули команд Модуль команды предназначен для того, чтобы описать в нем на встроенном языке те действия, которые должна выполнить система при вызове команды. Модуль команды может содержать только описание процедур и функций. Модуль команды не может иметь переменных и тела модуля. Обработчик ОбработкаКоманды() обязательно должен предваряться инструкцией препроцессора &НаКлиенте, т. к. именно там начинается исполнение команды. Контекст клиентских процедур модуля команды образуется: ● глобальным контекстом, в том числе неглобальными общими модулями и экспортируемыми функциями и процедурами глобальных общих модулей, при этом нужно обеспечивать согласованность того, как описана процедура в модуле формы (&НаКлиенте, &НаСервере и т. д.), и того, какие свойства установлены у общего модуля (Клиент (управляемое приложение), Сервер и т. д.); ● локальным контекстом самого модуля команды. Контекст серверных процедур модуля команды образуется: ● свойствами и методами глобального контекста; ● экспортируемыми процедурами и функциями глобальных общих модулей, если эти модули компилируются на сервере; ● неглобальными общими модулями, если эти модули компилируются на сервере; доступны экспортируемые методы таких модулей; ● серверными методами модуля команды. В модуле команды можно описывать методы с ключевым словом Экспорт. Однако как-либо использовать их за пределами этого модуля нельзя. Из встроенного языка невозможно получить доступ к командам и, следовательно, к их контексту тоже. Документы 1С Назначение прикладного объекта Документ С точки зрения моделирования предметной области документ содержит информацию о хозяйственной операции или событии, происходящем на предприятии. Тем самым документы могут влиять на состояние раздела или даже разделов учета. Например, создание документа Приходная накладная может изменить состояние остатков на складе, а документ Приходный кассовый ордер – состояние финансов предприятия. Так как Документ оказывает серьезное и непосредственное влияние на учет, он имеет строгую нумерацию и всегда привязывается к шкале времени и характеризуется номером, датой и временем. На основании времени создания документов можно восстанавливать цепочки событий хозяйственной деятельности организации. С точки зрения объектной модели данных документ предназначен для ввода и накопления первичных данных о событиях (хозяйственных операциях), их первичной обработке и передаче в связанные с документом регистры. Для реализации этих функций документы обладают механизмом проведения. Так как документы изменяют состояния регистров с учетов времени события, документы содержат специальный механизм перепроведения цепочек документов, если изменения коснулись какого-либо из ранних документов. С точки зрения табличной модели данных каждый вид документа (основной объект Документ в дереве конфигурации) представляет собой таблицу. Нумерация документов и их привязка к шкале времени Каждый документ имеет предопределенный реквизит Номер, который имеет уникальное значение в пределах заранее заданного для документа периода, например месяц, квартал, год. В начале следующего периода нумерация возобновляется. При необходимости вести единую сквозную нумерацию для нескольких документов одновременно используются специальные объекты конфигурации – Нумераторы. Нумератор представляет собой счетчик который при каждом обращении возвращает возрастающее порядковое значение. Рисунок 1 - Привязка документов к шкале времени Каждый документ имеет предопределенный реквизит Дата, который имеет тип данных Дата и Время. Но при больших объемах вводимых данных возможны ситуации когда двое или больше пользователей попытаются сохранить документы в течении одной секунды. Для разрешения таких коллизий каждый документ имеет дополнительный реквизит МоментВремени. Он содержит дату и время создания документа и ссылку на сам документ. Далее программная платформа самостоятельно определяет последовательность документов в пределах одной секунды, основываясь на анализе изменений в регистрах, которые произвели эти документы. При этом используется ссылка на документы. Документ как регистратор. Движения. Проведение документов Документ может быть связан с одним или несколькими регистрами. В этом случае при сохранении документа вызывается специальная процедура, носящая название ОбработкаПроведения(). Этот метод – обработчик вызывается при возникновении события проведения – когда пользователь проводит документ (нажимает кнопку ОК в стандартном пользовательском интерфейсе конфигурации). Процедура проведения располагается в модуле документа. Ее программный код обеспечивает добавление в связанный регистр или несколько регистров новых записей, поля которых заполняются в соответствии с правилами, описанными в данной процедуре. Вновь создаваемые записи называются движениями. Рисунок 2 - Проведение документа Таким образом Проведение документа – алгоритм, выполняемый предопределенной процедурой ОбработкаПроведения формирующий учетные записи в регистрах. Регистратор –это документ, влияющий на содержимое регистра. Движение – учетная запись в регистре как правило (неподчиненные регистры сведений - исключение) привязанная к регистратору. В учетных записях регистров одним из полей как правило требующих заполнения является поле регистратор. При выполнении проведения документа как правило в качестве регистратора в учетной записи регистра указывается ссылка на текущий документ. Для регистрации учетных данных при «проведении документа» формируются движения по регистру с привязкой к регистратору. Проведение является обусловленным в том случае, если для внесения записей в регистр проводятся вычисления, берущие данные из других объектов базы или контролируется выполнение условий. Оперативное и неоперативное проведение Проведение также делится на оперативное и неоперативное. Оперативное проведение применяется, когда документ отображает событие хозяйственной деятельности в настоящем. При оперативном проведении разработчик должен предусмотреть все возможные проверки корректности вносимых данных. При оперативном проведении для документа устанавливается текущая дата и время создания. Оперативное проведение документа с датой, отличающейся от текущей, невозможно. Если документ проводится оперативно с датой, меньшей текущей, оперативное проведение невозможно, и пользователю предлагается провести документ не оперативно. Если документ проводится оперативно с датой больше текущей, проведение отменяется. При оперативном проведении используется понятие оперативной отметки времени, которая обеспечивает формирование времени проведения документов как минимум с секундным интервалом. Если при оперативном проведении с текущей датой время проведения больше отметки, то отметка становится равной времени проведения. Если же время проведении я меньше отметки, то к отметке прибавляется одна секунда. Неоперативное проведение применяется, когда документ отображает событие хозяйственной деятельности в прошлом. При этом проверки не являются такими строгими, как при оперативном проведении. Методы записи движений регистров Существует три программных способа формирования движений по регистрам. 1. Наиболее распространенный способ формирования движений заключается в создании метода-обработчика ОбработкаПроведения() в модуле документа. Программный код этого метода при помощи свойства Движения создает новые записи регистров и заполняет ее поля – измерения, ресурсы, реквизиты регистра. Одна процедура проведения может содержать код для формирования движений по нескольким регистрам. Но один документ может иметь только одну процедуру проведения. 2. При необходимости сформировать движения по регистрам до момента завершения процедуры проведения используются необходимые методыобработчики, в которых создается программный код с использованием свойства Движения. Конкретный выбор обработчиков ложится на разработчика. 3. Кроме документов программный код, изменяющий состояние регистров, может присутствовать практически в любом объекте конфигурации. Последовательности документов При ведении учета состояние параметров учета может зависеть от порядка проведения документов, так как один документ может изменить состояние некоторого регистра, а следующий документ снова изменяет этот же регистр на основе его нового состояния. В таких механизмах учета при перепроведении документов могут возникать конфликтные ситуации, когда вносимые изменения приводят к возникновению ошибок в учете. Для управления такими ситуациями используется основной объект Последовательность. Этот объект содержит последовательность документов, которые могут влиять на состояние учета. Последовательность может применяться только для перепроведения документов по регистрам. Важнейшей характеристикой последовательности является граница последовательности – переменная типа дата, которая может перемещаться как вручную, так и автоматически. Документы, находящиеся раньше границы последовательности в перепроведениях не участвуют. Таким образом, граница последовательности – это точка на временной оси, которая определяет, что документы, находящиеся ранее этой точки уже никак не могут повлиять на состояние учета. Если перепроводится документ, дата проведения которого больше даты границы последовательности, то все документы последовательности, с датой позже даты проведения, перепроводятся. Журналы документов Для удобства пользователей различные документы могут объединяться в журналы. В журналах определяются общие для документов поля, которые будут отображаться для пользователей. Также журнал может содержать дополнительные графы, которые содержат данные собственно журнала.