Добрый день!
Пытаюсь написать функционал списания себестоимости товаров при реализации. Конфигурация самописная.
Расчет себестоимости повожу средней.
Написал запрос для определения себестоимости товара на определенный момент времени:

```1c
    ВЫБРАТЬ
    ЗапасыОстатки.Номенклатура,
    ЗапасыОстатки.КоличествоОстаток,
    ЗапасыОстатки.СуммаОстаток
    ИЗ
    РегистрНакопления.Запасы.Остатки(&Период, Номенклатура = &Номенклатура) КАК ЗапасыОстатки
```

Получил что количество 3 шт, , себестоимость 15.91 руб.
После этого создал три расходных документов с одинаковым временем (включая секунды) и в каждом продовал по одному товару.
При проводке каждого из документов запрос показывал, что осталось 3 шт. и их себестоимость 15.91.
Списывал на каждый документ 15.91/3.
В результате получил, что осталось 0 штук, но себестоимость 0,01 руб.
Как с этим бороться????
Т.е. остаются остатки с нулевым количеством, но не нулевой себестоимостью.
---
Момент времени = время документа? Но тогда получается остатки по суммам.
---
Обычно это делается так: при списании товара проверяется, не всё ли списываем. Если нет - считаем по среднему. Если всё - весь остаток суммы.
---
есть еще проблема копеек как на экзамене на спеца.в книге есть код
---
Спасибо за ответы.
Я так и пробовал.
Если Стр.Количество = Стр.СебестКол Тогда
   Себестоимость = Стр.СебестСум;
   Иначе
   Себестоимость = Окр(Стр.Количество*Стр.СебестСум/Стр.СебестКол, 2);
   КонецЕсли;

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

Если можно в кратце напишите, а как эту проблему решают на экзамене на спеца. Пожалуйста!
---
Правильно ли будет в запросе на определения себестоимости указывать на одну секунду больше, чем время документа???
Но тогда если следующую секунду было поступление товаров, то их себестоимости соединяться. Но это лучше, чем себестоимость без количества.
---
сколько документов в день в базе делается? Если 10000, то, возможно, проблема и существует. Но как-то я сомневаюсь.
Если уж так приспичило, проще запретить записывать документы одним временем. Я подозреваю, что проблемы на самом деле нет и в реальности вероятность ее появления микроскопическая.
---
Вопрос чисто теоретический. Меня интересует, как писать правильный код.
Как вы считаете, вариант с добавлением секунды в запросе от времени документа продаж правильный??? Или грамотнее запретить создавать документы с одинаковым временем.
Мне кажется первый вариант лучше.
---
Разумеется если документ ранее был проведен, его нужно распровести, перед определением себестоимости через секунду.
---
В &Период надо передавать МоментВремени
---
Момент времени = время документа? Но тогда получается остатки по суммам.
---
Момент времени <> время документа

Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени.
Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.
---
Большое спасибо. Сейчас прочитаю про это.
---
Момент = Новый МоментВремени(ТекДокумент.Дата, ТекДокумент.Ссылка);

Большое спасибо за подсказку!!!!!!!!
---
Окр(Стр.Количество*Стр.СебестСум/Стр.СебестКол, 2); - за счёт округления всегда будут копейки в плюс / в минус.
досписывайте копейку при продаже в ноль и контролируйте дополнительно превышение себестоимости за счет округления.
---
Да. Моя ошибка была в том, что я использовал в запросе дату документа, а не момент времени.