К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Начальная Романовская гимназия
Рекомендовать в новости

Помогите студенту, пожалуйста!

0 - 06.06.2020 - 14:10
Удаленное обучение, к сожалению, мало добавило знаний.
Помогите, пожалуйста, разобраться с заданием.
Выполнять нужно на ТиС.
Сам запрос сделали. Работает правильно. Печатную форму тоже создали. Препод всё проверил. Сказал, что норм.
Не получается вывести данные отчета на форму.
И не могу разобраться с таблицей значений.

ЗАДАНИЕ
Магазин ведёт учёт продаж и возвратов товара по складам и проектам.
В течение дня возникает необходимость проверить продажи в разрезе некоторых учетных единиц.
Учёт продаж ведётся документами Реализация и РеализацияРозница. Учёт возвратов с помощью документа ВозвратОтПокупателя.
Создайте отчёт, позволяющий учесть продажи по трём выборочным проектам (П1, П2, П3) с группировкой по складам, причём наименования и количество складов зависит от данных, введённых в пользовательском режиме. Результат отчета должен формироваться, с учётом корректирующей величины (Корректировка), вводимой через числовое поле на форме отчета, в таблице значений и выводиться в текстовое поле на форме отчета по следующей формуле.

Продажа П1+П2+Корректировка, Возврат П1+П2, Итог (Продажа П1+П2)-(Возврат П1+П2)+Корректировка
Продажа П3-Корректировка, Возврат П3, Итог (Продажа П3)-(Возврат П3)
Результат ((Продажа П1+П2)-(Возврат П1+П2)+(Продажа П3)-(Возврат П3)-Корректировка)
Наименование столбцов
Продажа первый этаж - для (Продажа П1+П2)
Возврат первый этаж - для (Возврат П1+П2)
Итого первый этаж - для (Итог (Продажа П1+П2)-(Возврат П1+П2))
Продажа второй этаж - для (Продажа П3)
Возврат второй этаж - для (Возврат П3)
Итого второй этаж - для (Итог (Продажа П3)-(Возврат П3))
Всего продаж - для (Результат ((Продажа П1+П2)-(Возврат П1+П2)+(Продажа П3)-(Возврат П3)))

Отчёт должен учитывать продажи только за текущий день, без возможности изменения периода на форме.
Сделайте кнопку, позволяющую обновлять результат в течение дня, без закрытия формы отчета.

Создайте такой же отчёт, с выводом данных в таблицу значений, расположенную на форме.

Создайте печатную форму отчета.

Модуль отчета

Процедура ОтчетКассира()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(ОтчетКассира)
|Период с (ТекущаяДата()) по (ТекущаяДата());
|Обрабатывать НеПомеченныеНаУдаление;
|Реализация = Документ.Реализация.ТекущийДокумент, Документ.РеализацияРозница.ТекущийДокумент;
|ВозвратОтПокупателя = Документ.ВозвратОтПокупателя.ТекущийДокумент;
|Склад = Документ.Реализация.Склад.Наименование, Документ.ВозвратОтПокупателя.Склад.Наименование, Документ.РеализацияРозница.Склад.Наименование;
|Проект = Документ.Реализация.Проект, Документ.ВозвратОтПокупателя.Проект, Документ.РеализацияРозница.Проект;
|Фирма = Документ.ВозвратОтПокупателя.Фирма.Наименование, Документ.Реализация.Фирма.Наименование, Документ.РеализацияРозница.Фирма.Наименование;
|СуммаВозврат = Документ.ВозвратОтПокупателя.Сумма;
|СуммаРеализация = Документ.Реализация.Сумма, Документ.РеализацияРозница.Сумма;
|Функция РеализацияП1 = Сумма(СуммаРеализация) когда(Проект.Наименование = ""П1"");
|Функция РеализацияП2 = Сумма(СуммаРеализация) когда(Проект.Наименование = ""П2"");
|Функция РеализацияП3 = Сумма(СуммаРеализация) когда(Проект.Наименование = ""П3"");
|Функция ВозвратП1 = Сумма(СуммаВозврат) когда(Проект.Наименование = ""П1"");
|Функция ВозвратП2 = Сумма(СуммаВозврат) когда(Проект.Наименование = ""П2"");
|Функция ВозвратП3 = Сумма(СуммаВозврат) когда(Проект.Наименование = ""П3"");
|Группировка Склад;
|"//****ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ОтчетКассира");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Склад
Таб.ВывестиСекцию("Склад");
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);



161 - 01.08.2020 - 16:38
И все-таки прошу помощи. Ничего не получается с итогами в таблицу на форме.

Вот такая таблица

Пока Запрос.Группировка(1) = 1 Цикл
ТЗДМГ.ПолучитьСтроку();
ТЗДМГ.НоваяСтрока();
ТЗДМГ.Параметр1 = Запрос.1 - Запрос.2 - Запрос.3;
ТЗДМГ.Параметр2 = Запрос.4 - Запрос.5;
ТЗДМГ.Параметр3 = ТЗДМГ.Параметр1+ ТЗДМГ.Параметр2;
ТЗДМГ.Параметр4 = Запрос.6 - Запрос.7;
ТЗДМГ.Параметр5 = Запрос.8;
ТЗДМГ.Параметр6 = Запрос.9;
ТЗДМГ.Параметр7 = Запрос.10;
ТЗДМГ.Параметр8 = Запрос.11;
ТЗДМГ.Параметр9 = ТЗДМГ.Параметр1 + ТЗДМГ.Параметр3;
ТЗДМГ.Параметр10 = ТЗДМГ. Параметр1 + ТЗДМГ. Параметр2 + ТЗДМГ. Параметр6 + ТЗДМГ. Параметр7 + ТЗДМГ.Параметр8;

КонецЦикла;

Как вывести итоги внизу этой таблицы?

Отредактировано tutsi; 01.08.2020 в 16:40. Причина: Орфографические ошибки
162 - 02.08.2020 - 09:17
Посмотрел только последний запрос. Выбирать в запросе "Наименование" и сравнивать с "Наименованием" - это очень плохая практика, не надо к ней приучаться.
163 - 02.08.2020 - 09:50
Цитата:
Сообщение от USSR Посмотреть сообщение
это очень плохая практика
Спасибо за совет! Можете объяснить, почему?
164 - 02.08.2020 - 09:58
152-Сергей Че >Перечитала...
Возник вопрос...
В список складов и список проектов загонять только те, которые нужны для отчета или все, которые существуют?
165 - 02.08.2020 - 12:11
(163)Наименование могут поменять и Ваш отчет перестанет работать. Выбирайте в запросе ссылки. В запросе можно сразу группировать по складам и проектам. а потом уже обрабатывать запрос или выгрузить его в таблицу значений, с которой можно делать что угодно. Например развернуть проекты по горизонтали
Выбирать в запросе по конкретным проектам это плохое решение. Завтра их станет 4 и все сломается. Надо группировать по нему
166 - 02.08.2020 - 13:59
Да! Есть похожая задача в этом сборнике. Но я с ней еще не разбиралась. Причем группировка мне понятна, а вот дальше пока темный лес.
Как поступать, если в отчет нужно вывести данные только по конкретным складам и проектам? Аналогично множественному фильтру в ТиС?
Я с этим сборником чувствую себя очень неуютно. Я поняла, что я слишком мало знаю о семерке.
167 - 02.08.2020 - 14:33
(166)для универсального решения - множественный фильтр.Для частного - отборы проектов в 3 полях, с проверкой заполнения Надо будет не 3, а больше, скажете - Вы же сами просили 3. Вариантов много
168 - 02.08.2020 - 14:35
Не пытайтесь охватить сразу все. Научитесь выбирать данные и обрабатывать их для отчета. А потом займитесь отборами
169 - 03.08.2020 - 11:21
166-tutsi > угу, типа.
Можно положить на форму СЗ. Пользователь сам туда добавляет нужные данные.
170 - 03.08.2020 - 11:23
161-tutsi >
Пока Запрос.Группировка(1) = 1 Цикл
ТЗДМГ.ПолучитьСтроку();
ТЗДМГ.НоваяСтрока();
....
КонецЦикла;
.
это что за бред?
в чем смысл получения очередной строки из ТЗ, неиспользования ее и сразу же добавление новой строки в ТЗ? в чем сакральный смысл?
.
171 - 03.08.2020 - 11:35
161-tutsi > "Как вывести итоги внизу этой таблицы?"
внизу - это ГДЕ?
.
если надо вывести итоги в ТЗ в последней строке этой ТЗ - то как обычно - в цикле или еще где накапливаем итоги, после цикла добавляем новую строку в ТЗ, запихиваем в строку итоговые данные.
.
опять же - что понимается под "итогами"..? - если вопрос стоит "как в ТЗ добавить строку с итогами по всем колонкам этой же ТЗ?" - то просто, итоги не надо накапливать? есть метод ТЗ.Итоги() - его и применяем.. - и вообще полезно открывать СинтаксПомощник и смотреть даже тупо подряд на описание языка... там можно найти много интересного...
172 - 03.08.2020 - 11:36
А про итоги, вот тестовый пример
.
//*******************************************
Процедура Сформировать()

// тестовые данные
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Первая","Число");
ТЗ.НоваяКолонка("Вторая","Число");

Для ы=1 по 3 Цикл
ТЗ.НоваяСтрока();
ТЗ.Первая = ы;
ТЗ.Вторая = ы*4;
КонецЦикла;

// тут выше код заполнения ТЗ
// ниже код итогов

ТЗ.НоваяСтрока();
КК = ТЗ.КоличествоКолонок();
Для НомерКолонки = 1 по КК Цикл
ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,НомерКолонки, ТЗ.Итог(НомерКолонки));
КонецЦикла;

//ОТЛАДКА
ТЗ.ВидимостьКолонки("НомерСтроки",1);
ТЗ.ВыбратьСтроку(,"просмотр ТЗ");

КонецПроцедуры
173 - 03.08.2020 - 11:37
И держать в ТЗ последней строкой итоги - это очень нехорошая практика. Учитьяс такому не надо. ТЗ по своей природе - простой список однородных данных. и пихать в нее её же самое итоги - фу, бяка...


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены