V8_6_Документы.ppt
- Количество слайдов: 29
4. 5. Документы Наиболее важными характеристиками документа является наличие у него номера (реквизит Номер) и даты (реквизит Дата). В V 8 значения типа «дата» включают в себя также и время. Если два документа имеют одинаковую дату и время, то они все равно выстраиваются в хронологическую последовательность (см. Момент. Времени()).
Структура документа В V 8 у документов может быть несколько табличных частей, различных по структуре
Экранные формы документа Документ может иметь несколько экранных форм, некоторые из которых назначаются в качестве основных Если какая то из основных форм не была создана разработчиком, то система сгенерирует нужную форму «на лету» , когда в ней возникнет необходимость
(продолжение) Замечание. У экранных форм могут быть собственные реквизиты.
Макеты документов Макеты документа предназначены для формирования его печатных форм, которые могут быть показаны на экране и напечатаны на принтере. У документа может быть несколько печатных форм, поэтому и макетов может быть несколько
Проведение документов изменяет состояние регистров. При проведении документа вызывается процедура обработчик события Обработка. Проведения, в которой определяются все действия данного документа на встроенном языке. Обработчик располагается в модуле объекта. Все процедуры обработчики событий модуля вызываются при наступлении указанных событий независимо от того, как они были инициированы: программно или интерактивно
Проведение документов. Закладка «Движения» На закладке «Движения» задаются основные параметры проведения документа. Алгоритм процедуры Обработка. Проведения может быть сформирован с использованием Конструктора движений.
Выбор регистров, участвующих в движениях документа В списке регистров нужно выбрать только те регистры, по которым данный документ может делать движения. Не стоит отмечать все регистры подряд, так как это может отрицательно сказаться на производительности. В этом списке должны быть помечены только те регистры, по которым документ действительно может делать движения. Замечание. Не снимайте флажок напротив регистра, если вы точно не уверены, что делаете. При снятии флажка и реструктуризации базы данных все существующие движения документа по этому регистру будут уничтожены! Даже если вы вновь установи те флажок, движения по регистру не восстановятся, и потребуется перепроведение документов или повторный ввод движений, если движения были введены вручную.
Проведение документов(продолжение) « Оперативное проведение» . При таком проведении можно контролировать текущие остатки регистров, например, при проведении расходной накладной нужно проверить, достаточно ли товара на складе. При проведении документа «задним числом» используется неоперативное проведение, при котором в конфигурации не должно быть обращений к текущим итогам регистров. Процедура Обработка. Проведения(Отказ, Режим) //проверка остатка производится только при оперативном проведении Если Режим = Режим. Проведения. Документа. Оперативный Тогда Если Остаток. На. Складе < Строка. Состава. Количество Тогда Сообщить("Товара " + Сокр. ЛП(Строка. Состава. Номенклатура) + " имеется только " + Остаток); Отказ = Истина; Возврат; Конец. Если; ……. . Конец. Процедуры
Проведение. Вопрос1 Назовите действия системы при попытке провести документ?
Проведение. Ответ 1 Замечание. При определении правила проведения учитываются следующие обстоятельства: • Наличие разрешения на оперативное проовелдение • Текущая дата • Дата документа • Является ли данный документ вновь создаваемым, или он перепроводится после корректировки Система запросит подтверждение проведения документа в неоперативном режиме или отмены действия, т. к. для него разрешено оперативное проведение, он не проведен и дата меньше текущей даты
Проведение. Вопрос2 Назовите действия системы при попытке провести документ?
Проведение. Ответ 2 Система откажется проводить документ, т. к. для него разрешено оперативное проведение, а дата больше текущей даты
Проведение. Вопрос3 Назовите действия системы при попытке провести документ?
Проведение. Ответ 3 Система, безусловно, проведет документ в оперативном режиме, т. к. для него разрешено оперативное проведение, но он не проведен и дата равна текущей дате (с точностью до дня)
Проведение. Вопрос4 Назовите действия системы при попытке провести документ?
Проведение. Ответ 4 Т. к. для документа разрешено оперативное проведение, он проведен и дата равна текущей дате (с точностью до дня), то система задаст вопрос о режиме проведения ( «Оперативный» , «Неоперативный» ) и в зависимости от выбора пользователя проведет документ
Модуль документа В модуле , кроме обработчиков событий, могут располагаться процедуры и функции, созданные разработчиком. Если их объявить с ключевым словом Экспорт, то они станут доступными вне документа, как обычные методы. Например, процедура печати расходной накладной приведена в модуле документа Процедура Печать(Таб. Док) Экспорт … Конец. Процедуры В форме документа по кнопке «Печать» вызывается следующая процедура: Процедура Печать. СПросмотром(Кнопка) Таб. Док = Новый Табличный. Документ; Печать(Таб. Док); //вызывается приведенная выше процедура Таб. Док. Показать(); Конец. Процедуры
Модуль документа (продолжение) Аналогично, можно организовать печать текущей расходной накладной из журнала документов, и снова будет вызвана наша процедура Печать из модуля документа, например: Процедура Печать. Текущего. Документа() Список = Элементы. Формы. Список; Если Список. Текущая. Строка = Неопределено Тогда Возврат; Конец. Если; Тек. Документ = Список. Текущая. Строка. Получить. Объект(); Таб. Док = Новый Табличный. Документ; Тек. Документ. Печать(Таб. Док); Таб. Док. Показать(); Конец. Процедуры
Приемы программирования
1. Обращение к менеджеру документа Док. Счет = Документы. Счет; Док. Счет = Документы["Счет"]; Замечание. С помощью ключевого слова Новый нельзя создавать новые документы. Для этого предназначен метод Создать. Документ. Пример: Док. Менеджер = Документы. Счет; Новый. Док = Док. Менеджер. Создать. Документ(); //при создании документа программным способом //дата документа не заполняется системой, //это должен сделать разработчик Новый. Док. Дата = Дата; Новый. Док. Записать();
2. Выборка документов осуществляется с помощью метода Выбрать (<Дата начала>, <Дата окончания>, <0 тбор>, <Порядок>) Отбор: структура, которая задает поле и значение отбора открываемой выборки Пример 1. Док. Выборка = Документы. Счет. Выбрать(); Пока Док. Выборка. Следующий() Цикл Сообщить("№ " + Док. Выборка. Номер + " от " + Док. Выборка. Дата); //перебор строк табличной части Для Каждого стр Из Док. Выборка. Состав Цикл Сообщить(" " + стр. Номенклатура); Конец. Цикла;
2. Выборка документов(продолжение) Пример 2 ( с отбором) Отбор = Новый Структура("Контрагент", Выб. Контрагент); Док. Выборка = Документы. Счет. Выбрать(Нач. Дата, Кон. Дата, Отбор, "Сумма. Документа Убыв") Пока Док. Выборка. Следующий() Цикл … Конец. Цикла;
3. Программное проведение документа выполняется с помощью метода Записать с параметрами. Пример: Новый. Док = Документы. Счет. Создать. Документ(); Новый. Док. Дата = Дата, … Новый. Док. Записать(); //обычная запись документа //запись документа с неоперативным проведением Новый. Док. Записать(Режим. Записи. Документа. Проведение, Режим. Проведения. Документа. Неоперативный); Параметр «Режим. Записи. Документа» : • Запись (по умолчанию), • Отмена. Проведения, • Проведение (в этом случае имеет смысл указывать второй параметр). Параметр «Режим. Проведения. Документа» : • Неоперативный (по умолчанию),
4. Поиск документа Док. Ссылка = Документы. Счет. Найти. По. Номеру("Сч1001"); Если Док. Ссылка. Пустая() Тогда Сообщить("Документ с данным номером не найден!"); Конец. Если; Дополнительно: Найти. По. Реквизиту(<Имя реквизита>, <Значение реквизита>) Замечание. У реквизита, по которому производится отбор, должен быть установлен в Конфигураторе флажок «Индексировать»
5. Удаление документа Док. Ссылка = Документы. Счет. Найти. По. Номеру("Сч1001"); Если Не Док. Ссылка. Пустая() Тогда Док. Объект = Док. Ссылка. Получить. Объект(); //1 -й вариант пометки на удаление //если документ был проведен, то он остается проведенным (!) //движения документа по регистрам сохраняются (!) Док. Объект. Пометка. Удаления = Истина; Док. Объект. Записать(); //2 -й вариант пометки на удаление //если документ был проведен, то он делается непроведенным //движения документа, по регистрам удаляются Док. Объект. Установить. Пометку. Удаления(Истина); //непосредственное удаление объекта //если документ был проведен, то движения по регистрам удаляются Док. Объект. Удалить(); Конец. Если;
Замечание. присвоении свойству Пометка. Удаления значения Истина для проведенного документа возникает ошибка «Проведенный документ не может быть помечен на удаление» . При непосредственном удалении документа контроль за удалением движений документа возлагается на разработчика.
6. Открытие форм документа Часто требуется программно открыть какую либо форму документа. //открытие формы по имени Док. Получить. Форму("Основная. Форма"). Открыть(); //открытие формы для нового документа Документы. Счета. Получить. Форму. Нового. Документа(). Отк рыть(); //открыть основную форму списка документов Форма = Документы. Счета. Получить. Форму. Списка(); Форма. Открыть(); //открыть форму для выбора документа из списка //текущая форма будет являться владельцем для открываемой формы Форма = Документы. Счета. Получить. Форму. Выбора(, Эта. Форма); //открыть форму или активизировать уже открытую форму Форма. Открыть();
7. Работа с табличным частями Обращение к табличным частям документа производится по их именам. Для обхода строк табличной части рекомендуется применять конструкцию «Для Каждого. . . » . //для каждой строки сформируем движения //по регистру остатков Учет. Номенклатуры Для Каждого Строка. Состава Из Состав Цикл Движение = Движения. Учет. Номенклатуры. Добавить. Приход(); Движение. Период = Дата; Движение. Номенклатура = Строка. Состава. Номенклатура; Движение. Склад = Склад; Движение. Количество = Строка. Состава. Количество; Конец. Цикла; Движения. Учет. Номенклатуры. Записать();
V8_6_Документы.ppt