Глава 3
Пока делаю отчет внутри конфигурации.
Выбираем в конфигурации: Отчеты - Новый отчет. Открывается конструктор отчета.
В окне конструктора отчета две радиокнопки - Отчет(в составе конфигурации) и
Внешний отчет. Выберем пока отчет в составе конфигурации. Если мы выберем
кнопку Внешний отчет, то откроется вводное поле Имя файла, которое ранее было серым.
Мы выбрали отчет в составе конфигурации, поэтому надо заполнить три поля:
Идентификатор
Синоним
Комментарий
Идентификатор - ОтчетРН (Отчет по расходным накладным), нажимаем Далее.
Ставим галочку в Чек-бокс - вставить команду в пользовательское меню.
Автоматически заполнились еще два поля.
Далее галочку Вызвать конструктор макета отчета.
Далее конструктор предлагает нам новую процедуру Сформировать(). Согласимся.
Далее конструктор предлагает свой макет отчета.
Выберем в нем радиокнопку - циклы по строкам.
Далее в следующем окне отметим количество циклов - 2,
и количество колонок какое будет в таблице - 6.
Разумно подумав
и ответив на вопросы, мы при помощи конструктора отчетов
//Конструкции <<...>> необходимо заменить на реальные логические условия
Процедура Сформировать()
создали форму - окно с двумя кнопками Создать и Открыть.
Конструктор создал модуль, со следующим кодом:
//и значения переменных
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Пока <<Условие>> Цикл
Таб.ВывестиСекцию("Подвал");
Таб.Показать("ОтчетРН","");
В этом модуле конструктор написал код, который создает таблицу. У таблицы есть шапка,
строка и подвал. Мы должны модифицировать код, созданный конструктором так, чтобы он
отражал в отчете нашу расходную накладную.
Таблицы
Теперь используя предыдущий код, созданный конструктором создадим таблицу, при помощи
которой можно вывести всю информацию из документа не в окно сообщений как мы делали ранее,
а в специальную форму в виде виртуального печатного листа, чтобы можно было сохранить
и распечатать результат.
Напишем сначала код, который выводит реквизиты шапки документа,
------------------
и сделать он должен это во всех расходных документах:
Процедура Сформировать()
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Док = СоздатьОбъект("Документ.РН");
Док.ВыбратьДокументы(,);
Пока (Док.ПолучитьДокумент() = 1) Цикл
ПчКол2=Док.ДатаДок;
ПчКол3=Док.Склад;
Строка_1 = ПчКол1 + ПчКол2+ ПчКол3;
Таб.ВывестиСекцию("Строка_1");
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры
---------------------
Как видим этот код работает правильно.
//*******************************************
Таб.ВывестиСекцию("Подвал");
Теперь выведем не только реквизиты шапки, но и реквизиты
табличной части документа. Для этого внутрь цикла Пока
добавим еще один цикл Пока, который будет пробегать по всем
элментам строки и будет повторяться столько раз,
сколько строк в нашем документе.
Процедура Сформировать()
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Док = СоздатьОбъект("Документ.РН");
Док.ВыбратьДокументы();
Пока (Док.ПолучитьДокумент() = 1) Цикл
ПчДат=Док.ДатаДок;
ПчСклад=Док.Склад;
// Док = ПчНом + ПчДат+ ПчСклад;
Таб.ВывестиСекцию("Док");
Таб.ВывестиСекцию("ШапСтр");
Док.ВыбратьСтроки();
Пока (Док.ПолучитьСтроку() = 1) Цикл
ПчНомТов = Док.НомерСтроки;
ПчТовар = Док.Товар;
ПчЦена = Док.Цена;
ПчКолич = Док.Количество;
ПчЕдИзм = Док.ЕИ;
ПчСумма = Док.Сумма;
СтрДок = ПчТовар+ПчЦена+ПчКолич+ПчЕдИзм+ПчСумма;
Таб.ВывестиСекцию("СтрДок");
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
-------------------------
Результат:
Запустим 1С и через меню Отчеты посмотрим наш отчет:
Конечно, явно видно, что таблица отчета требует еще доработки.
В частности надо дорисовать рамки там где их не хватает.
Но многое она уже вывела правильно.
При первоначальном запуске программа не показала код товара и единицы измерения.
Вернее вместо кода товара и единиц измерения показывает просто текст, который находится
в ячейках. Причина была в том, что не правильно указан тип ячейки.
Примечание:
Наименование ячейкам, секциям таблицы следует делать прямо в таблице вручную.
Работа со столбцами, строками и ячейками примерно такая же как в Excel.
Еще интересное. У нас есть секция СтрДок (Строка документа),
//действия с очередным элементом
Все это прекрасно работает со строками!
ПчНом=Док.НомерДок;
Резюме:
Мы научились создавать отчет по документу РН(Расходная накладная).
Аналогичным образом можно создать отчет по другим документам а так же по регистрам.
Процедуры и функции, которые использовались в этой обработке:
Таб = СоздатьОбъект("Таблица")
Док = СоздатьОбъект("Документ.РН")
Вопросы:
Вопрос: Как написать работающие функции в документе, которые помогают высчитывать Сумма
Вопрос: Как делать рамки в таблице?
Назад |
Начало урока |
Вверх |
Вперед
в этой строке несколько ячеек, каждой ячейке присвоена переменная.
В модуле, в каждую переменную положено значение из документа.
Затем все эти переменные присваиваются переменной секции СтрДок
и выводятся:
ПчНомТов = Док.НомерСтроки;
ПчТовар = Док.Товар;
ПчЦена = Док.Цена;
ПчКолич = Док.Количество;
ПчЕдИзм = Док.ЕИ;
ПчСумма = Док.Сумма;
СтрДок = ПчТовар+ПчЦена+ПчКолич+ПчЕдИзм+ПчСумма;
Таб.ВывестиСекцию("СтрДок");
А вот с секцией Док документа такой номер уже не проходит:
ПчДат=Док.ДатаДок;
ПчСклад=Док.Склад;
// Док = ПчНом + ПчДат+ ПчСклад;
Таб.ВывестиСекцию("Док");
То есть здесь в переменную Док не надо ничего складывать.
Эта переменная выведет все сама. Номер документа, Дата документа, Склад не
являются реквизитами табличной части документа. Так же не является
реквизитами табличной части и поля Всего и Кто.
Научились получать доступ ко всем реквизитам документа и выводить отчет
в виде таблицы, в которой указаны все документы (все расходные накладные)
и все данные из этих документов - реквизиты шапки и реквизиты табличной части.
Таб.ИсходнаяТаблица("Сформировать")
Таб.ВывестиСекцию("Шапка")
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0)
Таб.ТолькоПросмотр(1)
Таб.Показать("Сформировать","")
Док.ВыбратьДокументы()
Док.ПолучитьДокумент()
Док.ВыбратьСтроки()
Док.ПолучитьСтроку()
и Всего в документе? Какие предопределенные функции можно при этом задействовать?
Обработайте таким образом документ РН(Расходная накладная).
Вопрос: Во первых вся инф выводится в окно сообщений на русском, но когда пытаюсь
скопировать через буфер обмена, вся инфа в файл типа txt попадает на крокозябре.
Такая же проблема - не могу скопировать из окна Помощь.
Конечно, я могу написать специальную программу на С++, которая будет расшифровывать
данную крокозябру.
Содержание