ОБСУЖДЕНИЕ

Нужен отчет

11 ответов 5,8 тыс.
AI-выжимка обсуждения скоро

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

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

Все остальные отборы я поставил.
 
ого как он тебе срочно нужен, уже месяц делаешь ...
 
:( быть может вставишь в запрос этот твой договор как переменную запроса?