Вопрос № 32375: Здравствуйте!
У меня следющая проблема: нужно вывести таблицу по номерам приходных накладных с наименованиями поставщиков и суммой этих накладных.
Пожалуйста по-подробнее, начинающий программист 1С.
Заранее благодарен, Николай....
Вопрос № 32.375
Здравствуйте!
У меня следющая проблема: нужно вывести таблицу по номерам приходных накладных с наименованиями поставщиков и суммой этих накладных.
Пожалуйста по-подробнее, начинающий программист 1С.
Заранее благодарен, Николай.
Отвечает: Сергей
Здравствуйте, Данилов Николай Юрьевич!
нужно создать запрос (в конфигураторе - в дереве - отчеты - создать отчет в режиме конструктор запросов....
Должно получится примерно так:
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|НомерДок = Документ.ПоступлениеТоваров.НомерДок;
|Сумма = Документ.ПоступлениеТоваров.Сумма;
|Наименование = Документ.ПоступлениеТоваров.Контрагент.Наименование;
|Функция СуммаСумма = Сумма(Сумма);
|Группировка НомерДок без упорядочивания;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей НомерДок
Таб.ВывестиСекцию("НомерДок");
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
Ответ отправил: Сергей (статус: 2-ой класс)
Отправлен: 29.12.2005, 11:45
Отвечает: Elric
Здравствуйте, Данилов Николай Юрьевич!
Вариант 1.
Воспользуйтесь конструктором Запросов. Сразу и модуль построится, и печатная форма (Таблица). Шаги (по закладкам) в конструкторе:
а) Имя запроса произвольное
б) Ставите галочки "Период будет выбираться в в диалоге формы" и "Без итогов"
в) Добавляете переменную для каждого реквизита документа ПриходнаяНакладная: НомерДок (в конструкторе он ниже Шапки и Табличной части), Контрагент (реквизит Шапки), СуммаСНДС (реквизит Табличной Части)
г) Добавляете Функцию (по-умолчанию там все установлено так как нам надо, т.е. реквизит СуммаСНДС, вид функции Сумма). Как вариант можно сразу имя по-умолчанию СуммаСНДССумма заменить на более благозвучное Сумма
д) Добавляем группировки НомерДок и Контрагент (у группировки Контрагент ставим флажок БезГрупп)
е) Закладку Условия пропускаем
ж) Смотрим на готовый запрос и нажимаем кнопку Готово.
В итоге у нас готовый отчет. Осталось немного поправить экранную и печатную форму на предмет привлекательной внешности.
P.S. Возможно, вместо НомерДок следует выбрать реквизит Шапки НомерПриходнойНакладной -- зависит от желания заказчика
Вариант 2.
Воспользоваться методом банального перебора. Естественно, при этом нужно заранее создать макет отчета (Таблицу) с соответствующими секциями и колонками:
Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Док=СоздатьОбъект("Документ.ПриходнаяНакладная");
Док.ВыбратьДокументы(НачДата,КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл
НомерДок=Док.НомерДок;
Поставщик=Док.Контрагент;
Сумма=Док.Итог("СуммаСНДС");
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать();
--------- Мирный атом в каждый дом
Ответ отправил: Elric (статус: 1-ый класс)
Отправлен: 29.12.2005, 12:26