Документ — одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и, если необходимо, корректировка.

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

Структура каждого конкретного вида документа определяется при его создании в конфигураторе. У любого вида документа существует два обязательных реквизита, которые создаются автоматически — дата и номер документа. Дру­гие реквизиты документа определяются в конфигураторе конкретно для каждого создаваемого вида документа.

В документах выделяются две основные структурные части: шапка документа и многострочная табличная часть, поэтому реквизиты документа можно подразделить на «Реквизиты шапки» и «Реквизиты табличной части».

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

Например, в случае расчета заработной платы, документ «Больничный лист» в заголовочной части может содержать процент оплаты, сведения о сотруднике.
Многострочная (табличная) часть документа представляет собой список однотипных строк. Реквизиты табличной части принадлежат строке документа, т. е. каждая строка содержит свои собственные значения этих реквизитов.

Например, в уже упоминавшемся больничном листе табличная часть — это набор данных за прошлые расчетные периоды, предназначенные для расчета средней заработной платы.


Контекст работы с документами

В синтаксисе языка доступ к атрибутам, а также вызов методов документов зависит от контекста выполнения программного модуля.

Если конкретный документ входит (согласно локального контекста) в набор непосредственно доступных модулю значений агрегатных типов данных (см. «Виды программных модулей»), то доступ к атрибуту, вызов метода для этого документа — просто имя этого атрибута, метода с указанием необходимых параметров.

Пример:
* В форме редактирования документа «Накладная» мы имеем непосредственный доступ к текущему документу (накладной). Значит, чтобы изменить номер накладной, запишем:


НомерДок = "12345678";

* В форме редактирования документа «Приказ на зачисление» мы имеем непосредственный доступ к реквизитам этого документа. Значит, чтобы записать имя нового сотрудника, пишем:


ФИО = "Иванов И.И.";


Значение документа может быть получено из других источников, например как реквизит другого документа. В этом случае обращение к атрибутам и методам такого документа представляет собой сложное выражение, где имена рек­визитов разделяются точкой.
Пример:

* Допустим, у документа «Счет» есть реквизит «Накладная», который имеет тип «Документ.РасхНакл». Номер накладной можно получить следующим образом:


НомерРасхНакл=Документ.Счет.Накладная.НомерДок;

* Допустим, значение реквизита «Приказ» справочника «ПриказыНаДоплату» имеет тип «Документ.ПриказНаДоплату». Тогда номер приказа можно получить следующим образом:


Спр = СоздатьОбъект("Справочник.ПриказыНаДоплату");
// ...
Номер = Спр.Приказ.НомерДок;


В других случаях, доступ к атрибутам, вызов методов конкретного документа происходит при помощи переменной со ссылкой на объект типа «Документ». Объект создается функцией СоздатьОбъект, ссылка на который присваивается переменной. Чтобы вызвать атрибут или метод объекта, имя этого атрибута, метода (с указанием необходимых параметров) пишется через точку после имени ссылки.

При создании ссылки на объект типа «Документ» при помощи функции СоздатьОбъект в качестве имени документа может выступать ключевое слово Документ или полное имя вида документа.

Полное имя вида документа записывается следующим образом:
Цитата
Документ.<Имя_Документа>

где <Имя_Документа> — имя вида документа, как он объявлен в конфигураторе.

Применение ключевого слова "Документ" (без указания вида документа) используется для организации доступа ко всему перечню документов независимо от вида. В этом случае методы ВыбратьДокументы и ПолучитьДокумент будут обрабатывать документы всех видов. Однако, для переменных, созданных таким вызовом функции СоздатьОбъект, будут недоступны процедуры поиска, выбора документа из диалога, ввода нового документа, которые подразумевают конкретный вид документа.
Англоязычный синоним ключевого слова Документ — Document.

Замечание: Следует обратить особое внимание, что переменная типа «Документ», созданная функцией СоздатьОбъект — это ссылка на список документов в отличие от переменных содержащих само значение объекта (например, переменной может быть присвоено значение реквизита справочника, который имеет тип «Документ»). Использование ссылки на спи­сок документов, созданной при помощи функции СоздатьОбъект существенно отличается от работы со значением типа «Документ». Только при работе со ссылкой на список документов разрешено изменять позицию (найти-выбрать...) текущего элемента в списке (т. е. осуществлять позиционирование по списку документов), создавать новые, изменять и удалять существующие документы. С другой стороны, ссылка на список документов не содержит собственно значения конкретного документа, которое можно присвоить чему-либо. Однако, его всегда можно получить, используя функцию ТекущийДокумент.

Замечание. Объект, созданный при помощи функции СоздатьОбъект, изначально не определен, т. е. не содержит никакого значения. Чтобы начать с ним работать, его предварительно надо позиционировать (установить на конкретный документ) при помощи процедур НайтиДокумент, НайтиПоНомеру, ПолучитьДокумент и т. п..

Пример:
*


Док = СоздатьОбъект("Документ");
Док1 = СоздатьОбъект("Документ.БольничныйЛист");
Док2 = СоздатьОбъект("Документ.ПриказНаДоплату");
ДокЗ = СоздатьОбъект("Документ.ПриказПоОтпуску");
Док4 = СоздатьОбъект("Документ.ПрихНакладн");
Док5 = СоздатьОбъект("Документ.Списание");

*


// В модуле формы документа
// меняем номер обрабатываемого документа
НомерДок = "12345";

*


// В других модулях имена атрибутов, процедур и функций документов
// записываются через точку после имени переменной
// со значением типа "Документ".
Док = СоздатьОбъект("Документ.ПриказыДоплат");
// создаем новый документ
Док.Новый();
Док.ОбщийРазмер = 12000000;
// меняем номер Документа
Док.НомерДок = "12345";
// меняем дату документа
Док.ДатаДок = '14.04.96';
// создаем новую строку в спецификации документа
Док.НоваяСтрока();
Док.Сотр = СпрСотрудн.ТекущийЭлемент();
Док.Процент = 15;
// ...
// записываем документ
Док.Записать();



Позиция документа

Все документы в системе 1С:Предприятие располагаются на временной оси. Основными характеристиками расположения документа на временной оси являются дата и время документа. Дата документа доступна через атрибут ДатаДок, а работа со временем документа осуществляется при помощи методов УстановитьВремя, ПолучитьВремя и предопределенной процедуры ПриИзмененииВремениДокумента. Кроме даты и времени в системе 1С:Предприятие существует понятие позиции документа.

Позиции документа — это строковое значение специального формата длиной 32 символа. Позиция документа однозначно характеризует расположение документа на оси времени относительно других документов, т. е. позиция документа заключает в себе и дату и время (с точностью до секунды), плюс некоторые дополнительные данные, определяющие взаимное расположение документов в пределах одной секунды. Позиции документов можно сравнивать (>; <), определяя какой документ раньше, какой позже. Позиции документов можно сортировать по возрастанию или по убыванию. Кроме того, можно получить позицию точки актуальности (ПолучитьПозициюТА) и позицию границы последовательности (ПолучитьПозицию). Позицию документа можно получить при помощи метода Позиция.

Многие методы могут в качестве парамера воспринимать кроме документа или даты позицию документа.

СформироватьПозициюДокумента, РазобратьПозициюДОкумента, ПолучитьПозициюТА, ПолучитьПозицию, ВыбратьДокументы, ВыбратьПодчиненныеДокументы, ВыбратьПоЗначению, РассчитатьРегистрыНа, РассчитатьРегистрыПо, УстановитьТАна, УстановитьТАпо, ВыбратьДвижения, ВыбратьДвиженияСОстатками, ВыполнитьЗапрос, Рассчитать, ВыбратьОперации, ВыбратьОперацииСПроводками, ВыбратьПоЗначению