Mishki-tomsk.ru

Мода и стиль
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Первичная документация

Первичная документация

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

Что такое первичная документация и как с нею работать: расскажем о тонкостях создания, обработки и хранения «первички».

Что такое «первичные документы»

В федеральном законе 402-ФЗ «О бухучете» описаны все бухгалтерские и первичные документы. Они нужны, в основном, для налоговой — как документы, которые подтверждают понесенные вами расходы и правильность определения налоговой базы.

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

Формально организация может уничтожить первичку через пять лет. Но согласно разъяснениям Росархива, первичку с истекшим сроком хранения можно уничтожить только после того, как ее проверит налоговая и другие контролирующие органы, а также аудиторы (письмо Росархива от 26.03.2020 № 7/905).Документы первичного учета составляются в момент осуществления хозяйственных операций и свидетельствуют об их совершении. Список документов, сопровождающих ту или иную сделку, в зависимости от типа сделки может быть разным. Подготовкой всех необходимых первичных документов, как правило, занимается поставщик. Особое внимание нужно уделять тем документам, которые возникают в ходе сделок, где вы покупатель, потому что это ваши расходы, и поэтому вы более заинтересованы в соблюдении буквы закона, нежели ваш поставщик.

Вывод: первичные документы нужны налоговой для подтверждения доходов и расходов и правильного расчета налога. Их нужно хранить 5 лет. Документы оформляет поставщик, важно следить за их правильным оформлением.

Разделение первичных документов по стадиям бизнеса

Все сделки можно разделить на 3 этапа:

Этап 1. Вы договариваетесь об условиях сделки
  • договор;
  • счет на оплату.
Этап 2. Происходит оплата по сделке
  • выписка с расчетного счета, если оплата была безналом, или путем эквайринга, или через платежные системы, где деньги перечисляются с вашего расчетного счета;
  • кассовые чеки, квитанции к приходным кассовым ордерам, бланки строгой отчетности — если оплата производилась наличными. В большинстве случаев такой способ оплаты используют ваши сотрудники, когда берут деньги под отчет. Расчеты между организациями редко бывают в форме наличных денег.
Этап 3. Получение товара или услуги

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

  • товарная накладная — для товаров;
  • товарный чек — обычно выдается в пару к кассовому чеку, или если товар продает ИП;
  • акт выполненных работ/оказанных услуг.
Заношу первичку, разобрался сразу

«Я заношу в Контур.Бухгалтерию первичку, учетом и отчетностью занимается бухгалтер. У сервиса очень удобный и понятный интерфейс, разобрался сразу, без всякой помощи. Очень добротно, сделано для людей! И, конечно, удобно то, что заходить в систему можно из любого места, с любого устройства».

Марат Иманов, директор в ООО «Диалог», Санкт-Петербург.

Обязательные первичные документы

Несмотря на вариативность сделок, есть перечень обязательных документов, которые оформляются для любого вида сделки:

  • договор;
  • счёт;
  • бланки строгой отчетности, кассовый, товарный чек;
  • накладная;
  • акт выполненных работ (оказанных услуг);
  • счет-фактура.
Договор

С клиентом при осуществлении сделки заключается договор, в котором уточняются все детали предстоящих хозяйственных операций: порядок расчетов, отгрузка товара, сроки выполнения работ или условия оказания услуг.

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

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

Вывод: договор нужен для сделок, по которым не выдается кассовый чек. Проследите за всеми условиями: порядок расчетов, отгрузка товара, сроки, права и обязанности сторон, НДС, если есть.

Счет на оплату

Счет на оплату — это соглашение, в соответствии с которым поставщик фиксирует цену на свои товары или услуги.

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

В соответствии статьей 9-ФЗ «О бухгалтерском учете», наличие подписи директора или главного бухгалтера и печати необязательны для этого документа. Но ими не стоит пренебрегать во избежание вопросов со стороны контрагентов и государства. Счет не позволяет предъявить поставщику требования — он лишь фиксирует цену товара или услуги. При этом за покупателем остается право на требование возврата денежных средств в случае необоснованного обогащения поставщика.

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

Платежные документы: кассовые чеки, бланки строгой отчетности (БСО)

Эта группа первичных документов позволяет подтвердить факт оплаты приобретаемых товаров или услуг.

Читайте так же:
Не рваные джинсы как пишется

К платежным документам относятся товарные и кассовые чеки, БСО, платежные требования и поручения. Поручение покупатель может получить в банке, осуществив оплату безналичным платежом. Чек кассовый или товарный покупатель получает от поставщика при оплате наличными.

Вывод: платежные документы нужны для подтверждения факта оплаты, их важно сохранять.

Товарная накладная или товарный чек

Товарные чеки, как мы уже говорили выше, оформляются при продаже товара физлицам или самими физлицами.

Накладные используются преимущественно юрлицами для оформления отпуска/продажи товаров или товарно-материальных ценностей и дальнейшего оприходования их клиентом.

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

Данные в накладной должны совпадать с цифрами в счете-фактуре. Уполномоченное лицо, отвечающее за отпуск товара, ставит в накладной свою подпись и печать организации. Сторона, принимающая товар, также обязана поставить роспись и заверить ее печатью в товарной накладной. Применение факсимильной подписи допускается, но это должно быть зафиксировано в договоре.

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

Акт оказанных услуг (выполненных работ)

Акт — это двусторонний первичный документ, который подтверждает факт свершения сделки, стоимость и сроки выполнения услуг или работ.

Акт выдается исполнителем своему клиенту по итогу оказания услуг или выполненных работ. Этот первичный документ подтверждает соответствие оказанных услуг (выполненных работ) условиям заключенного договора.

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

Счет-фактура

Счет-фактура — документ, который нужен исключительно для того, чтобы контролировать движение НДС. Счета-фактуры обычно оформляются в пару к товарным накладным или актам. Встречаются счета-фактуры на выплаченный аванс.

Этот первичный документ строго регламентирован. Он содержит:

  • информацию о суммах денежных средств;
  • фактурную часть.

Счет-фактура — это основание для принятия предъявленных сумм НДС к вычету. Его обязаны выписывать все предприятия-плательщики НДС.

В последнее время популярен УПД — универсальный передаточный документ. Этот документ заменяет пару накладная + счет-фактура или акт + счет-фактура.

Вывод: счет-фактура нужен для контроля за движением НДС, его оформляют в пару к накладной или акту. Иногда такая пара заменяется универсальным передаточным документом — УПД.

Ведите бизнес в Контур.Бухгалтерии — удобном онлайн-сервисе для расчета зарплаты и отправки отчетности в ФНС, ПФР и ФСС. Сервис автоматически формирует первичные документы и УПД.

Обработка почвы: что собой представляет и какое имеет значение

Как планировать дела чтобы повысить личную эффективность

Обработка почвы – это совокупность приемов механического воздействия на верхний слой грунта, с целью повышения его плодородия и оптимизации условий для развития растений. Измельчение пахотного слоя позволяет улучшить водо- и воздухопроницаемость земли, активировать деятельность микроорганизмов, защитить поле от сорняков и болезней.

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

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

Классическая отвальная обработка почвы

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

Этот параметр, а также направление вспашки, должен определять агроном . И здесь будут весьма к месту знания в сфере растениеводства , потому как необходимо учитывать особенности выращиваемой культуры, забитость поля сорняками и наличие вредителей или болезней. Получить эти знания вы можете по учебной программе «Агрокебеты» .

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

Читайте так же:
Бомбер через termux b0mb3r

Безотвальная обработка почвы

Этот вид вспашки отличается от отвального тем, что рыхление почвы осуществляется без оборота пласта земли . Таким образом на ее поверхности остаются пожнивные отходы от предыдущей культуры. Благодаря этому снижается риск возникновения эрозии , а также повышается активность микроорганизмов , и как следствие – возрастает плодородие участка и урожайность культуры.

Преимущества безотвального способа обработки:

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

Нулевая обработка почвы (No-Till)

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

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

Одно из ключевых преимуществ No-Till технологии – экономия ресурсов . В странах где она активно используется (США, Аргентина, Канада, Бразилия, Австралия) провели исследования, результаты которых следующие:

  • Затраты на оплату труда снизились в 1,5 раза ;
  • Затраты на топливо и смазочные материалы – в 2 раза ;
  • Затраты на оборудование – в 1,5 раза ;
  • В целом производственные расходы сократились на 12% ;
  • Урожайность повышается в 2-3 раза .

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

Обработка почвы по технологии Strip-Till

Strip-Till – это разновидность щадящей обработки почвы. Суть метода заключается в полосовом рыхлении прикорневого слоя и внесении удобрений за один ход. При этом между рядками остается нетронутая почва, сохраняющая свою структуру, за счет чего не нарушается воздухо- и водопроницаемость грунта.

Данная технология является гибридом традиционной вспашки и нулевой обработки. Чаще всего ее применяют при выращивании таких культур как кукуруза, рапс и сахарная свекла.

Исключения: перехват и обработка

Исключения: перехват и обработка - 1

Привет! Не хочется тебе об этом говорить, но огромная часть работы программиста — это работа с ошибками. Причем чаще всего — со своими собственными. Так уж сложилось, что не бывает людей, которые не допускают ошибок. И программ таких тоже не бывает. Конечно, главное при работе над ошибкой — понять ее причину. А причин таких в программе может быть целая куча. В один прекрасный момент перед создателями Java встал вопрос: что делать с этими самыми потенциальными ошибками в программах? Избежать их полностью — нереально. Программисты могут понаписать такого, что невозможно даже представить 🙂 Значит, надо заложить в язык механизм работы с ошибками. Иными словами, если уж в программе произошла какая-то ошибка, нужен сценарий для дальнейшей работы. Что именно программа должна делать при возникновении ошибки? Сегодня мы познакомимся с этим механизмом. И называется он “Исключения” ( Exceptions ).

Что такое исключение в Java

  • FileNotFoundException (файл не найден)
  • ArithmeticException (исключение при выполнении математической операции)
  • ArrayIndexOutOfBoundsException (указан номер ячейки массива за пределами его длины). Например, если попытаться вывести в консоль ячейку array[23] для массива array длиной 10.

Перехват и обработка исключений

Исключения: перехват и обработка - 2

Для работы с исключениями в Java существуют специальные блоки кода: try , catch и finally . Код, в котором программист ожидает возникновения исключений, помещается в блок try . Это не значит, что исключение в этом месте обязательно произойдет. Это значит, что оно может там произойти, и программист в курсе этого. Тип ошибки, который ты ожидаешь получить, помещается в блок catch (“перехват”). Сюда же помещается весь код, который нужно выполнить, если исключение произойдет. Вот пример: Вывод: Мы поместили наш код в два блока. В первом блоке мы ожидаем, что может произойти ошибка “Файл не найден”. Это блок try . Во втором — указываем программе что делать, если произошла ошибка. Причем ошибка конкретного вида — FileNotFoundException . Если мы передадим в скобки блока catch другой класс исключения, оно не будет перехвачено. Вывод: Код в блоке catch не отработал, потому что мы “настроили” этот блок на перехват ArithmeticException , а код в блоке try выбросил другой тип — FileNotFoundException . Для FileNotFoundException мы не написали сценарий, поэтому программа вывела в консоль ту информацию, которая выводится по умолчанию для FileNotFoundException . Здесь тебе нужно обратить внимание на 3 вещи. Первое. Как только в какой-то строчке кода в блоке try возникнет исключение, код после нее уже не будет выполнен. Выполнение программы сразу “перепрыгнет” в блок catch . Например: Вывод: В блоке try во второй строчке мы попытались разделить число на 0, в результате чего возникло исключение ArithmeticException . После этого строки 6-10 блока try выполнены уже не будут. Как мы и говорили, программа сразу начала выполнять блок catch . Второе. Блоков catch может быть несколько. Если код в блоке try может выбросить не один, а несколько видов исключений, для каждого из них можно написать свой блок catch . В этом примере мы написали два блока catch . Если в блоке try произойдет FileNotFoundException , будет выполнен первый блок catch . Если произойдет ArithmeticException , выполнится второй. Блоков catch ты можешь написать хоть 50. Но, конечно, лучше не писать код, который может выбросить 50 разных видов ошибок 🙂 Третье. Откуда тебе знать, какие исключения может выбросить твой код? Ну, про некоторые ты, конечно, можешь догадываться, но держать все в голове невозможно. Поэтому компилятор Java знает о самых распространенных исключениях и знает, в каких ситуациях они могут возникнуть. Например, если ты написал код и компилятор знает, что при его работе могут возникнуть 2 вида исключений, твой код не скомпилируется, пока ты их не обработаешь. Примеры этого мы увидим ниже. Теперь что касается обработки исключений. Существует 2 способа их обработки. С первым мы уже познакомились — метод может обработать исключение самостоятельно в блоке catch() . Есть и второй вариант — метод может выбросить исключение вверх по стеку вызовов. Что это значит? Например, у нас в классе есть метод — все тот же printFirstString() , который считывает файл и выводит в консоль его первую строку: На текущий момент наш код не компилируется, потому что в нем есть необработанные исключения. В строке 1 ты указываешь путь к файлу. Компилятор знает, что такой код легко может привести с FileNotFoundException . В строке 3 ты считываешь текст из файла. В этом процессе легко может возникнуть IOException — ошибка при вводе-выводе данных (Input-Output). Сейчас компилятор говорит тебе: “Чувак, я не одобрю этот код и не скомпилирую его, пока ты не скажешь мне, что я должен делать в случае, если произойдет одно из этих исключений. А они точно могут произойти, исходя из того кода, который ты написал!”. Деваться некуда, нужно обрабатывать оба! Первый вариант обработки нам уже знаком: надо поместить наш код в блок try , и добавить два блока catch : Но это не единственный вариант. Мы можем не писать сценарий для ошибки внутри метода, и просто пробросить исключение наверх. Это делается с помощью ключевого слова throws , которое пишется в объявлении метода: После слова throws мы через запятую перечисляем все виды исключений, которые этот метод может выбросить при работе. Зачем это делается? Теперь, если кто-то в программе захочет вызвать метод printFirstString() , он должен будет сам реализовать обработку исключений. К примеру, в другой части программы кто-то из твоих коллег написал метод, внутри которого вызывает твой метод printFirstString() : Ошибка, код не компилируется! В методе printFirstString() мы не написали сценарий обработки ошибок. Поэтому задача ложится на плечи тех, кто будет этот метод использовать. То есть перед методом yourColleagueMethod() теперь стоят те же 2 варианта: он должен или обработать оба исключения, которые ему “прилетели”, с помощью try-catch , или пробросить их дальше. Во втором случае обработка ляжет на плечи следующего по стэку метода — того, который будет вызывать yourColleagueMethod() . Вот поэтому такой механизм называется “пробрасыванием исключения наверх”, или “передачей наверх”. alt=»Исключения: перехват и обработка — 3″ width=»1024″ />Когда ты пробрасываешь исключения наверх с помощью throws , код компилируется. Компилятор в этот момент как бы говорит: “Окей, ладно. Твой код содержит кучу потенциальных исключений, но я, так и быть, его скомпилирую. Мы еще вернемся к этому разговору!” И когда ты где-то в программе вызываешь метод, который не обработал свои исключения, компилятор выполняет свое обещание и снова напоминает о них. В завершении мы поговорим о блоке finally (простите за каламбур). Это последняя часть триумвирата обработки исключений try-catch-finally . Его особенность в том, что он выполняется при любом сценарии работы программы. В этом примере код внутри блока finally выполняется в обоих случаях. Если код в блоке try выполнится целиком и не выбросит исключения, в конце сработает блок finally . Если код внутри try прервется, и программа перепрыгнет в блок catch , после того, как отработает код внутри catch , все равно будет выбран блок finally . Зачем он нужен? Его главное назначение — выполнить обязательную часть кода; ту часть, которая должна быть выполнена независимо от обстоятельств. Например, в нем часто освобождают какие-то используемые программой ресурсы. В нашем коде мы открываем поток для чтения информации из файла и передаем его в объект BufferedReader . Наш reader нужно закрыть и освободить ресурсы. Это нужно сделать в любом случае: неважно, отработает программа как надо или вызовет исключение. Это удобно делать в блоке finally : Теперь мы точно уверены, что позаботились о занятых ресурсах независимо от того, что произойдет при работе программы 🙂 Это еще не все, что тебе нужно знать об исключениях. Обработка ошибок — очень важная тема в программировании: ей посвящена не одна статья. На следующем занятии мы узнаем, какие бывают виды исключений и как создать свое собственное исключение:) До встречи!

Читайте так же:
Спокойной ночи малыши смешарики гольф

Обработка и инициация событий

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

События

Событие — это сообщение, посланное объектом, чтобы сообщить о совершении действия. Это действие может быть вызвано пользовательским взаимодействием, например нажатием кнопки, или какой-то другой программной логикой, например изменением значения свойства. Объект, вызывающий событие, называется отправителем событий. Отправителю событий не известен объект или метод, который будет получать (обрабатывать) созданные им события. Обычно событие является членом отправителя событий; например, событие Click — член класса Button, а событие PropertyChanged — член класса, реализующего интерфейс INotifyPropertyChanged.

Чтобы определить событие, необходимо использовать ключевое слово event в C# или Event в Visual Basic в сигнатуре класса события и задать тип делегата для события. Делегаты описаны в следующем разделе.

Как правило, для вызова события добавляется метод, помеченный как protected и virtual (в C#) или Protected и Overridable (в Visual Basic). Назовите этот метод On EventName; например, OnDataReceived . Метод должен принимать один параметр, который определяет объект данных события, являющийся объектом типа EventArgs или производного типа. Этот метод предоставляется, чтобы производные классы могли переопределять логику для вызова события. Производный класс должен вызывать метод On EventName базового класса, чтобы зарегистрированные делегаты получили событие.

В следующем примере показан способ объявления события ThresholdReached . Событие связано с делегатом EventHandler и возникает в методе OnThresholdReached .

Читайте так же:
Определите разряд прилагательного заячий тулуп

Делегаты

Делегат — это тип, содержащий ссылку на метод. Делегат объявляется с сигнатурой, указывающей тип возвращаемого значения и параметры для методов, на которые он ссылается, и может содержать ссылки только на методы, соответствующие его сигнатуре. Таким образом, делегат эквивалентен указателю на строго типизированную функцию или обратному вызову. Объявления делегата достаточно для определения класса делегата.

У делегатов широкая область применения в .NET. В контексте событий делегат — это посредник (или механизм, подобный указателю) между источником события и кодом, обрабатывающим событие. Делегат связывается с событием за счет включения типа делегата в объявление события, как показано в примере в предыдущем разделе. Дополнительные сведения о делегатах см. в разделе, посвященном классу Delegate.

.NET предоставляет делегаты EventHandler и EventHandler<TEventArgs> для поддержки большинства сценариев событий. Используйте делегат EventHandler для всех событий, не содержащих данных. Используйте делегат EventHandler<TEventArgs> для событий, содержащих данные о событии. У этих делегатов нет типа возвращаемого значения. Они принимают два параметра (объект для источника события и объект для данных события).

Эти делегаты являются многоадресными, то есть в них могут храниться ссылки на несколько методов обработки событий. Дополнительные сведения см. на справочной странице класса Delegate. Делегаты позволяют гибко и точно управлять обработкой событий. Делегат выступает как диспетчер событий для класса, вызывающий событие за счет ведения списка зарегистрированных обработчиков для события.

Для сценариев, в которых делегаты EventHandler и EventHandler<TEventArgs> не работают, можно определить собственный делегат. Сценарии, для которых необходимо определять собственные делегаты, очень редки. Это бывает, например, при работе с кодом, не распознающим универсальные типы. При объявлении делегат необходимо пометить ключевым словом delegate в C# или Delegate в Visual Basic. В следующем примере показано, как объявить делегат с именем ThresholdReachedEventHandler .

Читайте так же:
Как готовить на зиму гриб дождевик?

Данные событий

Данные, связанные с событием, могут быть предоставлены с помощью класса данных события. .NET предоставляет множество классов данных событий, которые можно использовать в приложениях. Например, класс SerialDataReceivedEventArgs — класс данных события SerialPort.DataReceived. В .NET имена всех классов данных событий оканчиваются ключевым словом EventArgs . Определить, какой класс данных события связан с событием, можно по делегату этого события. Например, делегат SerialDataReceivedEventHandler содержит класс SerialDataReceivedEventArgs в качестве одного из своих параметров.

Класс EventArgs является базовым типом для всех классов данных событий. Класс EventArgs используется также, если событие не содержит связанных данных. При создании события, которое лишь уведомляет другие классы о том, что что-то произошло, и не передает никаких данных, используйте класс EventArgs в качестве второго параметра в делегате. Если данные не предоставляются, можно передать значение EventArgs.Empty. Делегат EventHandler содержит класс EventArgs в качестве параметра.

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

В следующем примере показан класс данных события с именем ThresholdReachedEventArgs . Он содержит свойства, относящиеся только к вызываемому событию.

Обработчики событий

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

В следующем примере показан метод обработчика события c_ThresholdReached , который соответствует сигнатуре делегата EventHandler. Метод подписывается на событие ThresholdReached .

Обработчики статических и динамических событий

.NET позволяет подписчикам регистрироваться для получения уведомлений о событиях как статически, так и динамически. Обработчики статических событий действуют в течение всего жизненного цикла класса, события которого они обрабатывают. Обработчики динамических событий активируются и деактивируются во время выполнения программы, обычно в ответ на определенную условную логику программы. Например, они могут использоваться, если уведомления о событиях требуются только в определенных условиях, либо приложение предоставляет несколько обработчиков событий и выбор конкретного обработчика зависит от условий среды выполнения. В примере в предыдущем разделе показано, как динамически добавлять обработчик события. Дополнительные сведения см. в разделах события (в Visual Basic) и события (в C#).

Создание нескольких событий

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

Свойства событий состоят из объявлений событий и методов доступа к событиям. Методы доступа к событиям — это определяемые пользователем методы, добавляющие или удаляющие экземпляры делегата события из структуры данных хранения. Обратите внимание, что использование свойств события снижает быстродействие по сравнению с полями события, поскольку перед вызовом каждого делегата события его необходимо извлечь. Необходимо найти компромисс между памятью и скоростью. Если ваш класс определяет много событий, которые вызываются нечасто, необходимо реализовать свойства событий. Дополнительные сведения см. в разделе Практическое руководство. Обработка нескольких событий с помощью их свойств.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector