Назначение документов
Документы в 1С — это электронные аналоги обычных бумажных документов, одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и корректировка. Типичными примерами видов документов являются такие документы, как «Платежное поручение», «Счет», «Приходная накладная», «Расходная накладная», «Накладная на внутреннее перемещение», «Приходный кассовый ордер» и так далее. Каждый вид документа предназначен для отражения своего типа событий. Это определяет его структуру и свойства, которые описываются в конфигурации.
В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, являющихся основаниями для тех или иных учетных действий или расчетов. Тем не менее, использование этого типа данных может выходить далеко за рамки простой фиксации изменений, внесенных в учетные регистры. Каждый создаваемый в конфигураторе документ является описанием множества документов одного вида. Например, созданный в Конфигураторе документ «Накладная» при работе с системой 1С:Предприятие позволит формировать накладные, которые будут иметь разное содержание, по одинаковый набор реквизитов, одинаковую логику поведения и так далее.
Состав документов
Если коротко, то у документа есть экранные формы, причем они могут быть в форме диалога, списка или выбора, в зависимости от применения в программе. Именно эти формы видит пользователь на экране. Также у документа обычно есть одна или несколько форм для печати — макетов. С помощью «макетов» документ печатается на бумаге, т.е. из электронного становится бумажным . Поведение документа определяется с помощью встроенного языка 1С. На языке записывается, что документ делает в системе, как он формирует бумажный бланк и как он себя ведет на экране.
Проведение документа
Некоторые документы могут проводиться, некоторые нет. С точки зрения пользователя, «провести» документ означает создать движение его по регистрам учета или бухгалтерским счетам. С точки зрения программиста, при проведении документа сработает модуль проведения документа. Именно там определяются все действия, выполняемые при проведении документа. Например, при проведении документа «Приказ о приеме на работу» сработает модуль этого документа, который в справочник Сотрудники добавит нового сотрудника с соответствующими реквизитами и настройками.
Атрибуты документов (основные реквизиты)
При создании структуры документа в Конфигураторе допускается определенный уровень абстракции. Так, в большинстве документов можно выделить две основные части: шапка и табличные части (причем в отличии от версии 7.7, в 8.2, 8.3 возможно несколько табличных частей в одном документе). Как правило, в шапке содержатся реквизиты, которые являются общими для всего документа. У любого вида документа существуют реквизиты, которые создаются автоматически — это «Дата» и «Номер». Например, в счете на оплату в заголовочную часть помещаются установочные данные документа — номер и дата, а также сведения о плательщике и получателе платежа. Данные в шапке или в табличных частях могут произвольно настраиваться программистом в зависимости от задачи.
Для документа или группы документов может быть настроен так называемый «нумератор», который будет по определенным правилам нумеровать документ или группу. Возможно использование различных префиксов, длина номера — все это настраивается в конфигураторе.
Примеры работы с документами в 1С
// Получить пустую ссылку типа документ, например РеализацияТоваровУслуг
ПустаяСсылка = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
Если ПустаяСсылка.Пустая() Тогда
Сообщить(«Ссылка пустая.»);
КонецЕсли;
// Создать новый документ, указать принадлежность к организации, установить дату, номер и записать
// На примере РеализацияТоваровУслуг
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.УстановитьНовыйНомер();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Организация = ОрганизацияПоУмолчанию;
НовыйДок.Записать();
// Создать новый документ на основании другого объекта СсылкаНаДокумент
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Заполнить(СсылкаНаДокумент.Ссылка);
НовыйДок.Записать();
// Скопировать существующий документ
КопияДокумента = СсылкаНаДокумент.Скопировать();
КопияДокумента.Записать();
// Провести документ
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
// Изменить и записать документ по ссылке
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумента.Комментарий = «Документ изменен.«;
ОбъектДокумента.Записать();
// Пометить на удаление документ
Если НЕ СсылкаНаДокумент.ПометкаУдаления Тогда
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
// пометим на удаление
ОбъектДокумента.УстановитьПометкуУдаления(Истина);
// а здесь отменим удаление
ОбъектДокумента.УстановитьПометкуУдаления(Ложь);
КонецЕсли;
// Заблокировать документ перед изменениями, изменить, сохранить его и затем разблокировать
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
Если Не ОбъектДокумента.Заблокирован() Тогда
Объект.Заблокировать();
Объект.Комментарий = «Документ изменен.«;
Объект.Записать();
Объект.Разблокировать();
КонецЕсли;
// Найти документ по номеру
СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(«НомерДокумента»);
// Тоже самое через запрос
Запрос.Текст =
«ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Номер = &Номер
|«;
Запрос.УстановитьПараметр(«Номер», «0000-000001″);
// Найти документ по реквизиту
СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоРеквизиту(«Контрагент»,Контрагент);
// Тоже самое через запрос
Запрос.Текст =
«ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|
|ГДЕ
| РеализацияТоваровУслуг.Контрагент = &Контрагент»;
Контрагент = Справочники.Контрагенты.ПустаяСсылка();
Запрос.УстановитьПараметр(«Контрагент», Контрагент);
// — выбрать все документы за период, по определенной организации и упорядочить их в выборке
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| (РеализацияТоваровУслуг.Организация = &Организация) И
| (РеализацияТоваровУслуг.Дата МЕЖДУ &НачДата И &КонДата)
|УПОРЯДОЧИТЬ ПО
| РеализацияТоваровУслуг.Дата УБЫВ»;
Запрос.УстановитьПараметр(«НачДата», ‘20130101’);
Запрос.УстановитьПараметр(«КонДата», ‘20131231’);
Запрос.УстановитьПараметр(«Организация», ОрганизацияПоУмолчанию);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка)
КонецЦикла;
// Выбрать все документы, которые не проведены и не помечены на удаление
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| Не РеализацияТоваровУслуг.ПометкаУдаления И
| Не РеализацияТоваровУслуг.Проведен»;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СсылкаНаЛюбойДокумент = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СсылкаНаЛюбойДокумент = ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;
// Как открыть произвольную форму документа по имени
// ВЫПОЛНЯТЬ КОД НА КЛИЕНТЕ
Форма = ПолучитьФорму(«Документ.РеализацияТоваровУслуг.ФормаСписка»);
Если НЕ Форма.Открыта() Тогда
Форма.Открыть();
КонецЕсли;
/// Как открыть форму существующего документа
// ВЫПОЛНЯТЬ КОД НА КЛИЕНТЕ
Параметры = Новый Структура(«Ключ», СсылкаНаДокумент);
ОткрытьФорму(«Документ.РеализацияТоваровУслуг.ФормаОбъекта», Параметры);