1с расчет суммы табличной части. Играем с Перерасчетами

Расскажу про очень любопытный приём.

Однажды ко мне пришёл бухгалтер и спросил меня: можно ли как-то быстро посчитать сумму всех документов в журнале реализаций за 1 квартал 2013 года?

Я немного подумал и сделал вот так:

1. Зашёл в журнал "Реализация (акты, накладные)" и установил нужный период:

Важно! При этом обратите внимание, что одна из цифр выделена более темным цветом, так как я перед выделением строк щёлкнул по ней левой кнопкой мыши. Это важный момент, так как далее 1С будет суммировать выделенные строки именно по столбцу с выделенным значением.

3. Наконец, я нажал букву M в заголовке окна 1С:Предприятия:

5. И сообщил удивлённому бухгалтеру результат:

Сумма всех выделенных документов в этом периоде составила 8 746 995.

И точно также можно делать в любых журналах с любыми числовыми колонками (сумма, количество и т.д.).

Кроме того, вы можете выделять не все документы а только нужные при помощи следующего приёма:

  • зажмите на клавиатуре клавишу Ctrl.
  • левой кнопкой мыши выделяйте (или развыделяйте) нужные строки, но помните: щёлкать по строкам нужно только в пределах колонки, которую вы собираетесь суммировать.

Этот же приём можно применять для любых табличных частей.

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

Точнее налоговой базы для него.

Определение базы по налогу на прибыль достаточно простое. Это разница между доходами и расходами.

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

«Дружба» бухгалтерского и налогового учета выражается формулой, состоящей из четырех значений:

БУ = НУ + ПР + ВР,

  • БУ – сумма по бухгалтерскому учету;
  • НУ – сумма по налоговому учету;
  • ПР – постоянная разница;
  • ВР – временная разница.

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

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

В проводках 1С вместо одной суммы может фигурировать сразу 4 (по числу значений из вышеприведенной формулы). На рис.2 видим различные суммы амортизации по бухгалтерскому и налоговому учету. Разница между ними (83,34) образует временную разницу и находится в строчке с аббревиатурой «ВР ».

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

План счетов в 1С также имеет свои особенности. Все счета, на которых ведется учет по налогу на прибыль, имеют установленный флажок «НУ» (рис.3). Например, счета 20, 23, 25 принимают участие в формировании прибыли, а счет 19 на прибыль не влияет, для него флажок «НУ» не установлен.

Из-за этого в некоторых проводках по налоговому учету бывает заполнена либо дебетовая, либо кредитовая сумма. На рис.4 видим, что в проводке по начислению взносов в строчках по НУ есть сумма по дебету, но нет суммы по кредиту.

Получите 267 видеоуроков по 1С бесплатно:

Дело в том, что счет 68.01 не относится к налоговым счетам. Признак «НУ» для него не установлен (рис.5).

Для промежуточных расчетов по налогу на прибыль используется счет 68.04.2, которого нет в типовом плане счетов; этот субсчет добавили разработчики 1С (рис.6). Проводка Дт 68.04.2 Кт 99.09 на сумму 0.15 руб. нужна для округления суммы налога до целых значений.

Поиск и устранение ошибок по расчету налога на прибыль

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

Для контроля используется отчет «Анализ учета по налогу на прибыль» (рис.7).

Каждый раздел отчета можно раскрыть двойным щелчком и найти ошибочный документ. «Подозрительные» разделы выделены красной обводкой (рис.8).

Раскроем раздел «Прочие расходы по реализации…». Ниже (рис.9) видим документы, на основании которых получились данные суммы.

Чтобы вывести документы, нужно включить флажок «По документам»

Исправляем ошибки и получаем «красивый» отчет (рис.10).

Настройка налогового учета в 1С 8.3

В заключение — о двух вариантах ведения налогового учета в программах 1С. Так как применение ПБУ 18/02 в некоторых случаях не является обязательным, то ряд организаций могут вести учет без формирования постоянных и временных разниц. Необходимые настройки выполняются на закладке «Налог на прибыль» в (рис.11)

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

Давайте рассмотрим некоторые из них:

  • Для того, чтобы суммировать выбранные ячейки отчета, достаточно их выделить и на панели инструментов появится сумма ячеек. Выделять ячейки можно и те, которые не находятся рядом. Для этого нужно просто удерживать клавишу CTRL и левой кнопкой мыши выделять требуемые ячейки.
  • Если Вам нужно выбрать Контрагента в документе, а Вы забыли, как он называется. Начинается точно на "Агро". Просто поставьте курсор в нужное поле и начните набирать "Агро". Программа сама найдет контрагента "АгроПтица" и предложит Вам его выбрать.
  • "Живой" поиск значений — это самый удобный поиск в программе 1С. Работает в любом справочнике или документе. Выберите любую строчку в нужном столбце и просто набирайте текст. Обо всём остальном позаботится система "живого" поиска в 1С.
  • Бывают ситуации, когда в справочнике названия элементов просто не помещаются в одну строчку и Вам нужно изменить её высоту раза в два. На панели списка нажмите кнопку "Все действия" и из выпавшего меню выберите пункт "Изменить форму...". В появившемся окне "Свойства элемента формы" достаточно установить значение "Высота" — 2 и нажать кнопку "ОК".
  • Программа 1С может сохранять любые печатные формы в самом удобном для Вас формате. Просто сформируйте нужный отчет и нажмите на значок дискеты на панели управления. В появившемся окне "Сохранить как" введите название отчета, выберите подходящий формат и нажмите кнопку "Сохранить". Поддерживаются форматы: WORD, EXCEL, HTML, PDF, Текстовый файл и многие другие.
  • Чтобы автоматически установить нужную границу в документе, нажмите и удерживайте CTRL. Не отпуская ее сделайте двойной щелчок по правой границе колонки. Теперь ширина колонки станет как раз подходящей, чтобы полностью видеть значения полей или не занимать место таблицы пустотой ячеек.
  • Таким же способом можно и просто установить нужную ширину ячеек вручную. Удерживая CTRL, установите курсор мыши на границу ячейки и просто перетащите границу в нужное место.
  • Чтобы не тратить время на распечатку каждого документа отдельно, можно распечатать сразу группу документов. Откройте журнал требуемого вида документов. Удерживая CTRL, выделите нужные Вам документы и нажмите кнопку печати на панели управления. Если нужно выделить все документы их журнала, достаточно нажать комбинацию клавиш CTRL+A.
  • Если необходимо распечатать табличную часть документа, то нужно раскрыть пункт "Все действия" в журнале или документе. В появившемся меню выберите "Вывести список...". В окне настроек выберите колонки, которые необходимо распечатать и нажмите "ОК". После формирования списка просто нажмите на "печать" в верхней части окна.
  • Таким образом, не сложными, но действительно полезными маневрами можно сэкономить немало времени, а также повысить свою квалификацию как специалиста.

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

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

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

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

Что такое расчеты

В принципе, конечный продукт расчета зарплаты - это набор записей регистра расчета вида:

Сотрудник

Период

Вид расчета

Результат

Данные

Комментарий

Измерение

Служебный

Служебный

Реквизит

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

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

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

Виды расчетов

Каждая запись видов расчета имеет служебный реквизит - вид расчетов.

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

Для примера заведем план видов расчета Основной и в нем предопределенные виды расчета оклад , премия , невыход , командировка .

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

Вид расчета

Описание

Пример

По базовому периоду

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

Премия зависит по базовому периоду от оклада.

Вытеснение по периоду

Период действия зависимого периода вытесняет период действия базового периода, таким образом у базового периода появляется фактический

Невыход влияет на фактический период действия оклада.

Ведущие расчеты

Расчет зависит от ведущего расчета, но не прямо а косвенно, т.е. расчет А зависит от базового расчета Б, а расчет Б зависит от базового расчета В, следовательно А косвенно зависит от В, т.е. А зависит от ведущего расчета В. В самом деле, при изменении расчета В может измениться Б и следовательно может измениться А. Система автоматически не отслеживает такие сложные зависимости, поэтому нужно указывать какие расчеты являются ведущими.

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

В силу подобного влияния, период действия записи регистра расчетов делится на четыре периода:

Период

Описание

Период регистрации

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

Период действия

В каком периоде действует событие, т.е. к какому периоду относится событие.

Базовый период

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

Фактический период действия

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

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

Графики времени

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

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

Измерение, которое связывается с регистром расчета обычно носит смысл «вид графика».

Дата

Вид графика

Значение

11.01.05 пт

Пятидневка

11.01.05 пт

Шестидневка

12.01.05 сб

Пятидневка

12.01.05 сб

Шестидневка

Почему используется измерение дата, а не периодический регистр сведений? Все очень просто - если 11 января в пятницу по пятидневке у нас 8 рабочих часов, то это еще не значит, что на следующий день у нас будет опять же 8 рабочих часов. А ведь если бы мы использовали периодический регистр, значение на следующий день бралось бы из предыдущего дня при отсутствии записей.

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

Перерасчет

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

Для этого и служат перерасчеты.

Если мы рассчитаем базовые записи, то система отметит в перерасчетах, что нам нужно рассчитать зависимые записи. Как только мы рассчитаем зависимые записи, перерасчеты очистятся.

По сути перерасчеты - это список записей регистра расчета, которые нужно перерасчитать .

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

Если мы заведем измерение «Сотрудник» в перерасчете, то при изменении базового расчета по сотруднику в перерасчеты добавятся зависимые записи только по этому сотруднику.

Практическое задание

Достаточно теории. Попробуем изучить детали на практике. За основу возьмем каркасную конфигурацию.

Постановка задачи:

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

Командировочные пусть оплачиваются в двойном окладе + фиксированная сумма выплат за каждый день командировки.

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

Ход выполнения:

Начальная подготовка

Создадим новый план видов расчета «Основной».

Определим виды расчета и зависимости между ними:

Базовые

Вытесняющие

Ведущие

Оклад

Невыход, Командировка

Премия

Невыход, Командировка

Оклад, Невыход, Командировка

Командировка

Невыход

Занесем эти виды расчета в план видов расчета «Основной» и в свойствахвидов расчета поставим зависимости согласно таблице.

В регистре расчета зарплаты сделаем измерение «Сотрудник» типа «ФизическиеЛица » - чтобы в регистре был разрез аналитики по сотрудникам.

В конфигурации уже имеется документ «Начисление зарплаты».

В нем две даты в шапке - «дата» и «период регистрации», а также по две даты «дата начала» и «датаконца » в каждой строчке.

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

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

Модуль документа будет выглядеть примерно так:

Для К аждого ТекСтрокаСписок Из Список Цикл

// регистр Расчеты

Движение = Движения.Р асчеты.Добавить ();

Движение.С торно = Ложь;

Движение.В идРасчета = ТекСтрокаСписок.ВидРасчета ;

Движение.П ериодДействияНачало = НачалоДня (ТекСтрокаСписок.ДатаНачала );

Движение.П ериодДействияКонец = КонецДня ();

Движение.П ериодРегистрации = ПериодРегистрации ;

Движение.Б азовыйПериодНачало = НачалоДня (ТекСтрокаСписок.ДатаНачала );

Движение.Б азовыйПериодКонец = КонецДня (ТекСтрокаСписок.ДатаОкончания );

Движение.С отрудник = ТекСтрокаСписок.Сотрудник ;

Движение.Г рафикРаботы = ТекСтрокаСписок.График ;

Движение.Р езультат = 0;

Движение.Д анные = ТекСтрокаСписок.Размер ;

КонецЦикла ;

Реквизит Сторно нужен чтобы сторнировать записи (аналог минуса).

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

Все документы датировать будем 20.01.2003, период регистрации будем ставить 02.01.2003 (специально указываю не начальные и конечные данные, здесь это неважно, все равно при записи в ПериодРегистрации преобразуется в начало периода 01.01.2003). Январь 2003 года используем, потому что за этот период заполнены графики работ.

Заведем перерасчет «Перерасчет», добавим в него измерение «Сотрудник», связанное с измерением «Сотрудник».

Играем с Перерасчетами.

Для игры откроем консоль запроса - обработка «ПроизовльныйЗапрос » в каркасной конфигурации. Создадим новый запрос конструктором запроса, добавим туда виртуальную таблицу Перерасчеты.Р асчеты.Перерасчет , текст запроса будет таким:

ВЫБРАТЬ

РасчетыПерерасчет.О бъектПерерасчета ,

РасчетыПерерасчет.В идРасчета ,

РасчетыПерерасчет.С отрудник

ИЗ

РегистрРасчета.Р асчеты.Перерасчет КАК РасчетыПерерасчет

Сформируем три документа - первым начислим оклад сотрудникам А и Б. Сотрудник А работает с 1 по 31 января, Б работает с 1 по 20 января. Вторым начислим премию сотруднику Б за период с 1 по 31 января, третьим назначим невыход сотруднику А с 20 по 25 января.

Играем с Фактическим периодом действия.

Создадим новый запрос - на этот раз в него добавим данные таблицы РегистрыРасчета.Р асчеты.ФактическийПериодДействия .

Сформируем запрос и увидим, что сотруднику А период действия оклада разбит на два периода - с 1 по 19 и с 26 по 31 января. Надеюсь вам понятно, что период был разбит на два, т.к. невыход вытеснил оклад.

Думаю, механизмы работы регистра расчета проясняются на глазах.

Изучаем графики.

Теперь попробуем начислить зарплату по окладу сотрудника.

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

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

Колонка результата

Значение

ЗначениеПериодДействия

На какой период действия в часах была запись в регистре.

ЗначениеФактическийПериодДействия

Сколько сотрудник фактически проработал в часах

ЗначениеБазовыйПериод

Для оклада смысла не имеет, для премии - количество рабочих часов в базовом периоде.

ЗначениеПериодРегистрации

Сколько рабочих часов в периоде регистрации (месяц январь)

Число в 1С 8 — значение примитивного типа Число . Числовым типом может быть представлено любое десятичное число. С числовыми данными возможно совершать основные арифметические операции: сложение, вычитание, умножение и деление. Максимальное количество разрядов для числа в 1с 8: 38 знаков.

Литералы числа: набор цифр вида: [+|-]{0|1|2|3|4|5|6|7|8|9}[.{0|1|2|3|4|5|6|7|8|9}] В качестве разделителя целой и дробной части используется «.» (точка).

Пример 1. Создадим числовую переменную

ЧислоПи = 3.14;

Преобразование значений другого типа в число

Преобразовать в число можно значения строкового типа, либо логического типа (Булево ). Значение типа Булево преобразуется в число по следующим правилам:

  • Ложь преобразуется в 0;
  • Истина преобразуется в 1.

Значение типа Строка преобразуется в число в том случае, если оно является строковым представлением литерала численного типа.

Для преобразования существует специальная функция Число(<Значение>) , которая возвращает полученное число, если преобразование удалось и выдает сообщение об ошибке в противном случае.

Пример 2. Преобразовать в 1с число строку «1.25»

Строка = "1.25"; ПолученноеЧисло = Число(Строка);

После выполнения данного кода в переменной ПолученноеЧисло будет содержаться числовое значение 1.25

Пример 3. Преобразовать в число строку «Привет мир!»

Строка = "Привет мир!"; ПолученноеЧисло = Число(Строка);

При попытке выполнить данный код будет выдано сообщение об ошибке: «Преобразование значения к типу Число не может быть выполнено».

Функции работы со значениями типа Число в 1с 8.3

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

Цел

Цел(<Число>) . Возвращает целую часть числа переданного в параметре.

Пример 4. Определить делится ли число 121 на 11.

Делимое = 121; Делитель = 11; Результат = Делимое / Делитель; Если Цел(Результат) = Результат Тогда Сообщить("Делится нацело"); Иначе Сообщить("Не делится нацело"); КонецЕсли;

Результатом выполнения данного кода будет вывод на экран сообщения «Делится нацело».

Окр

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

  • 0 (или РежимОкругления.Окр15как10) . Округляет в меньшую сторону, то есть при округлении 1.5 будет возвращено 1;
  • 1 (или РежимОкругления.Окр15как20) . Округляет в большую сторону, то есть при округлении 1.5 будет возвращено 2;

Пример 5. Для того чтобы лучше разобраться с принципами округления рассмотрим округление до целого в меньшую и большую стороны, на ряде чисел от 1.1 до 1.9

Массив = Новый Массив; Шаг = 0.1; Число = 1; Пока Число < 1.9 Цикл Число = Число + Шаг; Массив.Добавить(Число); КонецЦикла; Для Каждого Стр Из Массив Цикл Сообщить("Исходное: "+Стр+" В меньшую: "+Окр(Стр,0,0)+" В большую:"+Окр(Стр,0,1)); КонецЦикла;

Pow

Pow(<Основание>, <Показатель>) . Возводит число переданное в первом параметре в степень переданную во втором параметре.

Пример 6. Извлечь квадратный корень из числа 144, а затем возвести его в квадрат, в итоге снова должно получится число 144.

Число = 144; КвКорень = Pow(Число, 1/2); Число = Pow(КвКорень, 2); Сообщить(Число);

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

Прочие функции работы со значениями типа Число в 1с 8.3

  • Log(<Число>) . Получает натуральный логарифм числа, переданного в параметре;
  • Log10(<Число>) . Получает десятичный логарифм числа, переданного в параметре;
  • Sin(<Угол>) . Получает синус угла, заданного в радианах. Угол передается в параметр;
  • Cos(<Угол>) . Получает косинус угла;
  • Tan(<Угол>) . Получает тангенс угла;
  • ASin(<Угол>) . Получает арксинус угла;
  • ACos(<Угол>) . Получает арккосинус угла;
  • ATan(<Угол>) . Получает арктангенс угла;
  • Exp(<Число>). Получает экспоненту от числа переданного в параметр.