8.х Помогите прописать порядок списания

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Тимон, 1 апр 2011.

  1. TopicStarter Overlay
    Тимон
    Offline

    Тимон Опытный в 1С

    Регистрация:
    30 ноя 2010
    Сообщения:
    87
    Симпатии:
    0
    Баллы:
    26
    задание:Товар списывается по партиям.В Расходнои указывается партия.Если остатка в партии не хватает,то программа должна автоматически списывать товар по учетнои политике на данныи период.Не получается прописать последнее,помогите пожалуиста.
    Код:
     Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |	ВложенныйЗапрос.Товар,
    |	ВложенныйЗапрос.Количество,
    |	КонтрольТовараОстатки.СуммаОстаток КАК Сумма,
    |	ЕСТЬNULL(КонтрольТовараОстатки.КоличествоОстаток, 0) КАК Остаток,
    |	ВложенныйЗапрос.Партия
    |ИЗ
    |	(ВЫБРАТЬ
    |		РасходнаяНакладнаяТЧ.Товар КАК Товар,
    |		СУММА(РасходнаяНакладнаяТЧ.Количество) КАК Количество,
    |		РасходнаяНакладнаяТЧ.Партия КАК Партия
    |	ИЗ
    |		Документ.РасходнаяНакладная.ТЧ КАК РасходнаяНакладнаяТЧ
    |	ГДЕ
    |		РасходнаяНакладнаяТЧ.Ссылка = &Ссылка
    |	
    |	СГРУППИРОВАТЬ ПО
    |		РасходнаяНакладнаяТЧ.Товар,
    |		РасходнаяНакладнаяТЧ.Партия) КАК ВложенныйЗапрос
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.КонтрольТовара.Остатки(&Дата, ) КАК КонтрольТовараОстатки
    |		ПО ВложенныйЗапрос.Товар = КонтрольТовараОстатки.Товар
    |			И ВложенныйЗапрос.Партия = КонтрольТовараОстатки.Партия";
    
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Результат=Запрос.Выполнить();
    
    ТП = 0;
    ТП=Запрос.Выполнить().Выгрузить();
    Форма = ЭтотОбъект.ПолучитьФорму();
    Форма.ТЗ = ТП;
    Форма.ЭлементыФормы.ТЗ.СоздатьКолонки();
    
    ТЗ1 = ТЧ.ВыгрузитьКолонку("Товар");
    ТЧ1= ТЧ.Выгрузить();
    ТЧ1.Свернуть("Товар","Количество");
    
    Остатки = РегистрыНакопления.КонтрольТовара;
    Отбор = Новый Структура("Товар",ТЗ1);
    ТО = Остатки.Остатки(ЭтотОбъект.МоментВремени(),Отбор,"Товар,Партия","Количество,Сумма");
    
    Запись=РегистрыСведений.ПорядокУчета.ПолучитьПоследнее(ЭтотОбъект.МоментВремени());
    Если Запись.Порядок=Перечисления.Порядок.ФИФО тогда
    ТП.Сортировать("Партия Возр");
    Иначе Запись.Порядок=Перечисления.Порядок.ЛИФО;
    ТП.Сортировать("Партия Убыв");
    КонецЕсли;
    
    Для Каждого ТекСтрокаТЧ Из ТЧ1 Цикл
    Если ТекСтрокаТЧ.Товар.Услуга = Ложь Тогда
    КолвоДляСпис = ТекСтрокаТЧ.Количество; //Количество в табличной части для списания		
    Для Каждого ТекСтрокаТП Из ТП Цикл
    Если ТекСтрокаТЧ.Товар = ТекСтрокаТП.Товар  Тогда
    Если КолвоДляСпис < ТекСтрокаТП.Остаток тогда // Списывается часть партии
    Движение = Движения.КонтрольТовара.Добавить();
    Движение.Количество = КолвоДляСпис;
    Движение.Сумма = ТекСтрокаТП.Сумма*КолвоДляСпис/ТекСтрокаТП.Остаток;
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Товар = ТекСтрокаТП.Товар;
    Движение.Партия = ТекСтрокаТП.Партия;
    КолвоДляСпис = КолвоДляСпис - ТекСтрокаТП.Остаток;							
    Прервать;						
    Иначе
    КолвоДляСпис = ТекСтрокаТП.Остаток;// Списываем полностью партию
    Движение = Движения.КонтрольТовара.Добавить();	
    Движение.Количество = ТекСтрокаТП.Остаток;
    Движение.Сумма = ТекСтрокаТП.Сумма;
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Товар = ТекСтрокаТП.Товар;
    Движение.Партия = ТекСтрокаТП.Партия;
    КолвоДляСпис = КолвоДляСпис - ТекСтрокаТП.Остаток;
    
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Если КолвоДляСпис >?
    
    

    естесственно не весь документ списывать по учетнои политике...остаток списывается в партии,а остаток от количества уже в зависимости от учетнои политики.

    возможно, ошибся уже после запроса...
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    а почему внутреннее соединение в запросе? пройдите на chistov.spb.ru в раздел форум

Поделиться этой страницей