Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример для спецкурса.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.97 Mб
Скачать

Счет на основании заказа

Чтобы создать Счет на основании заказа, необходимо доработать документ ЗаказКниги.

  1. Добавить реквизит шапки Наименование (тип - «Строка», Длина - 25). Этот реквизит необходимо вынести на форму. Настройка порядка обхода реквизитов (при заполнении пользователем): Диалог → Порядок обхода

  2. При расчете стоимости заказа вычисленная сумма нигде не хранится, но ее нужно передать документ Счет. Для этого в документе ЗаказКниги создаем реквизит шапки Сумма (тип - «Число», Длина - 15, Точность - 2). Этот реквизит не выносится на форму.

  3. В модуль документа ЗаказКниги добавим типовую процедуру ПриЗаписи():

Процедура ПриЗаписи()

Сумма=Итого

КонецПроцедуры

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 С: Предприятие формируем Отчет за период:

33