Сравнение документов с другими объектами
Объект | Сходства | Различия |
Константы | хранят значения, сохраняются в базе данных | Документ хранит не одно значение, а событие хозяйственной деятельности предприятия, кроме того событие порождает изменение состояния данных. Документ обязательно имеет дату и время, может содержать табличную часть, хранит множество данных различных типов, которые могут быть связаны с данными других объектов. Константы не имеют печатной формы. |
Справочники | сохраняется в базе данных, имеет реквизиты, справочники могут быть подчиненными друг другу Могут иметь печатные формы | Справочник хранит нормативно-справочную информацию, а документы отражают события реального мира. Обычно значения реквизитов документов выбираются из справочников. Документ обычно проводится, имеет дату и время. Справочники, в отличие от документов могут быть многоуровневыми, иметь периодические (привязанные к дате) реквизиты. |
Перечисления | хранится в БД, хранит список значений | Перечисление может хранить только список значений, который задается разработчиком в режиме Конфигуратор. Не имеют печатной формы. Не редактируются пользователем. |
Таблица значений | имеет строки и колонки (не хранится в БД) | ТаблицаЗначений предназначена для временного хранения промежуточных данных в памяти компьютера, возникающих во время работы программы, и удаляется, когда работа с ней закончена. Документ записывает все данные в БД. Таблицы значений не могут быть подчиненными друг другу. Не имеют печатной формы. |
Список значений | хранит список значений (не сохраняется в БД) | Представляет собой временный набор данных, так же как и таблица значений. Не имеют печатной формы. |
Отчеты | Имеет печатные формы | Отчет обычно считывает данные, хранящиеся в БД и формируются печатные формы для вывода данных в нужном виде на экран или на принтер. |
Основы программирования
Ссылка на документ
Для работы с документом из какого-нибудь модуля требуется сначала создать ссылку на этот документ.
ДокПрием = СоздатьОбъект("Документ.ПриемНаРаботу");
ДокУвольн = СоздатьОбъект("Документ.ПриказОбУвольнении");
Создание, сохранение и проведение документа
ДокПрием.Новый();
ДокПрием.ФИО = "Иванов Иван Иванович";
ДокПрием.Оклад = 5000;
ДокПрием.Записать();
//программное проведение документа
ДокПрием.Провести();
Поиск документа
ДокПрием.НайтиДокумент(Док);
ДокПрием.НайтиПоНомеру(123)
Удаление документа
ДокПрием.Удалить(0); //пометка на удаление
ДокПрием.Удалить(1); //непосредственное удаление
//можно проверить, помечен ли документ на удаление
//функция возвращает 1 - если помечен, 0 - если нет
Пометка = ДокПрием.ПометкаУдаления();
Перебор документов
ДокПрием.ВыбратьДокументы(дата1, дата2); //можно задать период выборки
Пока ДокПрием.ПолучитьДокумент()=1 Цикл
......<действия с текущим документом>
КонецЦикла;
Табличная часть документа
Перебор строк, добавление и удаление строк табличной части документа..
//перебор строк табличной части
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку()=1 Цикл
...
КонецЦикла;
//добавление строки
Док.НоваяСтрока();
Док.РеквизитТаблЧасти = Значение;
//удаление строки
Док.УдалитьСтроку();
Экранные формы
Форма журнала документов
Каждый документ представляется в журнале документов отдельной строкой. Журнал содержит колонки, состав которых настраивается программистом. Кроме того, форма журнала документов может содержать любые другие элементы управления: кнопки, переключатели, информационные поля. Они могут быть сверху, снизу или сбоку.
Интервал журнала
В журнале документов можно установить интервал. Тогда он будет показывать только те документы, у которых дата попадает в этот интервал. Для установки интервала предусмотрена специальная кнопка на панели инструментов журнала. Кроме того, интервал можно установить программно методом УстановитьИнтервал
Графы журнала
В конфигураторе можно настраивать графы журнала (колонки). Например, в приведенной выше форме графа Сотрудник отображает ФИО сотрудника, для которого был сделан документ
Отбор, закладки отбора
В журнале документов можно программно или вручную установить отбор, тогда журнал будет показывать только нужные пользователю документы. Для установки отбора вручную предназначена специальная кнопка на панели инструментов журнала. Отбор можно установить по общим графам документов, а также по виду документов. Нельзя установить отбор по двум критериям одновременно. Отбор возможен только в ОБЩИХ журналах! Для упрощения процедуры отбора могут быть использованы закладки. Для этого используется метод ЗакладкиОтбора.
Предопределенные процедуры
Такие процедуры вызываются системой 1С при наступлении определенных событий в форме журнала документов. Фактически это обработчики событий.
Предопределенная процедура | Описание |
ПриУстановкеОтбора() | Срабатывает при установке отбора кнопкой на панели инструментов или выбором закладки отбора. Здесь можно проверить права доступа или сделать что-нибудь еще. |
ПриУстановкеИнтервала() | Предопределенная процедура при установке интервала журнала. |
ПриВыбореСтроки(ФлагОбработки) | Срабатывает при двойном щелчке на документе или при нажатии ENTER. Режим обработки выбора строки предопределенной процедурой ПриВыбореСтроки включается при помощи метода Форма.ОбработкаВыбораСтроки(1). |
Сортировка
ВНИМАНИЕ. Сортировка в журнале документов по произвольной графе невозможна!
Поиск документа в журнале
Кнопка "Поиск по номеру" (см. панель инструментов формы журнала документов) + набор первых символов.
Форма документа
Для пользователя содержимое документа представляется в экранной форме документа:
Табличная часть выглядит как обычная таблица, где столбцы - реквизиты табличной части документа. При создании документа в конфигураторе можно визуально настроить вид формы, размещение реквизитов и определить в свойствах формы, будет ли отображаться панель инструментов, можно будет пользователю ли изменять размер формы и т.п.
Предопределенные процедуры.
Для обслуживания работы действий с документами в системе 1С имеется большое количество предопределенных процедур. Однако, прежде чем приступить к описанию последних, сделаю важное пояснение. Документ как объект конфигурации содержит ДВА РАЗНЫХ программных модуля.
1. Один их них (Модуль документа) запускается при интерактивном или программном выполнении некоторых важных действий: проведение, отмена проведения, удалении проведенного документа, архивации записей журнала расчетов, порожденных документом. Фактически вышеприведенные действия сопоставляются с соответствующими предопределенными процедурами модуля документа. Операторам модуля доступны все реквизиты документа, но не доступны реквизиты экранной формы документа.
Предопределенные процедуры, принадлежащие модулю документа:
Предопределенная процедура | Описание |
ОбработкаПроведения(Знач) | Обработка проведения. В теле описываются подготовка данных реквизитов документа, бухгалтерских итогов к формированию операции, а также свойства этой операции (Корреспондирующие счета, Субконто и т.п.). Здесь же описываются движения регистров оперативного учета, если документ в них участвует. Выполнение проведения система самостоятельно заключает в транзакцию, поэтому не употребляйте операторов, ожидающих отклика пользователя и, вообще, постарайтесь минимизировать подготовку проведения, передав, по возможности, часть этой работы в модуль формы. В переменную Знач передается значение, указанное в методе Провести() при его работе. Параметр не обязательный. |
ОбработкаУдаления Проведения() | При отмене проведения документа (удалении проведенного документа) системой автоматически удаляются его проводки и движения регистров. Тем не менее, если при проведении совершались еще какие-то действия, то отменять их нужно в теле данной процедуры. Например, если при проведении исходя из бухгалтерских итогов рассчитывалась построчная итоговая сумма, то при распроведении её нужно очищать: Процедура ОбработкаУдаленияПроведения() Если ВыбратьСтроки() = 1 Тогда // Обратите внимание Пока ПолучитьСтроку() = 1 Цикл Сумма = 0; // Сумма - реквизит документа *** КонецЦикла; КонецЕсли; КонецПроцедуры *** Пример доступности контекста документа в модуле документа |
АрхивироватьДокумент() | Вызывается при смене расчетного периода журнала расчетов "вперед". Требуется описывать, если документ порождает записи журнала расчетов. |
2.Модуль формы запускается при каждом открытии формы документа. В его контексте доступны все реквизиты документа и реквизиты формы. Кроме предопределенных процедур модуля формы, там можно разместить вспомогательные процедуры и функции, вызываемые, например, экранными кнопками. Не путайте: предопределенные процедуры модуля документа нельзя размещать в модуле формы, и наоборот!
Предопределенная процедура | Описание |
ВводНового(ПризнакКопирования, ОбъектКопирования) | Вызывается при создании интерактивном создании нового документа пользователем. Процедура обычно содержит предустановки значений некоторых реквизитов при создании нового документа или операторы управления видом экранной формы. ПризнакКопирования - имя переменной, которую система установит в "0", если введен просто новый документ, и в "1", если документ скопирован (через F9, например). При этом в Переменную ОбъектКопирования будет передан объект, с которого скопировали. Копирование не следует путать с вводом на основании. Процедура ВводНового(Копирование) Если ИмяПользователя() <> "Бухгалтер" Тогда Предупреждение("Вам не позволено создавать этот документ!"); СтатусВозврата(0); Возврат; //Новый документ не будет создан КонецЕсли; Если Копирование = 1 Тогда Возврат; КонецЕсли; КонецПроцедуры |
ВводНаОсновании(Основание) | Выполняется при вводе нового документа на основании другого. В переменную Основание передается контекст документа-основания, т.е. теперь вы можете обратиться к его реквизитам через эту переменную: СуммаДоплаты=Основание.СуммаСверху; //Свой реквизит принимает значение реквизита документа-основания. Помните, что после обработки этой процедуры система не сохранит информацию о том, что новый документ введен на основании другого. Для реализации такой возможности вы должны иметь во вновь создаваемом документе реквизит типа "Документ", куда можно записать ссылку на документ-основание. Лучше сделать её доступной пользователю, чтобы он потом имел возможность выбрать другой документ-основание. |
ПриЗаписи() | Выполняется при записи (перезаписи) документа. Имейте ввиду, что операторы этой процедуры выполняются ДО фактической записи документа в базу. Это, так сказать, подготовительная работа. |
ПриВводеСтроки() | Вызывается при вводе пользователем новой стоки многострочной части документа. Такой операцией, например, можно отменить ввод новых строк, если в документе нельзя вводить строки вручную (можно добавить какое-либо условие): Процедура ПриВводеСтроки() .......СтатусВозврата(0); КонецПроцедуры |
ПриНачалеРедактированияСтроки() | Обрабатывает начало изменения существующей (!) строки (когда пользователь ручками вводит или изменяет значения реквизитов табличной части). Исходя из примера, описанного выше для процедуры ПриВводеСтроки(), догадайтесь, как можно запретить редактирование стоки? |
ПриРедактированииНовойСтроки() | Похожая на предыдущую, но с тем отличием, что вызывается только при редактировании ВНОВЬ созданной строки. |
ПриОкончанииРедактированияСтроки (ФлагНовойСтроки) | ФлагНовойСтроки - имя переменной, в которую будет записана 1, если окончен ввод НОВОЙ строки, соответственно - 0, если закончено редактирование ИМЕВШЕЙСЯ. Процедура вызывается, когда пользователь "дезактивирует" строку мышкой, нажатием Enter, или Esc (кроме случая, когда отказываются от редактирования новой строки). |
ПриУдаленииСтроки() | Действие, которое будет обработано данной процедурой, очевидно исходя из имени процедуры. Что еще добавить? |
ПриИзмененииПорядкаСтрок (ФлагДействия) | ФлагДействия - имя переменной, которая станет "-1", если строка поднимается вверх, станет "1" при перемещении строки вниз, и станет "0", если изменяются номера строк, например, при сортировке. А что при этом сделать - это уже ваша фантазия (моей не хватает :). |
Не забывайте о том, что имеются предопределенные процедуры, общие для любых форм системы 1С, такие как ПриОткрытии(), ПриЗакрытии() и т.д. Их подробное описание здесь не приводится, дабы не перегружать главу о документах.
Печатные формы документа
Документ обычно имеет печатную форму. Печатная форма полностью формируется средствами встроенного языка 1С, что придает большую гибкость программе. Это одна из причин ошеломляющего успеха системы 1С:Предприятие. Печатная форма документа - это фактически отчет, формируемый обычно из формы открытого документа и содержащий сведения из этого документа. Чтобы научиться формировать печатные формы, вам нужно изучить главу Отчеты (объект "Таблица"). Все операторы, которые выполняют вывод на печать данных отчетов, точно так же позволяют печатать данные из документов.
У документа может быть несколько шаблонов печатных форм. Средствами встроенного языка (метод ИсходнаяТаблица) задается тот шаблон печатной формы, который будет использоваться.
Шаблоны печатных форм (таблицы) могут быть общие. Это дает возможность использовать один шаблон для печати нескольких видов документов. Т.е. общая таблица является глобальной для конфигурации и может быть использована в любом модуле. Примером из типовой конфигурации может являться шаблон печатной формы "Отчет о движении документа", который используется разными модулями конфигурации.
Маленькая хитрость: если вы создали свою печатную форму для какого-либо документа, или "заточили" типовую, рекомендую сохранить её в отдельном файле печатной формы (*.mxl) тогда при переходе с релиза на релиз вам не будет нужды переделывать таблицы документа, достаточно будет в операторе ИсходнаяТаблица() процедуры печати вставить ссылку на внешний файл.