Как сделать отбор в отчете?
26.07.18, 15:25
Общительный
Группа: Пользователи
Сообщений: 15
Спасибо сказали: 0 раз
Рейтинг: 0
Ситуация в следующем, 7рку щупал очень мало нужно помочь знакомому отчет формирует конечный остаток по поставщику (Клиент.Поставщик) Формирует правильно НО даже если выбрано этот самый поставщик оно всеравно формирует по всем, точно так же и с товарами.
Собственно код //******************************************* // Процедура генерации запроса Сформировать. Перем вкл; Функция ПоискПостачальника(Клиент,вкл) Пост=СоздатьОбъект("Справочник.Постачальник"); Пост.ИспользоватьВладельца(Клиент); вкл = ПолучитьПустоеЗначение("Справочник.Постачальник"); Пост.ВыбратьЭлементы(); Если Пост.ПолучитьЭлемент() = 1 Тогда вкл = Пост.Постачальник; КонецЕсли; Возврат вкл; КонецФункции //----------------------------------------------- Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Товары) |Период с ВыбНачПериода по ВыбКонПериода; |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |Произв = Регистр.ОстаткиТоваров.Товар.Производитель; |Родит = Регистр.ОстаткиТоваров.Товар.Родитель; |Ост = Регистр.ОстаткиТоваров.ОстатокТовара; |БазСт = Регистр.ОстаткиТоваров.БазоваяСтоимость; |Док = Регистр.ОстаткиТоваров.ТекущийДокумент; |Функция ОстНачОст = НачОст(Ост) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция ОстПриход = Приход(Ост) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция ОстРасход = Расход(Ост) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция ОстКонОст = КонОст(Ост) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция БазСтНачОст = НачОст(БазСт) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция БазСтПриход = Приход(БазСт) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция БазСтРасход = Расход(БазСт) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Функция БазСтКонОст = КонОст(БазСт) Когда ((Склад.ВидСклада = Перечисление.ВидыСкладов.Филиал) или (Склад.ВидСклада = Перечисление.ВидыСкладов.Магазин) или (Склад.Главный = 1)); |Группировка произв; |Группировка Родит; |Группировка Товар без Групп; |"//}}ЗАПРОС ; Если ВыбТовар.Выбран() = 0 Тогда ИначеЕсли ВыбТовар.ЭтоГруппа() = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Условие (Товар.ПринадлежитГруппе(ВыбТовар) = 1);"; Иначе ТекстЗапроса = ТекстЗапроса + "Условие (Товар = ВыбТовар);"; КонецЕсли; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Едн = 1; РасчетыП = СоздатьОбъект("ТаблицаЗначений"); Если Запрос.Выгрузить(РасчетыП,0,0) = 1 тогда РасчетыП.НоваяКолонка("Клиенты","Справочник.Клиенты"); РасчетыП.НоваяКолонка("ПорП","Число",1); РасчетыП.ВыбратьСтроки(); Пока РасчетыП.ПолучитьСтроку() = 1 Цикл РасчетыП.ПорП = Едн; КонецЦикла; КонецЕсли; Если ВыбКлиент.Выбран()=0 Тогда Сообщить(" Выберите клиента"); Возврат; КонецЕсли; ЗапросПос=СоздатьОбъект("Запрос"); ТекстЗапросаПос = "//{{ЗАПРОС(Взаиморасчеты) |Период с ВыбНачПериода по ВыбКонПериода; |Клиент=Регистр.Взаиморасчеты.Клиент; |Баз_сум=Регистр.Взаиморасчеты.СуммаБазовая; |Функция КонБаз=КонОст(Баз_сум); |Функция НачБаз=НачОст(Баз_сум); |Функция ПриходБаз=Приход(Баз_сум); |Функция РасходБаз=Расход(Баз_сум); |Группировка Клиент без Групп; |Условие (Клиент.ПринадлежитГруппе(ВыбКлиент)=1); |"; Если ЗапросПос.Выполнить(ТекстЗапросаПос) = 0 тогда Возврат; // "Запрос по Кредиту не выполнился!!!"; КонецЕсли; Едн = 2; Пока ЗапросПос.Группировка(1) = 1 Цикл РасчетыП.НоваяСтрока(); РасчетыП.Произв = ПоискПостачальника(ЗапросПос.клиент,вкл); РасчетыП.ПорП = Едн; РасчетыП.Клиенты = ЗапросПос.Клиент; РасчетыП.БазСтНачОст = ЗапросПос.НачБаз; РасчетыП.БазСтПриход = ЗапросПос.ПриходБаз; РасчетыП.БазСтРасход = ЗапросПос.РасходБаз; РасчетыП.БазСтКонОст = ЗапросПос.КонБаз; КонецЦикла; РасчетыП.Сортировать("Произв,ПорП,Родит"); ПроизвТ = " "; КБазСтНачОст = 0; КБазСтПриход = 0; КБазСтРасход = 0; КБазСтКонОст = 0; КОстНачОст = 0; КОстПриход = 0; КОстРасход = 0; КОстКонОст = 0; ИБазСтНачОст = 0; ИБазСтПриход = 0; ИБазСтРасход = 0; ИБазСтКонОст = 0; ИОстНачОст = 0; ИОстПриход = 0; ИОстРасход = 0; ИОстКонОст = 0; ФБазСтНачОст = 0; ФБазСтПриход = 0; ФБазСтРасход = 0; ФБазСтКонОст = 0; ПБазСтНачОст = 0; ПБазСтПриход = 0; ПБазСтРасход = 0; ПБазСтКонОст = 0; ПОстНачОст = 0; ПОстПриход = 0; ПОстРасход = 0; ПОстКонОст = 0; ПрИ = 0; Группа = " "; Пит = 0; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("Заголовок"); Таб1 = СоздатьОбъект("Таблица"); Таб1.ИсходнаяТаблица("Сформировать1"); Таб1.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); РасчетыП.ВыбратьСтроки(); Пока РасчетыП.ПолучитьСтроку() = 1 Цикл Если ((ПроизвТ <> " ") и (ПроизвТ <> РасчетыП.Произв) и (ПрИ <> 0)) или ((ПроизвТ = РасчетыП.Произв) и (РасчетыП.ПорП = 2) и (ПрИ <> 0)) Тогда Если (Пит > 0) и ((ПБазСтНачОст+ ПБазСтПриход+ПБазСтРасход+ПБазСтКонОст) <> 0) Тогда Таб.ВывестиСекцию("ПромИтог"); КонецЕсли; Пит = 0; Таб.ВывестиСекцию("ИтогТовара"); Таб1.ВывестиСекцию("ИтогТовара"); КБазСтНачОст = 0; КБазСтПриход = 0; КБазСтРасход = 0; КБазСтКонОст = 0; ПрИ = 0; КОстНачОст = 0; КОстПриход = 0; КОстРасход = 0; КОстКонОст = 0; ПБазСтНачОст = 0; ПБазСтПриход = 0; ПБазСтРасход = 0; ПБазСтКонОст = 0; ПОстНачОст = 0; ПОстПриход = 0; ПОстРасход = 0; ПОстКонОст = 0; КонецЕсли; Если РасчетыП.ПорП = 2 Тогда Таб.ВывестиСекцию("Клиент"); Таб1.ВывестиСекцию("Клиент"); ФБазСтНачОст = ФБазСтНачОст + РасчетыП.БазСтНачОст; ФБазСтПриход = ФБазСтПриход + РасчетыП.БазСтПриход; ФБазСтРасход = ФБазСтРасход + РасчетыП.БазСтРасход; ФБазСтКонОст = ФБазСтКонОст + РасчетыП.БазСтКонОст; Продолжить; КонецЕсли; ПроизвТ = РасчетыП.Произв; Товар = РасчетыП.Товар; Если (Группа <> " ") и (Группа <> РасчетыП.Родит) и ((ПБазСтНачОст+ ПБазСтПриход+ПБазСтРасход+ПБазСтКонОст) <> 0) Тогда Таб.ВывестиСекцию("ПромИтог"); ПБазСтНачОст = 0; ПБазСтПриход = 0; ПБазСтРасход = 0; ПБазСтКонОст = 0; ПОстНачОст = 0; ПОстПриход = 0; ПОстРасход = 0; ПОстКонОст = 0; Пит = Пит + 1; КонецЕсли; Группа = РасчетыП.Родит; Если Число(РасчетыП.БазСтНачОст+ РасчетыП.БазСтПриход+РасчетыП.БазСтРасход+РасчетыП.БазСтКонОст) <> 0 Тогда Таб.ВывестиСекцию("Товар"); Иначе Продолжить; КонецЕсли; ПрИ = 1; ПБазСтНачОст = ПБазСтНачОст + (РасчетыП.БазСтНачОст*(1+ПроцентНДС(Константа.ОснНДС)/100)); ПБазСтПриход = ПБазСтПриход + (РасчетыП.БазСтПриход*(1+ПроцентНДС(Константа.ОснНДС)/100)); ПБазСтРасход = ПБазСтРасход + (РасчетыП.БазСтРасход*(1+ПроцентНДС(Константа.ОснНДС)/100)); ПБазСтКонОст = ПБазСтКонОст + (РасчетыП.БазСтКонОст*(1+ПроцентНДС(Константа.ОснНДС)/100)); ПОстНачОст = ПОстНачОст + РасчетыП.ОстНачОст; ПОстПриход = ПОстПриход + РасчетыП.ОстПриход; ПОстРасход = ПОстРасход + РасчетыП.ОстРасход; ПОстКонОст = ПОстКонОст + РасчетыП.ОстКонОст; КБазСтНачОст = КБазСтНачОст + (РасчетыП.БазСтНачОст*(1+ПроцентНДС(Константа.ОснНДС)/100)); КБазСтПриход = КБазСтПриход + (РасчетыП.БазСтПриход*(1+ПроцентНДС(Константа.ОснНДС)/100)); КБазСтРасход = КБазСтРасход + (РасчетыП.БазСтРасход*(1+ПроцентНДС(Константа.ОснНДС)/100)); КБазСтКонОст = КБазСтКонОст + (РасчетыП.БазСтКонОст*(1+ПроцентНДС(Константа.ОснНДС)/100)); КОстНачОст = КОстНачОст + РасчетыП.ОстНачОст; КОстПриход = КОстПриход + РасчетыП.ОстПриход; КОстРасход = КОстРасход + РасчетыП.ОстРасход; КОстКонОст = КОстКонОст + РасчетыП.ОстКонОст; ИБазСтНачОст = ИБазСтНачОст + (РасчетыП.БазСтНачОст*(1+ПроцентНДС(Константа.ОснНДС)/100)); ИБазСтПриход = ИБазСтПриход + (РасчетыП.БазСтПриход*(1+ПроцентНДС(Константа.ОснНДС)/100)); ИБазСтРасход = ИБазСтРасход + (РасчетыП.БазСтРасход*(1+ПроцентНДС(Константа.ОснНДС)/100)); ИБазСтКонОст = ИБазСтКонОст + (РасчетыП.БазСтКонОст*(1+ПроцентНДС(Константа.ОснНДС)/100)); ИОстНачОст = ИОстНачОст + РасчетыП.ОстНачОст; ИОстПриход = ИОстПриход + РасчетыП.ОстПриход; ИОстРасход = ИОстРасход + РасчетыП.ОстРасход; ИОстКонОст = ИОстКонОст + РасчетыП.ОстКонОст; КонецЦикла; // КонецЦикла; // Заполнение полей "Итого" Если (Пит > 0) и ((ПБазСтНачОст+ ПБазСтПриход+ПБазСтРасход+ПБазСтКонОст) <> 0) Тогда Таб.ВывестиСекцию("ПромИтог"); КонецЕсли; Таб.ВывестиСекцию("ИтогТовара"); Таб1.ВывестиСекцию("ИтогТовара"); Таб.ВывестиСекцию("Итог"); Таб1.ВывестиСекцию("Итог"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("АнализОстаткиПоставщикГруппа", ""); Таб1.ТолькоПросмотр(1); Таб1.Показать("АнализОстаткиПоставщик", ""); КонецПроцедуры
Сообщение отредактировал Vofka - 26.07.18, 15:28
26.07.18, 15:46
...
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1419 раз
Рейтинг: 0
В умові
|Условие (Клиент в ВыбКлиент);
далі забрати
|Родит = Регистр.ОстаткиТоваров.Товар.Родитель;
і ще забрати
|Группировка Родит;
Тут
|Группировка Товар;
тоді буде виводити товари із групами, групи зверху.
Не нашли ответа на свой вопрос?
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!