Для реализации алгоритмов «FIFO» и «LIFO» (FIFO (первый пришел – первый ушел), LIFO (последний пришел – первый ушел)) необходимо добавить на счет учета ТМЦ субконто «Партии». Тогда определяется текущая стоимость товара и текущий остаток первой (последней) партии товара. Их отношение дает нам цену партии товара. Если остаток по партии товара меньше, чем реализуется, тогда выбираем следующую партию товаров и так далее.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
БИ=СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто("ЦенныеБумаги",ЦБ,2); БИ.ИспользоватьСубконто("ПартииЦБ"); БИ.ВыполнитьЗапрос(,ТекущийДокумент(),"58.6"); Если Константа.МетодОпределенияСебестоимости = Перечисление.МетодыОпределенияСебестоимости.ФИФО Тогда БИ.ВыбратьСубконто(2,,,,,,0); Иначе БИ.ВыбратьСубконто(2,,,,,,1); КонецЕсли; Кол=Количество; Пока БИ.ПолучитьСубконто(2)=1 Цикл Сум=БИ.СКД(1); Ост=БИ.СКД(3); Если Ост<=Кол Тогда // списываем весь остаток по партии СумСпис=Сум; КолСпис=Ост; ИначеЕсли Ост>Кол Тогда // списываем требуемое количество ЦенаСпис=Сум/Ост; КолСпис=Кол; СумСпис=Окр(КолСпис*ЦенаСпис,2); Иначе Продолжить; КонецЕсли; Операция.НоваяПроводка(); Операция.Дебет.Счет=Сч91_2; Операция.Кредит.Счет=Сч58_6; Операция.Кредит.ЦенныеБумаги=ЦБ; Операция.Кредит.ПартииЦБ=БИ.Субконто(2); Операция.Сумма=СумСпис; Операция.Количество=КолСпис; Кол=Кол-КолСпис; Если Кол=0 Тогда Прервать; КонецЕсли; КонецЦикла; Если Кол>0 Тогда Сообщить("Остаток меньше нуля"); НеПроводитьДокумент(); КонецЕсли; |