
- •Пример для спецкурса «Программирование на платформе v7.7» - создание заказа на издательско-полиграфические услуги, формирование на его основе счета, отчетов.
- •Реквизиты шапки:
- •Все параметры документа заданы!
- •Создание интерфейса пользователя.
- •Документ Счет
- •Все реквизиты, визуальное представление документа Счет заданы.
- •Строка 15, Объединенные 1-7 столбцы:
- •Счет на основании заказа
- •Отчет (по заказчикам за определенный период)
Счет на основании заказа
Чтобы создать Счет на основании заказа, необходимо доработать документ ЗаказКниги.
Добавить реквизит шапки Наименование (тип - «Строка», Длина - 25). Этот реквизит необходимо вынести на форму. Настройка порядка обхода реквизитов (при заполнении пользователем): Диалог → Порядок обхода
При расчете стоимости заказа вычисленная сумма нигде не хранится, но ее нужно передать документ Счет. Для этого в документе ЗаказКниги создаем реквизит шапки Сумма (тип - «Число», Длина - 15, Точность - 2). Этот реквизит не выносится на форму.
В модуль документа ЗаказКниги добавим типовую процедуру ПриЗаписи():
Процедура ПриЗаписи()
Сумма=Итого
КонецПроцедуры
4. Чтобы при открытии старого документа не нажимать кнопку Расчет, а сразу увидеть его стоимость, создадим процедуру ПриОткрытии():
Перем Итого;
Перем ИтогоФормат;
Процедура ПриОткрытии()
Итого=Сумма;
ИтогоФормат=Строка(Формат(Итого,"Ч15.2"))+" руб.";
КонецПроцедуры
!!! Переменную Итого необходимо вынести в глобальные переменные (в секцию Перем).
Так как в наших документах основной единицей измерения является единица «шт», ее удобно внести в константы. Создадим константу ОсновнаяЕдИзм (тип - Справочник.ЕдиницыИзмерения). До формирования Счета пользователь должен заполнить эту константу.
В документе Счет необходимо написать стандартную процедуру ВводНаОсновании(ДокОсн), в которую передается имя документа, на основании которого формируется счет.
Процедура ВводНаОсновании (ДокОсн)
Плательщик=ДокОсн.Заказчик;
НоваяСтрока();
Наименование=ДокОсн.Наименование;
ЕдИзм=Константа.ОсновнаяЕдИзм;
КолВо=ДокОсн.Тираж;
Сумма=ДокОсн.Сумма;
Цена=Сумма/КолВо;
КонецПроцедуры;
!!! Обратите внимание, что точка с запятой в конце процедур ставится только в случае, если это последняя процедура в модуле.
Переходим в режим
1С:Предприятие. Создаем новый документ
ЗаказКниги. В журнале заказов по кнопке
(ввод на
основании) формируем Счет и его печатную
форму.
Отчет (по заказчикам за определенный период)
В окне Конфигурация (закладка Метаданные) создаем новый объект - Отчеты. Отчет должен содержать информацию, сгруппированную по заказчикам, с указанием наименований заказов, их стоимости. Идентификатор: Заказы.
Отчет может быть в составе конфигурации и внешний. Разница только в способе хранение Внешний отчет - это внешний файл, который хранится отдельно от конфигурации (удобнее тем, что любые изменения не требуют изменения всей конфигурации, а только этого файла).
Далее >
Включаем отчет в интерфейс менеджера:
Далее >
Вызвать конструктор макета отчета - создается грубая таблица (из основных элементов отчета). Вызвать конструктор запросов - помогает написать запрос к данным (выборку из Базы Данных) Вызвать конструктор бухгалтерских запросов - запрос к бухгалтерским данным (!!! В нашем примере нет бухгалтерских проводок).
Готово
Данные для отчета будем брать из документа «Заказ». Отчет будет формировать при вызове процедуры «Сформировать»:
Окно конструктора макета отчета зависит от выбранного типа отчета. Наш отчет будет содержать циклы по строкам. Диаграмма представляет интерес, если формируется отчет по месяцам.
Далее >
Количество циклов по строкам: 2 (заказчики, наименование изделия).
Количество колонок: 4 (заказчик, тираж, сумма, дополнительные услуги (макет = редактирование + верстка)).
Далее >
Готово
Макет Отчета создан. На закладке Модуль появился макет процедуры «Сформировать», создалась новая закладка Сформировать, содержащая макет отчета.
В процедуре «Сформировать» формируется запрос и выводится таблица, содержащая отчет.
Процедура Сформировать ()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
// Пишем запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//ЗАПРОС(Сформировать)
|Период с ДатаНач по ДатаКон; // | - продолжение строки
|Заказчик = Документ.ЗаказКниги.Заказчик;
|Наименование = Документ.ЗаказКниги.Наименование;
|Тираж = Документ.ЗаказКниги.Тираж;
|Сумма = Документ.ЗаказКниги.Сумма;
|Доп = Документ.ЗаказКниги.ДопРабота;
|Функция Всего = Сумма(Сумма);
|Группировка Заказчик; //без групп - не учитывать группировку в справочнике;
|Группировка Наименование;
|Группировка Доп;
|ОбрабатыватьДокументы Все;";
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Строка_1");
Пока Запрос.Группировка(2) = 1 Цикл
Макет = 0;
Пока Запрос.Группировка(3) = 1 Цикл
Если (Найти(ВРЕГ(Запрос.Доп.Наименование), "ВЕРСТ")>0) или
(Найти(ВРЕГ(Запрос.Доп.Наименование), "РЕДАК") > 0) Тогда
Макет = Макет+1;
КонецЕсли;
КонецЦикла;
Таб.ВывестиСекцию("Строка_2");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры
Функция ВРЕГ(строка) переводит символы строки в заглавные, Найти(строка1 ,строка2) ищет подстроку строка2 в строке строка1 . Если найдены фрагменты строк ВЕРСТ и РЕДАК, то заказ содержит обе дополнительные работы, т. е. полный макет. В отчетной таблице заказ, содержащий полный макет, отметим знаком «+».
Переходим к закладке Диалог, на которой создадим визуальное представление Формы-запроса отчета.
1. Добавим 3 элемента Текст ( ). (Шрифт - жирный, темно-синий, 12pt) с заголовками: Отчет о заказах за период, с, по (для изменения вида шрифта убрать «галочку» в Шрифт по умолчанию).
2. Добавим
2
реквизита
диалога (
):
Идентификаторы: ДатаНач и ДатаКон, тип:
«Дата», на закладке Дополнительно
поставить «галочку» в Имеет кнопку
выбора.
Переходим к закладке Сформировать для конструирования таблицы Отчета.
Строка 2: Сформировать заменяем на Отчет о заказчиках за [ПериодСтр(ДатаНач,ДатаКон)], тип «Шаблон». Если ДатаНач и ДатаКон совпадают с датами стандартных периодов (месяц, квартал, год), то автоматически подставляется наименование периода.
Строка 4: Колонка 1 → Заказчик/Наименование
Колонка 2 → Тираж
Колонка 3 → Сумма
Колонка 4 → Макет.
Строка 6: Столбец 2: Запрос.Заказчик, Столбец 4: Запрос.Всего (Шрифт: жирный, 10pt). Тип данных ячеек подставляется автоматически, так как был задан макет отчета, в котором эти ячейки - выражение.
Строка 8: Столбец 2: [Запрос.Наименование] (!!! До прямоугольных скобок стоит три пробела для формирования отступа в списке Наименование), Тип: «Шаблон». Столбец 3: Запрос.Тираж Столбец 4: Запрос.Всего
Столбец 5: ?(Макет=2,"+"," ") (Условный оператор - если переменная Макет=2 (т.е. есть и редактирование и верстка), то напечатать символ «+», иначе - пробел).
Строка 10: Столбец 4: Запрос.Всего (Шрифт: Красный, жирный, 10 pt).
В 1 С: Предприятие формируем Отчет за период: