Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проведение Расходной Накладной
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Hellga
В проведении Расходной Накладной при списании партий ФИФО|ЛИФО не получается найти значение партии по коду. Лист кода прилагаю:
Процедура ОбработкаПроведения() 
    
    Запрос = СоздатьОбъект("Запрос");
    Таб = СоздатьОбъект("ТаблицаЗначений");
    СпрПарт = СоздатьОбъект("Справочник.Партии");
    
    ВремРегистры=СоздатьОбъект("Регистры");
    Рег = ВремРегистры.ТМЦ;
    Рег.УстановитьЗначениеФильтра("ТМЦ",ТМЦ,1);
    Рег.УстановитьЗначениеФильтра("Склад",Склад,1);    
    Рег.УстановитьЗначениеФильтра("Партия",Партия,1);  
    
    Если ИтогиАктуальны()=0 Тогда
        Рег.ВременныйРасчет(1);
        ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
    КонецЕсли;  
    
    ТЗ = "    
            |Период с (НачалоПериодаБИ());
            |Товар = Регистр.ТМЦ.ТМЦ;
            |Скл = Регистр.ТМЦ.Склад;
            |Парт = Регистр.ТМЦ.Партия;
            |Кол = Регистр.ТМЦ.Количество;
            |Сум = Регистр.ТМЦ.Сумма;  
            |Функция КолКонОст = КонОст(Кол);
            |Функция СумКонОст = КонОст(Сум);
            |Группировка Товар Без Групп;
            |Группировка Скл Без Групп;
            |Группировка Парт упорядочить по Парт.Дата Без Групп;
            |Условие (Скл = Склад);
            |Без Итогов;
            |";

    Если Запрос.Выполнить(ТЗ) = 0 Тогда
         Сообщить("Запрос по Регистру не выполнен");
        Возврат;
    КонецЕсли;      
    
    Запрос.Выгрузить(Таб);
    
    Метод = Константа.МетодСписанияПартий.Идентификатор();
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        
        УчСумма = 0;
        Кво = 0;
        Раз = 0;
        
        Если (Метод = "ФИФО") ИЛИ (Метод = "ЛИФО") Тогда
            Раз = Количество;
            Если Метод = "ЛИФО" Тогда
                Таб.Сортировать("-Парт");
            КонецЕсли;
            Таб.ВыбратьСтроки();
            Пока Таб.ПолучитьСтроку() = 1 Цикл
                Если Таб.Товар = ТМЦ Тогда
                    Если Таб.КолКонОст > 0 Тогда
                        Если Раз>=Таб.КолКонОст Тогда  
                            Кво = Кво + Таб.КолКонОст;    
                            СпрПарт.ИспользоватьВладельца(ТМЦ);
                            СпрПарт.НайтиПоКоду(Таб.Парт,1);
                            УчСумма = УчСумма+СпрПарт.Цена * Таб.КолКонОст;
                            Регистр.ТМЦ.ТМЦ = ТМЦ;
                            Регистр.ТМЦ.Склад = Склад;
                            Регистр.ТМЦ.Партия = Таб.Парт;
                            Регистр.ТМЦ.Сумма = Таб.СумКонОст;
                            Регистр.ТМЦ.Количество = Таб.КолКонОст;
                            Регистр.ТМЦ.ПривязыватьСтроку(НомерСтроки);
                            Регистр.ТМЦ.ДвижениеРасходВыполнить();
                            Раз = Раз - Таб.КолКонОст;
                            Таб.КолКонОст = 0;
                        ИначеЕсли Раз<>0 Тогда
                            Кво = Кво + Раз;
                            СпрПарт.ИспользоватьВладельца(ТМЦ);
                            СпрПарт.НайтиПоКоду(Таб.Парт,1);
                            УчСумма = УчСумма + СпрПарт.Цена*Раз;
                            Регистр.ТМЦ.ТМЦ = ТМЦ;
                            Регистр.ТМЦ.Склад = Склад;
                            Регистр.ТМЦ.Партия = Таб.Парт;
                            Регистр.ТМЦ.Сумма = СпрПарт.Цена*Раз;
                            Регистр.ТМЦ.Количество = Раз;
                            Регистр.ТМЦ.ПривязыватьСтроку(НомерСтроки);
                            Регистр.ТМЦ.ДвижениеРасходВыполнить();
                            Таб.КолКонОст = Таб.КолКонОст-Раз;
                            Раз = 0;
                        КонецЕсли;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            УчЦена = УчСумма/Кво;
            П = Таб.Парт;
                    
        Иначе
            Кво = Рег.Остаток(ТМЦ,Склад,Партия,"Количество");
            Если Кво<Количество   Тогда
                Сообщить ("В выбранной партии недостаточно товаров!");
                Возврат;
            Иначе  
                УчЦена = Рег.Остаток(ТМЦ,Склад,Партия,"Сумма")/Кво;
                УчСумма = УчЦена * Количество;
                Регистр.ТМЦ.ТМЦ = ТМЦ;
                Регистр.ТМЦ.Склад = Склад;
                Регистр.ТМЦ.Партия = Партия;
                Регистр.ТМЦ.Сумма = УчСумма;
                Регистр.ТМЦ.Количество = Количество;
                Регистр.ТМЦ.ПривязыватьСтроку(НомерСтроки);
                Регистр.ТМЦ.ДвижениеРасходВыполнить();
                П = Партия;
            КонецЕсли;  
            
        КонецЕсли;
                        
        Регистр.Продажи.ТМЦ = ТМЦ;
        Регистр.Продажи.Кол = Количество;
        Регистр.Продажи.Сум = Сумма;
        Регистр.Продажи.ПривязыватьСтроку(НомерСтроки);
        Регистр.Продажи.ДвижениеВыполнить();

        Операция.НоваяПроводка();
        Операция.Дебет.Счет = СчетПоКоду("902");
        Операция.Кредит.Счет = СчетУчета;
        Операция.Кредит.ТМЦ = ТМЦ;
        Операция.Кредит.Партии = П;
        Операция.Кредит.МестаХранения = Склад;
        Операция.Сумма = УчСумма;
        Операция.Коментарий = "Списание товаров";

    КонецЦикла;          
    
    Регистр.Взаиморасчеты.Контрагент = Контрагент;
    Регистр.Взаиморасчеты.Сумма = Итог("Сумма")+Итог("НДС");
    Регистр.Взаиморасчеты.ДвижениеПриходВыполнить();
    
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетУКон;
    Операция.Дебет.Контрагент = Контрагент;
    Операция.Кредит.Счет = СчетПоКоду("702");
    Операция.Сумма = Итог("Сумма")+Итог("НДС");
    Операция.Коментарий = "Получение оплаты";

    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("702");
    Операция.Кредит.Счет = СчетПоКоду("644");
    Операция.Сумма = Итог("НДС");
    Операция.Коментарий = "Учет НДС";

    Операция.Содержание = "Продажа товара";
    Операция.СуммаОперации = Итог("Сумма")+Итог("НДС");
    Операция.Записать();
    
КонецПроцедуры

Значения в таблицу все попадают, из таблицы код партии выдается правильно, а вот поиск по справочнику не происходит. Может у кого-то есть идеи, поделитесь пожалуйста?
MATEVI
СпрПарт.НайтиПоКоду(Таб.Парт,1);
Таб.Парт это партия а нужно Таб.Парт.Код это код этой партии.
Hellga
Цитата(MATEVI @ 01.12.10, 13:55) необходимо зарегистрироваться для просмотра ссылки
СпрПарт.НайтиПоКоду(Таб.Парт,1);
Таб.Парт это партия а нужно Таб.Парт.Код это код этой партии.

Спасибо большое за помощь.

Мне пришлось реализовать расчет цен по среднему.
Vofka
Hellga, +СПС жмите для Matevi
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.