Консультация № 72499
24.01.2007, 22:05
0.00 руб.
0 1 1
Здравствуйте! К вопросу (72331), предыдущий вопрос я некорректно сформулировала и сделала много ошибок в модуле, которые я исправила, но теперь не знаю что делать дальше, мне нужен отчет который бы выводил материалы которые остались без движения, если указан флаг ПоДатам то выводилась бы строка с месяцем и все материалы оставшиеся без движения в этом месяце, потом следующий месяц и т.д, и также по складам (если указан флаг склад) , у меня только получается выводить строка материал, строка склад , или строка материал, строка месяц ит.д. , помогите пожалуйста ,я уже не знаю что и делать

Приложение:
Процедура Сформировать_КолонкиС(Ит, Таб, Стр) Таб.ВывестиСекцию(Стр+"|Начало"); Ит.ВыбратьПериоды(1); Таб.ПрисоединитьСекцию(Стр+"|Период"); Таб.ПрисоединитьСекцию(Стр+"|Итог"); Таб.ПрисоединитьСекцию(Стр+"|Склад");КонецПроцедурыПроцедура Сформировать() Расшифровка = СоздатьОбъект("СписокЗначений"); Расшифровка.Установить("Отчет", "Карточкасчета"); Расшифровка.Установить("Дата1", ВыбНачПериода); Расшифровка.Установить("Дата2", ВыбКонПериода); Расшифровка.Установить("ВидСубконто1", ВидыСубконто.материалы); Расшифровка.Установить("ОтборСубконто1", 2); Расшифровка.Установить("ВидПериода", 1); з= Создатьобъект("таблицаЗначений"); т= Создатьобъект("таблицаЗначений"); ТЗ=Создатьобъект("таблицаЗначений"); Тз.НоваяКолонка("Товар"); Тз.НоваяКолонка("Дата"); Тз.НоваяКолонка("Количество"); Тз.НоваяКолонка("Остаток"); Тз.НоваяКолонка("Сумма"); Тз.НоваяКолонка("ОстатокСумма"); Тз.НоваяКолонка("Счет"); Тз.НоваяКолонка("Склад"); Тз.НоваяКолонка("месяц"); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто(Видысубконто.материалы,, 1); Если Пустоезначение(ВыбМестаХранения )=1 тогда //по всему комбинату Ит.ИспользоватьСубконто(Видысубконто.МестаХранения,,1) иначе Ит.ИспользоватьСубконто(Видысубконто.МестаХранения,ВыбместаХранения,1) КонецЕсли; Расшифровка.Установить("ВидСубконто2", Видысубконто.МестаХранения); Расшифровка.Установить("ОтборСубконто2", 2); Ит.ВключатьСубсчета(1); Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "10.1,10.3,10.4,10.5,10.6,10.8,10.9,10.10,10.11,10.12,10.13,10.14,10.15,10.16",,, 1, "месяц", "СК"); Таб.ВывестиСекцию("Заголовок"); Сформировать_Колонки(Ит, Таб, "Шапка"); Таб.Опции(0,0,Таб.ВысотаТаблицы(),0); итог=0; сообщить("отчет начал формироваться"+текущеевремя()); Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2) = 1 Цикл //Если Пустоезначение(Ит.Субконто(2).Родитель())=1 тогда сообщить(ит.субконто(2)); если ПоДате=0 тогда Сформировать_Колонки(Ит, Таб, "Субконто12"); конецесли; Ит.ВыбратьСчета(); Пока Ит.ПолучитьСчет() = 1 Цикл если ПоДате=0 тогда Сформировать_Колонки(Ит, Таб, "Счет"); конецесли; Ит.ВыбратьСубконто(1); //выбираем материалы Пока Ит.ПолучитьСубконто(1) = 1 Цикл Если Ит.СКД()>0 тогда БИт = СоздатьОбъект("БухгалтерскиеИтоги");БИт.ИспользоватьСубконто(Видысубконто.материалы,Ит.Субконто(1), 2);БИт.ИспользоватьСубконто(Видысубконто.МестаХранения,Ит.Субконто(2), 2); ДатаПрихода=""; Если ДатаПоступления=1 тогда Если (безПрихода=0)и( Ит.КО() = 0)и(Ит.ДО()=0)Тогда сообщить(ит.Субконто(1));Расшифровка.Установить("Субконто1", Ит.Субконто(1));Расшифровка.Установить("Счет", Ит.счет);БИт.ВыполнитьЗапрос(ВыбНач, ВыбКон, Ит.счет,"10,60,71",,,"месяц", "СК");БИТ.ВыбратьПериоды(,1);Пока БИТ.ПолучитьПериод()=1 цикл ДатаПрихода=БИТ.НачДата; конеццикла; Если (Пустоезначение(датаПрихода )=1)и(неликвиды=1) тогда ТЗ.НоваяСтрока();ТЗ.Товар = Ит.Субконто(1);ТЗ.Остаток = Ит.СКД(3);ТЗ.ОстатокСумма = Ит.СКД();ТЗ.Дата = ДатаПрихода;ТЗ.Счет = Ит.счет; ТЗ.Склад = Ит.Субконто(2); // ТЗ.месяц = ДатаМесяц(датаприхода);ТЗ.Товар = Ит.Субконто(1);ТЗ.Остаток = Ит.СКД(3);ТЗ.ОстатокСумма = Ит.СКД(); ТЗ.Дата = ДатаПрихода; ТЗ.Счет = Ит.счет; ТЗ.Количество = бИт.ДО(3); ТЗ.Сумма = бИт.ДО(); ТЗ.Склад = Ит.Субконто(2); // ТЗ.месяц = ДатаМесяц(датаприхода); Если ПоДате=0 тогда Сформировать_Колонки(Ит, Таб, "Субконто1"); конецесли; Итог=итог+БИт.ДО(); конецесли; иначеЕсли (безПрихода=1)и( Ит.КО() = 0)и(Ит.ДО()>0)Тогда Расшифровка.Установить("Субконто1", Ит.Субконто(1)); Расшифровка.Установить("Счет", Ит.счет); БИт.ВыполнитьЗапрос(ВыбНач, ВыбКон, Ит.счет,"10,60,71",,,"месяц", "СК"); БИТ.ВыбратьПериоды(,1); Пока БИТ.ПолучитьПериод()=1 цикл ДатаПрихода=БИТ.НачДата; Датанач=Выбнач; конеццикла; Если (Пустоезначение(датаПрихода )=1)и(неликвиды=1) тогда ТЗ.НоваяСтрока(); ТЗ.Товар = Ит.Субконто(1); ТЗ.Остаток = Ит.СКД(3); ТЗ.ОстатокСумма = Ит.СКД(); ТЗ.Дата = ДатаПрихода; ТЗ.Счет = Ит.счет; ТЗ.Склад = Ит.Субконто(2); ТЗ.месяц = ДатаМесяц(датаприхода); иначе ТЗ.НоваяСтрока(); ТЗ.Товар = Ит.Субконто(1); ТЗ.Остаток = Ит.СКД(3); ТЗ.ОстатокСумма = Ит.СКД(); ТЗ.Дата = ДатаПрихода; ТЗ.Счет = Ит.счет; ТЗ.Количество = бИт.ДО(3); ТЗ.Склад = Ит.Субконто(2); ТЗ.Сумма = бИт.ДО(); ТЗ.месяц = ДатаМесяц(датаприхода); Если ПоДате=0 тогда Сформировать_Колонки(Ит, Таб, "Субконто1"); конецесли; Итог=итог+БИт.ДО(); конецесли; Конецесли; иначе Если (БезПрихода=0)и( Ит.КО() = 0)и(Ит.ДО()=0)Тогда Расшифровка.Установить("Субконто1", Ит.Субконто(1)); Расшифровка.Установить("Счет", Ит.счет); Сформировать_Колонки(Ит, Таб, "Субконто1"); Итог=итог+Ит.ДО(); конецесли; Конецесли; Конецесли; конеццикла; КонецЦикла; конеццикла; Если (ПоДате=1)и(склад=0) тогда ТЗ.Сортировать("-месяц,склад,-Дата,-Количество"); //ТЗ.Свернуть() ТЗ.выбратьстроки(); место=""; Пока ТЗ.ПолучитьСтроку()=1 цикл// сообщить("строка"); Расшифровка.Установить("Субконто1", ТЗ.Товар); Расшифровка.Установить("Субконто2", ТЗ.Склад); Расшифровка.Установить("Счет", ТЗ.счет); если место=тз.склад тогда Сформировать_Колонки(Ит, Таб, "Субконто2");место=тз.склад; иначе Сформировать_Колонки(Ит, Таб, "Субконто12"); Сформировать_Колонки(Ит, Таб, "Субконто2"); место=тз.склад; конецесли; конеццикла; иначеЕсли (ПоДате=1)и(склад=1) тогда тз.сортировать("-дата"); новс=0; тз.ВыбратьСтроку(новс,"показать результат"); ТЗ.выбратьстроки(); место="";мес=""; Пока ТЗ.ПолучитьСтроку()=1 цикл// сообщить("строка"); Расшифровка.Установить("Субконто1", ТЗ.Товар); Расшифровка.Установить("Субконто2", ТЗ.Склад); Расшифровка.Установить("Счет", ТЗ.счет); если Мес=тз.месяц тогда//место=тз.склад тогда Сформировать_КолонкиС(Ит, Таб, "Субконто2"); // Мес=тз.месяц;//место=тз.склад; иначе Сформировать_КолонкиС(Ит, Таб, "Субконто12"); Сформировать_КолонкиС(Ит, Таб, "Субконто2"); //место=тз.склад; конецесли; Сформировать_Колонки(Ит, Таб, "месяц"); Мес=тз.месяц; конеццикла; конецесли;

Обсуждение

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

Я хотел бы чтобы Вы поняли правильно то что я сейчас скажу.
Похоже, отчет, о котором Вы говорите, слишком сложен для Вашего уровня.
Поэтому рекомендую сделать проще.
Составьте несколько отчетов, для каждого случая отдельно (у Вас в условиях слишком много вариантов формирования отчета), не пытаясь объединить их в один. Если же захотите объединить в один, то пусть для каждого варианта будет СВОЯ процедура и СВОЯ таблица.
Вы умеете пользоваться конструктором бух. запросов (отчетов). Для этих целей его явно будет достаточно.
В приложении отчет, созданный за 2 минуты конструктором, выводящий помесячно все Склады/ТМЦ. Можно сделать несколько копий с него, переделать их для вполне конкретных условий и потом все эти отчеты запихнуть в один -- не накладывая одну процедуру на другую, а просто назвав их Сформировать1, Сформировать2, Сформировать3 и т.д. и в зависимости от того какие условия в диалоге формы выбраны вызывать ту или иную процедуру.

Приложение:
//*******************************************//{{БУХГАЛТЕРСКИЙ ЗАПРОС(Сформировать)//Данный фрагмент построен конструктором.//При повторном использовании конструктора, внесенные вручную изменения будут потеряны!!!//{{ Схема номер 1Процедура Сформировать() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1); Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,, 1); Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, СтрокаСчетов,,, 1, "Месяц", "С"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0,0,Таб.ВысотаТаблицы(),0); Ит.ВыбратьПериоды(); Пока Ит.ПолучитьПериод() = 1 Цикл Таб.ВывестиСекцию("Период"); Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения); Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл Таб.ВывестиСекцию("Субконто1"); Ит.ВыбратьСубконто(ВидыСубконто.ТМЦ); Пока Ит.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл Таб.ВывестиСекцию("Субконто2"); КонецЦикла; КонецЦикла; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать","");КонецПроцедуры//}}БУХГАЛТЕРСКИЙ ЗАПРОС Процедура ПриОткрытии()//{{ИНИЦИАЛИЗАЦИЯ БУХГАЛТЕРСКОГО ЗАПРОСА(Сформировать) ВыбНачПериода = НачалоПериодаБИ(); ВыбКонПериода = КонецПериодаБИ();//{{ИНИЦИАЛИЗАЦИЯ БУХГАЛТЕРСКОГО ЗАПРОСАКонецПроцедуры
Форма ответа