Как сделать отбор по группам?

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. egor_kagor 11.03.14 13:47 Сейчас в теме
Нз="Запаси" Тогда //Запасы
	Ит = СоздатьОбъект("БухгалтерскиеИтоги");
	Ит.ВключатьСубсчета(-1,-1);
    Ит.ИспользоватьСубконто("МОЛ",СМ,2);  
	Ит.ИспользоватьСубконто("Запасы",,1); 
	Ит.ВыполнитьЗапрос(Дата1,Дата1,,,,1);  
	Ит.ВыбратьСчета(); Пока Ит.ПолучитьСчет()=1 Цикл
	Если Ит.счет.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; СчетВыб=Ит.Счет;	
	Ит.ВыбратьСубконто(1); Пока Ит.ПолучитьСубконто(1)=1 Цикл  ИтМОЛ=Ит.Субконто(1);
		Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 Цикл  ИтАктив=Ит.Субконто(2); 
	Если (Ит.СНД(3)=0) и (Ит.СНК(3)=0) и (Ит.СНД(1)=0) и (Ит.СНК(1)=0) Тогда
			Продолжить; КонецЕсли;
				ТЗ.НоваяСтрока();
				ТЗ.ТМЦ=ИтАктив; ТЗ.Счет=СчетВыб;// ИФДок=ИтИФ; 
				ТЗ.Кво=Ит.СНД(3)-Ит.СНК(3);
				ТЗ.Сумма=Ит.СНД(1)-Ит.СНК(1);
				ТЗ.Цена=Ит.СКД(1)-Ит.СКК(1);
				ТЗ.Код= ИтАктив.Код;
				
	КонецЦикла; КонецЦикла; КонецЦикла;	КонецЕсли;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
17. egor_kagor 11.03.14 14:50 Сейчас в теме
//*******************************************
Процедура Сформировать(Режим)
	Если МВО.Выбран() = 0 Тогда
		 Предупреждение("Не выбрано МВО!");
		 Возврат;
	КонецЕсли;  
	глУстПропись();
	СМ = СоздатьОбъект("СписокЗначений");
	Если ПоВсем = 0 Тогда
		СМ.ДобавитьЗначение(МВО.ТекущийЭлемент());
	Иначе   
		Сотр = МВО.Сотрудник;
		МВОв=СоздатьОбъект("Справочник.МОЛ");
		МВОв.ВыбратьЭлементы();
		Пока МВОв.ПолучитьЭлемент() = 1 Цикл
			 Если МВОв.ЭтоГруппа() = 1 Тогда
			 	Продолжить; КонецЕсли;
			 Если МВОв.Сотрудник = Сотр Тогда
			 	  СМ.ДобавитьЗначение(МВОв.ТекущийЭлемент()); 
			 КонецЕсли;
		КонецЦикла;	
	КонецЕсли;	 
	Нз = Форма.Закладки.ПолучитьЗначение(Форма.Закладки.ТекущаяСтрока());  
	НФ   = Константа.ОсновнаяФирма; 
	ТЗ   = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.НоваяКолонка("ТМЦ"); 
	ТЗ.НоваяКолонка("ИнвНомер","Строка",10,);
	ТЗ.НоваяКолонка("Счет");               
	ТЗ.НоваяКолонка("Кво","Число",10,3);
	ТЗ.НоваяКолонка("Сумма","Число",10,2);
	ТЗ.НоваяКолонка("Цена","Число",10,2);
	ТЗ.НоваяКолонка("Код","Строка",10,);
	
	Ит = СоздатьОбъект("БухгалтерскиеИтоги");
	Ит.ВключатьСубсчета(-1,-1);
    Ит.ИспользоватьСубконто("МОЛ",МВО,2); 
    Ит.ИспользоватьСубконто("Активы",,1);  
	Ит.ВыполнитьЗапрос(,Дата1,?(Нз="ОЗ","10","11"));  
	Ит.ВыбратьСчета(); Пока Ит.ПолучитьСчет()=1 Цикл
	Если Ит.счет.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; СчетВыб=Ит.Счет;	
	Ит.ВыбратьСубконто(1); Пока Ит.ПолучитьСубконто(1)=1 Цикл  ИтМОЛ=Ит.Субконто(1);
		Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 Цикл  ИтАктив=Ит.Субконто(2); 
	Если (Ит.СНД(3)=0) и (Ит.СНК(3)=0) и (Ит.СНД(1)=0) и (Ит.СНК(1)=0) Тогда
			Продолжить; КонецЕсли;
				ТЗ.НоваяСтрока();
				ТЗ.ТМЦ  =ИтАктив; ТЗ.Счет=СчетВыб;// ИФДок=ИтИФ; 
				ТЗ.Кво  =Ит.СКД(3)-Ит.СКК(3);
				ТЗ.Сумма=Ит.СКД(1)-Ит.СКК(1); 
				ТЗ.Цена=Ит.СКД(1)-Ит.СКК(1);
				ТЗ.ИнвНомер = ИтАктив.ИнвНомер;
			    ТЗ.Код= ИтАктив.Код;
				
	КонецЦикла; КонецЦикла; КонецЦикла;	//КонецЦикла;
	
	Если Нз="Запаси" Тогда //Запасы
	Ит = СоздатьОбъект("БухгалтерскиеИтоги");
	Ит.ВключатьСубсчета(-1,-1);
    Ит.ИспользоватьСубконто("МОЛ",СМ,2);  
	Ит.ИспользоватьСубконто("Запасы",,1); 
	Ит.ВыполнитьЗапрос(Дата1,Дата1,,,,1);  
	Ит.ВыбратьСчета(); Пока Ит.ПолучитьСчет()=1 Цикл
	Если Ит.счет.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; СчетВыб=Ит.Счет;	
	Ит.ВыбратьСубконто(1); Пока Ит.ПолучитьСубконто(1)=1 Цикл  ИтМОЛ=Ит.Субконто(1);
		Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 Цикл  ИтАктив=Ит.Субконто(2); 
	Если (Ит.СНД(3)=0) и (Ит.СНК(3)=0) и (Ит.СНД(1)=0) и (Ит.СНК(1)=0) Тогда
			Продолжить; КонецЕсли;
				ТЗ.НоваяСтрока();
				ТЗ.ТМЦ=ИтАктив; ТЗ.Счет=СчетВыб;// ИФДок=ИтИФ; 
				ТЗ.Кво=Ит.СНД(3)-Ит.СНК(3);
				ТЗ.Сумма=Ит.СНД(1)-Ит.СНК(1);
				ТЗ.Цена=Ит.СКД(1)-Ит.СКК(1);
				ТЗ.Код= ИтАктив.Код;
				
	КонецЦикла; КонецЦикла; КонецЦикла;	КонецЕсли;		
	
	ТЗ.Свернуть("Счет,ТМЦ,ИнвНомер","Кво,Сумма");   
	ТЗ.Сортировать("Счет,ТМЦ,ИнвНомер");
	Т   = СоздатьОбъект("таблица"); 
	Если (Режим = "Опис") и (НЗ="ОЗ") Тогда
		ПерСтр = 35;  ПослСтр = 35;  
		Заголовок = "опис ОЗ по ";
		Т.ПараметрыСтраницы(2,1);   
	ИначеЕсли (Режим = "Порів") и (НЗ="ОЗ") Тогда   
		ПерСтр = 26;  ПослСтр = 26;  
		Заголовок = "Порівняльна відомість ОЗ по ";
		Т.ПараметрыСтраницы(1,1);
	ИначеЕсли (Режим = "Опис") и (НЗ="Запаси") Тогда   
		ПерСтр = 28;  ПослСтр = 28;  
		Заголовок = "опис НА та запасів по ";
		Т.ПараметрыСтраницы(2,1);    
	ИначеЕсли (Режим = "Порів") и (НЗ="Запаси") Тогда   
		ПерСтр = 27;  ПослСтр = 27;  
		Заголовок = "Порівняльна відомість НА та запасів по ";
		Т.ПараметрыСтраницы(2,1); 
	КонецЕсли;	
    Т.Исходнаятаблица(Режим+" "+Нз);
	Т.ВывестиСекцию("Шапка"); 
	Т.ВывестиСекцию("СтрШапка");
	ТЗи = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.Выгрузить(ТЗи);
	ТЗи.Свернуть("Счет","Кво,Сумма,Цена");
	ТЗи.ВыбратьСтроки(); КолСтр = ТЗ.КоличествоСтрок(); НомЗап = 0;
	Пока ТЗи.ПолучитьСтроку() =1 Цикл 
	Т.ВывестиСекцию("Счет");
	НомСтр = 0; ТЗ.НайтиЗначение(ТЗи.Счет,НомСтр,"Счет");
	Если НомСтр > 0 Тогда
		 Для нп = НомСтр по КолСтр Цикл
		 	 ТЗ.ПолучитьСтрокуПоНомеру(нп);
		 	 Если ТЗ.Счет<>ТЗи.Счет Тогда Прервать; КонецЕсли;
				 НомЗап=НомЗап+1;
				 Т.ВывестиСекцию("Рядок");
		 КонецЦикла;
	КонецЕсли;
	Т.ВывестиСекцию("ИтогСчет");
	КонецЦикла;  
	Для нп = 1  по 5 цикл
	Т.ВывестиСекцию("Пусто");
	КонецЦикла;	
	Т.ВывестиСекцию("Дно");
		
	Т.ПовторятьПриПечатиСтроки(ПерСтр,ПослСтр);
	Т.Опции(0,0,0,0);
	Т.Показать(Заголовок+СокрЛП(МВО),"");
КонецПроцедуры                        

Процедура ПриВыбореЗакладки(нз,ЗначЗакл)
	Форма.ИспользоватьСлой("Основной,"+Значзакл,2);
	Если нз = 1 Тогда
		Форма.Заголовок("Матеріальний опис ОЗ"); 
	ИначеЕсли нз = 2 Тогда
		Форма.Заголовок("Матеріальний опис НА та запасів"); 
	КонецЕсли;	
КонецПроцедуры	 



Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("ОЗ","Основновні засоби");
Форма.Закладки.ДобавитьЗначение("Запаси","Інші НА та запаси");
Форма.ИспользоватьСлой("Основной,ОЗ",2); 
Форма.Заголовок("опис ОЗ");
Показать
2. adva 45 11.03.14 14:00 Сейчас в теме
а четвертый параметр в ИспользоватьСубконто это не то что требуется?
3. eshtrey 11.03.14 14:02 Сейчас в теме
49. adva 45 12.03.14 10:33 Сейчас в теме
Подозреваяю что тебе надо заменить

				ТЗ.НоваяСтрока();
				ТЗ.ТМЦ=ИтАктив; ТЗ.Счет=СчетВыб;// ИФДок=ИтИФ; 
				ТЗ.Кво=Ит.СНД(3)-Ит.СНК(3);
				ТЗ.Сумма=Ит.СНД(1)-Ит.СНК(1);
				ТЗ.Цена=Ит.СКД(1)-Ит.СКК(1);
				ТЗ.Код= ИтАктив.Код;


на

				ТЗ.НоваяСтрока();
				ТЗ.ТМЦ=ИтАктив; ТЗ.Счет=СчетВыб;// ИФДок=ИтИФ; 
				ТЗ.Код= ИтАктив.Код;
Если ТЗ.ТМЦ.ЭтоГруппа() = 1 Тогда

Иначе
				ТЗ.Кво=Ит.СНД(3)-Ит.СНК(3);
				ТЗ.Сумма=Ит.СНД(1)-Ит.СНК(1);
				ТЗ.Цена=Ит.СКД(1)-Ит.СКК(1);
КонецЕсли

Показать
50. egor_kagor 12.03.14 10:45 Сейчас в теме
(49) adva, Сделал но увы...... колличество вообще пропало!!! (48) по скрину красные точки это общая сумма которая не должна выводиться в синие точки. Как то так.........
4. egor_kagor 11.03.14 14:05 Сейчас в теме
ПО ГРУППАМ ТМЦ! 4 ТОТ НО ОН ОТБИРАЕТ ПОЛНОСТЬЮ ПО ВСЕМ ГРУППАМ БЕЗ НАИМЕНОВАНИЯ ГРУППЫ
6. adva 45 11.03.14 14:20 Сейчас в теме
хотя я не понял (4). При чём тут наименование группы?
5. adva 45 11.03.14 14:18 Сейчас в теме
Вроде как третий параметр при этом должен быть равен 2
7. egor_kagor 11.03.14 14:21 Сейчас в теме
если 2 то вообще не отбирает
8. egor_kagor 11.03.14 14:23 Сейчас в теме
ТАК ВОТ КАК СДЕЛАТЬ ЧТО БЫ ВЫВОДИЛОСЬ НАИМЕНОВАНИЕ ГРУППЫ БЕЗ ОБЩЕЙ СТОИМОСТИ, КОЛЛИЧЕСТВА И ЦЕНЫ???
9. adva 45 11.03.14 14:27 Сейчас в теме
(8) учитесь писать без кэплокса, пожалуйста, (а то раздражает, т.к. в интернетах часто этим крик обозначают, а чего на нас орать тута, мы никому ничего не должны).

А по задаче, не понятно, что в итоге требуется. Если можно, пример маленький
10. egor_kagor 11.03.14 14:33 Сейчас в теме
Понял простите! Спасибо!

счет допустим:

111 Товары
111/1 Хоз. товары

1 ммммммммм
2 ппппппппп
3 ррррррррр

111/2 Инвентарь

1 ммммммммм
2 ппппппппп
3 ррррррррр
11. adva 45 11.03.14 14:43 Сейчас в теме
и что здесь является группой ?
12. egor_kagor 11.03.14 14:44 Сейчас в теме
В параметре
Ит.ИспользоватьСубконто("Запасы",,1);
добавил ещё одну запятую
Ит.ИспользоватьСубконто("Запасы",,,1);

получился отбор по группам но ещё выводит в строку общую стоимость, количество и цену что вообще не нужно. И как выделить наименование группы и подгруппы??? Может выложить весь код модуля???
15. adva 45 11.03.14 14:48 Сейчас в теме
(12) пожалуй да, проще будет понять
13. egor_kagor 11.03.14 14:46 Сейчас в теме
111 Товары - Группа ТМЦ
111/1 Хоз. товары - подгруппа Группы ТМЦ
14. adva 45 11.03.14 14:47 Сейчас в теме
Товары это группа? А как субконто назвается? "Запасы"? (по которому требуется отобор по группе)
16. egor_kagor 11.03.14 14:49 Сейчас в теме
есть запасы и есть активы
в запасах тмц разбитые по группам и подгруппам
18. adva 45 11.03.14 14:50 Сейчас в теме
Не нужно выводить именно в макет количество и прочее?
Может просто убрать из макета
19. egor_kagor 11.03.14 14:52 Сейчас в теме
21. adva 45 11.03.14 14:54 Сейчас в теме
(19) а скрин макета можете приложить, с зачеркиванием тех полей, которые надо убрать?
20. egor_kagor 11.03.14 14:53 Сейчас в теме
Мозг просто скрючился.........
22. adva 45 11.03.14 14:56 Сейчас в теме
и сам отчет, как внешний, чтобы можно было указать, чего именно убрать
23. adva 45 11.03.14 15:04 Сейчас в теме
Только учтите, что если остатков (итогов) по субконто не будет, то это субконто не выводится (хотя в справочнике и присутствует)
24. egor_kagor 11.03.14 15:06 Сейчас в теме
красным не нужно
синим выделить из общей массы
26. adva 45 11.03.14 15:07 Сейчас в теме
29. egor_kagor 11.03.14 15:09 Сейчас в теме
(26) adva,
Прикрепленные файлы:
25. adva 45 11.03.14 15:06 Сейчас в теме
А в макете можете просто очистить ненужные параметры (количество, цену и прочее)
27. egor_kagor 11.03.14 15:09 Сейчас в теме
[img]file:///C:/Users/%D0%95%D0%93%D0%9E%D0%A0/Desktop/%D1%81%D0%BA%D1%80%D0%B8%D0%BD.jpg[/img]
28. adva 45 11.03.14 15:09 Сейчас в теме
Как файлы можете приложить?
30. egor_kagor 11.03.14 15:10 Сейчас в теме
таблица модуля
Прикрепленные файлы:
31. egor_kagor 11.03.14 15:11 Сейчас в теме
37. adva 45 11.03.14 15:29 Сейчас в теме
ох (31) не заметил, если не справитесь сами, то посмотреть смогу только завтра
32. adva 45 11.03.14 15:12 Сейчас в теме
Думаю перед ВывестиСекцию, проще всего обнулить нужные колонки ТЗ
33. egor_kagor 11.03.14 15:15 Сейчас в теме
Если обнулить то по всем строкам 0
34. adva 45 11.03.14 15:16 Сейчас в теме
Или скопировать строку макета "Рядок" например в "РядокБез_"
И в зависимости от условий выводить либо ее, либо "Рядок"
35. egor_kagor 11.03.14 15:18 Сейчас в теме
36. adva 45 11.03.14 15:23 Сейчас в теме
Код думаю такой (закомментил то что было)

 //Т.ВывестиСекцию("Рядок");
 Если ТЗ.ТМЦ.ЭтоГруппа() = 1 Тогда
 	Т.ВывестиСекцию("РядокБез_");
 Иначе
 	Т.ВывестиСекцию("Рядок");
 КонецЕсли;


А секцию, надеюсь сами скопируете
egor_kagor; +1 Ответить
46. egor_kagor 12.03.14 09:48 Сейчас в теме
Всё сделал по этой аналогии (36) !!! В макете пусто. Или я туплю???
38. egor_kagor 11.03.14 15:36 Сейчас в теме
и на это спасибооо! попробую!!!
39. adva 45 11.03.14 21:10 Сейчас в теме
ПОробуй так (проверить не на чем)
Прикрепленные файлы:
МО 2014.ert
40. drogs 11.03.14 22:24 Сейчас в теме
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("ТМЦ");

заменить на

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("ТМЦ","Справочник.ТМЦ"); //ну или как там он называется, например Справочник.Материалы

и в условии добавить
Если ТЗ.ТМЦ.ЭтоГруппа()= 1 тогда
вывестисекцию("рядокбезтмц");
КонецЕсли;
41. egor_kagor 12.03.14 09:04 Сейчас в теме
Всё получается! Вот только при выводе наименования группы ТМЦ он добавляет к общей сумме цену и количество!
Прикрепленные файлы:
44. adva 45 12.03.14 09:42 Сейчас в теме
(41) сделай по аналогии с (36) если это не секция "Рядок", если она, то очисти лишнее поле в макете
48. adva 45 12.03.14 10:29 Сейчас в теме
Кажется не понял вопрос в (41), в итоги что ли добавляет количество ? Или куда? Объясни по скрину (ссылаясь на наименования и цифры)
42. egor_kagor 12.03.14 09:31 Сейчас в теме
А как ещё можно сделать отбор ПоВсем МОЛ-ам так как этот отчет идёт на определенного МОЛ-а
43. drogs 12.03.14 09:39 Сейчас в теме
(42) egor_kagor, например, помести нужных тебе молов в список и
замени это
Ит.ИспользоватьСубконто("МОЛ",СМ,2);
на это
Ит.ИспользоватьСубконто("МОЛ",список_мол_СМ,2);
45. egor_kagor 12.03.14 09:44 Сейчас в теме
К сожалению!Попробовал не то пальто! Думаю фишка тут
Процедура Сформировать(Режим)
	Если МВО.Выбран() = 0 Тогда
		 Предупреждение("Не выбрано МВО!");
		 Возврат;
	КонецЕсли;  
	глУстПропись();
	СМ = СоздатьОбъект("СписокЗначений");
	Если ПоВсем = 0 Тогда
		СМ.ДобавитьЗначение(МВО.ТекущийЭлемент());
	Иначе   
		Сотр = МВО.Сотрудник;
		МВОв=СоздатьОбъект("Справочник.МОЛ");
		МВОв.ВыбратьЭлементы();
		Пока МВОв.ПолучитьЭлемент() = 1 Цикл
			 Если МВОв.ЭтоГруппа() = 1 Тогда
			 	Продолжить; КонецЕсли;
			 Если МВОв.Сотрудник = Сотр Тогда
			 	  СМ.ДобавитьЗначение(МВОв.ТекущийЭлемент()); 
			 КонецЕсли;
		КонецЦикла;	
	КонецЕсли;
Показать
47. egor_kagor 12.03.14 09:56 Сейчас в теме
55. adva 45 12.03.14 12:36 Сейчас в теме
Возьми обработку из (47), измени код из (49), в этом коде для случая Если ТЗ.ТМЦ.ЭтоГруппа() = 1 Тогда
Проставь для колва и суммы 0.

Все извини, помочь больше скорее всего не смогу (по крайней мере сегодня точно)
egor_kagor; +1 Ответить
56. egor_kagor 12.03.14 12:56 Сейчас в теме
(55) adva, Огромноеееееееееееее спасибо!!!! Всё получилось! Круто! СПА-СИ-БО!!!
57. egor_kagor 12.03.14 12:57 Сейчас в теме
(55) adva, Может поможете ещё сделать отбор по всем сотрудникам?
51. adva 45 12.03.14 11:14 Сейчас в теме
Ну тогда там где группа, проставьте в количество, и сумма 0 (дальше ТЗ свертывается, похоже они должны быть заполнены)
52. egor_kagor 12.03.14 11:38 Сейчас в теме
(51) adva, Блин если ставлю 0 вообще не происходит отбор!!!!
53. adva 45 12.03.14 12:03 Сейчас в теме
(52) этот ноль вообще на отбор влиять не должен был, где ты его ставишь? Приведи измененный фрагмент кода
54. egor_kagor 12.03.14 12:24 Сейчас в теме
Вы не поверите я уже сам запутался очень-очень!
58. egor_kagor 12.03.14 20:18 Сейчас в теме
Процедура Сформировать(Режим)
	Если МВО.Выбран() = 0 Тогда
		 Предупреждение("Не выбрано МВО!");
		 Возврат;
	КонецЕсли;  
	глУстПропись();
	СМ = СоздатьОбъект("СписокЗначений");
	Если ПоВсем = 0 Тогда
		СМ.ДобавитьЗначение(МВО.ТекущийЭлемент());
	Иначе   
		Сотр = МВО.Сотрудник;
		МВОв=СоздатьОбъект("Справочник.МОЛ");
		МВОв.ВыбратьЭлементы();
		Пока МВОв.ПолучитьЭлемент() = 1 Цикл
			 Если МВОв.ЭтоГруппа() = 1 Тогда
			 	Продолжить; КонецЕсли;
			 Если МВОв.Сотрудник = Сотр Тогда
			 	  СМ.ДобавитьЗначение(МВОв.ТекущийЭлемент()); 
			 КонецЕсли;
		КонецЦикла;	
	КонецЕсли;	 
Показать
59. adva 45 12.03.14 23:56 Сейчас в теме
Думаю проще в зависимости от выбора МОЛа использовать разные параметры в ИспользоватьСубконто(), либо заполнять значение, либо оставлять пустым (кажется второй параметр).
60. egor_kagor 13.03.14 10:07 Сейчас в теме
Просто при открытие отчета присутствует галочка по всем но он не отбирает! Что то нужно изменить в коде...
61. adva 45 13.03.14 11:03 Сейчас в теме
(60) я тоже так думаю, поэтому и предложил (59), экспериментируйте. ИспользоватьСубконто встрачается вроде в 3х местах, думаю не так сложно указать (схематично):

Если МОЛ.Выбран() = 1 Тогда
ИспользоватьСубконто(с одними параметрами)
Иначе
ИспользоватьСубконто(С другими параметрами)
КонецЕсли;

Это же Вам нужно, а не мне
Оставьте свое сообщение

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