Найти тему
Develop

Продвинутый курс по программированию в 1С. Занятие 12. Особенности программирования в оперативном учете

Оглавление

Формула себестоимости: Сумма остаток / Количество остаток * Количество списания

Момент времени

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

Корректные остатки для контроля и расчета себестоимости необходимо получать не на дату документа, а на МоментВремени (Дата + Ссылка). Метод объекта МоментВремени() позволяет получить точное "расположение" нашего документа на оси времени.

Проблема копеек

Предположим, что расходной накладной мы продали все оставшиеся товары. Себестоимость = Сумма остатка / Количество остатка * Количество списания = 500 руб. / 3 шт. * 3 шт. = 166,66 руб. * 3 шт. = 499,98 руб.

После списания у нас остается нулевое количество товара и ненулевая себестоимость = 2 копейки. Другими словами остатки по регистру по количеству и сумме одновременно не выйдут в ноль. Решение проблемы довольно простое - в формуле поменять местами Сумму остатка и Количество списания. Себестоимость = Количество списания / Количество остатка * Сумма остатка = 3 шт. / 3 шт. * 500 руб.= 1 * 500 = 500 руб.

Блокировка данных

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

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

"Старая" и "новая" методики контроля остатков

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

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

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

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

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

"Новая" методика заключается в том, что сначала мы формируем и записываем движения документа, а потом проверяем, не сформировал ли он отрицательных остатков. Если появились отрицательные остатки, то не разрешаем провести документ.

Домашнее задание

1. Создать пустую конфигурацию 1С.

2. Создать:

  • справочник Товары,
  • документы ПриходнаяНакладная и РасходнаяНакладная с табличной частью Товары,
  • регистр накопления Товары с измерением Товар и ресурсом Количество,
  • регистр накопления Себестоимость с измерением Товар и ресурсами Количество и Сумма,
  • обработку РасчетСебестоимости

3. В документе ПриходнаяНакладная реализовать обработку проведения в оба регистра, используя конструктор движений.

4. В документе РасходнаяНакладная реализовать обработку проведения в регистр Товары и механизм контроля остатков по "новой" методике.

5. В обработке РасчетСебестоимости реализовать последовательное "проведение" документов РасходнаяНакладная в регистр Себестоимость:

  • перебор запросом проведенных документов РасходнаяНакладная с сортировкой по МоментуВремени;
  • формирование движений каждого документа в регистр Себестоимость по старой методике (себестоимость по средней) см. урок 6

6. Ввести пример в режиме 1С:Предприятие для проверки.