По строгому как пишется

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

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

Слушай внимательнее

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

function handleSearch({ state, dispatch, action }) {
  if (action.type === "filters/changed") {
    fetchSearchResult(getFilters(state)).then((result) =>
      dispatch(searchResultReceived(result))
    );
  }
}

Долгое время наш код жил примерно в таком формате. Однако на практике оказалось, что стоит сделать иначе.

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

В изначальной реализации был волшебный requestBuilder, который использовался в компонентах и создавал новый набор фильтров, попадавший потом в состояние. Но со временем я понял, что это не совсем redux way. Лучше завести набор действий типа filters/checkbox:changed, filters/ranged:changed, filters/color:changed и так далее. Я не буду углубляться в детали реализации, но набралось их порядка десятка. И код обработки изменений фильтров действительно стал гораздо более приятным, но мне очень не хотелось явно перечислять все эти действия в обработчике, ходящем к серверу.

Более того, перед отправкой запроса происходило сравнение нового запроса с предыдущим, который хранился… в URL! Ох уж этот легаси код, так я его и не вылечил. Но в этот момент стало ясно, что слушаю я не столько действия, сколько изменения состояния. Потом до меня дошло, что можно использовать эту концепцию ещё и для сохранения состояния, будь то location.search или localStorage. Поэтому, помимо реакции на определённые действия, я решил добавить возможность реагировать на изменение состояния. И выглядело это примерно так:

const createYam = (handlers) => (store) => (next) => (action) => {
  // here
  const prevState = store.getState();
  next(action);
  const state = store.getState();
  handlers.forEach((handler) =>
    handler({
      state,
      // and here
      prevState,
      dispatch: store.dispatch,
      action,
    })
  );
};

function handleSearch({ state, prevState, dispatch, action }) {
  const prevFilters = getFilters(prevState);
  const filters = getFilters(state);
  // we expect a piece of state to change, not an action to be dispatched
  if (prefFilters !== filters) {
    fetchSearchResult(filters).then((result) =>
      dispatch(searchResultReceived(result))
    );
  }
}

Сравнение фильтров делается по ссылке, поэтому важно обеспечить, чтобы селекторы правильно отслеживали неизменность. При грамотной организации состояния и использовании reselect (тут) это не так уж и сложно сделать. Я реализовывал подобную логику даже для сложных структур (массивы объектов, которые можно сравнить по ключу вместо глубокого равенства, например), но это лежит за пределами текущей темы. Поэтому предположим, что селекторы работают правильно и возвращают нам тот же самый объект, если он по сути своей не изменился.

Единственная проблема, которая остаётся — это мемоизация. Если вы не знакомы с reselectом, опишу в двух словах: создаваемые селекторы кэшируют предыдущее вычисленное значение, и если входные данные не изменились, то и создавать новый результат нам не придётся.

Но по умолчанию размер кэша у этих селекторов равен единице, то есть как только на вход поступают новые данные, предыдущий результат выбрасывается. И что тогда? А то, что если несколько обработчиков используют фильтры (например, один для отправки запросов, второй — для записи их в location.search), первый вызванный обработчик собьёт кэш, и второй уже не сможет корректно отработать.

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

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

function handleSearch({ state, stateChangedBy, dispatch, action }) {
  if (stateChangedBy(getFilters)) {
    fetchSearchResult(getFilters(state)).then((result) =>
      dispatch(searchResultReceived(result))
    );
  }
}

Так давайте напишем свою собственную кэширующую магию, чтобы не сломать селекторы:

const createYam = (handlers) => (store) => (next) => (action) => {
  const prevState = store.getState();
  next(action);
  const state = store.getState();

  const stateChangedBy = createStateChangedBy(prevState, state);

  handlers.forEach((handler) =>
    handler({
      state,
      action,
      dispatch: store.dispatch,
      stateChangedBy,
    })
  );
};

function createStateChangedBy(prevState, nextState) {
  // per-dispatch cache for state comparison results
  const cache = new Map();
  return (selector) => {
    if (!cache.has(selector)) {
      cache.set(selector, selector(prevState) !== selector(nextState));
    }
    return cache.get(selector);
  };
}

Теперь на одном вызове dispatch мы вызываем каждый селектор только два раза: один раз со старым состоянием и один раз с новым.

Есть лишь один недостаток, который мне так и не удалось победить. Предположим, у нас есть два зависимых кэширующих селектора:

const selectFilters = createSelector(selectSearchState, (searchState) =>
  createFilters(searchState)
);
const selectRangeFilters = createSelector(selectFilters, (filters) =>
  filters.filter(isRangeFilter)
);

Если в обработчике будет использовано stateChangedBy(selectRangeFilters), это собьёт кэш для selectFilters, так как он неявно вызовется с новым состоянием. Это ломает изолированность обработчиков и всю логику сравнения, но я так и не смог понять, насколько это распространённый сценарий, поэтому чинить не стал. Однако это надо иметь в виду. И либо иначе организовывать селекторы (например, убирая мемоизацию там, где она не нужна), либо колдовать с множественным кэшированием для селекторов типа selectFilters.

Пиши чище

Работая с такой мидлварью, я понял не только как можно её использовать, но и как её использовать не стоит.

Один из обработчиков содержал в себе крайне много условий и разных по своей природе эффектов. Читать этот код было практически невозможно, а с тестами всё было на порядок хуже. Огромное количество проверяемых кейсов, куча expect(dispatch).toBeCalledWith(action) и страшных моков на всё, что только можно. Много времени было потрачено на обдумывание и обсуждение способов упрощения этого обработчика.

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

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

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

// this handler may lead either to a "search results recieved" event
// or to the "search cancelled" one
async function handleSearch({ state, stateChangedBy, action }) {
  if (stateChangedBy(getFilters)) {
    const result = await fetchSearchResult(getFilters(state));
    // - replace
    // dispatch(searchResultReceived(result));
    // + with
    return searchResultReceived(result);
  }
  // we should have this action to reset the `loading` state, for example
  return searchCancelled();
}

const createYam = (handlers) => (store) => (next) => (action) => {
  const prevState = store.getState();
  next(action);
  const state = store.getState();

  const stateChangedBy = createStateChangedBy(prevState, state);

  // the cycle must be async now
  handlers.forEach(async (handler) => {
    // we do not pass `dispatch` to handlers at all
    const nextAction = await handler({
      state,
      action,
      stateChangedBy,
    });
    // if anything has been returned from the handler,
    // we suppose it's an action and dispatch it
    if (nextAction) {
      store.dispatch(nextAction);
    }
  });
};

Таким образом мы не только добавили поддержку новомодных слов async/await, но и сделали обработчики проще в плане тестирования, а также ввели ограничение на написание чистых эффектов. Хотя бы касательно изменений состояния. Если эффекты касаются других хранилищ, увы, вызывать (и тестировать) эффекты придётся, как раньше: expect().toBeCalled() и всё в таком духе.

Делай прививки

Ещё одна фича, которой я никогда не пользовался, но очень часто натыкался на её упоминание в сети — это инъекция отдельных обработчиков в мидлвари при определённых условиях (чаще всего, на определённых страницах или при загрузке определённых компонентов).

Я считаю, что в маленьких приложениях совершенно необязательно так заморачиваться. Достаточно поставить проверку URL в обработчике и просто выходить из него. Опыт подсказывает, что десяток-другой === на вызов dispatch будет далеко не самой большой проблемой с производительностью. Поэтому в изначальной реализации я даже не думал о подобной логике.

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

Наверное, можно придумать десятки вариантов, как добавить обработчик. Я решил опереться на то, что в идеальном приложении всяческие изменения происходят из-за некоторых событий. Значит, и новые обработчики должны добавляться тем же способом.

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

С реализацией же всё оказалось не так сложно. Вдохновлялся я add/removeEventListener, которые принимают событие и обработчик и удаляют его по строгому равенству. Тогда внутри кода мидлвари можно хранить их в обычном массиве:

const handlerRequiredType = Symbol("handlerRequired");
const handlerRejectedType = Symbol("handlerRejected");
function handlerRequired(handler) {
  return { type: handlerRequiredType, payload: handler };
}
function handlerRejected(handler) {
  return { type: handlerRejectedType, payload: handler };
}

const createYam = (handlers) => (store) => {
  // store injected handlers per store
  let injectedHandlers = [];

  return (next) => (action) => {
    if (action.type === handlerRequiredType) {
      // avoid duplicates
      if (!injectedHandlers.includes(action.payload)) {
        injectedHandlers = [...injectedHandlers, action.payload];
      }
      // stop middleware chain
      return;
    }

    if (action.type === handlerRejectedType) {
      injectedHandlers = injectedHandlers.filter((h) => h !== action.payload);
      // stop middleware chain
      return;
    }

    const prevState = store.getState();
    next(action);
    const state = store.getState();

    const stateChangedBy = createStateChangedBy(prevState, state);

    // process both initial and injected handlers
    handlers.concat(injectedHandlers).forEach(async (handler) => {
      const nextAction = await handler({
        state,
        action,
        stateChangedBy,
      });
      if (nextAction) {
        store.dispatch(nextAction);
      }
    });
  };
};

Действия на добавление обработчиков волшебные, поэтому на них цепочка мидлварей прерывается. Типы объявлены через символы для пущей безопасности: вдруг кому-то понадобится завести handlerRequired действие. Или даже yam/handlerRequired — никто не застрахован. Ну и вставленные обработчики хранятся на уровне store, потому что это кажется концептуально верным, хотя если учесть, что redux строго не рекомендует использовать несколько экземпляров store на приложение, можно было бы и в корень модуля положить. В остальном же всё должно быть понятно.

Будь в контексте

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

// add context as an argument next to handlers
const createYam = (handlers, context) => (store) => {
  let injectedHandlers = [];

  return (next) => (action) => {
    if (action.type === handlerRequiredType) {
      if (!injectedHandlers.includes(action.payload)) {
        injectedHandlers = [...injectedHandlers, action.payload];
      }
      return;
    }

    if (action.type === handlerRejectedType) {
      injectedHandlers = injectedHandlers.filter((h) => h !== action.payload);
      return;
    }

    const prevState = store.getState();
    next(action);
    const state = store.getState();

    const stateChangedBy = createStateChangedBy(prevState, state);

    handlers.concat(injectedHandlers).forEach(async (handler) => {
      const nextAction = await handler({
        state,
        action,
        stateChangedBy,
        // pass the context to the handler
        context,
      });
      if (nextAction) {
        store.dispatch(nextAction);
      }
    });
  };
};

Его можно использовать, например, для передачи HTTPClient в обработчики (как дополнительный аргумент для redux-thunk), либо же для передачи dispatch, например, на период миграции, когда обработчики не могут просто так взять и отказаться от последовательных диспатчей. Дальше вы ограничиваетесь только вашей фантазией.

Заключение

На этом этапе yam стала гораздо ближе к варианту, готовому для испытаний в реальной жизни. Она даже стала прекраснее, чем то, что я оставил на своём старом проекте. Когда-нибудь здесь появится ссылка на npm пакет, а пока я предлагаю встретиться в следующий раз, чтобы обсудить последний, но отнюдь не по важности, момент: типизацию.

Добрый день, уважаемый посетитель. В этой статье идёт разговор про Образец заполнения заявления на получение ИНН в 2022 году (бланк формы 2-2-Учет). Если по ходу у Вас назрел вопрос, спрашивайте, постараемся помочь. Надеемся, что мы сможем помочь

Способы получения ИНН

Получить идентификационный номер налогоплательщика гражданин может следующими способами:

  • Путем личного обращения в налоговый орган.

С 1 января 2022 года подать заявление на выдачу ИНН и получить свидетельство можно в любом налоговом органе по выбору гражданина. Напомним, что ранее подать заявление и получить документ, подтверждающий постановку на учет, можно было только в территориальном налоговом органе по месту проживания (регистрации по паспорту) или пребывания гражданина.

  • Через представителя по доверенности.

Для сдачи заявления и получения свидетельства представитель должен иметь доверенность, заверенную нотариусом, при отсутствии таковой налоговый орган откажет в приеме (выдаче) документов.

  • По почте России заказным письмом с описью вложения.

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

  • Через специализированный сервис на сайте ФНС.

Самым быстрым и удобным способом заполнения и сдачи заявления на получение ИНН является составление его на сайте Федеральной налоговой службы. Рассмотрим подробнее данный способ оформления документа о постановке на налоговый учет.

Что делать если ИНН утеряно или украдено

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

Для получения дубликата ИНН в ИФНС необходимо сдать:

  • Заявление на выдачу дубликата свидетельства, составленное в произвольной форме;
  • Паспорт РФ или иной документ, удостоверяющий личность;
  • Квитанцию об оплате государственной пошлины.

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

Порядок самостоятельного заполнения заявления на получение свидетельства

Примечание: с официальным порядком заполнения формы № 2-2-Учет можно ознакомиться здесь.

Составление заявления на получение ИНН через Интернет

  1. Переходим на сайт ФНС в сервис «Постановка физического лица на учет в налоговом органе на территории Российской Федерации»

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

aqpojkdwnjknjqbssyvg

  1. Вводим логин (адрес электронной почты) и пароль.

Если до этого на сайте ФНС Вы не регистрировались, то необходимо это сделать, заполнив специальную форму:

Примечание: регистрация на сайте ФНС не имеет отношения к Личному кабинету налогоплательщика, доступ к которому гражданин получает путем личного посещения налогового органа.

  1. После ввода логина и пароля пользователь будет переведен на страницу заполнения формы заявления

Примечание: внесение данных лучше производить по порядку, руководствуясь подсказками системы.

От этапа подготовки документа до его отправки необходимо пройти 5 шагов:

waht5tjakd26e41gcgge

Примечание: если Вы планируете получать свидетельство не в налоговом органе по месту проживания, то в последнем блоке необходимо выбрать «Иной налоговый орган»:

  1. На втором этапе система предложит ввести данные о документе, удостоверяющем личность, контактные данные, а также сведения об изменениях ФИО, пола, даты и места рождения

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

На этом этапе еще можно вернуться к редактированию данных и, если вы сомневаетесь в том, все ли сведения были внесены верно, выберите в самом низу «Вернуться к редактированию заявки». Если информация отражена корректно, нажимайте «Зарегистрировать заявку и направить ее в ИФНС»:

afvnkcztlzpdyg9qfqjv

  1. После совершения всех указанных действий заявка будет зарегистрирована и направлена в налоговый орган на рассмотрение:

О дальнейших действиях можно узнать, нажав на «Ожидать ответа ИФНС» в столбце «Действия»:

ky5udmtzpnm5voifiqyo

Бланк заявления 2-2-Учет

Форма 2-2-Учет, актуальная на 2022 год:

 
Скачать бланк формы 2-2-Учет заявления физического лица о постановке на учет в налоговом органе.
 

Образец заполнения заявления на получение ИНН

Стр.1 заявления:

Стр.2 заявления:
qw0cehputqorlmkedwfc
Стр.3 заявления:
uz5afnld7hn1gptirk1b


С какого возраста выдается

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

До наступления его 14-летия обязанность заполнения заявки на постановку на учет налогоплательщиков ложится на родителей (опекунов). При достижении 14-летнего возраста ребенок может обращаться в налоговые органы самостоятельно.

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

Образец заявки и ее особенности

Образец письменного запроса на присвоение кода налогоплательщика — это бланк формы №2-2-Учет (Приказ ФНС №ЯК-7-6/488 от 11 августа 2022 года). Документ включает в себя три листа с разделенными информационными блоками.

Сюда входят:

  1. Реквизиты подразделения ФНС, где осуществляется постановка на учет;
  2. Расширенные сведения о гражданине, которому присваивается ИНН;
  3. Информация о постановке на учет, заполняемая сотрудником ведомства ФНС.

С бланком бумаги можно ознакомиться здесь:

Cкачать шаблон заявки (Форма 2-2) в формате xls

Cкачать шаблон заявки (Форма 2-2) в формате pdf

Какие бумаги будут необходимы

Помимо официального обращения оформление ИНН физического лица требует приложения перечня персональных документов. В этот список входят:

  • Оригинал и копия паспорта (свидетельства о рождении);
  • Оригинал и копия свидетельства о прописке (если в паспорте нет соответствующей отметки).

Как заполнить заявку по Форме 2-2

Вам также могут понравиться

В заполнении заявки на присвоение ИНН предусмотрена конкретная последовательность. Страница №1 должна содержать:

  • Код подразделения ФНС, куда подаются документы;
  • ФИО заявителя, на которого оформляется код;
  • ФИО представителя налогоплательщика и его телефон (если бумаги подает доверенное лицо);
  • Наименование документа, который удостоверяет его полномочия.

Данные в графах ниже заполняет работник ведомства.

На странице №2 содержатся:

  • ФИО налогоплательщика;
  • Данные о смене фамилии (если замена производилась после 2022 года);
  • Пол и гражданская принадлежность;
  • Дата и место рождения;
  • Тип бумаги, являющейся удостоверением личности;
  • Код страны;
  • Данные о прописке.

На странице №3 следует заполнить следующую информацию:

  • ФИО заявителя;
  • Дата регистрации и тип бумаги, подтверждающей данное действие (если удостоверением личности служит не паспорт гражданина РФ);
  • Страна проживания перед въездом в Россию (для зарубежных мигрантов);
  • Данные фактического места проживания;
  • Дата и подпись заявителя.

Для заполнения всех сведений используются арабские цифры и прописные печатные буквы.

Нюансы заполнения бланка для иностранцев

Бланки на присвоение ИНН для россиян и иностранцев имеют единый формат, однако иностранным резидентам следует учитывать некоторые особенности заполнения заявки. На второй странице бланка в графе гражданства следует указать цифру «2» и код страны, подданным которой является иностранный мигрант. Данные кода содержатся в классификаторе стран (ОКСМ).

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

Вам также могут понравиться

Территориальные органы ФНС осуществляют выдачу ИНН при внесении лица в базу данных налогоплательщиков на основании заявления, заполненного по строгому образцу. Документ оформляется на бесплатной основе. За перевыпуск нового бланка ИНН в случае его утери или смены персональных данных также плата не взимается.

pjwrs07ky493simhiwpl

Миграционный юрист г. Санкт-Петербург, высшее образование СПбГУ, путешественница. Автор статей на сайте MigrantVisa.ru

Adblock
detector


Образец заполнения заявления на получение ИНН форма 2.2

В бланке 2.2 нужно заполнить три страницы.

Заполнение первой страницы формы 2.2:

Указывается код налогового органа, в которое подается заявление.

ФИО заявителя пишется полностью печатными буквами, согласно паспорту. Если отчества нет (у иностранных граждан), то в соответствующем поле ставится «1».

Кроме того на этой странице бланка нужно заполнить раздел «достоверность сведений подтверждаю».

Заполнение второй страницы формы 2.2:

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

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

Ниже указывается пол, место рождения по свидетельству о рождении, данные документа, удостоверяющего личность.

Ниже цифрой указывается, имеет физическое лицо гражданство или нет. Код страны берется из ОКСМ.

Далее пишется адрес проживания или временного пребывания в РФ.

Заполнение третьей страницы формы 2.2:

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

Также нужно указать прежний адрес проживания в РФ, причем цифрой (1 или 2) указать чем являлся этот адрес, местом постоянного жительства или местом временного пребывания.

Иностранные граждане и лица без гражданства указывают код страны постоянного проживания до своего приезда в Россию, а также срок окончания регистрации в РФ.

Адрес фактического проживания заполняется в том случае, если заявление на получение ИНН отправлено почтой и адрес места проживания не совпадает с фактическим адресом.

На каждом листе бланка заявления 2.2 должна стоять подпись заявителя или его представителя.

Скачать бланк и образец

Скачать бланк заявления на получение ИНН форма 2.2 – ссылка.

Скачать образец формы 2.2 – ссылка.

Видео – получение ИНН

Оцените качество статьи. Мы хотим стать лучше для вас:

© 2013-2022 Простая бухгалтерия ·  Политика конфиденциальности  · Копирование материалов сайта разрешено только при наличии активной ссылки на источник

Adblock
detector


Официальная инструкция ИФНС по заполнению Формы 2-2

Скачать сразу целиком в Word

Порядок заполнения страницы 001  (Страница 1)

  1. В верхней части каждой страницы Заявления физическим лицом, состоящим на учете в налоговом органе, указывается идентификационный номер налогоплательщика (далее – ИНН) в соответствии с документом, подтверждающим постановку на учет в налоговом органе (Свидетельство о постановке на учет в налоговом органе, уведомление о постановке на учет в налоговом органе, сведения из Единого государственного реестра налогоплательщиков (ЕГРН), полученные в установленном порядке, отметка в паспорте гражданина Российской Федерации).
  2. В поле “код налогового органа” указывается код налогового органа по месту жительства (месту пребывания) физического лица, в который представляется Заявление.
  3. В полях “Фамилия”, “Имя”, “Отчество” указываются фамилия, имя и отчество физического лица полностью, без сокращений, в соответствии с документом, удостоверяющим личность. В случае отсутствия у физического лица отчества в поле, состоящем из одного знакоместа, проставляется цифра “1”.
  4. В случае если Заявление направлено по почте и (или) достоверность и полнота сведений, указанных в Заявлении, подтверждается представителем физического лица, указывается количество листов приложения к Заявлению.
  5. В разделе “Достоверность и полноту сведений, указанных в настоящем Заявлении, подтверждаю”:

1) при указании лица, подтверждающего достоверность и полноту сведений, указанных в Заявлении, в поле, состоящем из одного знакоместа, проставляется соответствующая цифра:

“5” – физическое лицо;

“6” – представитель физического лица.

2) если достоверность и полноту сведений подтверждает физическое лицо, подавшее Заявление, в месте, отведенном для подписи, проставляется его личная подпись, а также дата подписания заявления;

3) если достоверность и полноту сведений подтверждает представитель физического лица, в поле “фамилия, имя, отчество представителя полностью” указываются построчно фамилия, имя, отчество (при наличии) представителя физического лица в соответствии с документом, удостоверяющим личность, в месте, отведенном для подписи, проставляется личная подпись представителя физического лица, дата подписания.

ИНН лица, подтверждающего достоверность и полноту сведений, указанных в Заявлении, указывается в случае наличия у него документа, подтверждающего постановку на учет в налоговом органе (Свидетельство о постановке на учет в налоговом органе, отметка в паспорте гражданина Российской Федерации), и использования ИНН наряду с персональными данными;

4) в поле “Номер контактного телефона” указывается номер контактного телефона, по которому можно связаться с физическим лицом (его представителем) с указанием телефонных кодов, требующихся для обеспечения телефонной связи. Номер телефона указывается без пробелов и прочерков;

5) в поле “E-mail” указывается адрес электронной почты при осуществлении взаимодействия налоговых органов с лицом, подтверждающим достоверность и полноту сведений, указанных в Заявлении, в электронном виде;

6) в поле “наименование документа, подтверждающего полномочия представителя” указывается наименование документа, подтверждающего полномочия представителя налогоплательщика;

  1. Раздел “Заполняется работником налогового органа” содержит сведения о коде способа представления Заявления (согласно приложению № 1 к приложению № 15), количестве страниц Заявления, количестве листов копий документов, приложенных к Заявлению, дате его представления (получения), номере, под которым зарегистрировано Заявление, фамилии и инициалах имени и отчества работника налогового органа, принявшего Заявление, его подпись.
  2. Раздел “Сведения о постановке на учет физического лица в налоговом органе и (или) выдаче Свидетельства о постановке на учет физического лица в налоговом органе (Свидетельство)” заполняется работником налогового органа и в нем указываются:

сведения о должности, фамилии и инициалах имени и отчества работника налогового органа, осуществившего постановку физического лица на учет, ИНН и дате постановки на учет физического лица, проставляется подпись работника;

и (или) сведения о должности, фамилии и инициалах имени и отчества работника налогового органа, выдавшего Свидетельство о постановке на учет физическому лицу, реквизитах Свидетельства и дате его выдачи, проставляется подпись работника;

сведения о фамилии и инициалах имени и отчества физического лица (его представителя), получившего Свидетельство, проставляется его подпись.

Порядок заполнения страницы 002 (Страница 2)

  1. В верхней части страницы 002 Заявления указываются фамилия и инициалы имени и отчества физического лица, подавшего Заявление с просьбой о постановке на учет в налоговом органе по месту жительства (пребывания) или получения Свидетельства.
  2. Если в период после 01.09.1996 менялись фамилия, имя, отчество, указываются последние и год их замены.
  3. В поле “Пол” указывается пол физического лица путем проставления в поле, состоящем из одного знакоместа, цифры “1”, если пол мужской, или цифры “2”, если пол женский.
  4. Дата рождения указывается в соответствии с записью в документе, удостоверяющем личность заявителя.
  5. Место рождения указывается в точном соответствии с записями в документе, удостоверяющем личность заявителя.

Если предъявлен документ, удостоверяющий личность, в котором нет сведений о дате и месте рождения, сведения заполняются на основании свидетельства о рождении или другого документа, содержащего такие сведения.

  1. Код вида документа, удостоверяющего личность, указывается в соответствии со справочником “Виды документов, удостоверяющих личность налогоплательщика” (приложение № 1 к настоящему Порядку). Реквизиты документа, удостоверяющего личность (серия и номер документа, наименование органа и код подразделения, выдавшего документ, и дата его выдачи), указываются в соответствии с реквизитами документа, удостоверяющего личность заявителя.
  2. Поле “Наличие гражданства”, состоящее из одного знакоместа, заполняется путем проставления соответствующей цифры:

“1”- гражданин;

“2” – лицо без гражданства.

  1. В поле “Код страны” указывается числовой код страны, гражданином которой является заявитель. Код страны указывается согласно Общероссийскому классификатору стран мира (ОКСМ). При отсутствии у заявителя гражданства в поле “Код страны” указывается код страны, выдавшей документ, удостоверяющий его личность.
  2. Поле “Адрес в Российской Федерации”, состоящее из одного знакоместа, заполняется путем проставления соответствующей цифры:

“1” – место жительства;

“2” – место пребывания (при отсутствии места жительства).

Адрес (район, город, иной населенный пункт, улица, номер дома, корпуса, квартиры) места жительства в Российской Федерации указывается в соответствии с записью в паспорте гражданина Российской Федерации, виде на жительство или документе, подтверждающем регистрацию по месту жительства (если представлен не паспорт гражданина Российской Федерации, а иной документ, удостоверяющий личность). При отсутствии места жительства в Российской Федерации указывается адрес места пребывания в соответствии с записью в документе, подтверждающем регистрацию по месту пребывания. Адрес места жительства (места пребывания) указывается с почтовым индексом.

Цифровой код региона указывается в соответствии со справочником “Субъекты Российской Федерации” (приложение № 2 к приложению № 15).

  1. В поле “Достоверность и полноту сведений, указанных на данной странице, подтверждаю” проставляется подпись заявителя или его представителя.

Порядок заполнения страницы 003  (Страница)

  1. В верхней части страницы 003 Заявления указываются фамилия и инициалы имени и отчества физического лица, подавшего Заявление о постановке на учет в налоговом органе по месту жительства (месту пребывания) или получения Свидетельства.
  2. В сведениях о документе, подтверждающем регистрацию по месту жительства в Российской Федерации (для иностранного гражданина или лица без гражданства; для гражданина России, представившего документ, удостоверяющий личность, отличный от паспорта гражданина Российской Федерации) или регистрацию по месту пребывания (при отсутствии места жительства), указываются вид документа в соответствии со справочником “Виды документов, удостоверяющие личность налогоплательщика”, (приложение № 1 к настоящему Порядку) и реквизиты документа (серия и номер документа, наименование органа, выдавшего документ, и дата его выдачи) в соответствии с указанным документом.
  3. Дата регистрации по адресу места жительства (места пребывания) проставляется на основании записи в паспорте или документе, подтверждающем регистрацию по месту жительства (если представлен не паспорт, а иной документ, удостоверяющий личность), или документе, подтверждающем регистрацию по месту пребывания.
  4. Поле “Прежний адрес в Российской Федерации” заполняется аналогично пункту 18 настоящего Порядка.
  5. Дата регистрации по адресу прежнего места жительства (места пребывания) проставляется на основании записи в паспорте (документе, подтверждающем регистрацию по прежнему месту пребывания). Если заявителем представлен документ, подтверждающий регистрацию по месту жительства, не содержащий дату регистрации по прежнему месту жительства, то дата регистрации записывается без документального подтверждения.
  6. В поле “Страна постоянного проживания до прибытия в Российскую Федерацию (для иностранного гражданина и лица без гражданства)” указывается числовой код страны постоянного проживания до прибытия в Российскую Федерацию иностранными гражданами и лицами без гражданства согласно ОКСМ.
  7. В поле “Дата окончания регистрации по месту жительства (месту пребывания) на территории Российской Федерации (при ее наличии) (для иностранного гражданина и лица без гражданства)” указывается дата окончания регистрации по месту жительства (месту пребывания) на территории Российской Федерации.
  8. Указывается адрес для взаимодействия с физическим лицом, проживающим не по адресу места жительства (места пребывания) без документального подтверждения, если заявление направлено по почте.
  9. В поле “Достоверность и полноту сведений, указанных на данной странице, подтверждаю” проставляется подпись заявителя или его представителя.

Скачать сразу целиком в Word

Заполнять от руки или на компьютере

Заявление можно заполнить от руки. Но ручка должна быть шариковая, а цвет пасты – синий или черный. Кроме того, необходимо соблюдать следующие правила:

  • начинать заполнять поле следует с первого знакоместа (квадратика);
  • вся информация вносится только печатными прописными буквами.

Правила заполнения

В НК РФ определено, что составление заявления по поводу получения ИНН может быть произведено рукописно или посредством использования ПК с последующей распечаткой.

Вместе с этим существует еще ряд правил применительно к рассматриваемой теме:

  • распечатка каждого листа анкеты должна производиться отдельно, то есть с одной стороны листа бумаги;
  • скрепление листов нельзя производить таким способом, применение которого привело бы к повреждению бумаги;
  • написание дат возможно лишь за счет использования исключительно цифр;
  • помарки и какие-либо исправления при составлении анкеты не допускаются;
  • если предполагается заполнение электронного варианта анкеты, то для этого следует выбирать шрифт Courier New, имеющий размер 16.

Тонкости заполнения для иностранцев

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

  • Первые несоответствия начинаются со второй страницы. После того как в графе о гражданстве (пункт 6) была проставлена цифра «2», необходимо указать код страны, гражданством которой обладает заявитель. Если же отсутствует гражданство совсем, то указываются данные страны, выдавшей удостоверяющие личность документы.
  • Затем необходимо указать адрес места жительства, имеющий документальное подтверждение. Если такового нет, то указывается место пребывания, которое должно быть подтверждено документом регистрации.
  • На 3 странице (пункт 2 нашего списка) требуется указать тип документа, подтверждающего регистрацию. Здесь необходимо воспользоваться справочником о видах документов, чтобы указать правильный код.
  • 5 пункт нашего списка на той же странице: указание страны проживания до приезда в Россию. Здесь необходимо указать код, который можно найти в ОКСМ.

Образец заявления на получение ИНН по форме 2-2 Учёт

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

Официальный бланк ИФНС (Форма 2-2 Учет) скачать

Это ссылка для скачивания с официального сайта Федеральной Налоговой Инспекции (nalog.ru)

Образец заполнения формы 2-2 Учет (ИНН)

Первая страница

Вторая страница

uwy13cybnfqvnkau13vu

Третья страница

Видео “Рассказывает инспектор ИФНС про Заявление на ИНН по форме 2-2 учет”

Форма 2-2-Учет: бланк скачать

В соответствии с НК РФ форма заявления о постановке на учет физлица утверждается ФНС (п. 5.1 ст. 84 НК РФ). Такая форма утверждена Приказом ФНС от 11.08.2011 № ЯК-7-6/[email protected] (Приложение № 6). Она именуется Заявление физического лица о постановке на учет в налоговом органе (форма № 2-2-Учет).

Заявление по форме 2-2-Учет скачать в формате PDF можно здесь.

Образец заполнения 2-2-Учет

Общие требования к заполнению формы № 2-2-Учет приведены в п.п. 2-4 Порядка заполнения формы (Приложение № 15 к Приказу ФНС от 11.08.2011 № ЯК-7-6/[email protected]).

Так, к примеру, можно выделить следующие основные требования к заявлению:

  • заполняется в одном экземпляре от руки чернилами черного или синего цвета либо на компьютере шрифтом Courier New высотой 16 — 18 пунктов;
  • нельзя исправлять ошибки в заявлении с помощью корректирующего средства, использовать двустороннюю печать документа, скреплять листы, если это приводит к порче документа;
  • в незаполненных ячейках ставится прочерк. При распечатке на принтере прочерки могут не заполняться.

Прочие вопросы заполнения формы № 2-2-Учет приведены в Порядке заполнения формы (Приложение № 16 к Приказу ФНС от 11.08.2011 № ЯК-7-6/[email protected]).

Образец заполнения заявления по форме 2-2-Учет при его подготовке на компьютере в формате PDF представим ниже.

Заявление 2-2-Учет: образец заполнения

yclylfwuve5dpgcq6ipt

Более полную информацию по теме вы можете найти в КонсультантПлюс.

Полный и бесплатный доступ к системе на 2 дня.

Форум для бухгалтера:

Нужное

À. È. Êóïðèí
Àëåêñåé Ðåìèçîâ. ×àñû

Ðîìàí, èçä. «EOS», ÑÏá., 1908.

   Èç âñåõ ïðåäñòàâèòåëåé êðàéíåãî èìïðåññèîíèçìà â ñîâðåìåííîé ðóññêîé ëèòåðàòóðå Ðåìèçîâ, ïîæàëóé, ñàìûé êðàéíèé. Îí íå ïðåäñòàâëÿåò ñåáå ÿâëåíèé äåéñòâèòåëüíîé æèçíè èíà÷å êàê ñêâîçü êàêîå-òî çëîâåùåå, óðîäëèâîå, ôàíòàñòè÷åñêîå è òàèíñòâåííîå ñòåêëî.  íåì åñòü ÷òî-òî íåóëîâèìî îáùåå ñ Ôåäîðîì Ñîëîãóáîì, íî â Ñîëîãóáå ÷óâñòâóåòñÿ, ñðåäè åãî ÷åðòîâùèíû, íåäîòûêîìîê è âñÿêîãî êîëäîâñòâà, õîëîäíûé ðàñ÷åò âìåñòå ñ óìíîé è íàñìåøëèâîé óëûáêîé ÷åëîâåêà, î÷åíü ìíîãî çíàþùåãî è íè âî ÷òî íå âåðóþùåãî. Ðåìèçîâ æå èñêðåíåí äî íàèâíîñòè, îí âîðîæèò, íàøåïòûâàåò, ïðèãîâàðèâàåò è ëåïå÷åò ñòðàííûå ïóãàþùèå ñëîâà ñ ïîëíîé íåñîêðóøèìîé âåðîé. Ñîëîãóá ïèøåò ñâîè ïðè÷óäëèâûå ïðîèçâåäåíèÿ ïî ñòðîãîìó îïðåäåëåííîìó ïëàíó, êîòîðîãî èñêóñíî äåðæèòñÿ; Ðåìèçîâ çàðàíåå íàìå÷àåò òîëüêî ïÿòü-øåñòü äåéñòâóþùèõ ïåðñîíàæåé, à îíè óæå ñàìè äåëàþò è ãîâîðÿò âñå, ÷òî èì çàáëàãîðàññóäèòñÿ, è àâòîð ëèøü âðåìÿ îò âðåìåíè âïëåòàåò â èõ ñóìáóðíóþ, áðåäîâóþ æèçíü ñâîè çàêëèíàíèÿ ÿ ìîëèòâû. Ñîëîãóá ïèøåò ïîíÿòíî, íî åìó íå âåðèøü, — Ðåìèçîâ îòðûâèñò, ïîâòîðÿåòñÿ, âûðàæàåòñÿ ïóòàíî è çàãàäî÷íî, ýïèçîäû ó íåãî íåïðàâäîïîäîáíû, íî îí âëàäååò òàéíîé ñòðàííîãî î÷àðîâàíèÿ, âîçáóæäàþùåãî â ÷èòàòåëå óæàñ, áðåçãëèâîñòü, òîñêó è òå êîøìàðíûå ãðåçû, êîòîðûå âëàäåëè íàìè â äåòñòâå, âî âðåìÿ ëèõîðàäîê. Óìíûé Ñîëîãóá òîëüêî ïðèòâîðÿåòñÿ ñòàðûì, ñåðûì, ïûëüíûì, õèòðûì äîìîâûì, ëóêàâî âûãëÿäûâàþùèì èç-çà ïå÷íîé çàñëîíêè, Ðåìèçîâ — íàñòîÿùèé, ïîäëèííûé êîëäóí.

   Ñîäåðæàíèå «×àñîâ» òàê æå íåâîçìîæíî ïåðåäàòü, êàê è ñîäåðæàíèå äðóãîãî áîëüøîãî ðîìàíà òîãî æå àâòîðà — «Ïðóä». ×àñîâîé ìàñòåð Ñåðãåé Àíäðååâè÷ óåõàë èç ãîðîäà, ñïàñàÿñü îò äîëãîâ, à åãî ñåìüÿ: áîëüíîé ñòàðèê îòåö, æåíà Õðèñòèíà Ôåäîðîâíà ñ ðåáåíêîì, áðàò åãî Êîñòÿ è äâå ñåñòðû, Ðàÿ è Êàòÿ, îñòàþòñÿ â ÷àñîâîì ìàãàçèíå. ×óâñòâóåòñÿ íàäâèãàþùååñÿ ãîðå, îáåäíåíèå, ðàçâàë. ×àñîâîé ìàãàçèí ñîáèðàþòñÿ îïèñàòü çà äîëãè, à ïîòîì è îïèñûâàþò. Âîò è âñå ñîäåðæàíèå ðîìàíà â øåñòè ÷àñòÿõ, åñëè íå ñ÷èòàòü âíåçàïíîé è íåóäà÷íîé ëþáâè Õðèñòèíû ê êàêîìó-òî Íåëèäîâó. Íî ýòà ëþáîâü òîëüêî ìåëüêàåò â ðîìàíå. Èçìó÷åííîé æåíùèíå, ñëîìëåííîé íåóäà÷àìè è òÿæåëîé ñåìåéíîé îáñòàíîâêîé, õî÷åòñÿ ëàñêè, âíèìàíèÿ, çàáîòû. À îí óåçæàåò, äàæå íå ïðîñòèâøèñü. Âîò è âñå.

   Íî ïîñìîòðèòå, êàêèìè êðèâûìè, óðîäëèâûìè è â òî æå âðåìÿ ñèëüíûìè øòðèõàìè ðèñóåò Ðåìèçîâ ñâîèõ ñòðàííûõ ãåðîåâ. Âîò, íàïðèìåð, Êîñòÿ, åæåäíåâíî çàâîäÿùèé ãîðîäñêèå ÷àñû, ãîðáàòûé, êðèâîíîñûé ïîäðîñòîê-ýïèëåïòèê, îäåðæèìûé ÷åì-òî âðîäå íå÷èñòîé ñèëû:

   «Ëåæàë Êîñòÿ íà ñïèíå, ñòðàøíûé â ëóííîì êðóãå, âîäÿíîé êàêîé-òî, âìåñòå è êàìåííûé, äðûãàë ïî-ëÿãóøå÷üè íîãàìè. Ñíèëñÿ Êîñòå ñîí, áóäòî îí âûðâàë ñåáå âñå çóáû, è îêàçàëîñü, ÷òî íå çóáû íîñèë îí âî ðòó, à êîðîáî÷êó èç-ïîä ñïè÷åê äà êîñòÿíóþ ïðåëóþ ðó÷êó îò çóáíîé ùåòêè, è íîãè ó íåãî áóäòî íå íîãè, à îêóðêè».

   Èëè åùå:

   «Øåë Êîñòÿ, ñïîòûêàëñÿ, âåðòåë ïàëüöåì êðóæîê ïåðåä íîñîì.

   Äîâîëüíî óæ ëûíäû ëûíäàòü, îí áóäåò äíåì áèòü äî êðîâàâîé ïåíû, à íî÷üþ, ñîáðàâ ëÿãóøèíîé èêðû, ïîéäåò íà ïðîìûñåë: ìàëûõ äåòåé çàãðûçàòü… Ìàëûõ òîïèòü â òåïëåíüêîé âîäèöå, à òî õîëîäíî…

   — Ñòàðûé ïîøåë — íå äîøåë, ìàëûé ïîøåë — íå íàøåë, ÷åðò âàì ðàä, — óõìûëüíóëñÿ Êîñòÿ, çàëîæèâ ðóêè â êàðìàíû, è, âîîáðàçèâ ñåáÿ ëÿãóøå÷üåé ëàïêîé, äâèíóë ïëå÷îì ôîíàðü.

   Ôîíàðü ïîêà÷íóëñÿ è íà ìîñòîâóþ — òðàõ! Òîëüêî ñòåêëà çàçâåíåëè.

   Ïîáåæàë Êîñòÿ. Áåæàë, êàê êîíü. Îí — êîíü ñåðûé â ÿáëîêàõ, ñåäëî ñåðåáðÿíîå, óçäå÷êà ïîçîëî÷åííàÿ. Îí ïîì÷èòñÿ â ñîáîð, ñêóïèò âñå ñâå÷è, ñÿäåò íà ïðåñòîë, óìîåòñÿ õîëîäíîé ðîñîé, ïðî÷èòàåò âñå êíèãè è çàãîðèòñÿ ñåìè-ïóäîâîé ñâå÷îé ïåðåä Âåðáíèöåé, ïåðåä Ãðîìíèöåé, ïåðåä Ëèäî÷êîé: ïîÿñ øåëêîâûé, øàïêà áîáðîâàÿ, øóáà àòëàñíàÿ, à íîñ êàê íà êàðòèíå. Îí áîëüøå íå Êîñòÿ Êëî÷êîâ, à ó÷èòåëü è ñûùèê Êóðèíàñ, ïåðâûé è ïîñëåäíèé. È áüåò îí êîïûòîì çåìëþ, âîðîíîãèé êîíü, íåñåò â ïåñêå ÿéöà ãóñèíûå äà óòèíûå.

   — À êóäàê-òàê-òàê! Íå áûëî â íàñ òàê! — êðè÷èò Êîñòÿ âî âñå ãîðëî è, ðàññûïàâ îòêóäà-òî âçÿâøèåñÿ çîëîòûå îðåøêè âñå, êàê îäèí, îñòàíàâëèâàåòñÿ ó ãàëàíòåðåéíîãî ìàãàçèíà.

   ×òî-òî, ÷èðêíóâ áóäòî ñïè÷êîé è ÿðêî áëåñíóâ çåëåíûì îãîíüêîì, ñ áîëüþ çàâåðòåëîñü â ìîçãó.

   — Ýõ âû, êóðû ðÿáûå, êîíîïëÿíûå! — ðâàíóë Êîñòÿ äâåðü ãàëàíòåðåéíîãî ìàãàçèíà, ðàñïàõíóâ ñâîþ øóáó èç ìàêîâîãî ëèñòà, âçàðèëñÿ íà Ëèäî÷êó.

   Ëèäî÷êà, íàñìåðòü ïåðåïóãàííàÿ, âûòàðàùèëà ãëàçåíêè è, íå ïèñêíóâ, ïðèñåëà îò ñòðàõà.

   À îí, êóñàÿ ãóáó, äðîæàë âåñü è, ïðèáëèçèâøèñü ê ïðèëàâêó, çàíåñ áûëî íîãó, íàìåðåâàÿñü ïåðåìàõíóòü, íî ðàçäóìàë.

   Èçîãíóëñÿ âåñü, íàùóïàë ïðèñåâøóþ Ëèäî÷êó, âûòÿíóë åå, è, ïðèòÿíóâ ê ñåáå, âïèëñÿ ãóáàìè, è öåëîâàë â ãóáû è ùåêè, öåëîâàë âçàñîñ, ïðèñâèñòûâàÿ, ïðè÷ìîêèâàÿ, ïðèãîâàðèâàÿ, è âäðóã, øèðîêî ðàçèíóâ ðîò, çàêóñèë åå ñàõàðíî-âûòî÷åííûé íîñèê…

   Àõíóëà Ëèäî÷êà, çàêàòèëà ãëàçêè è îáìåðëà.

   Îáìåðëà è áåç ïàìÿòè, êàê òðóï, íå ïðîòèâèëàñü óæ ýòèì ñòðàøíûì îáúÿòüÿì».

   Èëè â äðóãîì ìåñòå:

   «À â ÷óëàíå ìåæ äâåðåé, çàáèâøèñÿ â ÷óëàí, ñèäèò íà ïîãàíîì âåäðå, ðàçäåòûé, â äëèííûõ ÷åðíûõ ÷óëêàõ, Êîñòÿ, íå Êîñòÿ Êëî÷êîâ, à Êîñòÿ Ñàâàîô, íå Êîñòÿ Êëî÷êîâ, à âîðîíà, è ñèäèò, íåñåò ÿéöà ãóñèíûå äà óòèíûå, ñ÷èòàåò òàðàêàíüè øêóðêè, ÷òîáû íèêîìó óæ âïåðåä íå ñ÷èòàòü, êîâûðÿåò ñâîé êðèâîé èçóðîäîâàííûé íîñ, êîâûðÿåò ñ æàðîì, ñ óäîâîëüñòâèåì».

   À âîò êàê ðèñóåò Ðåìèçîâ ñòàðèêà:

   «Ñèäåë ñòàðèê, íå äâèãàëñÿ.

   È óæ êàçàëîñü åìó, â ãîëîâå ó íåãî çàâåëèñü òàðàêàíû, è áûëà ãîëîâà ïîëíà òàðàêàíüèõ ÿèö, òàê ÷òî ïåðëî. Îí ÷óâñòâîâàë, èç ãëàç óæå âûñîâûâàþòñÿ òàðàêàíüè óñû, ÷óâñòâîâàë çàïàõ òàðàêàíüèõ ÿèö è íå äâèãàëñÿ.

   Áûë îí ïîõîæ íà òî ñòðàøíîå, — îíî ñòåðåæåò âñÿêîå æèâîå, îíî ñòîèò ïîä äåðåâüÿìè, è, ïîäñëóøàâ ñ÷àñòëèâîå ñëîâî, âû÷åðêèâàåò êðîâüþ, è îòêðûâàåò ÷óòü âèäíóþ ùåëêó äëÿ ãëóáîêîé áåäû».

   Íå äàþò ïîêîþ Ðåìèçîâó òàðàêàíû!

   Òàê æå òÿæåëî è êîøìàðíî îïèñûâàåò Ðåìèçîâ íåçäîðîâûå ñëàäîñòðàñòíûå ñíû äåâóøêè Ðàè, è íî÷íûå âîçâðàùåíèÿ äâóõ ïðèêàç÷èêîâ èç âåñåëîãî äîìà «Íîâûé ñâåò», è èõ ãíóñíûå èçäåâàòåëüñòâà íàä ìàëü÷èøêîé ïðè ìàãàçèíå, êîòîðîãî ìàñòåð çàñòàâëÿåò òî öåëîâàòü ñåáÿ â ïÿòêó, òî ïèòü èç îäíîé íåîáõîäèìîé ïîñóäû. Òîëüêî Õðèñòèíà Ôåäîðîâíà, ñ åå ìÿòóùåéñÿ äóøîé è ïîñëåäíåé ëþáîâüþ, è óìèðàþùàÿ äåâóøêà Êàòÿ ÿâëÿþòñÿ äâóìÿ íåæíûìè, ÷èñòûìè ïÿòíàìè íà ìðà÷íîì è ãðÿçíîì ôîíå ðåìèçîâñêîãî ðîìàíà.

   Ìíîãîå îñòàåòñÿ îêîí÷àòåëüíî íåïîíÿòíûì ÷èòàòåëþ — äî òàêîé ñòåïåíè èíäèâèäóàëüíà ìàíåðà ïèñüìà Ðåìèçîâà, íî, ìîæåò áûòü, îí íàðî÷íî ïðèáåãàåò ê íåé, ïîòîìó ÷òî íå ìåíåå òåìíà è áåññìûñëåííà æèçíü âûçâàííûõ èì ïðèâèäåíèé ñ èñêàæåííûìè ëèöàìè. È ìîæåò áûòü, óìûøëåííî ÷åðïàë àâòîð ñâîé ëåêñèêîí â èäèîòèçìàõ ìåñòíîé æèçíè, â êîòîðîé, ïî åãî âûðàæåíèþ, «çâåíåëà áðàíü, ñâåðëèëî â óøàõ, êëåâàëî â òåìÿ, ïèõàëî ïîä æèâîò». Äèêîâèííûå ñëîâà: ÷ó÷ó, øêàìàðäà, õóäîðáà, íàäîëáà, ïëåøíÿê, óõàáà, øêóëåïà, ãóíäûðêà — òàê è ïåñòðÿò, òàê è ñêà÷óò íà êàæäîé ñòðàíèöå.

   Íî íàðÿäó ñ òàêîé ïðÿíîñòüþ ðóãàòåëüíûõ ñëîâ, Ðåìèçîâó øèðîêî çíàêîì è íàñòîÿùèé ñåâåðíûé êðåïêèé ðóññêèé ÿçûê, è ðàñïîðÿæàåòñÿ èì Ðåìèçîâ, êîãäà çàõî÷åò, ïîëîæèòåëüíî áëåñòÿùå, ñ áîëüøîé îðèãèíàëüíîñòüþ, íàõîä÷èâîñòüþ è ãèáêîñòüþ. È ïðèðîäó îí ÷óâñòâóåò î÷åíü òîíêî â òåõ ñëó÷àÿõ, êîãäà åãî íå óâëåêàåò â ïûøíîå ïóñòîñëîâèå êàêàÿ-òî òàèíñòâåííàÿ ñèëà. Êàêèì, íàïðèìåð, ñâîåîáðàçíûì ëèðèçìîì äûøèò åãî çèìíÿÿ íî÷ü:

   «Óäàðÿë ëþòûé ìîðîç. ×àñòûå ãóñòûå çâåçäû ðàññûïàëèñü ïî íåáó — çîëîòî ïî öàðñêîìó äâîðó. Òàì, êàçàëîñü, ñèäåë öàðü ñ öàðèöåé. Ñ÷èòàë öàðü ñâîè áîãàòñòâà, ïèë èç ÷àøè, íàíèçûâàëà öàðèöà çâåçäíûé áèñåð».

   Èëè â äðóãîì ìåñòå:

   «Áûëî ñâåòëî è ÿñíî îò ïðûùóùåãî çåëåíîâàòîãî öâåòà.

   Áîãàòûì æåì÷óãîì ðÿäèëèñü äåðåâüÿ.

   Êðåïêèå âåòâè ñêðèïåëè ïîä òÿæåñòüþ áåëûõ äðàãîöåííîñòåé.

   Ãíèëîå æèëüå, èçìó÷åííûå ÷åðíûå îêíà, ïðîäûìëåííûå êðûøè óêðàøàëèñü ñåðåáðîì, áóäòî â ñêàçêå…»

   Êîíå÷íî, ó÷èòü Ðåìèçîâà, êàê íàäî ïèñàòü, íàì íå ïðèõîäèòñÿ. Íî è â øàðëàòàíñòâå åãî íå ðåøèøüñÿ óïðåêíóòü. Îí âåñü â ïåðèîäå èñêàíèé è, ïî÷åì çíàòü, ìîæåò áûòü, èäåò ñâîèì ñáèâ÷èâûì, êàïðèçíûì, òåìíûì ïóòåì ê êàêîé-íèáóäü áîëüøîé öåëè?

1908

———————————————————

   Âïåðâûå îïóáëèêîâàíî: Ñîâðåìåííûé ìèð. 1908, èþëü. 7. Îòä. II. Ñ. 125-127.

   

   

   

   

Обновлено и опубликовано Опубликовано:

Использование терминов: Jenkins, CI/CD.

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

Установка плагина

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

Переходим к настройкам Jenkins

Кликаем по Управление плагинами:

В настройках Jenkins переходим к управлению плагинами

Переходим на вкладку Доступные и ищем нужный нам плагин по слову «pipeline». Мы получим большое количество результатов — нам нужен плагин с названием «Pipeline»:

Находим плагин pipeline и выбираем его для установки

Внизу экрана нажимаем Install without restart:

Кликаем по кнопке установки плагинов без перезагрузки Jenkins

Мы увидим полный список компонентов, которые нужно будет установить для плагина — дожидаемся окончания процесса (мы должны увидеть «Успешно» или «Success»):

Ждем, пока не установятся все компоненты

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

После завершения установки, можно вернуться на главную страницу, кликнув по одноименной ссылке:

Возвращаемся на главную страницу Jenkins

Наша система готова для создания конвейера.

Создание и настойка задания

На главной странице Jenkins кликаем по Создать Item:

Переходим к созданию нового элемента в Jenkins

Даем название нашей задаче и ниже выбираем Pipeline:

Даем название элементу и выбираем тип Pipeline

Нажимаем кнопку OK:

Нажимаем OK для создания элемента в Jenkins

Прокручиваем страницу вниз до подраздела «Pipeline» — сюда мы пишем скрипт на Groovy:

Доходим до поля, куда пишем pipeline на Groovy

Также у нас есть возможность использовать репозиторий Git в качестве источника файла Jenkinsfile, выбрав в подразделе «Definition» Pipeline script from SCM и Git:

Возможность использовать Git для загрузки пайплайна

… но мы в данной инструкции будем рассматривать написание кода напрямую в Jenkins.

Для начала, напишем приветствие:

pipeline {
    agent any

    stages {
        stage(‘Hello’) {
            steps {
                echo ‘Hello World’
            }
        }
    }
}

Существует 2 способа написания pipeline — скриптовый и декларативный. В нашем примере используется последний. Благодаря строгому синтаксису, он проще читается — в декларативном пайплайне обязательно должны быть:

  1. Директива pipeline. В нее мы оборачиваем наш код.
  2. Определение агента. В нашем примере пока не задан конкретный (agent any), но ниже мы рассмотрим запуск конвейера в docker.
  3. Необходима директива stages, в которой, в свою очередь, определены стадии (stage).
  4. Обязательно указываем steps, в котором и будет наш код.

А также:

  • Экранирование некоторых символов можно сделать с помощью обратного слеша —
  • Блок текста, например для его написания в несколько строк, можно обернуть в три одинарные кавычки — »’
  • Оставить комментарий на одну строку можно двумя прямыми слешами — //
  • Блок комментария делаем так — /* комментарий */

И нажимаем Сохранить:

Сохраняем первый pipeline

* наш скрипт на Groovy будет сохранен в так называемый Jenkinsfile — это файл, в котором мы описываем этапы выполнения нашего задания с использованием pipeline.

Нас перекинет на страницу задания — слева кликаем по Собрать сейчас:

Делаем первый запуск нашего Pipeline

Конвейер немного поработает и выдаст результат, состоящий из одного шага:

Наше задание с приветствием успешно завершено

Созданное задание работает — попробуем его усложнить.

Разбиваем обработку на этапы

Открываем на редактирование наше задание:

Переходим к настройкам задания

Перемещаемся вниз и пишем следующий код на Groovy:

pipeline {
    agent any

    stages {
        stage(‘Сборка’) {
            steps {
                echo ‘Выполняем команды для сборки’
            }
        }
        stage(‘Тестирование’) {
            steps {
                echo ‘Тестируем нашу сборку’
            }
        }
        stage(‘Развертывание’) {
            steps {
                echo ‘Переносим код в рабочую среду или создаем артефакт’
            }
        }
    }
}

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

Сохраняем изменения и запускаем задачу на выполнение:

Выполняем задачу, разделенную на этапы

После ее завершения мы должны увидеть что-то на подобие:

Первый результат выполнения задания, разделенного на 3 этапа

Попробуем посмотреть чуть подробнее протокол выполнения — кликаем по изображению стрелки справа от названия задания и выбираем Последняя стабильная сборка (или просто Последняя сборка):

Переходим к последней сборке

Кликаем по Console Output:

Переходим в подробному выводу данных во время сбоки кода

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

Обработка в Docker

Jenkins может выполнять задание внутри Docker. Таким образом, мы можем использовать контейнеры с настроенной средой, необходимой для тестирования и сборки кода и получения необходимых артефактов.

Рассмотрим настройку сервера для возможности использовать Docker и пример кода на Groovy.

Подготовка системы

Мы должны выполнит ряд действий:

  • Установку плагина для работы Jenkins с Docker.
  • Установку сервиса Docker в системе.
  • Настройку привилегий.

1. Начнем с установки плагина. На главной странице Jenkins переходим в настройки:

Переходим к настройкам для установки плагина docker

Кликаем по разделу Управление плагинами:

Заходим в раздел управления плагинами

Среди списка плагинов находим «Docker Pipeline» и отмечаем его для установки:

Отмечаем для установки плагин по работе с docker из pipeline

Переходим к установке:

Выполняем установку плагина Docker Pipeline

… и доживаемся ее окончания.

2. Подключаемся к консоли по SSH и выполняем Установку Docker.

3. Чтобы можно было подключиться к Docker из Jenkins, необходимо, чтобы пользователь jenkins входил в группу docker — для этого выполняем команду:

usermod -a -G docker jenkins

После необходимо перезапустить дженкинс:

systemctl restart jenkins

Среда готова для работы с контейнерами.

Использование агента docker

Переходим к настройке нашего задания или создаем новое и приводим Groovy-код к такому виду:

pipeline {
    agent { docker { image ‘python:latest’ } }

    stages {
        stage(‘Подготовка’) {
            steps {
                sh «python —version»
            }
        }
        stage(‘Сборка’) {
            steps {
                echo ‘Выполняем команды для сборки’
            }
        }
        stage(‘Тестирование’) {
            steps {
                echo ‘Тестируем нашу сборку’
            }
        }
        stage(‘Развертывание’) {
            steps {
                echo ‘Переносим код в рабочую среду или создаем артефакт’
            }
        }
    }
}

* обратите внимание, мы изменили агента на docker с указанием образа, в котором будет выполняться обработка — в данном примере, с помощью python (последней версии). Также мы добавили этап Подготовка, в котором просто выведем на экран версию python.

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

Результат работы Groovy с использованием образа docker с python

Для подробного просмотра хода процесса (или решения проблем в случае их возникновения), кликаем по стрелке справа от названия задания и переходим к сборке:

Переходим к последней сборке для нашего задания

Переходим к консоли:

Кликаем по Console Output для перехода к подробному логу выполнения

Если задание выполнено успешно, среди логов мы должны увидеть версию используемого в контейнере Docker python:

По строгому как пишется

Читайте также

Некоторые инструкции, которые могут оказаться полезными:

1. Установка Jenkins на Ubuntu

2. Установка Jenkins на CentOS

Alexey Viktorov

40015

Ivan Butko:

Здравствуйте. 

Ни разу не заказывал во фрилансе. Хочу попробовать, прочитал все правила, но остались некоторые вопросы. 

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

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

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

Не понимаю, как поступить, если отсутствует большая сумма на реализацию всех задумок сразу. 

А если исполнитель за это увеличит стоимость?

Я думаю лучше разместить полное ТЗ, согласовать полную стоимость и оговаривать какую часть из этого делать сейчас и за сколько. В дальнейшем делать персональную заявку на продолжение.

Dmitry Fedoseev

66034

Как так? Столько лет заседать на форум и до сих пор не знать, что в индикаторе не может быть торговой панели!

И вообще, какие могут панели, если нет денег?

Sofiia Butenko

16071

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

Если один человек делает работу ему намного проще сделать сразу все дополнения, тем более многие дополнения нужно учитывать сразу при разработке алгоритма. Дополнение может обойтись +5-10 для человека который уже вник в работу, ориентируется в своем коде, а можно и за каждым дополнением делать отдельный заказ +30++. Это же совсем другие деньги. 

Можно попросить скинуть цену если ТЗ будет лаконичное, понятное, обдуманное. Т.е. не «вот посмотрите это видео» или «вот такие-то паттерны», а четко прописано —  «если вот то больше вот этого настолько пунктов — показывать сигнал вот такой» и т.д. чтоб не приходилось уточнять и сочинять, а только нужно было закодить. Это очень экономит время. Часто из-за хорошего ТЗ делаю скидку. 

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

Dmitry Fedoseev

66034

Alexey Viktorov #:

А если исполнитель за это увеличит стоимость?

///

Естественно, за это всегда увеличивается стоимость.

Ivan Butko

6801

Alexey Viktorov #:

А если исполнитель за это увеличит стоимость?

Я думаю лучше разместить полное ТЗ, согласовать полную стоимость и оговаривать какую часть из этого делать сейчас и за сколько. В дальнейшем делать персональную заявку на продолжение.

Спасибо, принял к сведению

Ivan Butko

6801

Dmitry Fedoseev #:

Как так? Столько лет заседать на форум и до сих пор не знать, что в индикаторе не может быть торговой панели!

И вообще, какие могут панели, если нет денег?

Я только начал изучать язык, но не дошëл ещë до этого параграфа)))) 

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

Ivan Butko

6801

Sofiia Butenko #:

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

Если один человек делает работу ему намного проще сделать сразу все дополнения, тем более многие дополнения нужно учитывать сразу при разработке алгоритма. Дополнение может обойтись +5-10 для человека который уже вник в работу, ориентируется в своем коде, а можно и за каждым дополнением делать отдельный заказ +30++. Это же совсем другие деньги. 

Можно попросить скинуть цену если ТЗ будет лаконичное, понятное, обдуманное. Т.е. не «вот посмотрите это видео» или «вот такие-то паттерны», а четко прописано —  «если вот то больше вот этого настолько пунктов — показывать сигнал вот такой» и т.д. чтоб не приходилось уточнять и сочинять, а только нужно было закодить. Это очень экономит время. Часто из-за хорошего ТЗ делаю скидку. 

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

Огромное спасибо за развëрнутый ответ. 

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

Georgiy Merts

9332

Ivan Butko

Здравствуйте.  Ни разу не заказывал во фрилансе. Хочу попробовать, прочитал все правила, но остались некоторые вопросы.

Я хочу заказать не совсем простой индикатор с торговой панелью. 

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

У тебя неплохой авторитет на форуме, соответственно, и к твоим словам народ будет прислушиваться больше. Если идея стоящая — результаты должны удовлетворить вас обоих.

Ivan Butko

6801

Georgiy Merts #:

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

Вариант!

Georgiy Merts #:

У тебя неплохой авторитет на форуме, соответственно, и к твоим словам народ будет прислушиваться больше. Если идея стоящая — результаты должны удовлетворить вас обоих.

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

Georgiy Merts

9332

Ivan Butko #:

Вариант!

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

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

  • По статейно как пишется
  • По среди комнаты как пишется
  • По старому пути как пишется
  • По старенькому как пишется
  • По соседству или по соседству как пишется правильно