Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 окт 2024, 19:20

Проводка

Автор kible, 27 мая 2010, 16:16

0 Пользователей и 1 гость просматривают эту тему.

kible

Как сложить суммы в нескольких проводках и подставить в одну?


// ******************** 
Процедура ОбработкаПроведения()
ОбщКоличество=0;
Спр = СоздатьОбъект("Справочник.СпецификацияНоменклатуры");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Спр.ИспользоватьРодителя(СпецификацияИзделия);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
ОбщКолВо=ОбщКолВо+Спр.Количество*Количество;
Сообщить(""+Спр.Материал+"   Кол-Во"+Спр.Количество*Количество);

//////////////////////////////////////////////////////////////
                                                             
Если глПределыБухгалтерскихИтогов(, ДатаДок, 1) = 0 Тогда
    СтатусВозврата(0);
Возврат;
КонецЕсли;

БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");

Если Метаданные.РазделительУчета.Выбран() = 1 Тогда
БухИтоги.ИспользоватьРазделительУчета(Организация);
КонецЕсли;

БухИтоги.ВключатьСубсчета(1);
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Материалы, Спр.Материал, 2);
БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад, 2);
БухИтоги.ВыполнитьЗапрос(,ТекущийДокумент(),"131",,,,,);
БухИтоги.ВыбратьСубконто(); 


Материал = Спр.Материал;

Если БухИтоги.ПолучитьСубконто(,,Материал) = 1 Тогда
Если БухИтоги.ПолучитьСчет(,глПолучитьСчетТМЦ(Материал)) = 1 Тогда
ОстатокКоличество = БухИтоги.СКД("К");
ОстатокСумма = БухИтоги.СКД("С");
Если Спр.Количество*Количество > ОстатокКоличество  Тогда

глСообщить(Операция, "Счет " + СокрЛП(глПредставлениеСчетаСтр(глПолучитьСчетТМЦ(Материал)))+
", место хранения """+СокрЛП(Склад)+""": недостаточно материала """+СокрЛП(Материал)+
". Не хватает "+СокрЛП(Спр.Количество*Количество - ОстатокКоличество )+". Проводка не записана!", "!");    
КонецЕсли;
Иначе //в карточке товара не верно указан счет
глСообщить(Операция, "Не верно указан счет учета материала. Остатки для """  + СокрЛП(Материал)+""" на счете " + СокрЛП(глПредставлениеСчетаСтр(глПолучитьСчетТМЦ(Материал))) + " - отсутствуют. Проводка не записана!", "!");
КонецЕсли;
Иначе //Если БухИтоги.ПолучитьСубконто(,,Материал) = 1 Тогда
// по данному ТМЦ вообще нет остатка
глСообщить(Операция, "Счет " + СокрЛП(глПредставлениеСчетаСтр(глПолучитьСчетТМЦ(Материал)))+
", место хранения """+СокрЛП(Склад)+""": недостаточно материала """+СокрЛП(Материал)+
". Не хватает "+СокрЛП(Спр.Количество*Количество)+". Проводка не записана!", "!");    
КонецЕсли;    
     /////////////////////////////////////////////////////////////////////////////   


КоличествоНаСкладе = 0; // Общий остаток на складе(количество) по выбранной позиции номенклатуры
СуммаНаСкладе = 0; // Общий остаток на складе(сумма) по выбранной позиции номенклатуры
МожноСписатьКоличество = 0; // Количество, которое можно списать по данной строке, учитывая уже списанное количество в этом документе                           
МожноСписатьСумму = 0; // Сумма, которую можно списать по данной строке, учитывая уже списанную сумму в этом документе
Стр = "";

    КоличествоНаСкладе = ОстатокКоличество;
СуммаНаСкладе = ОстатокСумма;
МожноСписатьКоличество = Макс(0,КоличествоНаСкладе - Спр.Количество*Количество);
МожноСписатьСумму = Макс(0,СуммаНаСкладе);
             
                     
Если МожноСписатьКоличество = 0 Тогда
    Продолжить;
КонецЕсли;     

Если (МожноСписатьКоличество < Количество) или (МожноСписатьКоличество = 0)  Тогда
Продолжить;
Иначе
Если МожноСписатьКоличество = Количество Тогда
    Сумма = МожноСписатьСумму; // Оставшаяся после списания предыдущих позиций сумма
Иначе
Сумма = Окр((Спр.Количество*Количество) * (СуммаНаСкладе/КоличествоНаСкладе),2);
КонецЕсли;
КонецЕсли;

СчетДебета = СчетПоКоду("8112",ПланыСчетов.Основной);
СчетКредита  = СчетПоКоду("131",ПланыСчетов.Основной); 

глПроводка( Операция,
СчетДебета, глСубконто(Подразделение,ВидДеятельности,ВидЗатрат),
СчетКредита, глСубконто(Спр.Материал,Склад),Спр.Количество*Количество
,Сумма , , , , , Организация);
    ////////////////////////////////////////////////////////////////////////////////
Если Счет = СчетПоКоду("131") Тогда
СчетДебета = СчетПоКоду("131",ПланыСчетов.Основной);
СчетКредита  = СчетПоКоду("8112",ПланыСчетов.Основной);
глПроводка( Операция,
СчетДебета, глСубконто(Спр.Материал, Склад, ),
СчетКредита, глСубконто(Подразделение, ВидДеятельности, ВидЗатрат),Спр.Количество*Количество
,Сумма , , , , , Организация);

КонецЕсли;
///////////////////////////////////////////////////////////////////////////////////
КонецЦикла; 

///////////////////////////////////////////////////////////////////////////////////
Если Счет = СчетПоКоду("132") Тогда
СчетДебета = СчетПоКоду("132",ПланыСчетов.Основной);
СчетКредита  = СчетПоКоду("8112",ПланыСчетов.Основной);
глПроводка( Операция,
СчетДебета, глСубконто(Номенклатура, Склад, ),
СчетКредита, глСубконто(Подразделение, ВидДеятельности, ВидЗатрат),Количество
,Сумма , , , , , Организация);
КонецЕсли;

КонецЦикла;
     
Операция.Записать();

КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск