|
|
|
Списание методом ФИФО
|
|||
|---|---|---|---|
|
#18+
Добрый день всем ! Ребята, изучаю 1С Программирование, задачки решаю. Вон тут на одну напоролся не знаю как сделать, подскажите плз! Есть Работники, у каждого есть кредитные карты. Соответственно есть Регистр Накопления ОстаткиУРаботников: Измерения (Работник, Номер Кредитной карты), Ресурсы (Сумма). Существует документ ПоступлениеКарты с реквизитами (Работник, Номер Карты, Сумма), которые делает движение прихода в вышеупомянутом регистре. И Существует документ ОказаниеУслуги с реквизитами (Работник, Контрагент, Сумма), который должен списывать по методу ФИФО с карт Работника деньги. То есть брать первую выданную карту, списывать с неё, если не хватило списывать еще с других карт, принадлежащих работнику. Проблема в том, что в документе ОказаниеУслуги нету реквизита карты, то есть просто Конструктором Движений соответствие в Регистре ОстаткиУРаботников не сделаешь, я полагаю надо как-то программно кодировать. Или как ? Пример немного нереальный, но идея я думаю понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2010, 19:37 |
|
||
|
Списание методом ФИФО
|
|||
|---|---|---|---|
|
#18+
Запросом по регистру ОстаткиУРаботников получаешь остатки, упорядоченные по номеру карты, и в таком порядке обходишь выборку и списываешь остатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2010, 08:40 |
|
||
|
Списание методом ФИФО
|
|||
|---|---|---|---|
|
#18+
wuwei12, Пример Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество, | МАКСИМУМ(РасходнаяНакладнаяТовары.Цена) КАК Цена, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма |ПОМЕСТИТЬ ВТ_Товары |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Документ | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Товары.Номенклатура КАК Номенклатура, | ОстаткиНоменклатурыОстаткиИОбороты.Партия КАК Партия, | ВТ_Товары.Количество КАК ТребуемоеКоличество, | ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход КАК КоличествоОстаток, | ОстаткиНоменклатурыОстаткиИОбороты.СуммаПриход КАК СуммаОстаток, | ВТ_Товары.Сумма КАК Сумма, | ВТ_Товары.Цена КАК Цена |ИЗ | ВТ_Товары КАК ВТ_Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты КАК ОстаткиНоменклатурыОстаткиИОбороты | ПО ВТ_Товары.Номенклатура = ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура | |УПОРЯДОЧИТЬ ПО | Номенклатура, | ОстаткиНоменклатурыОстаткиИОбороты.Партия.Ссылка УБЫВ, | ОстаткиНоменклатурыОстаткиИОбороты.Партия.Дата УБЫВ |ИТОГИ | МАКСИМУМ(ТребуемоеКоличество), | СУММА(КоличествоОстаток), | СУММА(СуммаОстаток), | МАКСИМУМ(Сумма) |ПО | Номенклатура"; Если Метод = Перечисления.УчетнаяПолитика.ФИФО Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст,"УБЫВ","ВОЗР"); КонецЕсли; Запрос.УстановитьПараметр("Документ",Ссылка ); Результат = Запрос.Выполнить(); ВыборкаТовары = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаТовары.Следующий() Цикл Если ВыборкаТовары.ТребуемоеКоличество>ВыборкаТовары.КоличествоОстаток Тогда //Проверяем остаток Сообщить("Не хватает количества"); Отказ = Истина; Продолжить; КонецЕсли; Себестоимость = 0; ОсталосьСписать = ВыборкаТовары.ТребуемоеКоличество; //Общее необходимое количество ВыборкаПартии = ВыборкаТовары.Выбрать(); Пока ВыборкаПартии.Следующий() Цикл Если ВыборкаПартии.КоличествоОстаток<=ОсталосьСписать тогда СписатьКоличество = ВыборкаПартии.КоличествоОстаток; //Количество по партиям отдельно СписатьСебестоимость = ВыборкаПартии.СуммаОстаток; //Сумма по партиям отдельно ОсталосьСписать = ОсталосьСписать-СписатьКоличество; //Общее количество - количество с "Партии" Иначе СписатьКоличество = ОсталосьСписать; СписатьСебестоимость = ВыборкаПартии.СуммаОстаток/ВыборкаПартии.КоличествоОстаток*СписатьКоличество; ОсталосьСписать = 0; КонецЕсли; //Делаем движение Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Номенклатура = ВыборкаПартии.Номенклатура; Движение.Партия = ВыборкаПартии.Партия; Движение.Период = Дата; Движение.Склад = Склад; Движение.Количество = СписатьКоличество; Движение.Сумма = СписатьСебестоимость; Если ОсталосьСписать = 0 Тогда Прервать; КонецЕсли; КонецЦикла; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 11:08 |
|
||
|
|

start [/forum/topic.php?fid=28&fpage=100&tid=1522068]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 321ms |

| 0 / 0 |
