powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Списание методом ФИФО
3 сообщений из 3, страница 1 из 1
Списание методом ФИФО
    #36796470
wuwei12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем !
Ребята, изучаю 1С Программирование, задачки решаю.
Вон тут на одну напоролся не знаю как сделать, подскажите плз!
Есть Работники, у каждого есть кредитные карты.
Соответственно есть Регистр Накопления ОстаткиУРаботников: Измерения (Работник, Номер Кредитной карты), Ресурсы (Сумма).
Существует документ ПоступлениеКарты с реквизитами (Работник, Номер Карты, Сумма), которые делает движение прихода в вышеупомянутом регистре. И Существует документ ОказаниеУслуги с реквизитами (Работник, Контрагент, Сумма), который должен списывать по методу ФИФО с карт Работника деньги. То есть брать первую выданную карту, списывать с неё, если не хватило списывать еще с других карт, принадлежащих работнику. Проблема в том, что в документе ОказаниеУслуги нету реквизита карты, то есть просто Конструктором Движений соответствие в Регистре ОстаткиУРаботников не сделаешь, я полагаю надо как-то программно кодировать. Или как ?
Пример немного нереальный, но идея я думаю понятна.
...
Рейтинг: 0 / 0
Списание методом ФИФО
    #36796932
RustamZz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запросом по регистру ОстаткиУРаботников получаешь остатки, упорядоченные по номеру карты, и в таком порядке обходишь выборку и списываешь остатки.
...
Рейтинг: 0 / 0
Списание методом ФИФО
    #36820557
SINAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wuwei12,
Пример
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Номенклатура,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество,
| МАКСИМУМ(РасходнаяНакладнаяТовары.Цена) КАК Цена,
| СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Документ
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Товары.Номенклатура КАК Номенклатура,
| ОстаткиНоменклатурыОстаткиИОбороты.Партия КАК Партия,
| ВТ_Товары.Количество КАК ТребуемоеКоличество,
| ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход КАК КоличествоОстаток,
| ОстаткиНоменклатурыОстаткиИОбороты.СуммаПриход КАК СуммаОстаток,
| ВТ_Товары.Сумма КАК Сумма,
| ВТ_Товары.Цена КАК Цена
|ИЗ
| ВТ_Товары КАК ВТ_Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты КАК ОстаткиНоменклатурыОстаткиИОбороты
| ПО ВТ_Товары.Номенклатура = ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| ОстаткиНоменклатурыОстаткиИОбороты.Партия.Ссылка УБЫВ,
| ОстаткиНоменклатурыОстаткиИОбороты.Партия.Дата УБЫВ
|ИТОГИ
| МАКСИМУМ(ТребуемоеКоличество),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток),
| МАКСИМУМ(Сумма)
|ПО
| Номенклатура";

Если Метод = Перечисления.УчетнаяПолитика.ФИФО Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"УБЫВ","ВОЗР");
КонецЕсли;

Запрос.УстановитьПараметр("Документ",Ссылка );
Результат = Запрос.Выполнить();
ВыборкаТовары = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаТовары.Следующий() Цикл

Если ВыборкаТовары.ТребуемоеКоличество>ВыборкаТовары.КоличествоОстаток Тогда //Проверяем остаток
Сообщить("Не хватает количества");
Отказ = Истина;
Продолжить;
КонецЕсли;

Себестоимость = 0;
ОсталосьСписать = ВыборкаТовары.ТребуемоеКоличество; //Общее необходимое количество
ВыборкаПартии = ВыборкаТовары.Выбрать();

Пока ВыборкаПартии.Следующий() Цикл

Если ВыборкаПартии.КоличествоОстаток<=ОсталосьСписать тогда
СписатьКоличество = ВыборкаПартии.КоличествоОстаток; //Количество по партиям отдельно
СписатьСебестоимость = ВыборкаПартии.СуммаОстаток; //Сумма по партиям отдельно
ОсталосьСписать = ОсталосьСписать-СписатьКоличество; //Общее количество - количество с "Партии"
Иначе
СписатьКоличество = ОсталосьСписать;
СписатьСебестоимость = ВыборкаПартии.СуммаОстаток/ВыборкаПартии.КоличествоОстаток*СписатьКоличество;
ОсталосьСписать = 0;

КонецЕсли;

//Делаем движение
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Номенклатура = ВыборкаПартии.Номенклатура;
Движение.Партия = ВыборкаПартии.Партия;
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Количество = СписатьКоличество;
Движение.Сумма = СписатьСебестоимость;

Если ОсталосьСписать = 0 Тогда
Прервать;
КонецЕсли;

КонецЦикла;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Списание методом ФИФО
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]