Имя: Пароль:
1C
1С v8
v8: Решение задачи 1.19. Спец по платформе.
0 wwwqwert2014
 
02.01.14
19:59
Решал задачу 1.19 из сборника по спецу по платформе. Вот интересует, насколько рационально я её решил.
Что конкретно интересует. Модуль объекта РасходнаяНакладная.
1. Правильно ли я решал проблему "копеек" в РН Продажи (Обороты).
2. Интересует, рационально ли я вообще сделал обработку проведения РАсходнаяНакладная. Что конкретно смущает:
ТЗАналоги = МассивРезультатов[3].Выгрузить();
    ТЗАналоги.Индексы.Добавить("РодительНоменклатура");
//далее в цикле поиск:
    Отбор = Новый Структура;
            Отбор.Вставить("РодительНоменклатура", ВыборкаДетальныеЗаписи.Номенклатура);
            Строки = ТЗАналоги.НайтиСтроки(Отбор);
Вот DT http://zalil.ru/34879880
1 wwwqwert2014
 
02.01.14
19:59
вот условие задачи
Задача 1.19.
Компания занимается оптовой торговлей. У некоторых товаров могут быть
аналоги - другие позиции номенклатуры с теми же потребительскими свойствами и
ценой, причем таких аналогов у товара может быть несколько.
Каждой номенклатурной позиции присваивается уникальный артикул,
считается, что пользователь сам контролирует уникальность артикулов и назначает
их вручную.
Закупка товаров отражается документом «Приходная накладная», продажа
- Расходная накладная».
Учет остатков ведется в разрезе складов. В документах «Приходная
накладная» и «Расходная накладная» склад только один (склад - реквизит шапки).
Продажи оформляются документом «Расходная накладная». В случае
нехватки товара автоматически должен списываться его аналог. В том случае, когда
не хватает не только товара, но и всех его аналогов, документ не должен
доводиться. Порядок списания аналогов определяется артикулом. Следует
учитывать, что один и тот же товар может являться аналогом различных
номенклатурных позиций.
Себестоимость товаров рассчитывается как средняя по складу.
Необходимо построить отчет по продажам товаров и их аналогов за период.
2 ИсчадиеADO
 
02.01.14
20:14
смотри на сайте у GROOVY http://chistov.spb.ru/forum/16
3 Лефмихалыч
 
02.01.14
20:24
найтиСтроки - это уже сразу не оптимальное решение
4 Лефмихалыч
 
02.01.14
20:25
А копейки решаются просто

Движение.Себестоимость = ?(КоличествоСписать = КоличествоОстаток, СебестоимостьОстаток, СебестоимостьОстаток/КоличествоОстаток*КоличествоСписать)
5 GANR
 
02.01.14
22:00
(0) Выгрузка результата запроса в таблицу значений - это сразу минус один балл, а уж если запрос в цикле в тех задачах - за это сразу с экзамена просто обязаны выгнать. Вот здесь http://www.1c.ru/rus/partners/training/files/ATT82PL.zip требования к решению.
6 Лефмихалыч
 
02.01.14
22:09
(5) запрос в цикле - это почему-то два балла всего. При условии, что других ошибок больше, чем на полбалла нет, с запросом в цикле можно сдать на трояк.
7 GANR
 
02.01.14
22:14
(6) Будь я на месте преподавателя, на меня-бы такой запрос как красная тряпка на быка подействовал. Это явный сигнал, что человек не умеет пользоваться запросами, а это 70% дела в 1С.
8 Coldboy
 
02.01.14
23:10
(7) а спецы в БП 2.0 почему то запросы в цикл загоняют и ниче ...
9 GROOVY
 
02.01.14
23:12
10 GROOVY
 
02.01.14
23:17
(0) В регистре оборотов есть "проблема копеек"? - интересно...
11 etc
 
03.01.14
06:53
Я вот только одну магическую фразу не понял: "Порядок списания аналогов определяется артикулом." Приоритет определять сортировкой по буквенно-цифровому значению чтоли?
12 floody
 
03.01.14
08:51
(11) для учебных целей, почему бы нет?

(0) у Гилева есть видео с решением задачи аналогов (если не смотрел)

(5) ТЗ в этой задаче нужна, в нее выгружается результат запроса, но не для того, чтобы по ней потом списывать товар, а чтобы хранить в ней количество УЖЕ списанное на предыдущих шагах цикла (как аналоги других товаров)
13 МастерВопросов
 
03.01.14
10:37
(3) а как кашерно? В запросе к таб.части присоединять аналоги и остатки, а потом обход результата запроса по иерархии?
14 wwwqwert2014
 
03.01.14
11:17
(10) То есть нет проблемы копеек в регистре оборотов?
А как же такая ситуация: Хотим продать 11 позиций номенклатуры "Ручка шариковая". Сумма 11 позиций составляет 200 рублей. Причём на складе есть 7 "Ручка шариковая" и 4 "Ручка Bing". Они являются аналогами.
Если не заморачиваться по поводу копеек, то получаются следующие записи в РН Продажи:
Движение1.Номенклатура = "Ручка шариковая";
Движение1.Сумма = 200/11 / * 7 = 127,27 руб.

Далее продаём аналог
Движение2.Номенклатура = "Ручка Bing";
Движение2.Сумма = 200/11 * 4 = 72,72

Таким образом, по двум движениям регистров получается, что общая сумма продажи составляет 199,99 руб. 1 копейка потерялась.


Собственно поэтому и вопрос, как в оборотном РН Продажи ПРАВИЛЬНО решать проблема копеек
15 wwwqwert2014
 
03.01.14
11:17
Сорри чуть опечатался. Так правильно
Движение1.Сумма = 200/11  * 7 = 127,27 руб.
16 Coldboy
 
03.01.14
11:28
(15) а последнюю копейку ты повесил куда ?
17 floody
 
03.01.14
11:36
(14) то, что вы описали, это не проблема

проблема копеек - когда остаточный регистр не закрывается и пухнет
18 wwwqwert2014
 
03.01.14
11:46
я вообще для решения этого делал всегда так: Заподил переменную ОсталосьСписатьДенег и из общей сумма вычитал Движение.Сумма. И тогда всё тютелька в тютельку сходится.
Всё работает, но вот только это лишние проверки и лишний код и лишнее время на экзамене.
Как я понимаю из сообщения floody, по этому поводу можно не заморачиваться и никто баллы не снимет, так?
19 Alexman13
 
03.01.14
11:49
В оборотном регистре это не проблема.
И вообще если правильно применять округление, то 200/11 * 4 = 72,73
20 Лефмихалыч
 
03.01.14
11:53
(14) какая половая религия запрещает записать продажи одной строкой:
Движение.Номенклатура = Ручка;
Движение.Количество = 11;
Движение.Сумма = 200;
?
21 Лефмихалыч
 
03.01.14
11:55
это в остатках копейки могут засесть потому, что остатки надо по партиям раскидать
22 GANR
 
03.01.14
12:09
(8) Запрос, конечно, можно загонять в цикл, но это надо делать умеючи - иногда запрос в цикле может работать и быстрее, так как INDEX SEEK быстрее, чем INDEX SCAN в плане запроса.
23 wwwqwert2014
 
03.01.14
12:24
(20) потому что номенклатура разная
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.