Консультация № 72331
23.01.2007, 22:47
0.00 руб.
0 1 1
Здравствуйте! Помогите пожалуйста, мне нужно сделать так чтобы при выборе склада, в отчете происходила сортировка по датам и группировать по месяцу если выбран флаг ПоДате=1, если флаг ПОДате=0 тогда сортировать материал по алфавиту, если выбран флаг Склад=1 (по всем складам ) тогда группировать по складу, я создаю Таблицу значений(см.прог.код) и записываю туда результаты выполнения запроса и сортирую их, но в итоге получается что даты неотсортированы, в чем ошибка и как сгруппировать по месяцу и по складу???

Приложение:
Процедура Сформировать_Колонки(Ит,Таб,Стр)Таб.ВывестиСекцию(Стр+”|Начало”);Ит.ВыбратьПериоды(1);Таб.ПрисоединитьСекцию(Стр+ "|Период");Таб.ПрисоединитьСекцию(Стр+ "|Итог");КонецПроцедурыПроцедура Сформировать()Тз=СоздатьОбъект(“Таблицазначений”);Тз.НоваяКолонка(“Товар”);Тз.НоваяКолонка(“Дата”);Тз.НоваяКолонка(“Количество”);Тз.НоваяКолонка(“Остаток”);Тз.НоваяКолонка(“Сумма”);Тз.НоваяКолонка(“ОстатокСумма”);Тз.НоваяКолонка(“Счет”);Тз.НоваяКолонка(“Склад”);Таб=СоздатьОбъект(“Таблица”);Таб.ИсходнаяТаблица(“Сформировать”);Ит=СоздатьОбъект(БухгалтерскиеИтоги);Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, ВыбМестаХранения, 2);Ит. ВключатьСубсчета(1);Ит.ВыполнитьЗапрос(ВыбНачПериода,ВыбКонПериода,”10.1,10.3” , , ,”месяц”, “СК”);Таб.вывестиСекцию(“Заголовок”);Сформировать_Колонки(Ит,Таб, "Шапка");Таб.Опции(0,0, Таб.ВысотаТаблицы(),0);Если ПоДате=0 тогдаСформировать_Колонки(Ит,Таб, "Счет");Конецесли;Ит.ВыбратьСубконто(1);Пока Ит.ПолучитьСубконто(1)=1 Цикл БИт=СоздатьОбъект(БухгалтерскиеИтоги); БИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестаХранения,2); БИт.ИспользоватьСубконто(ВидыСубконто.материалы,Ит.Субконто(1), 2);ДатаПрихода=””; Если (БезПрихода=1)и(Ит.КО()=0) и (Ит.ДО()>0) тогдаБит. Выполнитьзапрос(ВыбНач, выбКон, Ит.Счет, “10, 60, 71”, , , “проводка”, “СК” );Бит.ВыбратьПериоды(,1);Пока Бит.ПолучитьПериод()=1 ЦиклДатаПрихода=Бит.НачДата;КонецЦикла;Если ПустоеЗначение(датаПрихода)=1 тогдаТЗ.НоваяСтрока();ТЗ.Товар=Ит.Субконто(1);ТЗ.Остаток=Ит.СКД(3);ТЗ.ОстатокСумма=Ит.СКД();ТЗ.Дата=ДатаПрихода;ТЗ.Счет=Ит.Счет;КонецЕсли; Если (ПоДате=1) тогдаТз.Сортировать(“-Дата ”);Тз.ВыбратьСтроки(); Месяц=” ”;Пока ТЗ.ПолучитьСтроку()=1 Цикл Если Месяц=ДатаМесяц(Тз.Дата) тогдаМес=ДатаМесяц(Тз.ДатаПрихода);Сформировать_Колонки(Ит,Таб, "Субконто2");ИначеСформировать_Колонки(Ит,Таб, "Месяц");Сформировать_Колонки(Ит,Таб, "Субконто2");конецЕсли; конеццикла;конецЕсли;

Обсуждение

Неизвестный
24.01.2007, 00:22
общий
это ответ
Здравствуйте, Fifina!

Во-первых, строки
Пока Бит.ПолучитьПериод()=1 Цикл
ДатаПрихода=Бит.НачДата;
КонецЦикла;
говорят о том, что в ДатаПрихода запишется только последняя дата, все остальные будут пропущены.

Во-вторых, у Вас данные заносятся в ТЗ только если выполняется условие
Если ПустоеЗначение(датаПрихода)=1 тогда
Т.е. если ДатаПрихода неопределена.

Т.е. ваша таблица значений ТЗ скорее всего пуста.
А в печатную форму у Вас выводятся данные не из ТЗ, а из бухгалтерских итогов Ит. Это прописано в процедуре Сформировать_Колонки(Ит,Таб,Стр).

Чтобы группировать по складам и месяцам придется полностью перестроить запрос и построение ТЗ и печатной формы.
Форма ответа