1. «ИзменениеЦен». В табличной части документа содержится список товаров, их старые и новые розничные цены. При выборе товара обе цены должны заполняться розничной ценой товара, взятой на дату документа. Пользователь корректирует новую цену, старую цену редактировать запрещено.
Документ должен проводитсья. При проведении документа «ИзменениеЦен» документ изменяет розничные цены указанных товаров на указанную дату.
2. «ПриходДенег» и «ВыплатаДенег». Реквизиты документа – Контрагент, Договор, Сумма.
2.1. Если контрагент в документе выбран, то при выборе договора пользователю должны быть доступны для выбора только договора выбранного контрагента.
2.2. Если контрагент изменен, значение поля Договор (заполненное договором предыдущего контрагента) должно очищаться.
3. «ПриходнаяНакладная» и «РасходнаяНакладная».
3.1. Реквизиты шапки документа – Контрагент, Договор, Склад.
- Если контрагент в документе выбран, то при выборе договора пользователю должны быть доступны для выбора только договора выбранного контрагента.
- Если контрагент изменен, значение поля Договор (заполненное договором предыдущего контрагента) должно очищаться.
3.2. Реквизиты табличной части – Товар, Сорт, Количество, Единица измерения, Цена, Сумма. Вспомогательный реквизит – Количество в основной единице измерения (КоличОсн). В реквизит «Цена» проставляется цена за основную единицу измерения.
- Реквизиты табличной части должны заполняться автоматически:
- При выборе товара – реквизиту сорт присваивается значение сорта по умолчанию (из соответствующей константы), единице присваивается основная единица товара, реквизиту цена присваивается значение розничной цены товара на дату документа.
- При изменении сорта – пересчитывается цена и сумма.
- При изменении количества – пересчитывается КоличОсн и сумма
- При изменении единицы – пересчитывается КоличОсн и сумма.
- При изменении Цены – пересчитывается Сумма
- Реквизиты Сумма и КоличОсн должны быть недоступны для редактирования.
Создать журналы для отображения списка документов
1. «Цены» с документами вида «ИзменениеЦен»
2. «Деньги» с документами вида «ПриходДенег» и «ВыплатаДенег». В журнале должны отображаться контрагент (покупатель или поставщик) и уплаченная / полученная сумма
3. «Товары» с документами вида «ПриходнаяНакладная» и «РасходнаяНакладная». В журнале должны отображаться контрагент и общая сумма закупленных / проданных товаров по документу.
4. «Общий» журнал, включающий в себя все виды документов. В журнале должна быть возможность фильтровать документы по контрагенту.
Для создания печатных форм и для ввода табличных данных используется объект «Таблица». Таблицы могут располагаться в разделе «Общие таблицы» и в формах визуальных объектов системы. Форма может иметь одну таблицу для ввода и много таблиц для вывода.
4.1.1 Таблица для ввода
Таблица для ввода может быть только в отчетах и обработках. Чтобы задать имя таблицы для ввода нужно войти в окно «Свойства формы», и установить переключатель «Использовать таблицу» в положение «Для ввода данных». В этом случае при открытии формы отчета становится видна таблица, в которую можно ввести данные. Обращаться к ячейкам таблицы можно по именам, которые задаются в конфигураторе.
4.1.2 Таблица для вывода
Таблица для вывода фактически является шаблоном для вывода данных. В свойствах каждая ячейки таблицы можно задать тип ячейки: «Текст», «Выражение», «Шаблон» и «Фиксированный шаблон».
- «Текст» печатается так, как он задан в конфигураторе.
- «Выражение» вычисляется и в ячейку записывается результат.
- «Шаблон» – это текст, в котором может присутствовать выражение, которое задается в квадратных скобках. Пример шаблона: «Сумма равна [ПечСумма]».
Вывод данных производится по секциям. Секции бывают горизонтальные и вертикальные. Для вывода таблицы используется следующая последовательность команд:
Таб=СоздатьОбъект («Таблица»);
Таб. ИсходнаяТаблица («ТОРГ‑12»);
Таб. ВывестиСекцию («Шапка»);
Док. ВыбратьСтроки();
Пока Док. ПолучитьСтроку()=1 Цикл
Таб. ВывестиСекцию («Строка|ВертикальнаяСекция»);
Таб. ПрисоединитьСекцию («Строка|ДопВертикальнаяСекция»);
КонецЦикла;
Таб. ВывестиСекцию («Подвал»);
Таб. Показать();
4.1.3 Поведение сформированного отчета
В системе 1С: Предприятие отчеты могут быть вполне активными объектами. Это означает, что щелкнув например, на сотруднике можно открыть форму этого сотрудника или сформировать более детальный отчет только по этому сотруднику. Для этого предназначены свойства ячейки Расшифровка и процедура ОбработкаЯчейкиТаблицы().
Выборку сводных данных можно осуществлять «вручную». Для этого мы делаем выборку с помощью функции «ВыбратьДокументы()», а затем заполняем объект типа «ТаблицаЗначений» нужными значениями и сворачиваем таблицу значений с помощью функции «Свернуть()». Однако более быстро как на стадии разработки, так и на стадии выполнения, это позволяет сделать механизм запросов.
4.2.1 Создание запроса
Запрос – это обращение к системе 1С с просьбой выбрать определенные данные из базы данных. Например, с помощью запроса можно быстро организовать выбор всех сотрудников с определенной должностью. Для организации запроса необходимо выполнить следующие действия.
Запрос = СоздатьОбъект («Запрос»);
ТекстЗапроса = «<текст запроса на особом языке запросов>»
Запрос. Выполнить(ТекстЗапроса);
Переменные в запросе
С помощью переменных запроса происходит обращение к требуемым данным. Переменные запроса чаще всего ссылаются на справочники и документы. Кроме того можно ссылаться на журналы расчетов, регистры, бухгалтерские счета.
|Ф.И.О. = Справочник. Сотрудники. Наименование;
|Долж = Справочник. Сотрудники. Должность;
|ДатаПриема = Справочник. Сотрудники. ДатаПриема;
|ДатаУвольнения = Справочник. Сотрудники. ДатаУвольнения;
|»;
Группировка и сортировка
Практически в любом запросе есть ключевое слово Группировка. Оно означает, что нужно выбрать из таблицы только те записи, у которых значение определенного поля различается. Этот запрос выберет из справочника Сотрудники список используемых должностей и отсортирует этот список по алфавиту.
Запрос = СоздатьОбъект («Запрос»);
ТекстЗапроса =»
|Долж = Справочник. Сотрудники. Должность;
|Группировка Долж упорядочить по Долж. Наименование;
|»;
Запрос. Выполнить(ТекстЗапроса);
Функции в запросе
Для вычисления в запросах используются функции. Возможные функции приведены в Синтакс-помощнике.
Пример: подсчитаем, сколько сотрудников работает по каждой должности.
Запрос = СоздатьОбъект («Запрос»);
ТекстЗапроса =»
|Долж = Справочник. Сотрудники. Должность;
|Группировка Долж упорядочить по Долж. Наименование;
|Функция Колво = Счётчик();
|»;
Запрос. Выполнить(ТекстЗапроса);
Условие отбора
Часто требуется ограничить выборку только нужными значениями. Например, этот запрос выбирает всех сотрудников с определенной должностью.
Запрос = СоздатьОбъект («Запрос»);
ТекстЗапроса =»
|Сотр = Справочник. Сотрудники. ТекущийЭлемент;
|КодДолж = Справочник. Сотрудники. Должность. Код;
|Группировка Сотр упорядочить по Сотр. Наименование;
|Условие (КодДолж = 7);
|»;
Запрос. Выполнить(ТекстЗапроса);
4.2.2 Обработка результатов запроса
После выполнения запроса в программе можно использовать полученный временный набор данных. Изначально объект «НашЗапрос» спозиционирован на первой записи временного набора данных, где содержится общий итог по запросу. Поэтому общие итоги по запросу можно использовать сразу же после выполнения запроса.
Далее, мы можем в цикле проходить по группировкам запроса, начиная с внешней (первой) группировки. В теле этого цикла объект «НашЗапрос» позиционируется во временном наборе данных на записи, содержащие итоги по каждой конкретной группировке.
После завершения цикла по самой внешней группировке, объект «НашЗапрос» снова позиционируется на первой записи временного набора данных, где содержится общий итог по запросу. Поэтому, общие итоги по запросу можно использовать в двух местах: до и после цикла по самой внешней группировке запроса.
Запрос=СоздатьОбъект («Запрос»);
ТекстЗапроса = «…»;
Если Запрос. Выполнить(ТекстЗапроса)<>1 Тогда
Возврат;
КонецЕсли;
Пока Запрос. Группировка(1)=1 Цикл
// Вывод результатов по первой группировке
Пока Запрос. Группировка(2)=1 Цикл
// Вывод результатов по второй группировке
КонецЦикла;
КонецЦикла;
// Вывод результатов по всем группировкам («Итого»)
4.2.3 Использование конструктора запросов
Запроса можно создать с помощью конструктора запросов. С его помощью можно в диалоговых формах задать параметры запроса и конструктор сам сгенерирует процедуру и таблицу для печати результатов отчета.
4.3.1 Цель лабораторной работы
1. Научиться создавать отчеты с использованием запросов
4.3.2 Задание на лабораторную работу
1. Создать отчет «Прайс-лист». Столбцы отчета – Товары, цена 1 сорта, цена 2 сорта… и т.д. Цена выводится на указанную в настройке отчета дату. Предусмотреть возможность вывода товаров по группам или без учета групп.
2. Добавить в отчет «Прайс-лист» возможность выбора сортов, которые будут выводиться в колонках отчета.
3. Создать отчет «Реестр документов» за период. Столбцы отчета – Документ, сумма, контрагент. (заполняются, если есть соответствующий реквизит документа). Внутри периода документы группируются по одной из группировок (на усмотрение пользователя) – день, неделя, месяц. По группировке посчитать сумму и количество документов.