Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на платформе 1С Предприятие 8.3. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
5.2. Проведение документа
71
Рис. 5.2. Настройка нумерации документа
Не интерфейсные реквизиты доступны только средствами встроен-
ного языка. К ним относятся следующие.
1. ПометкаУдаления – Истина, если документ помечен на удаление
Ложь в противном случае.
2. Проведен – Истина, если документ проведён и Ложь в противном
случае.
5.2. Проведение документа
Проведение документа – процесс занесения описываемых им дей-
ствий в информационную базу, после которого изменяется состояние ее учетных механизмов. К учетным механизмам относятся регистры накопле­ния, расчета и бухгалтерские регистры.
Документ может находиться в одном из трех состояний.
1. Записан, но не проведен – рабочий документ, который является не-
завершенным, находится в состоянии разработки. Этот документ никак не влияет на учетные механизмы системы.
2. Проведен – действия, описываемые документом, занесены в учет-
ные механизмы. Такой документ отработан, и изменить его уже нельзя. Для изменения нужно отменить проведение, внести изменения, опять провести документ.
5. Документы
72
3. Помечен на удаление – документ не проведен и подготовлен к уда-
лению при помощи пункта меню Удаление помеченных объектов.
На рис. 5.3 изображен фрагмент журнала документов.
Рис. 5.3. Фрагмент журнала документов
Здесь присутствуют документы в каждом из перечисленных состоя­ний. Документы с номерами 1 и 2 проведены. Документ ЦБ000000001 за­писан, но не проведен, а документ ЦБ000000002 помечен на удаление.
Для отработки действий, выполняемых при проведении документа, предназначен модуль документа. В нем могут быть размещены две пред­определенные процедуры: ОбработкаПроведения и ОбработкаУдале­нияПроведения.
Проведение документа фактически означает выполнение процедуры ОбработкаПроведения, которая и должна выполнять запись в учетные меха­низмы. Записи в регистры, выполненные при проведении документа, назы­ваются движениями регистра. Каждое движение регистра имеет ссылку на записавший его документ, который называется регистратором. Наличие та­кой ссылки позволяет выделить из общего потока движений регистра только те движения, которые созданы конкретным документом-регистратором.
В случае отмены проведения необходимо откатить обратно все дей­ствия, которые выполнила процедура ОбработкаПроведения и ликвидиро­вать движения, созданные данным документом в регистрах.
Возможны два варианта обработки отмены проведения: удалять ав­томатически (используется по умолчанию) и не удалять автоматически. Ре­жим настраивается в свойствах документа на вкладке Движения, которая изображена на рис. 5.4.
5.2. Проведение документа
73
Рис. 5.4. Вкладка Движения окна свойств документа
Режим автоматического удаления движений означает, что при от­мене проведения система сама найдет все движения регистров, принадле­жащие данному документу как регистратору. После чего удалит эти дви­жения из регистров.
Режим не удалять автоматически движения используется тогда, ко­гда автоматическое движение либо не подходит, либо его недостаточно. В этом случае отмену проведения нужно реализовать вручную. Для зада­ния механизма обработки отмены проведения в модуле документа предна­значена процедура ОбработкаУдаленияПроведения.
Существует два режима проведения:
оперативное – документ проводится в реальном времени;
неоперативное – проведение документа отражает уже свершив-
шийся факт.
Оперативное проведение в реальном времени необходимо, когда ввод и проведение документа не просто фиксируют в системе произошед-
5. Документы
74
шее событие, а участвуют в его формировании, помогая оператору пра­вильно ввести информацию. Это имеет смысл только в тот момент, когда данное событие происходит в реальной жизни.
Например, продажа товара со склада или в торговом зале, когда
нужно проверить наличие достаточного количества товара и запретить про­дажу одной и той же единицы товара разными продавцами.
Неоперативное проведение – в момент проведения известно, что со-
бытие уже произошло, документ проводится без каких-либо проверок. Например, в торговом зале нет электричества, но работа идет, продавцы про­дают товар и фиксируют проданное количество на бумажном носителе. По­сле появления электричества оформляются документы продажи, которые проводятся в неоперативном режиме и фиксируют уже свершившийся факт.
Возможны следующие варианты проведения документов.
1. Неоперативно всегда.
2. Оперативно всегда.
3. Автоматически – если дата документа раньше текущей, выполня-
ется неоперативное проведение, если равна текущей – оперативное.
5.3. Последовательности документов
Алгоритм проведения документов, как правило, основывается на
данных, введенных в самом документе. Однако в некоторых случаях он ос­новывается еще и на текущих значениях итогов регистров. Например, ал­горитм списания товаров со склада зависит от их количества на складе.
Документы, проведение которых зависит от значений итогов,
должны проводиться строго последовательно. В реальной жизни возможны ошибки, которые ведут к исправлениям и перепроведению документов зад­ним числом. После перепроведения документа и изменения движения ре­гистров задним числом, движения всех уже проведенных после этого мо­мента времени документов могут оказаться неверными, что требует их пе­репроведения.
Для автоматического контроля необходимости перепроведения до-
кументов используются специальные объекты конфигурации – последо­вательности (ветвь Документы – Последовательности). Последователь­ность предназначена для отслеживания границы последовательности,
5.3. Последовательности документов
75
т.е. момента времени, до которого отслеживаемые с ее помощью доку­менты проведены верно, а после – требуют перепроведения. Основное окно свойств последовательности изображено на рис. 5.5. Оно состоит из двух списков.
1. Входящие документы – список документов, проведение которых
отслеживается данной последовательностью.
2. Движения, влияющие на последовательность – перечень реги-
стров, движения которых изменяют границу последовательности.
Рис. 5.5. Окно свойств последовательности
Границу последовательности могут изменять не только движения указанных регистров, но и проведение входящих в нее документов. Если в поле Перемещать границы при проведении указано Перемещать (по умол­чанию), то документы последовательности будут пытаться установить гра­ницу на момент их проведения. Если задано Не перемещать – документы передвигать границу не будут.
5. Документы
76
Рассмотрим случай, когда документы перемещают границу последо-
вательности. Возможны три варианта взаимодействия документа и гра­ницы последовательности.
Вариант 1. Нормальная ситуация – последовательное проведение
документов.
Граница последовательности совпадает с позицией последнего про-
веденного документа. Следующий документ, входящий в последователь­ность, проводится позже, чем установлена граница. Граница будет переме­щена на момент этого документа. Эта ситуация изображена на рис. 5.6. Начальная граница последовательности изображена на нем аббревиатурой ГП1, а конечная граница – ГП2.
Рис. 5.6. Вариант 1 изменения границы последовательности
Вариант 2. Аномальная ситуация – нарушение последовательного
проведения документов.
Возникает в случае проведения некоторого документа задним чис-
лом. Это приводит к смещению границы последовательности назад по шкале времени на момент проведения такого документа. Между смещен­ной назад границей и текущим моментом времени могут оказаться уже про­веденные документы, проведение которых становится не корректным. Для исправления этой ситуации потребуется перепроведение всех таких доку­ментов. Эта ситуация изображена на рис. 5.7.
Рис. 5.7. Вариант 2 изменения границы последовательности
ГП1
ГП2
5.4. Ввод документов на основании
77
Вариант 3. Развитие аномального варианта.
Вытекает из второго варианта, если перепроведение документов не было выполнено. Ситуация изображена на рис. 5.8. «Правильная» ГП должна располагаться на оси в том месте, куда указывает стрелка проводи­мого документа, однако, поскольку перепроведение выполнено не было, ГП будет располагаться на оси времени там же, где и ГП1.
Рис. 5.8. Вариант 3 изменения границы последовательности
5.4. Ввод документов на основании
Ввод на основании означает заполнение вновь создаваемого доку­мента данными из некоторого документа-основания, который уже содер­жит большую часть данных, требуемых для заполнения полей нового до­кумента.
Например, счет на оплату сборки компьютера содержит перечень комплектующих, входящих в собираемый компьютер. Все последующие документы, отражающие прохождение этапов сборки, вплоть до выдачи го­тового компьютера заказчику, содержат тот же самый перечень комплек­тующих, которые могут быть скопированы из первоначального счета.
Для реализации ввода на основании следует выполнить 2 шага.
1. В окне свойств документа на вкладке Ввод на основании задать пе-
речень документов, на основании которых может вводиться данный доку­мент. Здесь же задается список документов, основанием для которых мо­жет служить данный документ.
2. В модуле документа создается предопределенная процедура Обра-
боткаЗаполнения, которая вызывается при вводе документа на основании. Ее задача – проверить, на основании какого документа выполняется ввод и выполнить заполнение реквизитов документа требуемыми значениями.
5. Документы
78
Описание процедуры имеет следующий вид. Процедура ОбработкаЗаполнения(ДанныеЗаполнения, Стандарт-
наяОбработка)
ДанныеЗаполнения – ссылка на объект, на основании которого вы-
полнен ввод. По ней и следует определить вид документа-основания.
СтандартнаяОбработка – необязательный флаг выполнения стан-
дартной обработки (по умолчанию – Истина).
Пример.
Процедура ОбработкаЗаполнения(ДЗ,СО)
Если ТипЗнач(ДЗ)=Тип(ДокументыСсылка.Лекция) Тогда
ЗапНаОснЛекции(ДЗ)
КонецЕсли КонецПроцедуры Процедура ЗапНаОснЛекции(Лек)
//Собственно заполнение через ссылку Лек
Предмет=Лек.Предмет;
. . . КонецПроцедуры
5.5. Примеры работы с документами
В этом разделе приведены различные варианты обработки докумен-
тов средствами встроенного языка.
Создание документа
&НаКлиенте Процедура СоздатьНовыйДокумент()
Если СоздатьНовыйДокументНаСервере() = 0 Тогда
Сообщить("Не удалось создать новый документ");
КонецЕсли; КонецПроцедуры &НаСервере
Функция СоздатьНовыйДокументНаСервере()
НоваяРН=Документы.РасходнаяНакладная.СоздатьДоку-
мент();
5.5. Примеры работы с документами
79
//Заполняем реквизиты шапки НоваяРН.Дата= ТекущаяДата(); НоваяРН.Фирма=Справочники.Фирмы.ОсновнаяФирма; НоваяРН.Контрагент=Справочники.Контрагенты.НайтиПо-
Коду ("000000001");
НоваяРасходнаяНакладная.Склад=Справочники.Склады.Ос-
новнойСклад;
//Заполняем табличную часть СтрокаТЧ=НоваяРасходнаяНакладная.ТЧТовары.Добавить(); СтрокаТЧ.Товар=Справочники.Номенклатура.НайтиПоКоду
("000000002");
СтрокаТЧ.Цена=СтрокаТЧ.Товар.РозничнаяЦена; СтрокаТЧ.Количество= 2; СтрокаТЧ.Сумма=СтрокаТЧ.Цена*СтрокаТЧ.Количество; Попытка
НоваяРН.Записать(); Возврат 1;
Исключение
Возврат 0;
КонецПопытки;
КонецФункции
Удаление документа.
&НаКлиенте // Режим = 1 – пометка удаления, 0 – непосредственное удаление Процедура УдалитьДокумент(Режим)
УдалитьДокументНаСервере(Режим); КонецПроцедуры &НаСервере Процедура УдалитьДокументНаСервере(ПометкаУдаления)
УдаляемыйДокумент=Документы.РасходнаяНакладная.НайтиПо-
Номеру ("000000004");
Если ПометкаУдаления= 1 Тогда
УдаляемыйДокумент.ПолучитьОбъект(). УстановитьПометкуУ-
даления (Истина);
5. Документы
80
Иначе
УдаляемыйДокумент.ПолучитьОбъект().Удалить();
КонецЕсли;
КонецПроцедуры
Перебор табличной части документа
&НаКлиенте Процедура ПеребратьТабличнуюЧасть()
Для Каждого СтрокаТЧ ИЗ Объект.ТЧТовары Цикл Сообщить(СтрокаТЧ.Номенклатура); КонецЦикла; КонецПроцедуры
Поиск в табличной части документа
Для поиска необходимого значения воспользуемся функцией Найти Строки (). Ее можно использовать не только в табличной части документа, но и в таблице значений.
&НаСервере
ПроцедураНайтиТовар(СправочникНоменклатураСсылка)
Отбор=НовыйСтруктура();
Отбор.Вставить("Номенклатура", СправочникНоменклатураС- сылка);
НайденноеЗначение=ТЧНоменклатура.НайтиСтроки(Отбор);
Для Сч=1 По НайденноеЗначение.Количество() Цикл
Сообщить(НайденноеЗначение[Сч].Наименование);
КонецЦикла;
КонецПроцедуры
Контрольные вопросы
1. Для чего используются документы?
2. Приведите пример хозяйственных операций, которые должны
быть отражены документами?
3. Для чего предназначены журналы документов?
4. Сколько документов может быть зарегистрировано в журнале до-
кументов?
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]