Описание встроенного языка системы 1С Предприятие


         

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


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

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

Пример:

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

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

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

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

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

Пример:

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

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

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

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



// ...

Номер = Спр.Приказ.НомерДок;

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

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




Полное имя вида документа записывается следующим образом:

Документ.<Имя_Документа>

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

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

Англоязычный синоним ключевого слова Документ — Document.

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

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

Пример:



*

Док = СоздатьОбъект("Документ");

Док1 = СоздатьОбъект("Документ.БольничныйЛист");

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

ДокЗ = СоздатьОбъект("Документ.ПриказПоОтпуску");

Док4 = СоздатьОбъект("Документ.ПрихНакладн");

Док5 = СоздатьОбъект("Документ.Списание");

*

// В модуле формы документа

// меняем номер обрабатываемого документа

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

*

// В других модулях имена атрибутов, процедур и функций документов

// записываются через точку после имени переменной

// со значением типа "Документ".

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

// создаем новый документ

Док.Новый();

Док.ОбщийРазмер = 12000000;

// меняем номер Документа

Док.НомерДок = "12345";

// меняем дату документа

Док.ДатаДок = '14.04.96';

// создаем новую строку в спецификации документа

Док.НоваяСтрока();

Док.Сотр = СпрСотрудн.ТекущийЭлемент();

Док.Процент = 15;

// ...

// записываем документ

Док.Записать();


Содержание раздела