Центральный Дом Знаний - Работа в 1С 17

Информационный центр "Центральный Дом Знаний"

Заказать учебную работу! Жми!



ЖМИ: ТУТ ТЫСЯЧИ КУРСОВЫХ РАБОТ ДЛЯ ТЕБЯ

      cendomzn@yandex.ru  

Наш опрос

Как Вы планируете отдохнуть летом?
Всего ответов: 903

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Форма входа

Логин:
Пароль:

Работа в 1С 17

Работа в программе 1С

стр.: 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32
33  34  35  36  37  38  39  40  41  42  43  44  45  

ПриЗаписи() – вызов предопределенной процедуры ПриЗаписи() производится в системе 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 Создание программного модуля документа и формы документа

В приказе о приеме возможно одним приказом принять на работу целый ряд сотрудников, поэтому желательно после ввода каждой строки табличной части данного документа проводить проверку вводимых данных, чтобы не накапливать ошибки. В модуле формы документа ПриказОПриеме создадим предопределенную процедуру:

Процедура ПриОкончанииРедактированияСтроки()

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

// ищем такую ФИО в справочнике Сотрудники

Сотр.НайтиПоНаименованию(ФИО, 0, 1);

// проверяем, чтобы ФИО не было пустой строкой

Если ПустаяСтрока(ФИО)=1 Тогда

Предупреждение("Не введено ФИО");

СтатусВозврата(0);

// если такая ФИО найдена в справочнике Сотрудники, выдаем сообщение

ИначеЕсли (Сотр.Выбран()=1) Тогда

Предупреждение("Сотрудник с таким ФИО уже имеется в справочнике");

СтатусВозврата(0);

// если не заполнено поле должность (из справочника)

ИначеЕсли Должность.Выбран()=0 Тогда

Предупреждение("Не заполнено поле Должность");

СтатусВозврата(0);

// если не заполнено поле подразделение (из справочника)

ИначеЕсли Подразделение.Выбран()=0 Тогда

Предупреждение("Не заполнено поле Подразделение");

СтатусВозврата(0)

// если выбранное подразделение не является группой

ИначеЕсли Подразделение.ЭтоГруппа()=0 Тогда

Предупреждение("Не верно задано подразделение");

СтатусВозврата(0);

// если оклад <=0

ИначеЕсли Оклад<=0 Тогда

Предупреждение("Поле Оклад должно быть больше 0");

СтатусВозврата(0);

// если дата приема не задана

ИначеЕсли (ДатаПриема='00.00.00') Тогда

Предупреждение("Дата приема не задана");

СтатусВозврата(0);

КонецЕсли;

КонецПроцедуры

Кроме того, при обработке проведения, то есть в момент пуска приказа в дело, необходимо добавить сотрудников из приказа в справочник Сотрудники. Для этого в модуле документа создадим предопределенную процедуру:

Процедура ОбработкаПроведения()

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

// делаем выборку по строкам документа

ВыбратьСтроки();

// пока строки в документе есть

Пока ПолучитьСтроку()=1 Цикл

// сотрудник будет добавляться в группу, заданную

// полем подразделение

Сотр.ИспользоватьРодителя(Подразделение,0);

// создаем новый элемент справочника

Сотр.Новый();

// заполняем поля

Сотр.Наименование=ФИО;

Сотр.Должности=Должность;

Сотр.Оклад=Оклад;

Сотр.ДатаПриема=ДатаПриема;

// записываем

Сотр.Записать();

КонецЦикла;

КонецПроцедуры

Сохраните конфигурацию и запустите 1С в режиме Предприятие. Создайте документ ПриказОПриеме и введите там двух человек в разные подразделения. При вводе проверьте реакцию программы на неверные данные. Обратите внимание, что после сохранения и проведения документа в справочнике Сотрудники добавились новые записи.

При проведении документа есть одна тонкость: если открыть проведенный приказ, что–либо там поменять и сохранить с перепроведением, то в справочнике окажутся и новые данных и старые. Поэтому если необходимо изменить приказ (например, исправить неверно внесенную фамилию), лучше разрешать изменение только непроведенных приказов, то есть проведенные приказы отрывать только для чтения. Чтобы изменить приказ, необходимо отменить проведение приказа (пункт Сделать документ не проведенным меню Действия при активном окне журнала документов в режиме Предприятие). При отмене проведения необходимо удалить сотрудников, добавленных в справочник по этому приказу. Для этого служит предопределенная процедура ОбработкаУдаленияПроведения() модуля документа. Запрограммируем ее:

Процедура ОбработкаУдаленияПроведения()

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

// делаем выборку по строкам документа

ВыбратьСтроки();

// пока строки в документе есть

Пока ПолучитьСтроку()=1 Цикл

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

Сотр.НайтиПоНаименованию(ФИО,0,1);

Если Сотр.Выбран()=1 Тогда

// удаляем

Сотр.Удалить(1);

КонецЕсли;

КонецЦикла;

КонецПроцедуры

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

Процедура ПриОткрытии()

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

// найти открываемый (текущий) документ

// оператор Попытка исключит выполнения дальнейших действий,

// если создается новый приказ

Попытка

Если Док.НайтиДокумент(ТекущийДокумент())=1 Тогда

// если он проведен

Если Док.Проведен()=1 Тогда

// открыть форму только для чтения

Форма.ТолькоПросмотр(1);

// сделать недоступной кнопку ОК

Форма.ОК.Доступность(0);

КонецЕсли;

КонецЕсли;

Исключение

КонецПопытки;

КонецПроцедуры

Сохраните конфигурацию и запустите 1С в режиме Предприятие. Обратите внимание, что при проведении документа в справочнике Сотрудники появляются новые записи, а при отмене проведения они исчезают, изменять можно только непроведенные приказы.

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

Loading

Календарь

«  Июль 2019  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031

Архив записей

Друзья сайта

  • Заказать курсовую работу!
  • Выполнение любых чертежей
  • Новый фриланс 24