|
Списание по ФИФО | ☑ | ||
---|---|---|---|---|
0
FuriKuri
13.03.13
✎
14:49
|
Такой вопрос. Есть Регистр накопление "ЗаявкиМатСклада". Документ "Заявки материального склада" делает приход по нему. Документ "перемещение товара" делает по нему расход. Например 12 числа было заявлено 3 заготовки, а потом 14 числа было заявлено 4 заготовки. 15 числа было перемещено, например 6 заготовок. Нужно чтоб она сначало списало первые 3 заготовки, а потом еще 3 со следующей заявки.
Я делаю это так: вырезка из Обработки проведения документа "Перемещение товара" где "Товары" - табличная часть документа Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаявкиМатСкладаОстаткиИОбороты.СкладЗаявитель, | ЗаявкиМатСкладаОстаткиИОбороты.Номенклатура, | ЗаявкиМатСкладаОстаткиИОбороты.Период КАК Период, | СУММА(ЗаявкиМатСкладаОстаткиИОбороты.ОстатокКонечныйОстаток) КАК ТребуемоеКоличество |ИЗ | РегистрНакопления.ЗаявкиМатСклада.ОстаткиИОбороты( | , | , | Запись, | , | СкладЗаявитель = &СкладПолучатель | И Номенклатура В (&Номенклатура)) КАК ЗаявкиМатСкладаОстаткиИОбороты | |СГРУППИРОВАТЬ ПО | ЗаявкиМатСкладаОстаткиИОбороты.Период, | ЗаявкиМатСкладаОстаткиИОбороты.СкладЗаявитель, | ЗаявкиМатСкладаОстаткиИОбороты.Номенклатура | |УПОРЯДОЧИТЬ ПО | Период УБЫВ"; Запрос.УстановитьПараметр("СкладПолучатель",СкладПолучатель); Запрос.УстановитьПараметр("Номенклатура",Товары.ВыгрузитьКолонку("Номенклатура")); Результат = Запрос.Выполнить(); ВыборкаТоваров=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаТоваров.Следующий() цикл Для каждого стр2 из Товары Цикл ОсталосьСписать=Стр2.Количество; Если ВыборкаТоваров.Номенклатура=стр2.Номенклатура тогда Если ОсталосьСписать<=ВыборкаТоваров.ТребуемоеКоличество тогда СписатьКоличество=ОсталосьСписать; ОсталосьСписать=ОсталосьСписать-СписатьКоличество; Иначе СписатьКоличество=ОсталосьСписать; Движение = Движения.ЗаявкиМатСклада.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период=Дата; Движение.Регистратор=Ссылка; Движение.Номенклатура=стр2.Номенклатура; Движение.СкладЗаявитель=СкладПолучатель; Движение.Остаток=СписатьКоличество; КонецЕсли; КонецЕсли; Но в итоге у меня списывает просто 6 заготовок. Подскажите пожалуйста в чем я ошибся? |
|||
1
lxndr
13.03.13
✎
14:56
|
во-первых тебе наверняка нужно измерение "Заявка" в регистр
|
|||
2
GLazNik
13.03.13
✎
14:58
|
(0) "потом еще 3 со следующей заявки" и где у тебя в регистра заявка?
|
|||
3
FuriKuri
13.03.13
✎
15:01
|
(1) В регистре у меня у меня измерения "СкладЗаявитель" и "Номенклатура" и ресурс - "Количество". Зачем нужна еще заявка?
|
|||
4
lxndr
13.03.13
✎
15:02
|
(3)
> Нужно чтоб она сначало списало первые 3 заготовки, а потом еще 3 со следующей заявки. Это же твое требование |
|||
5
shuhard
13.03.13
✎
15:02
|
(3) попробуй сделать без измерения
хотя на куя делать из оборотов остатки , когда это умеет платформа ? |
|||
6
FuriKuri
13.03.13
✎
15:07
|
(4) Немного не понимаю.
например в регистре такие записи: + 12.03 Перемещение Склад Заготовка 3 + 13.03 Перемещение Склад Заготовка 4 И нужно чтоб добавило расход - 14.03 Перемещение Склад Заготовка 3 - 14.03 Перемещение Склад Заготовка 3 (если другой остаток(1 2 3 4) зависящий от количества перемещенных товаров) |
|||
7
GLazNik
13.03.13
✎
15:10
|
(6) не мучайся. добавь измерение "Заявка". или хотя б дату заявки.
|
|||
8
FuriKuri
13.03.13
✎
15:11
|
(7) и в это измерение поместить ссылку на документ поступления?
|
|||
9
FuriKuri
13.03.13
✎
15:11
|
(8) ой, то есть заявки
|
|||
10
GLazNik
13.03.13
✎
15:13
|
(9) да
|
|||
11
FuriKuri
13.03.13
✎
15:13
|
(10) а в чем смысл, если в регистре есть автоматически ссылки на регистратор и на период
|
|||
12
lxndr
13.03.13
✎
15:14
|
(6)
Как ты поймешь, закрыта по какой заявке расход из одинаковых строк? - 14.03 Перемещение Склад Заготовка 3 - 14.03 Перемещение Склад Заготовка 3 Как понять какая заявка закрыта/не закрыта? |
|||
13
GLazNik
13.03.13
✎
15:14
|
(11) смысл в том, что для определения Заявки не надо перебирать все движения по регистру
|
|||
14
FuriKuri
13.03.13
✎
15:18
|
(13) Добавил, но что то не очень понимаю каким образом мне отбор делать сейчас.
|
|||
15
FuriKuri
13.03.13
✎
15:28
|
Никто не подскажет?
|
|||
16
GLazNik
13.03.13
✎
15:29
|
(14) запрос по остаткам, плюс сортировка по заявке.
|
|||
17
FuriKuri
13.03.13
✎
15:37
|
(16)сейчас попробую.
|
|||
18
FuriKuri
13.03.13
✎
15:42
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ЗаявкиМатСкладаОстатки.СкладЗаявитель КАК СкладЗаявитель, | ЗаявкиМатСкладаОстатки.Номенклатура КАК Номенклатура, | ЗаявкиМатСкладаОстатки.Заявка КАК Заявка, | ЗаявкиМатСкладаОстатки.ОстатокОстаток |ИЗ | РегистрНакопления.ЗаявкиМатСклада.Остатки( | , | СкладЗаявитель = &СкладПолучатель | И Номенклатура = &Номенклатура) КАК ЗаявкиМатСкладаОстатки | |СГРУППИРОВАТЬ ПО | ЗаявкиМатСкладаОстатки.Номенклатура, | ЗаявкиМатСкладаОстатки.СкладЗаявитель, | ЗаявкиМатСкладаОстатки.Заявка, | ЗаявкиМатСкладаОстатки.ОстатокОстаток | |УПОРЯДОЧИТЬ ПО | Заявка УБЫВ"; Как то так да? |
|||
19
lxndr
13.03.13
✎
15:59
|
(18)
1. Отбор лучше делать не по одной номенклатуре, а по всей из документа перемещения. 2. Группировать ничего не надо. 3. Удобнее обходить результат запроса, когда будут итоги по номенклатуре и детальные записи с заявками. п.с. Реши (или найди решение) любую задачу со спеца по платформе на оперативный учет. |
|||
20
FuriKuri
13.03.13
✎
18:10
|
Сделал так:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаявкиМатСкладаОстаткиИОбороты.ОстатокПриход, | ЗаявкиМатСкладаОстаткиИОбороты.СкладЗаявитель, | ЗаявкиМатСкладаОстаткиИОбороты.Номенклатура КАК Номенклатура, | ЗаявкиМатСкладаОстаткиИОбороты.Заявка КАК Заявка, | ЗаявкиМатСклада.Остаток |ИЗ | РегистрНакопления.ЗаявкиМатСклада.ОстаткиИОбороты( | , | , | , | , | Номенклатура В (&Номенклатура) | И СкладЗаявитель = &Склад) КАК ЗаявкиМатСкладаОстаткиИОбороты, | РегистрНакопления.ЗаявкиМатСклада КАК ЗаявкиМатСклада | |СГРУППИРОВАТЬ ПО | ЗаявкиМатСкладаОстаткиИОбороты.ОстатокПриход, | ЗаявкиМатСкладаОстаткиИОбороты.СкладЗаявитель, | ЗаявкиМатСкладаОстаткиИОбороты.Номенклатура, | ЗаявкиМатСкладаОстаткиИОбороты.Заявка, | ЗаявкиМатСклада.Остаток | |УПОРЯДОЧИТЬ ПО | Заявка"; Запрос.УстановитьПараметр("Склад",СкладПолучатель); Запрос.УстановитьПараметр("Номенклатура",Товары.ВыгрузитьКолонку("Номенклатура")); Результат = Запрос.Выполнить(); ВыборкаТовара=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Индекс=0; Для каждого стр из Товары Цикл Пока ВыборкаТовара.Следующий() цикл СуммаОстаток=ВыборкаТовара.Остаток; Если ВыборкаТовара.Остаток<0 тогда Продолжить; Иначе СуммаСписать=Стр.Количество-Индекс; Если СуммаСписать>0 Тогда Если СуммаОстаток<СуммаСписать тогда СуммаСписать=СуммаОстаток; Движение = Движения.ЗаявкиМатСклада.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период=Дата; Движение.Регистратор=Ссылка; Движение.Номенклатура=стр.Номенклатура; Движение.СкладЗаявитель=СкладПолучатель; Движение.Остаток=СуммаСписать; Индекс= Индекс+СуммаСписать; Иначе Движение = Движения.ЗаявкиМатСклада.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период=Дата; Движение.Регистратор=Ссылка; Движение.Номенклатура=стр.Номенклатура; Движение.СкладЗаявитель=СкладПолучатель; Движение.Остаток=СуммаСписать; Индекс=Индекс+СуммаСписать; КонецЕсли; Иначе Сообщить("Все"); Продолжить; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Если проводить одним документом, то раскидвает хорошо, но если остальную часть перемещать следующим документом, то криво выводятся остатки. Не понимаю как закрывать именно один приход расходом. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |