Книга продаж сортировка по номеру и по дате

1. IgorXml 730 06.03.12 10:34 Сейчас в теме
Похожие темы.
Дерево значений
Выгрузка результата запроса в дерево значений.
Книга продаж
Не типовая конфигурация,на основе БП 1.6.
Вот так сделать не корректно:
Запрос.Текст = СтрЗаменить(Запрос.Текст, "УПОРЯДОЧИТЬ ПО
	               |	НалоговыйПериод,
	               |	ПорядокОтраженияПоДатам,
	               |	СчетФактураДата,
	               |	СчетФактура,
	               |	ДатаОплаты", "УПОРЯДОЧИТЬ ПО НомерСчетаФактуры");
Так так на выходе имеем дерево значений и функция
ОпределитьДатуИНомерСФ()выполняется внутри обхода по группировкам.
Выход мне не понравился, но лучшее не придумал, т.е. создал колонку, сделал обход по группировкам, выполнил сортировку по созданной колонке, выполнил новый обход с выводом на табличный документ:

		если   ФлажокСортировки            тогда
			если   ТипЗнч(ДеревоЗаписей) = Тип("ДеревоЗначений")      Тогда
                МойТип = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0,ДопустимыйЗнак.Неотрицательный)); 
				ДеревоЗаписей.Колонки.Добавить("ДатаНомер_Порядок",МойТип);
			КонецЕсли;	
			Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
				Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
					Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
							ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20); // чтобы получить Секция.Параметры.ДатаНомер
							Секция_Параметры_ДатаНомер = Секция.Параметры.ДатаНомер;
							ЗаписьКниги_ДатаНомер_Порядок = СокрЛП(Сред(Секция_Параметры_ДатаНомер,Найти(Секция_Параметры_ДатаНомер,"№") + 1));
							ЗаписьКниги_ДатаНомер_Порядок = СтрЗаменить(ЗаписьКниги_ДатаНомер_Порядок,"А","");
							ЗаписьКниги_ДатаНомер_Порядок = СтрЗаменить(ЗаписьКниги_ДатаНомер_Порядок,"/","");
							ЗаписьКниги.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
							Для Каждого ЗаписьКниги Из ЗаписьКниги.строки   Цикл
								ЗаписьКниги.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
							КонецЦикла;
						КонецЦикла;
						СтрокаПоПорядокОтражения.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
					КонецЦикла;
				КонецЦикла;
			КонецЦикла;
			ИтогПоОрганизации.строки.Сортировать("ПорядокОтраженияПоДатам, ДатаНомер_Порядок", истина);
			Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
				Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
					Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
							ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
							ТабличныйДокумент.Вывести(Секция);
						КонецЦикла;
					КонецЦикла; 
				КонецЦикла;
			КонецЦикла;
		Иначе   // здесь типовое решение 1С
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FedorovEvg 153 14.03.12 13:47 Сейчас в теме
вот этот кусок работает корректно ?
Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
ТабличныйДокумент.Вывести(Секция);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
3. IgorXml 730 21.03.12 09:16 Сейчас в теме
(2) FedorovEvg, Этот кусок типовой :) . Спасибо за вопрос.
4. Letos 267 31.05.12 18:56 Сейчас в теме
не могли бы вы выделить именно ваш код, и немного уточнить в какое именно место вы его "воткнули".
5. IgorXml 730 01.06.12 09:24 Сейчас в теме
(4) Letos, Первые 10 строк типовой код(возможно и не типовой, конфига круто переписана была). Дальше то, чем его заменяю
		//IgorMxl***05.03.2012 11:54:08***START
		//***Кусок типового кода
		//Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
		//  	Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
		//  		Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
		//  			Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
		//  				ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
		//  				ТабличныйДокумент.Вывести(Секция);
		//  			КонецЦикла;
		//  		КонецЦикла; 
		//  	КонецЦикла;
		//  КонецЦикла;
		//***Конец типового. Дальше чем заменяю:

		если   ФлажокСортировки            тогда
			если   ТипЗнч(ДеревоЗаписей) = Тип("ДеревоЗначений")      Тогда
                МойТип = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0,ДопустимыйЗнак.Неотрицательный)); 
				ДеревоЗаписей.Колонки.Добавить("ДатаНомер_Порядок",МойТип);
			КонецЕсли;	
			Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
				Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
					Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
							ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20); // чтобы получить Секция.Параметры.ДатаНомер
							Секция_Параметры_ДатаНомер = Секция.Параметры.ДатаНомер;
							ЗаписьКниги_ДатаНомер_Порядок = СокрЛП(Сред(Секция_Параметры_ДатаНомер,Найти(Секция_Параметры_ДатаНомер,"№") + 1));
							ЗаписьКниги_ДатаНомер_Порядок = СтрЗаменить(ЗаписьКниги_ДатаНомер_Порядок,"А","");
							ЗаписьКниги_ДатаНомер_Порядок = СтрЗаменить(ЗаписьКниги_ДатаНомер_Порядок,"/","");
							ЗаписьКниги.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
							Для Каждого ЗаписьКниги Из ЗаписьКниги.строки   Цикл
								ЗаписьКниги.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
							КонецЦикла;
						КонецЦикла;
						СтрокаПоПорядокОтражения.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
					КонецЦикла;
				КонецЦикла;
			КонецЦикла;
			//ДеревоЗаписей.выбратьстроку("До");
		//	ИтогПоОрганизации.Строки[0].строки.Сортировать("ДатаНомер_Порядок", истина); //
			ИтогПоОрганизации.строки.Сортировать("ПорядокОтраженияПоДатам, ДатаНомер_Порядок", истина);
			//ДеревоЗаписей.выбратьстроку("После");
			Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
				Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
					Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
							ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
							ТабличныйДокумент.Вывести(Секция);
						КонецЦикла;
					КонецЦикла; 
				КонецЦикла;
			КонецЦикла;
		Иначе   // здесь типовое решение 1С
			Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
				Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
					Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл
							ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
							ТабличныйДокумент.Вывести(Секция);
						КонецЦикла;
					КонецЦикла; 
				КонецЦикла;
			КонецЦикла;
		конецесли
		//***END
Показать
Может легче сам отчет выложить?
DimaP; raevsky@e1.ru; Letos; +3 Ответить
6. Letos 267 04.06.12 13:42 Сейчас в теме
Я бы расплюсовал. =) было бы не плохо.
7. Letos 267 04.06.12 16:12 Сейчас в теме
Спасибо разобрался. К стати. что бы эта обработка заработала в книге покупок необходима всего лишь вместо

     Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
            Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
               Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
                  Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл

Сделать
     Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
            Для Каждого ЗаписьКниги Из НалоговыеПериоды.Строки Цикл
      //       Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
      //          Для Каждого ЗаписьКниги Из СтрокаПоПорядокОтражения.Строки Цикл


И выходы из цикла тоже разумеется необходима закоментировать.
а так же заменить:
1. ЗаполнитьСтрокуКнигиПродаж на ЗаполнитьСтрокуКнигиПокупок
2. СтрокаПоПорядокОтражения на НалоговыеПериоды.
8. sertrain 10.09.12 12:50 Сейчас в теме
В УСО и наверное в УПП, так не прокатит там нет знака "№" в параметре "ДатаНомер", автору спасибо за код переделал под себя.
9. Letos 267 06.11.12 16:15 Сейчас в теме
Бодрого дня. Необходима вывести записи "книги покупок" по возростанию "Даты оплаты", так как поля даты оплаты уже есть в типовом отчете добавляю перед циклом ЗаполнитьСтрокуКнигиПокупок()

ИтогПоОрганизации.Строки.Сортировать("ДатаОприходования", истина);


Но ничего не выходит, что не так делаю?
У меняч не отоброжается КОД по этому повторю, на всякий случай.

ИтогПоОрганизации.Строки.Сортировать("ДатаОприходования", истина);
10. DimaP 64 07.11.12 08:07 Сейчас в теме
(9) Letos, в УПП заработала?
11. Letos 267 07.11.12 09:29 Сейчас в теме
То было в бухгальерии, и в книге продаж, и отсортировать надо было поле "ДатаНомер"
12. DimaP 64 07.11.12 09:56 Сейчас в теме
(11) УПП не сильно отличается, только вот такая сортировка не отработает, ведь если в пределах группировки разные даты сч-ф, то они снова в хаосе будут.
13. Letos 267 07.11.12 10:46 Сейчас в теме
В этом и беда =) По сути получаются отсортированные группы в нутри которых, свой набор, посвойму отсортированных групп. И отчет получается что-то типа: 1,2,3, 1,2,3 хотя надо 1,1,2,2,3,3
14. DimaP 64 07.11.12 11:10 Сейчас в теме
(13) пока что наиболее подходящая идея - это заменить вывод не в ТЧ, а в ТЗ, потом её отсортировать, и только из неё выводить в ТЧ, но это потребует значительной переписки.
15. Letos 267 07.11.12 13:40 Сейчас в теме
		//Для Каждого ИтогПоНалоговыйПериод Из ИтогПоОрганизации.Строки Цикл
		//	Для каждого ЗаписьКниги Из ИтогПоНалоговыйПериод.Строки Цикл
		//		
		//		Счетчик = Счетчик + 1;
		//		Секция.Параметры.Ном = Счетчик;
		//		
		//		ЗаполнитьСтрокуКнигиПокупок(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
		//		
		//		ТабличныйДокумент.Вывести(Секция);
		//		
		//	КонецЦикла; 
		//КонецЦикла;
Показать

Заменил эту часть кода на эту
		 
			 Для Каждого ЗаписьКниги из РезультатЗапроса Цикл	
				 
				 Если ЗаписьКниги.НомерСчетаФактуры<>NULL Тогда
					 Счетчик = Счетчик + 1;
					Секция.Параметры.Ном = Счетчик;
					ЗаполнитьСтрокуКнигиПокупок(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
					
					ТабличныйДокумент.Вывести(Секция);
				КонецЕсли;
			КонецЦикла;
Показать

Ну и в ЗаполнитьСтрокуКнигиПокупок удалил и отредактировал несколько строк. Ксожалению у меня бухгалтерия отстаёт в релизах по этому "Книга покупок" старого оброзца. Если что могу выложить что получилось.
16. DimaP 64 07.11.12 14:11 Сейчас в теме
В УПП группировок немного больше.
Взял за основу предложенный автором кусок, исправил получение вида сортировки - теперь эта колонка типа Дата и заполняется датой из первой колонки в Книге продаж, при этом выполняется проверка на пустую строку и номер ГТД, важный момент - исправил сам запрос - налоговый период и порядок отражения сделал равными и по году, чтобы не мешали. Вроде на данный момент работает корректно.

		// добавим колоночку для сортировки, а то фигня какая-то
		НовыйТипДатаВремя = Новый ОписаниеТипов(Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));  
		ДеревоЗаписей.Колонки.Добавить("ДатаНомер_Порядок",НовыйТипДатаВремя);
		
		// заполним её
		Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
			Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
				Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
					Для Каждого ИтогПоДокументу Из СтрокаПоПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из ИтогПоДокументу.Строки Цикл
							ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20); 
							Секция_Параметры_ДатаНомер = Секция.Параметры.ДатаНомер;
							ЗаписьКниги_ДатаНомер_Порядок = СокрЛП(Сред(Секция_Параметры_ДатаНомер,1,Найти(Секция_Параметры_ДатаНомер,";") - 1));
							ЗаписьКниги.ДатаНомер_Порядок = СтрокуВДату(ЗаписьКниги_ДатаНомер_Порядок);
							Для Каждого ЗаписьКниги Из ЗаписьКниги.строки   Цикл
								ЗаписьКниги.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
							КонецЦикла;
						КонецЦикла;
						СтрокаПоПорядокОтражения.ДатаНомер_Порядок = ЗаписьКниги_ДатаНомер_Порядок;
					КонецЦикла; 
				КонецЦикла; 
			КонецЦикла;
		КонецЦикла;
		
		ИтогПоОрганизации.Строки.Сортировать("ДатаНомер_Порядок", истина);
				
		// стандартно выведем результат
		Для Каждого НалоговыеПериоды Из ИтогПоОрганизации.Строки Цикл
			Для Каждого ПорядокОтражения Из НалоговыеПериоды.Строки Цикл
				Для Каждого СтрокаПоПорядокОтражения Из ПорядокОтражения.Строки Цикл
					Для Каждого ИтогПоДокументу Из СтрокаПоПорядокОтражения.Строки Цикл
						Для Каждого ЗаписьКниги Из ИтогПоДокументу.Строки Цикл
							Если ЗаписьКниги.Строки.Количество() > 1 И ЗаписьКниги.Покупатель = "Розничная продажа" Тогда							
								Для Каждого ЗаписьКнигиДетальная Из ЗаписьКниги.Строки Цикл
									ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКнигиДетальная, ЕстьЗаписиПоКолонке20, Истина);
									ТабличныйДокумент.Вывести(Секция);
								КонецЦикла;
							Иначе
								ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20);
								ТабличныйДокумент.Вывести(Секция);
							КонецЕсли;
						КонецЦикла; 
					КонецЦикла; 
				КонецЦикла; 
			КонецЦикла;
		КонецЦикла;
Показать


Ещё функция:
функция СтрокуВДату(СтрокаДата)
	Если Найти(СтрокаДата,"/") ИЛИ ПустаяСтрока(СтрокаДата) Тогда
		Возврат Дата(2012,01,01);
	КонецЕсли; 
	День = Сред(СтрокаДата,1,2);
	Месяц = Сред(СтрокаДата,4,2);
	Год = Сред(СтрокаДата,7,4);
	Возврат Дата(Год, Месяц, День);
КонецФункци
Показать


И кусочек запроса:
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаписиКнигиПродаж.Организация КАК Организация,
| НАЧАЛОПЕРИОДА(ЗаписиКнигиПродаж.Период, ГОД) КАК НалоговыйПериод,
| НАЧАЛОПЕРИОДА(ЗаписиКнигиПродаж.СчетФактура.Дата, ГОД) КАК ПорядокОтраженияПоДатам,
| ЗаписиКнигиПродаж.НаАванс КАК НаАванс,
| ЗаписиКнигиПродаж.НаСуммовуюРазницу КАК НаСуммовуюРазницу,
| ЗаписиКнигиПродаж.СчетФактура КАК СчетФактура,
| ЗаписиКнигиПродаж.СчетФактураДата КАК СчетФактураДата,
IgorXml; Letos; +2 Ответить
17. DimaP 64 08.11.12 16:53 Сейчас в теме
Оставьте свое сообщение

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