Имя: Пароль:
1C
1С v8
Нужна помощь с экзаменом
0 AlexSoul
 
22.10.15
18:03
Всем привет. Если кто-то сможет помочь с моим вопросом, буду очень благодарен.
На экзамене было задание, вот пытаюсь понять как его решить, на экзамене не смог.
- Есть фирма, есть документы с приходом и расходом товара. В конце месяца фирма подсчитывает оборот денег по каждому из товаров и каждому товару присваивает "рейтинг"(рейтинг хранится в табличной части документа "расход" и соответственно отображается напротив каждого из товаров) - 1 (от 10к рублей), 2 (от 5к до 10к) и 3 (до 5к). Через запрос я могу получить данные из виртуальной таблицы (ПродажиОбороты) моего регистра.

Функция ВозвратТЗ()

Запрос = Новый Запрос;
Запрос.Текст =

"ВЫБРАТЬ
| ПродажиОбороты.Номенклатура КАК Номенклатура1,
| ПродажиОбороты.ВыручкаОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты";
Т = Запрос.Выполнить().Выгрузить();
Возврат Т;

КонецФункции
Но вот как быть дальше, не могу понять. Даже если я сейчас соединю 2 таблицы (чтобы сюда попала также запись из табличной части - рейтинг) и добавлю условие по циклу (Если оборот > 10к тогда рейтинг = 1 и тд), то как мне выгрузить полученное значение в реквизит табличной части - "рейтинг". Долго искал в интернете, но ничего толкового найти не могу. Хотя бы понять как делать эту часть задания.
1 Лодырь
 
22.10.15
18:27
(0) а зачем тебе хранить рейтинг в табличной части?
2 Лодырь
 
22.10.15
18:28
в общем, текст задания нужен нормальный, а не обрывочный.
3 Михаил Козлов
 
22.10.15
18:31
В запросе нужно сформировать поле "Рейтинг". Что-то типа
ВЫБОР КОГДА ВыручкаОборот>10 000 ТОГДА 1 ИНАЧЕ... КАК рейтинг.
Создаете новый документ "расход". Загружаете в ТЧ "рейтинг" результат запроса. Документ записываете. Только обратите внимание на то, что это делается ежемесячно, поэтому обороты в РН "Продажи" нужно брать за месяц.
4 AlexSoul
 
22.10.15
19:16
Спасибо, этот момент более или менее понятен, но как мне загрузить результат запроса в нужный реквизит? Что-то я не могу найти как это сделать. Перечитал кучу разных материалов по запроса, но про выгрузку результатов в реквизит ни слова.
5 Лодырь
 
22.10.15
19:19
(4) Документ.Расход.Загрузить(Запрос.Выполнить.Выгрузить());
6 Лодырь
 
22.10.15
19:20
Но по прежнему непонятно зачем именно загружать рейтинг в табличную часть. Чтобы отобразить его на форме, вовсе необязательно его хранить в документе.
7 AlexSoul
 
22.10.15
19:26
Ну задание такое было. Это к преподу вопрос)))
Ок, спасибо большое. Сейчас пробую выполнить.
8 AlexSoul
 
22.10.15
20:16
Что-то я всё равно понять не могу))) Работаю я в модуле объекта. Создал функцию и передаю её событию при записи (пока так, для проверки делаю).
Таблица значений у меня правильная выходит и рейтингу присваиваются верные значения. Но как выгрузить рейтинг в табличное поле документа ОказаниеУслуги, таблица ПереченьНоменклатуры, реквизит рейнинг называется я всё равно не доганяю. Ни оджного толквого объяснения на формах. Ни разу с таким не сталивался, вот в чём проблема.  

    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    ПродажиОбороты.Номенклатура КАК Номенклатура1,
    |    ПродажиОбороты.ВыручкаОборот,
    |    ВЫБОР
    |        КОГДА ПродажиОбороты.ВыручкаОборот > 10000
    |            ТОГДА 1
    |        ИНАЧЕ 2
    |    КОНЕЦ КАК Рейтинг
    |ИЗ
    |    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
    |        ПО ПродажиОбороты.Номенклатура = ОказаниеУслугиПереченьНоменклатуры.Номенклатура";
    
    
Т = Запрос.Выполнить().Выгрузить();

Возврат Т;
    КонецФункции
9 Sanek_gal
 
22.10.15
20:50
(8) Зачем в запросе соединение с тч документа, если ее данные не используются? Тз если верная то грузи ее в нужную ТЧ, выше писали как, только следи чтобы названия полей совпадали
10 AlexSoul
 
23.10.15
17:59
В общем наверное можно закрывать) Такой вот код вышел. Дальше уже доработаю и всё ок будет.


Функция ВозвратТЗ()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    ПродажиОбороты.Номенклатура КАК Номенклатура,
    |    ПродажиОбороты.ВыручкаОборот,
    |    ВЫБОР
    |        КОГДА ПродажиОбороты.ВыручкаОборот > 10000
    |            ТОГДА 1
    |        КОГДА ПродажиОбороты.ВыручкаОборот < 10000
    |                И ПродажиОбороты.ВыручкаОборот > 5000
    |            ТОГДА 2
    |        КОГДА ПродажиОбороты.ВыручкаОборот < 5000
    |            ТОГДА 3
    |    КОНЕЦ КАК Рейтинг,
    |    ОказаниеУслугиПереченьНоменклатуры.Количество,
    |    ОказаниеУслугиПереченьНоменклатуры.Цена,
    |    ОказаниеУслугиПереченьНоменклатуры.Сумма
    |ИЗ
    |    Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты
    |        ПО (ПродажиОбороты.Номенклатура = ОказаниеУслугиПереченьНоменклатуры.Номенклатура)
    |ГДЕ
    |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка";
    
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца (ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ТекущаяДата()));

Т = Запрос.Выполнить();

ПереченьНоменклатуры.Загрузить(Т.Выгрузить());

//Т = Запрос.Выполнить().Выгрузить();


Возврат Т;

КонецФункции
2 + 2 = 3.9999999999999999999999999999999...