|
Помогите, пожалуйста, решить тестовое задание. | ☑ | ||
---|---|---|---|---|
0
lou-bega
03.05.18
✎
09:22
|
Документ ПоступлениеТоваров при проведении делает движения по 2 регистрам:
- приход по регистру накопления ТоварыНаСкладах - расход по регистру накопления ЗаказыПоставщикам Запись в регистр накопления ТоварыНаСкладах делается в рублях (Сумма) и в долларах (СуммаВал). Курс берется на дату партии. Документ может содержать в табличной части Товары тысячи строк с различными пар-тиями. Ниже представлена обработка проведения документа ПоступлениеТоваров. Необходимо указать на ошибки и неоптимальные решения в процедуре проведения. Процедура ОбработкаПроведения(Отказ, РежимПроведения) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Партия КАК Партия, | Товары.Количество КАК Количество, | Товары.Сумма КАК Сумма, | Заказы.КоличествоОстаток КАК КоличествоОстаток |ИЗ | Документ.ПоступлениеТоваров.Товары КАК Товары |ЛЕВОЕ СОЕДИНЕНИЕ |РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, Контрагент = &Контрагент) КАК Заказы | ПО Товары.Номенклатура = Заказы.Номенклатура | И Товары.Партия = Заказы.Партия |ГДЕ | Товары.Ссылка = &Ссылка | И (Заказы.Номенклатура, Заказы.Партия) В | (ВЫБРАТЬ | Товары.Номенклатура, | Товары.Партия | ИЗ | Документ. ПоступлениеТоваров.Товары КАК Товары | ГДЕ | Товары.Ссылка = &Ссылка) |ИТОГИ | СУММА(Количество), | СУММА(Сумма), | СУММА(КоличествоОстаток) 4 |ПО | Номенклатура, | Партия"; ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(); Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщить("Количество в поступлении " +ВыборкаНоменклатура.Количество + " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения + " превышает остаток по заказам " +ВыборкаНоменклатура.КоличествоОстаток + " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения); Иначе ВыборкаПартия = ВыборкаНоменклатура.Выбрать(); Пока ВыборкаПартия.Следующий() Цикл СуммаВал = СуммаВал + РегистрыСведений.КурсыВалют.ПолучитьПоследнее( ВыборкаПартия.Партия.Дата ,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»))); Движение = РегистрыНакопления.ЗаказыПоставщикам.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаПартия.Номенклатура; Движение.Количество = ВыборкаПартия.Количество; КонецЦикла; Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура; Движение.Количество = ВыборкаНоменклатура.Количество; Движение.Сумма = ВыборкаНоменклатура.Сумма; Движение.СуммаВал = СуммаВал; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
Fish
03.05.18
✎
09:29
|
(0) Собеседование проходишь?
|
|||
2
Timon1405
03.05.18
✎
09:30
|
зарплату тоже за тебя получать?
|
|||
3
Krendel
03.05.18
✎
09:31
|
быстрее
|
|||
4
Krendel
03.05.18
✎
09:31
|
не видите человек горит
|
|||
5
lou-bega
03.05.18
✎
09:33
|
(4) )))
Да, прислали задачку на собеседование! |
|||
6
lou-bega
03.05.18
✎
09:34
|
Да я так сходу, без конструктора не могу!
|
|||
7
Волшебник
03.05.18
✎
09:34
|
(5) В принципе уже понятно, что будет, когда тебя примут на работу и начнут давать новые задачки. Всю мисту засрёшь своими задачками, как ЛивингСтар.
|
|||
8
Krendel
03.05.18
✎
09:35
|
(7) Это новые ветки, новые рекламодатели, новые деньги ;-)
|
|||
9
lou-bega
03.05.18
✎
09:37
|
(7) Такое возможно, но как же учиться если не спрашивать советов у старших коллег?
|
|||
10
Волшебник
03.05.18
✎
09:38
|
(9) Читай документацию, учи матчасть, изучай типовые.
|
|||
11
Малыш Джон
03.05.18
✎
09:40
|
(9) советов. но не "сделайте за меня". в чем конкретно у тебя затруднения? на какой строчке споткнулся?
|
|||
12
MakaMaka
03.05.18
✎
09:45
|
(0) Вот это
|ГДЕ | Товары.Ссылка = &Ссылка | И (Заказы.Номенклатура, Заказы.Партия) В | (ВЫБРАТЬ | Товары.Номенклатура, | Товары.Партия | ИЗ | Документ. ПоступлениеТоваров.Товары КАК Товары | ГДЕ | Товары.Ссылка = &Ссылка) Надо совать в параметры виртуальной таблицы, т.к. получать остатки надо сразу с отбором по номенклатуре, а не просто по контрагентам. Получать курсы валют надо тем же запросом, что и остатки, т.е. вот за это РегистрыСведений.КурсыВалют.ПолучитьПоследнее( ВыборкаПартия.Партия.Дата ,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»))); Надо сечь, жестко сечь. |
|||
13
СвинТуз
03.05.18
✎
09:46
|
Помню на спецкурсе в университете задачу дали.
Я ее нормально смог решить, а остальные нет. Давно это было. Тогда и литературы не было. Вот это было круто. А 1с? Бери книги и читай. Даже подвига никакого не нужно. |
|||
14
xxTANATORxx
03.05.18
✎
09:47
|
(12) >>Справочники.Валюты.НайтиПоНаименованию(«USD»)
так лучше не делать |
|||
15
Рэйв
03.05.18
✎
09:48
|
(0)На вскидку. Получай товары документа отдельно в вт и потом ее соединяй. Твое условие ГДЕ накладывается уже после того как ты соединишь все товары всех документов со всеми остатками.
|
|||
16
MakaMaka
03.05.18
✎
09:49
|
(14) а в цикле обращение в РС это норм? За это надо пороть или ломать палец за каждое лишнее обращение к БД.
|
|||
17
HardBall
03.05.18
✎
09:51
|
Два раза выбираются данные из Документ.ПоступлениеТоваров.Товары
|
|||
18
lou-bega
03.05.18
✎
09:51
|
(12) Спасибо, сейчас пытаюсь запрос в базе воссоздать.
(14) Почему так лучше не делать? |
|||
19
Волшебник
03.05.18
✎
09:51
|
(16) У профессионалов запросы в циклах не тормозят.
|
|||
20
MakaMaka
03.05.18
✎
09:52
|
(18) У тебя идет обращение к БД в цикле, это насилует БД, работает эта конструкция оч медленно, везде где это возможно надо использовать запрос, запрос получает данные из БД за одно обращение, потом работай с выборкой запроса сколько хочешь.
|
|||
21
СвинТуз
03.05.18
✎
09:53
|
(19)
))) точно. В типовых например. Должен быть буфер. При частых обращениях данные берутся из него. |
|||
22
MakaMaka
03.05.18
✎
09:53
|
(19) Ага, запрос в цикле работает как должен работать, тормозит все остальное у непрофессионалов. )))))))
|
|||
23
HardBall
03.05.18
✎
09:55
|
"ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения"
|
|||
24
MakaMaka
03.05.18
✎
09:57
|
(23) за это надо тоже ругать
|
|||
25
Fish
03.05.18
✎
09:58
|
в 29-й строке ошибка
|
|||
26
lou-bega
03.05.18
✎
09:58
|
Спасибо большое за помощь.
|
|||
27
Мимохожий Однако
03.05.18
✎
10:02
|
(26) Что, взяли? ))
|
|||
29
lou-bega
03.05.18
✎
10:18
|
(27) Если честно, не очень к ним хочу, но и в грязь лицом тоже не хочется упасть! )
|
|||
30
MakaMaka
03.05.18
✎
10:24
|
(29) с такой аватаркой ты обязан к ним устроиться
|
|||
31
lou-bega
03.05.18
✎
10:26
|
(30) Это точно )
|
|||
32
ColonelAp4u
03.05.18
✎
10:31
|
(29) ну раз совсем не хочешь в грязь лицом то еще у запроса не установлены параметры
Контрагент и период |
|||
33
ColonelAp4u
03.05.18
✎
10:32
|
(32) и ссылка)
|
|||
34
ERWINS
03.05.18
✎
10:33
|
Запрос = Новый Запрос;
Запрос.Текст = " ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Партия КАК Партия, | Товары.Количество КАК Количество, | Товары.Сумма КАК Сумма | Поместить ТЗ | ИЗ | Документ. ПоступлениеТоваров.Товары КАК Товары | ГДЕ | Товары.Ссылка = &Ссылка) | ; | ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Партия КАК Партия, | Товары.Количество КАК Количество, | Товары.Сумма КАК Сумма, | Заказы.КоличествоОстаток КАК КоличествоОстаток |ИЗ | ТЗ КАК Товары |ЛЕВОЕ СОЕДИНЕНИЕ |РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, Контрагент = &Контрагент И | (Номенклатура, Партия) В | (ВЫБРАТЬ | Товары.Номенклатура, | Товары.Партия | ИЗ | ТЗ КАК Товары | ГДЕ | Товары.Ссылка = &Ссылка) |) КАК Заказы | ПО Товары.Номенклатура = Заказы.Номенклатура | И Товары.Партия = Заказы.Партия + добавить сюда выборку курсов валют ИТОГИ вещь от лукавого |
|||
35
lou-bega
03.05.18
✎
10:37
|
(33) Спасибо большое.
|
|||
36
lou-bega
03.05.18
✎
10:46
|
Еще раз, всех благодарю.
Указали на грубые ошибки, я в них разобрался. |
|||
37
ERWINS
03.05.18
✎
10:48
|
СуммаВал = СуммаВал
+ РегистрыСведений.КурсыВалют.ПолучитьПоследнее( ВыборкаПартия.Партия.Дата ,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»))); Запрос в цикле что не допустимо + СуммаВал постоянно увеличивается, так не должно быть СуммаВал = РегистрыСведений.КурсыВалют.ПолучитьПоследнее( ВыборкаПартия.Партия.Дата ,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)))*ВыборкаНоменклатура.Сумма; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |