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

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 Тогда
Операция была, а уже Проводка. :)
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день