Отчет отрабатывает до определенной даты.

1. jeniks 22.12.16 14:18 Сейчас в теме
Этот отчет формирует информацию о задолженности только до ноября 2015г. Как только период с декабря 2015г. ошибка типа:
Поле агрегатного объекта не обнаружено (СрокПлатежа)
Бух. итоги на 4 квартал 2016г. установлены.

Функция ПолучитьДокументы(ТекКА,Т,Знач Д1,Знач Д2, СальдоКон=0)

	Таб=СоздатьОбъект("ТаблицаЗначений");
	Таб.НоваяКолонка("Приход","Число",15,2);
	Таб.НоваяКолонка("Расход","Число",15,2);
	Таб.НоваяКолонка("Дата","Дата");
	Таб.НоваяКолонка("Позиция");
	Таб.НоваяКолонка("Документ","Документ");
	Таб.НоваяКолонка("ДатаПогашения","Дата");
                          
	Ит=СоздатьОбъект("БухгалтерскиеИтоги");
	Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,ТекКА,2,0);
	Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,"операция","С")=0 Тогда
		Сообщить("Ошибка!");
		Возврат 0;
	КонецЕсли;                           
    
	Если СальдоКон=0 Тогда
		СальдоКон=Ит.СКД("С")-Ит.СКК("С");
		Опл=1;
	Иначе	
		Опл=0;
	КонецЕсли;
	СальдоНач=СальдоКон;
	Если СальдоКон<=0 Тогда
		Возврат 0;
	КонецЕсли;
	
	Ит.ВыбратьПериоды(); //,,,1
    Пока Ит.ПолучитьПериод()=1 Цикл
        Таб.НоваяСтрока();
		Контрагент=ТекКА;
		Таб.Приход=Ит.ДО("С");
		Таб.Расход=Ит.КО("С");       
		Таб.Документ=Ит.Операция.Документ;
		
	
Таб.Дата=Ит.Операция.Документ.ДатаДок;
		Таб.Позиция=Ит.Операция.Документ.ПолучитьПозицию();
		//Если Ит.Операция.Документ.Вид()="РасходнаяНакладная" Тогда
		Если ПустоеЗначение(Ит.Операция.Документ.СрокПлатежа) = 1 Тогда
Таб.ДатаПогашения=Ит.Операция.Документ.ДатаДок+СрокОплаты;
		Иначе
			
		Таб.ДатаПогашения=Ит.Операция.Документ.СрокПлатежа;
		КОнецЕсли;	
		//КонецЕсли;
	КонецЦикла;
    
	ДопТаб=СоздатьОбъект("ТаблицаЗначений");
	ДопТаб.НоваяКолонка("Долг","Число",15,2);
	ДопТаб.НоваяКолонка("Дата","Дата");
	ДопТаб.НоваяКолонка("Документ","Документ");
	ДопТаб.НоваяКолонка("ДатаПогашения","Дата");
	Если Таб.КоличествоСтрок()=0 Тогда
		Если СальдоКон>0 Тогда
			ПолучитьДокументы(ТекКА,ДопТаб,Д1-31,Д1-1,СальдоКон);
		Иначе	
			Возврат СальдоНач;
		КонецЕсли;
	Иначе	
		Ном=-1; 
		Таб.Сортировать("-Позиция");
		Таб.ВыбратьСтроки();
		Пока (Таб.ПолучитьСтроку()=1)и(СальдоКон>0) Цикл
			Если Таб.Приход>0 Тогда
				ДопТаб.НоваяСтрока();
				ДопТаб.Документ=Таб.Документ;
				ДопТаб.Дата=Таб.Дата;
				ДопТаб.ДатаПогашения=Таб.ДатаПогашения;
				ДопТаб.Долг=Таб.Приход;
			КонецЕсли;	
			СальдоКон=СальдоКон-Таб.Приход;
		КонецЦикла;
		Если СальдоКон>0 Тогда
			ПолучитьДокументы(ТекКА,ДопТаб,Д1-31,Д1-1,СальдоКон);
		КонецЕсли;
	КонецЕсли;
        
	Оплата=СальдоНач;
	Если Опл=1 Тогда
		ДопТаб.Сортировать("-Дата");
		ДопТаб.ВыбратьСтроки();
		Пока ДопТаб.ПолучитьСтроку()=1 Цикл
			Сум=Мин(ДопТаб.Долг,Оплата);
			Оплата=Оплата-Сум;
			ДопТаб.Долг=Сум;
		КонецЦикла;
	КонецЕсли;	
	
	ДопТаб.Сортировать("+Дата");
	ДопТаб.ВыбратьСтроки();
	Пока ДопТаб.ПолучитьСтроку()=1 Цикл
		Т.НоваяСтрока();
		Т.Документ=ДопТаб.Документ;
		Т.Дата=ДопТаб.Дата;
		Т.ДатаПогашения=ДопТаб.ДатаПогашения;
		Т.Долг=ДопТаб.Долг;
	КонецЦикла;

	Возврат ?(Опл=1,СальдоНач,Оплата);
	
КонецФункции	

//*******************************************
Процедура Сформировать()                
	КА=СоздатьОбъект("Справочник.Контрагенты"); 
	Сп=СоздатьОбъект("СписокЗначений");
	Если ВыбКА.Выбран()=1 Тогда
		Если ВыбКА.ЭтоГруппа()=1 Тогда
			КА.ВыбратьЭлементы(0);
			Пока КА.ПолучитьЭлемент()=1 Цикл
				Если КА.ЭтоГруппа()=1 Тогда
					Продолжить;
				КонецЕсли;
				Если КА.ПринадлежитГруппе(ВыбКА)=0 Тогда
					Продолжить;
				КонецЕсли;     
				Сп.ДобавитьЗначение(КА.ТекущийЭлемент());
			КонецЦикла;
		Иначе
			Сп.ДобавитьЗначение(ВыбКА);
		КонецЕсли;	
	Иначе	
		КА.ВыбратьЭлементы(0);
		Пока КА.ПолучитьЭлемент()=1 Цикл
			Если КА.ЭтоГруппа()=1 Тогда
				Продолжить;
			КонецЕсли;
			Сп.ДобавитьЗначение(КА.ТекущийЭлемент());
		КонецЦикла;
	КонецЕсли;
	Сп.Сортировать();
	ДопТаб=СоздатьОбъект("ТаблицаЗначений");
	ДопТаб.НоваяКолонка("Долг","Число",15,2);
	ДопТаб.НоваяКолонка("Дата","Дата");
	ДопТаб.НоваяКолонка("Документ","Документ");
	ДопТаб.НоваяКолонка("ДатаПогашения","Дата");

	Т=СоздатьОбъект("Таблица");
	Т.ИсходнаяТаблица("Таблица");
	Таблица.Очистить();
	_Секц=Т.ПолучитьСекцию("Шапка");
	Таблица.ВывестиСекцию(_Секц);
	    
	ОбщСуммаДолга=0;
	ОбщСуммаПросрДолга=0;
	Для К=1 По Сп.РазмерСписка() Цикл 
		Стр="";    
		Контрагент=Сп.ПолучитьЗначение(К,Стр);
		Д1=Дата(ДатаРасч-30);
		Д2=ДатаРасч;  
		ДопТаб.УдалитьСтроки();
		СуммаДолга=ПолучитьДокументы(Контрагент,ДопТаб,Д1,Д2);
		Если СуммаДолга<=0 Тогда
			Продолжить;
		КонецЕсли;
		
		ОбщСуммаДолга=ОбщСуммаДолга+СуммаДолга; 
		
		_Секц=Т.ПолучитьСекцию("Контрагент");
		Таблица.ВывестиСекцию(_Секц);
		//ДопТаб.Сортировать("+Дата");
		ДопТаб.ВыбратьСтроки();
		Пока ДопТаб.ПолучитьСтроку()=1 Цикл
			Если ДопТаб.ДатаПогашения<ДатаРасч Тогда
				ОбщСуммаПросрДолга=ОбщСуммаПросрДолга+ДопТаб.Долг;
				_Секц=Т.ПолучитьСекцию("Документ2");
			Иначе	
				_Секц=Т.ПолучитьСекцию("Документ1");
			КонецЕсли;
			Таблица.ВывестиСекцию(_Секц);
		КонецЦикла;
	КонецЦикла;                  
	_Секц=Т.ПолучитьСекцию("Подвал");
	Таблица.ВывестиСекцию(_Секц);
	Таблица.Показать(0);
КонецПроцедуры  


Процедура ПриОткрытии()
	Таблица.Опции(0,0,2,0,"ДолгиПоКА1","ДолгиПоКА2");
    Таблица.ТолькоПросмотр(1); 
	ДатаРасч=РабочаяДата();
	СрокОплаты=30;

		
КонецПроцедуры //ПриОткрытии


Показать
+
По теме из базы знаний
Найденные решения
10. jeniks 26.01.17 10:17 Сейчас в теме
Разобрался, Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,"операция","С")=0 Тогда
Операция была, а уже Проводка. :)
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 22.12.16 14:29 Сейчас в теме
Значит, в декабре 15 года проводки делались документом, у которого нет реквизита СрокПлатежа.
+
3. jeniks 22.12.16 14:40 Сейчас в теме
Вот именно что учет не менялся. Как проверить можно?
+
4. antz 22.12.16 14:46 Сейчас в теме
Отладчиком. Как вариант - обернуть в попытку и посмотреть на каком документе спотыкается.
+
5. jeniks 22.12.16 15:18 Сейчас в теме
Разобрался с именем документа.
Вопрос в другом: определяю дату документа:
Функция ПолучитьДокументы(ТекКА,Т,Знач Д1,Знач Д2, СальдоКон=0)

хочу получить проводки:
Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",, 1,, "С")=0 Тогда
Ошибка:
Неверно задана периодичность запроса!
Хотя отладчиком: Д1-22.11.16 Д2-22.12.16.
+
9. YNik 22.12.16 20:35 Сейчас в теме
(5)
Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",, 1,, "С")=0 Тогда

пропущена запятая, т.е "С" попала а периодичность:
Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,, "С")=0 Тогда 
+
6. jeniks 22.12.16 15:32 Сейчас в теме
Бух итоги рассчитал на 1 кв 2017. и ошибка:
Неправильно задан период!
+
7. Frogger1971 22.12.16 15:41 Сейчас в теме
Таб.НоваяКолонка("Дата","Дата");


почитай, что в 1С является зарезервированными словами, тогда и, смотри, отчет нормально заработает
+
8. Denis_CFO 48 22.12.16 20:03 Сейчас в теме
(7) а почему он раньше работал? слова не резервировались? я с 7.7 не работал просто никогда.
+
10. jeniks 26.01.17 10:17 Сейчас в теме
Разобрался, Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,"операция","С")=0 Тогда
Операция была, а уже Проводка. :)
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот