Документ
В версии 7.7 была предопределенная процедура ВводНового(). Что-то не могу найти ее в версии 8.0...
Теперь факт интерактивного ввода нового объекта (элемента справочника, документа и т.д.) не выделяется в отдельное событие.
В версии 8.0 для анализа аналогичного факта следует использовать событие объекта Форма – "При открытии". Для того чтобы в обработчике этого события проанализировать, выполняется ли ввод нового объекта, или открыт уже существующий, нужно вызвать метод прикладного объекта ЭтоНовый(). Метод вернет значение Истина, если вводится новый объект, и Ложь – в противном случае.
В качестве примера можно посмотреть процедуру "СвойстваПередНачаломДобавления" формы элемента справочника "ВариантыНоменклатуры" в разделе "Доработка справочника ВариантыНоменклатуры" на странице 269, или обработчик события "Перед записью" формы узла плана обмена "Филиалы" в разделе "Создание плана обмена Филиалы" на странице 403.
Более подробную информацию можно найти на диске ИТС в статье "Процедуры - обработчики событий".
Есть ли какой-нибудь аналог для метода ПриЗаписиПерепроводить() в версии 8.0?
Есть.
Режим перепроведения при записи проведенного документа устанавливается с помощью свойства ПриЗаписиПерепроводить, которое существует у расширения формы документа. Если это свойство установить, то при вызове стандартных команд записи в форме, запись проведенного документа будет автоматически выполняться с проведением.
Более подробно о том, что такое расширения формы, можно прочитать в разделе "Данные и элементы управления" на странице 502. [627]
Как сохранить документ без проведения (в 7.7 можно было написать в кнопке #Записать Закрыть)?
В версии 8.0 следует использовать обработчик события нажатия кнопки. Назначение процедур модуля обработчиками события нажатия возможно как для новых кнопок, размещаемых в форме, так и для стандартных кнопок, расположенных в командной панели "ОсновныеДействияФормы".
В обработчике события нажатия следует вызвать метод объекта документ Записать(), с первым параметром, равным РежимЗаписиДокумента.Запись. После этого нужно закрыть форму:
Записать(РежимЗаписиДокумента.Запись);
Закрыть();
КонецПроцедуры
Табличная часть документа (так же, как и любого другого объекта конфигурации, обладающего табличными частями) представляет собой коллекцию значений, элементами которой являются строки табличной части. Поэтому перебор строк табличной части (так же, как и любой другой коллекции значений) проще всего реализовать с помощью цикла Для Каждого ... Из ... Цикл ... КонецЦикла:
ОчереднаяСтрока = ТекСтрокаМатериалы;
...
КонецЦикла;
Для обхода табличной части можно использовать и обычный цикл Для ... По ... Цикл ... КонецЦикла, но необходимо помнить, что индекс первого элемента коллекции всегда равен нулю:
ОчереднаяСтрока = Материалы[СчетчикЦикла];
...
КонецЦикла;
Есть ли в версии 8.0 подчиненные документы?
Нет, специального понятия "Подчиненные документы" в версии 8.0 не существует.
В версии 8.0 одни объекты (документы, элементы справочников, задачи и т.д.) могут являться основанием, для создания других объектов. Таким образом, документ может быть создан не только на основании другого документа, но и на основании, например, элемента справочника или бизнес-процесса.
Поэтому теперь, для получения документов, имеющих ссылки на некоторый документ, рекомендуется использовать объект Критерий отбора. Использование критерия отбора предоставляет больше возможностей, чем механизм подчиненных документов. Критерий отбора позволяет отбирать не только документы, но и другие объекты базы данных. Кроме того, он позволяет непосредственно указать перечень реквизитов, по значению которых необходимо выполнять отбор.
В форме критерия отбора можно использовать стандартный список для отображения найденных значений и также в форме вставить список документов с отбором по указанному критерию.
Однако следует учитывать, что критерий отбора не позволяет выполнять динамический просмотр найденных данных. В список будут включаться все найденные объекты. Соответственно, нецелесообразно использовать этот механизм, если количество [629] найденных объектов по значениям критерия отбора будет достаточно велико.
Примеры работы с зависимыми объектами можно посмотреть в разделах "Ввод на основании" на странице 493 и "Объекты, введенные на основании" на странице 497.
Как добавить строку в табличную часть документа?
Табличная часть документа представляет собой коллекцию значений, элементами которой являются строки табличной части.
В версии 8.0 существуют общие принципы работы с коллекциями значений. Чтобы добавить элемент в коллекцию (в данном случае строку в табличную часть документа), нужно вызвать у коллекции метод Добавить(). Метод возвращает объект – добавленный элемент коллекции. В случае с табличной частью это будет строка табличной части:
СтрокаСостава.Количество = 10;
В версии 8.0 у документа нет метода Провести().
Это связано с тем, что проведение документа не выделяется теперь в отдельное действие. В версии 8.0 проведение рассматривается как один из режимов записи документа.
Таким образом, теперь документ может быть либо просто записан, либо записан с проведением, либо с отменой проведения. Режим записи документа задается параметром его метода Записать():
В версии 8.0 при вызове стандартной команды ввода на основании выполняется создание нового объекта и вызов в модуле этого объекта обработчика события "Обработка заполнения". [630]
В этом обработчике и должен быть реализован алгоритм заполнения данных объекта исходя из данных объекта-основания. Если вы воспользуетесь конструктором ввода на основании, то он сгенерирует обработчик именно этого события.
Надо помнить, что событие "Обработка заполнения" возникает не только при вводе на основании. Это событие будет возникать и при вызове метода объекта Заполнить().
Таким образом, обработчик события "Обработка заполнения" является стандартным местом, в котором реализуется заполнение данных объекта из данных объекта основания без учета того, откуда и зачем вызывается это заполнение.
Поэтому обратите внимание на то, что в этом обработчике следует выполнять только заполнение данных, и не следует делать каких-либо дополнительных действий связанных с интерфейсом системы.
Аналогичным образом выполняется копирование. При копировании вызывается обработчик события объекта "При копировании", в котором можно дополнить стандартное заполнение данных выполняемое системой при копировании объекта. Этот обработчик вызывается, как при интерактивном копировании, так и при вызове метода Скопировать().
Кроме того, расширения форм объектов (форма документа, форма элемента справочника и т.д.) предоставляют свойства ПараметрОснование и ПараметрОбъектКопирования, которые заполняются системой при выполнении стандартных команд ввода на основании и копирования. Значения этих свойств можно использовать в обработчиках событий формы для определения того, что при открытии формы выполнялся ввод на основании или копирование.
Примеры обработки ввода одних объектов на основании других можно посмотреть в разделах "Ввод на основании" на странице 493 и "Объекты, введенные на основании" на странице 497.
Как прочитать движения документа по определенному регистру?
Существует два способа, которыми можно это сделать.
Во-первых, можно "пойти от документа". Для этого следует воспользоваться свойством объекта ДокументОбъект.<имя> – Движения. Это свойство содержит коллекцию пустых наборов записей документа по каждому из регистров, которые указаны для [631] этого документа в конфигураторе. Чтобы получить движения документа по конкретному регистру, нужно обратиться к набору записей этого конкретного регистра (указав имя регистра в качестве свойства через точку), и затем прочитать этот набор записей:
Движения = ДокументОбъект.Движения.ОстаткиМатериалов;
Движения.Прочитать();
Движения.Отбор.Регистратор.Значение = Документы.ПриходнаяНакладная.НайтиПоНомеру(1);
Движения.Прочитать();
Да. Было принято решение в версии 8.0 отказаться от общих реквизитов документов. Вместе с этим в версии 8.0 нет и общего журнала документов.
Теперь, если у всех документов нужно иметь аналогичные реквизиты, например, "Автор" и "Редактор", эти реквизиты следует создать вручную у каждого документа.
При необходимости использовать аналог общего журнала версии 7.7, следует просто создать журнал документов, в котором будут регистрироваться все существующие документы.
Однако в этом случае следует иметь в виду, что при интенсивной работе пользователей в файловом варианте информационной базы, высока вероятность возникновения коллизий. Добиться ее уменьшения можно путем исключения из состава этого журнала документов, которые проводятся наиболее часто. [632]