|
Работа в 1С 17
ПриЗаписи() – вызов предопределенной процедуры ПриЗаписи() производится в системе 1С:Предприятие при интерактивной записи документа. Если в данной предопределенной процедуре установить статус возврата – 0 (например, если данному пользователю нельзя изменять реквизиты документа), запись документа не будет выполнена. ПриНачалеРедактированияСтроки() – вызов предопределенной процедуры производится в системе 1С:Предприятие в момент начала интерактивного редактирования существующей строки многострочной части документа. Если в данной предопределенной процедуре установить статус возврата – 0 (например, если данному пользователю нельзя изменять документ), то запись не будет изменена. ПриВводеСтроки() – вызов предопределенной процедуры производится в системе 1С:Предприятие при интерактивном вводе новой строки многострочной части документа. Если в данной предопределенной процедуре установить статус возврата – 0 (например, если данному пользователю нельзя изменять документ), то новая строка не будет инициирована. ПриРедактированииНовойСтроки() – вызов предопределенной процедуры производится в системе 1С:Предприятие в момент начала интерактивного редактирования новой строки многострочной части документа. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов строки табличной части документа. В данной предопределенной процедуре установка статуса возврата не имеет смысла, т. к. отказаться от ввода новой строки в этот момент уже невозможно. ПриОкончанииРедактированияСтроки(<НовСтр>) – вызов предопределенной процедуры производится в системе 1С:Предприятие в момент окончания интерактивного редактирования строки многострочной части документа. Данная процедура может использоваться, например, для проверки значений (по умолчанию) реквизитов строки табличной части документа. В данной предопределенной процедуре установка статуса возврата не имеет смысла, т. к. отказаться от ввода строки в этот момент уже невозможно. Параметры: <НовСтр> – флаг новой строки. Число: 1 – если произошло окончание ввода новой строки, 0 – если произошло окончание редактирования существующей строки. ПриУдаленииСтроки() – вызов предопределенной процедуры производится в системе 1С:Предприятие при интерактивном удалении строки многострочной части документа. Если в данной предопределенной процедуре установить статус возврата – 0 (например, если данному пользователю нельзя изменять документ), удаление строки документа не будет выполнено. ПриИзмененииПорядкаСтрок(<Действие>) – вызов предопределенной процедуры производится в системе 1С:Предприятие при интерактивном изменении порядка строк многострочной части документа (перемещения строк вверх–вниз, перенумерация, сортировка). Если в данной предопределенной процедуре установить статус возврата – 0 (например, если данному пользователю нельзя изменять документ), изменении порядка строк документа не будет выполнено Параметры: <Действие> – число: –1 – перемещение строки вверх; 1 – перемещение строки вниз; 0 – перенумерация строк. Предопределенные методы модуля документа (должны располагаться только в Модулях документа) ОбработкаПроведения(<3нач>) – вызов процедуры производится в системе 1С:Предприятие неявно при выполнении проведения документа в любом режиме (интерактивное проведение документа, групповое проведение, программная инициализация проведения при помощи метода Провести()). Если проведение документа запущено программно, то система подставляет фактическое значение параметра <3нач>, содержащее значение параметра, заданного при вызове метода Провести(). Параметры: <3нач> – необязательный параметр. Идентификатор переменной, в которую системой будет передано значение параметра, если проведение документа запущено программно при помощи метода Провести(). Использовать данное значение можно, например, для того, чтобы в процедуре ОбработкаПроведения() правильно отработать режим проведения, т. к. в случае вызова метода Провести это будет программный, а не интерактивный и не групповой способ проведения документа. ОбработкаУдаленияПроведения() – вызов процедуры производится в системе 1С:Предприятие неявно при отмене проведения документа или при удалении проведенных документов в любом режиме – интерактивно или программно. 5.5 Создание и проведение документа Новый документ в системе 1С можно ввести различными методами: 1. Вариант первый. Пользователь выбирает пункт меню Документы и в подменю щелкает по названию необходимого документа. Что происходит дальше. Документу присваивается номер, устанавливаются дата, начинается обработка операторов предопределенной процедуры модуля формы документа ВводНового(), после чего открывается экранная форма с вызовом процедуры ПриОткрытии(). Новый документ создается в памяти, а для того, чтобы он был записан в базу, необходимо нажать кнопку Записать . 2. Разновидностью этого варианта является создание документа из открытой формы журнала документов. Второй вариант предполагает создание нового документа путем копирования такого же с помощью кнопки . При копировании документу присваивается новый номер, а все реквизиты заполняются данными из скопированного документа. Вот почему, если в процедуре ВводНового() вы заполняете некоторые реквизиты при создании нового документа, то необходимо в начале этой процедуры задать проверку факта копирования, для того, чтобы не сбить значения реквизитов. 3. При третьем варианте новый документ создается на основании существующего документа другого вида с помощью кнопки . В такой ситуации вместо процедуры ВводНового() будет вызвана предопределенная процедура ВводНаОсновании(). В ней нужно описать, какие реквизиты нового документа будут заполнены значениями из документа–основания. Естественно, что заполняемые реквизиты нового документа должны иметь тот же тип, что и соответствующие реквизиты–источники. Пример заполнения расходной накладной на основании счета: Процедура ВводНаОсновании(ДокОсн) РасчетныйСчет = ДокОсн.РасчетныйСчет; МестоХранения = глЗначениеПоУмолчанию("ОсновнойСклад"); Контрагент = ДокОсн.Контрагент; Договор = ДокОсн.Договор; ВариантРасчетаНалогов = ДокОсн.ВариантРасчетаНалогов; ДокОсн.ВыбратьСтроки(); Пока ДокОсн.ПолучитьСтроку() = 1 Цикл
КонецЦикла; КонецПроцедуры При вызове процедуры происходит установка значений некоторых полей и флажков накладной значениями из счета. Сначала мы заполнили реквизиты шапки, а затем организовали цикл считывания строк табличной части счета операторами ВыбратьСтроки() и ПолучитьСтроку(). В этом же цикле на каждую строку основания вводится и заполняется новая строка накладной (команда НоваяСтрока()). Доступ к реквизитам счета осуществляется через переменную ДокОсн, которая является параметром процедуры. Как мы помним, в неё передается контекст документа–основания. 4. Программный способ – для него в языке 1С предусмотрены специальные команды. Можно при записи расходной накладной сформировать документ СчетФактура: Док = СоздатьОбъект("Документ.ПриказОПриеме"); Док.Новый(); Док.НомерДок = НомерДок; // Счет–фактура будет с тем же номером и датой, что и Док.ДатаДок = ДатаДок; // накладная. Но так можно и не делать, есть же автонумерация ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл
КонецЦикла; Док.Записать(); Док.Провести(0, "Программно"); Обратите внимание, что сначала создается документ как объект, а затем вводится новый документ. Последующие действия похожи на действия при вводе на основании. Не забудьте, если вы создаете или изменяете документ программно, его необходимо записывать. И пожалуйста, не пытайтесь использовать метод Провести() в теле предопределенной процедуры ОбработкаПроведения() модуля документа! Проведение документа Оператор Провести() в приведенном выше примере выполнит проведение документа. При проведении будет вызвана предопределенная процедура ОбработкаПроведения(). Вторым реквизитом передается в обработку проведения значение ("Программно"), по которому процедура ОбработкаПроведения() узнает о программном выполнении проведения. Это может быть простая строка или число, её задача – только обозначить факт программного проведения. Если вы работаете с уже существующим документом, то метод Провести() перепроведет документ. А с помощью метода Проведен() можно узнать, проведен ли какой–либо документ: Если Док.Проведен() > 0 Тогда
КонецЕсли; Транзакции При создании множества документов или для ускорения работы можно заключить цикл в транзакцию. При этом реальная запись документов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции блокируется для других пользователей запись и проведение документов. СписаниеМатериалов = СоздатьОбъект("Документ.ТребованиеНакладаная"); НачатьТранзакцию(); Для Ном = 1 По 100 Цикл
КонецЦикла; ЗафиксироватьТранзакцию(); Предопределенная процедура ОбработкаПроведения() самостоятельно открывает транзакцию для проведения, однако есть маленькая особенность документа, созданного функцией СоздатьОбъект(). Дело в том, что про программном проведении созданных документов не выполняется автоматическая предварительная запись, и для того, чтобы при любых сбоях и ошибках сохранялась согласованность данных документа и его движений (операций) следует объединять запись и проведение документа в одну транзакцию. 5.6 Создание программного модуля документа и формы документа В приказе о приеме возможно одним приказом принять на работу целый ряд сотрудников, поэтому желательно после ввода каждой строки табличной части данного документа проводить проверку вводимых данных, чтобы не накапливать ошибки. В модуле формы документа ПриказОПриеме создадим предопределенную процедуру: Процедура ПриОкончанииРедактированияСтроки()
КонецПроцедуры Кроме того, при обработке проведения, то есть в момент пуска приказа в дело, необходимо добавить сотрудников из приказа в справочник Сотрудники. Для этого в модуле документа создадим предопределенную процедуру: Процедура ОбработкаПроведения()
КонецПроцедуры Сохраните конфигурацию и запустите 1С в режиме Предприятие. Создайте документ ПриказОПриеме и введите там двух человек в разные подразделения. При вводе проверьте реакцию программы на неверные данные. Обратите внимание, что после сохранения и проведения документа в справочнике Сотрудники добавились новые записи. При проведении документа есть одна тонкость: если открыть проведенный приказ, что–либо там поменять и сохранить с перепроведением, то в справочнике окажутся и новые данных и старые. Поэтому если необходимо изменить приказ (например, исправить неверно внесенную фамилию), лучше разрешать изменение только непроведенных приказов, то есть проведенные приказы отрывать только для чтения. Чтобы изменить приказ, необходимо отменить проведение приказа (пункт Сделать документ не проведенным меню Действия при активном окне журнала документов в режиме Предприятие). При отмене проведения необходимо удалить сотрудников, добавленных в справочник по этому приказу. Для этого служит предопределенная процедура ОбработкаУдаленияПроведения() модуля документа. Запрограммируем ее: Процедура ОбработкаУдаленияПроведения()
КонецПроцедуры Теперь запрограммируем, чтобы проведенный документ открывался только для чтения. Для этого в окне диалога дважды щелкните мышью на кнопке ОК и в появившемся окне установить свойство Идентификатор равным ОК (это необходимо, чтобы можно было обратиться к кнопке из программного модуля). В модуле формы документа создадим предопределенную процедуру при открытии: Процедура ПриОткрытии()
КонецПроцедуры Сохраните конфигурацию и запустите 1С в режиме Предприятие. Обратите внимание, что при проведении документа в справочнике Сотрудники появляются новые записи, а при отмене проведения они исчезают, изменять можно только непроведенные приказы. В приказе об увольнении также возможно одним приказом уволить целый ряд сотрудников, поэтому желательно после ввода каждой строки табличной части данного документа проводить проверку вводимых данных, чтобы не накапливать ошибки. |
Loading
|