|
Не совсем правильно считает регистр продажи | ☑ | ||
---|---|---|---|---|
0
deliv
03.03.22
✎
14:27
|
Вот код:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) МетодСписанияСебестоимости = УчетнаяПолитика.МетодСписанияСебестоимости(Дата); Если МетодСписанияСебестоимости = Неопределено Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не указан метод списания себестоимости в учетной политике"; Сообщение.Сообщить(); Отказ = Истина; Возврат; КонецЕсли; Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.Записать(); Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.Продажи.Записывать = Истина; Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Блокировка.Заблокировать(); Если МетодСписанияСебестоимости = Перечисления.УчетнаяПолитика.Средняя Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма |ПОМЕСТИТЬ втТЧТовары |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | &Период КАК Период, | втТЧТовары.Номенклатура КАК Номенклатура, | втТЧТовары.Номенклатура.Представление КАК НоменклатураПредставление, | втТЧТовары.Количество КАК Количество, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СебеСтоимостьОстаток, 0) КАК СебеСтоимостьОстаток, | втТЧТовары.Сумма КАК СуммаПродажи, | &Период КАК Период1 |ИЗ | втТЧТовары КАК втТЧТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | втТЧТовары.Номенклатура КАК Номенклатура | ИЗ | втТЧТовары КАК втТЧТовары)) КАК ОстаткиНоменклатурыОстатки | ПО втТЧТовары.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура"; Запрос.УстановитьПараметр("Период" , Дата); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Количество > Выборка.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает товара " + Выборка.НоменклатураПредставление + " в количестве " + (Выборка.Количество-Выборка.КоличествоОстаток); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; Если Выборка.Количество = Выборка.КоличествоОстаток Тогда Себестоимость = Выборка.СебеСтоимостьОстаток; Иначе Себестоимость = Выборка.СебеСтоимостьОстаток / Выборка.КоличествоОстаток * Выборка.Количество; КонецЕсли; Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход(); Движение.Период = Дата; Движение.Номенклатура = Выборка.Номенклатура; Движение.Количество = Выборка.Количество; Движение.СебеСтоимость = Себестоимость; Движение = Движения.Продажи.Добавить(); ЗаполнитьЗначенияСвойств(Движение, Выборка); Движение.Период = Дата; Движение.СебеСтоимость = Себестоимость; КонецЦикла; Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма |ПОМЕСТИТЬ втТЧТовары |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | &Период КАК Период, | втТЧТовары.Номенклатура КАК Номенклатура, | втТЧТовары.Номенклатура.Представление КАК НоменклатураПредставление, | втТЧТовары.Количество КАК Количество, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СебеСтоимостьОстаток, 0) КАК СебеСтоимостьОстаток, | ОстаткиНоменклатурыОстатки.Партия КАК Партия, | втТЧТовары.Сумма КАК СуммаПродажи, | &Период КАК Период1 |ИЗ | втТЧТовары КАК втТЧТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | втТЧТовары.Номенклатура КАК Номенклатура | ИЗ | втТЧТовары КАК втТЧТовары)) КАК ОстаткиНоменклатурыОстатки | ПО втТЧТовары.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | ОстаткиНоменклатурыОстатки.Партия.МоментВремени |ИТОГИ | Максимум(Количество), | СУММА(КоличествоОстаток), | СУММА(СуммаПродажи) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Период" , Дата); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает товара " + ВыборкаНоменклатура.НоменклатураПредставление + " в количестве " + (ВыборкаНоменклатура.Количество-ВыборкаНоменклатура.КоличествоОстаток); Сообщение.Сообщить(); КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; КоличествоСписать = ВыборкаНоменклатура.Количество; ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Количество = Мин(КоличествоСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток); Если Количество = ВыборкаДетальныеЗаписи.КоличествоОстаток Тогда Себестоимость = ВыборкаДетальныеЗаписи.СебеСтоимостьОстаток; Иначе Себестоимость = Количество / ВыборкаДетальныеЗаписи.КоличествоОстаток * ВыборкаДетальныеЗаписи.СебеСтоимостьОстаток; КонецЕсли; Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движение.Количество = Количество; Движение.СебеСтоимость = Себестоимость; КоличествоСписать = КоличествоСписать - Количество; Если КоличествоСписать <= 0 Тогда Прервать; КонецЕсли; КонецЦикла; Движение = Движения.Продажи.Добавить(); ЗаполнитьЗначенияСвойств(Движение, ВыборкаНоменклатура); Движение.Период = Дата; Движение.СебеСтоимость = Себестоимость; КонецЦикла; КонецЕсли; В зависимости от учетной политики рассчитываю себестоимость, но почему то если идёт по фифо то в регистре продажи отображаются не совсем верные записи и не правильно считают сумму продажи По средней считает все ок, не судите строго, только учусь) Мне кажется я уже написал много лишнего и не вижу просто какую-то очевидную ошибку. |
|||
1
ДенисЧ
03.03.22
✎
14:46
|
Мало текста
|
|||
2
Галахад
гуру
03.03.22
✎
15:13
|
Движение.СебеСтоимость = Себестоимость;
Себестоимость - это себестоимость одной партии, а нужна сумма. |
|||
3
deliv
03.03.22
✎
21:43
|
Не подскажете как тогда изменить? Как раз таки если рассчитываю по фифо то в регистре продажи сумма продаж не правильно записывается, а когда по средней то все хорошо
|
|||
4
deliv
03.03.22
✎
21:44
|
Когда по средней то там партия пустая. Может когда по фифо пытаюсь, что-то в запросе не так?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |