Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Помогите, пожалуйста, решить тестовое задание.

Помогите, пожалуйста, решить тестовое задание.
Я
   lou-bega
 
03.05.18 - 09:22
Документ ПоступлениеТоваров при проведении делает движения по 2 регистрам:
- приход по регистру накопления ТоварыНаСкладах
- расход по регистру накопления ЗаказыПоставщикам
Запись в регистр накопления ТоварыНаСкладах делается в рублях (Сумма) и в долларах (СуммаВал). Курс берется на дату партии.
Документ может содержать в табличной части Товары тысячи строк с различными пар-тиями.
Ниже представлена обработка проведения документа ПоступлениеТоваров.
Необходимо указать на ошибки и неоптимальные решения в процедуре проведения.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Партия КАК Партия,
| Товары.Количество КАК Количество,
| Товары.Сумма КАК Сумма,
| Заказы.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ
|РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, Контрагент = &Контрагент) КАК Заказы
| ПО Товары.Номенклатура = Заказы.Номенклатура
| И Товары.Партия = Заказы.Партия
|ГДЕ
| Товары.Ссылка = &Ссылка
| И (Заказы.Номенклатура, Заказы.Партия) В
| (ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка)
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(КоличествоОстаток)
4
|ПО
| Номенклатура,
| Партия";
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать();
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
Сообщить("Количество в поступлении "
+ВыборкаНоменклатура.Количество
+ " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения
+ " превышает остаток по заказам "
+ВыборкаНоменклатура.КоличествоОстаток
+ " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения);
Иначе
ВыборкаПартия = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаПартия.Следующий() Цикл
СуммаВал = СуммаВал
+ РегистрыСведений.КурсыВалют.ПолучитьПоследнее(
ВыборкаПартия.Партия.Дата
,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)));
Движение = РегистрыНакопления.ЗаказыПоставщикам.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаПартия.Номенклатура;
Движение.Количество = ВыборкаПартия.Количество;
КонецЦикла;
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество;
Движение.Сумма = ВыборкаНоменклатура.Сумма;
Движение.СуммаВал = СуммаВал;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
 
 
   Fish
 
1 - 03.05.18 - 09:29
(0) Собеседование проходишь?
   Timon1405
 
2 - 03.05.18 - 09:30
зарплату тоже за тебя получать?
   Krendel
 
3 - 03.05.18 - 09:31
быстрее
   Krendel
 
4 - 03.05.18 - 09:31
не видите человек горит
   lou-bega
 
5 - 03.05.18 - 09:33
(4) )))
Да, прислали задачку на собеседование!
   lou-bega
 
6 - 03.05.18 - 09:34
Да я так сходу, без конструктора не могу!
   Волшебник
 
7 - 03.05.18 - 09:34
(5) В принципе уже понятно, что будет, когда тебя примут на работу и начнут давать новые задачки. Всю мисту засрёшь своими задачками, как ЛивингСтар.
   Krendel
 
8 - 03.05.18 - 09:35
(7) Это новые ветки, новые рекламодатели, новые деньги ;-)
   lou-bega
 
9 - 03.05.18 - 09:37
(7) Такое возможно, но как же учиться если не спрашивать советов у старших коллег?
   Волшебник
 
10 - 03.05.18 - 09:38
(9) Читай документацию, учи матчасть, изучай типовые.
 
 Рекламное место пустует
   Малыш Джон
 
11 - 03.05.18 - 09:40
(9) советов. но не "сделайте за меня". в чем конкретно у тебя затруднения? на какой строчке споткнулся?
   MakaMaka
 
12 - 03.05.18 - 09:45
(0) Вот это
|ГДЕ
| Товары.Ссылка = &Ссылка
| И (Заказы.Номенклатура, Заказы.Партия) В
| (ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка)

Надо совать в параметры виртуальной таблицы, т.к. получать остатки надо сразу с отбором по номенклатуре, а не просто по контрагентам.

Получать курсы валют надо тем же запросом, что и остатки,
т.е. вот за это 

РегистрыСведений.КурсыВалют.ПолучитьПоследнее(
ВыборкаПартия.Партия.Дата
,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)));

Надо сечь, жестко сечь.
   СвинТуз
 
13 - 03.05.18 - 09:46
Помню на спецкурсе в университете задачу дали.
Я ее нормально смог решить, а остальные нет.
Давно это было. Тогда и литературы не было.
Вот это было круто. А 1с? Бери книги и читай. Даже подвига никакого не нужно.
   xxTANATORxx
 
14 - 03.05.18 - 09:47
(12) >>Справочники.Валюты.НайтиПоНаименованию(«USD»)

так лучше не делать
   Рэйв
 
15 - 03.05.18 - 09:48
(0)На вскидку. Получай товары документа отдельно в вт и потом ее соединяй. Твое условие ГДЕ накладывается уже после того как  ты соединишь все товары всех документов со всеми остатками.
   MakaMaka
 
16 - 03.05.18 - 09:49
(14) а в цикле обращение в РС это норм? За это надо пороть или ломать палец за каждое лишнее обращение к БД.
   HardBall
 
17 - 03.05.18 - 09:51
Два раза выбираются данные из  Документ.ПоступлениеТоваров.Товары
   lou-bega
 
18 - 03.05.18 - 09:51
(12) Спасибо, сейчас пытаюсь запрос в базе воссоздать.
(14) Почему так лучше не делать?
   Волшебник
 
19 - 03.05.18 - 09:51
(16) У профессионалов запросы в циклах не тормозят.
   MakaMaka
 
20 - 03.05.18 - 09:52
(18) У тебя идет обращение к БД в цикле, это насилует БД, работает эта конструкция оч медленно, везде где это возможно надо использовать запрос, запрос получает данные из БД за одно обращение, потом работай с выборкой запроса сколько хочешь.
   СвинТуз
 
21 - 03.05.18 - 09:53
(19)

))) точно. В типовых например.
Должен быть буфер. При частых обращениях данные берутся из него.
   MakaMaka
 
22 - 03.05.18 - 09:53
(19) Ага, запрос в цикле работает как должен работать, тормозит все остальное у непрофессионалов. )))))))
   HardBall
 
23 - 03.05.18 - 09:55
"ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения"
   MakaMaka
 
24 - 03.05.18 - 09:57
(23) за это надо тоже ругать
   Fish
 
25 - 03.05.18 - 09:58
в 29-й строке ошибка
   lou-bega
 
26 - 03.05.18 - 09:58
Спасибо большое за помощь.
   МимохожийОднако
 
27 - 03.05.18 - 10:02
(26) Что, взяли? ))
   lou-bega
 
29 - 03.05.18 - 10:18
(27) Если честно, не очень к ним хочу, но и в грязь лицом тоже не хочется упасть! )
   MakaMaka
 
30 - 03.05.18 - 10:24
(29) с такой аватаркой ты обязан к ним устроиться
   lou-bega
 
31 - 03.05.18 - 10:26
(30) Это точно )
   ColonelAp4u
 
32 - 03.05.18 - 10:31
(29) ну раз совсем не хочешь в грязь лицом то еще у запроса не установлены параметры
Контрагент и период
   ColonelAp4u
 
33 - 03.05.18 - 10:32
(32) и ссылка)
 
 
   ERWINS
 
34 - 03.05.18 - 10:33
Запрос = Новый Запрос;
Запрос.Текст = "
ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Партия КАК Партия,
| Товары.Количество КАК Количество,
| Товары.Сумма КАК Сумма
| Поместить ТЗ
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка) 
| ;
| ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Партия КАК Партия,
| Товары.Количество КАК Количество,
| Товары.Сумма КАК Сумма,
| Заказы.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| ТЗ КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ
|РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, Контрагент = &Контрагент  И
| (Номенклатура, Партия) В
| (ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| ТЗ КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка) 
|) КАК Заказы
| ПО Товары.Номенклатура = Заказы.Номенклатура
| И Товары.Партия = Заказы.Партия


+ добавить сюда выборку курсов валют

ИТОГИ вещь от лукавого
   lou-bega
 
35 - 03.05.18 - 10:37
(33) Спасибо большое.
   lou-bega
 
36 - 03.05.18 - 10:46
Еще раз, всех благодарю.
Указали на грубые ошибки, я в них разобрался.
   ERWINS
 
37 - 03.05.18 - 10:48
СуммаВал = СуммаВал
+ РегистрыСведений.КурсыВалют.ПолучитьПоследнее(
ВыборкаПартия.Партия.Дата
,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)));

Запрос в цикле что не допустимо
+
СуммаВал постоянно увеличивается, так не должно быть

СуммаВал = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(
ВыборкаПартия.Партия.Дата
,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)))*ВыборкаНоменклатура.Сумма;


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует