Имя: Пароль:
1C
1С v8
УТ 10.3.21.2, отбор по ФИФО, новичок в восьмерке
,
0 olmi
 
19.04.14
08:39
Нужно делать перемещение между организациями одной группы компаний через реализацию по ФИФО, по закупочным ценам.
В документе РеализацияТоваровУслуг пользователь должен выбрать товары и количество, а потом по кнопке эти строчки должны быть удалены и заменены на набор по ФИФО. Все приходы - в документах ПоступлениеТоваровУслуг.

Написала пока простой код:

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

По первому документу реализации все хорошо. Со второго выбирает, начиная с нужного Поступления, но с неверным СтрЗапроса.КонОстКоличества. Скажем, было 3 поступления - на 20,40,30 штук. Первой реализацией списываю 30 штук (20+10 сверху вниз, остаток 0,30,30), вторая должна списывать 40 штук, начиная со 2 поступления, т.е.30+10, а списывает 20+20.

Вопросы:1. Что неправильно? 2. Как правильно написать запрос, чтобы сразу цеплять все?

Буду благодарна за любую помощь!)
1 olmi
 
19.04.14
08:41
+(0) Последовательность восстановлена до конца.
2 Wobland
 
19.04.14
08:44
без фото не взлетит
3 Wobland
 
19.04.14
08:45
1. цикл в запросе
2. пока лениво
4 kotletka
 
19.04.14
08:47
запрос в цикле нехорошо... выбираешь запросом из тч номенклатуру, затем находишь по каждой партию... а вообще погугли "чистов spb"  у него эти задачи разобраны с видео
5 olmi
 
19.04.14
08:56
(4)Спасибо, сейчас посмотрю Чистова). Когда-то ему экзамен по 7.7 сдавала).
6 olmi
 
19.04.14
08:58
(4)Только вот не соображу - это было в Москве, и он уже тогда был очень немолод - может, не тот)
7 olmi
 
19.04.14
08:59
(4)Судя по мощности - он, голубчик)))
8 Wobland
 
19.04.14
09:03
(6) тут возможны два варианта. или ты очень молода, или это не тот Чистов
9 olmi
 
19.04.14
09:04
(4)...А судя по фото - не он). Но курс обширный, еще раз большое спасибо, буду разбираться).
10 olmi
 
19.04.14
09:05
(8) Сэр, если можно, чуточку менее эмоционально). Это форум 1С, я не ошибаюсь?)
11 Wobland
 
19.04.14
09:08
(10) ошибаешся
12 shuhard
 
19.04.14
09:12
(10) нет конечно
13 kotletka
 
19.04.14
09:15
(10) последние два года это перепост жж и бложек всяких цветочков, еврейчиков, нытиков...1с мизер так что ... это миста детка
14 olmi
 
19.04.14
09:55
(11) - (13) Вы чуть опоздали, ребята, пятница была вчера. А советы я тут, на Мисте, получаю и сейчас, как и раньше, только от тех, кто хочет, в том числе, и думать и помогать, а не от тех, кто зашел сюда просто развлечься. Миста, она разная...
Сразу - если можно, оставьте мою ветку, если не хотите что-то говорить по делу. На Мисте есть где развлечься, а тут вам будет скучно, приветствуются только разговоры по делуА спам отвлекает и утомляет.
Хорошего дня!)
15 olmi
 
19.04.14
09:57
(13) А вот Вы мне очень помогли!) Сейчас все сказала, буду смотреть)
16 olmi
 
19.04.14
09:58
(13)
*скачала
Закон Брукера: Даже маленькая практика стоит большой теории.