|
Как создать дублирующие строки в регистре сведений? | ☑ | ||
---|---|---|---|---|
0
Nolan
24.03.15
✎
12:50
|
В общем есть документ "Поступление товаров", он проводится по регистру сведений "Цены". Задача заключается в том, чтобы при проведении документа "Поступление товаров" в регистре сведений создавалось 2 строки в одной из них цена будет браться из табличной части "Товары" документа "Поступление товаров", а в другой строке цена будет браться тоже из документа "Поступление товаров" но только её нужно будет умножить на 2!
вот код Процедура ОбработкаПроведения(Отказ, Режим) // регистр Цены Движения.Цены.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена; КонецЦикла; КонецПроцедуры что нужно изменить в коде, чтобы выполнялось задание??? |
|||
1
1976vas
24.03.15
✎
12:53
|
Добавить в регистр дополнительный ресурс.
|
|||
2
Лефмихалыч
24.03.15
✎
12:54
|
(1) только не ресурс, а измерение
|
|||
3
Nolan
24.03.15
✎
13:02
|
1976vas, Лефмихалыч, да вот в том то и дело, что по заданию ничего добавлять нельзя, потому как тогда будет выдаваться одна строка в регистре сведений, а мне нужно чтобы 2 выдавались. Мне сказали просто продублируй строки. я продублировал мне ошибка запись с такими ключевыми полями уже существует( и как быть?
|
|||
4
Лефмихалыч
24.03.15
✎
13:04
|
(3) прочти букварь. В РС не может быть дублей записей. Технологически не возможно. Вообще. Ни как. Живи с этим.
|
|||
5
1976vas
24.03.15
✎
13:04
|
(3) Тогда два движения создавай. Два набора записей.
|
|||
6
1976vas
24.03.15
✎
13:05
|
(4) Не будет дублироваться - цены же разные будут.
|
|||
7
Alex S D
24.03.15
✎
13:05
|
я так понимаю ТипЦен у этих двух строк должен отличаться, иначе бессмыслица какая-то
|
|||
8
ДемонМаксвелла
24.03.15
✎
13:05
|
ну как мне понимается это два разных типа цен, типа "основная" и "удвоенная". Так что ничего в регистре не нужно править.
|
|||
9
ДемонМаксвелла
24.03.15
✎
13:06
|
(7) солидарен с тобой , Леха
|
|||
10
Alex S D
24.03.15
✎
13:06
|
(9)))
|
|||
11
Nolan
24.03.15
✎
13:09
|
Да ребят, тип цены будет разный. когда тип цены "Цена закупки" тогда берется обычная цена. Когда тип цены "Цена продажи" тогда удваивается. Что в коде изменить?
|
|||
12
1976vas
24.03.15
✎
13:11
|
(11) А при чем здесь тогда дублирование строчек?
|
|||
13
Бледно Золотистый
24.03.15
✎
13:11
|
(11) Фигасе у вас накрутка.
|
|||
14
1976vas
24.03.15
✎
13:12
|
В коде анализируешь ТипЦены и записываешь нужную цену.
|
|||
15
MiniMuk
24.03.15
✎
13:13
|
(4) живи с этим
- ржал долго. |
|||
16
Nolan
24.03.15
✎
13:14
|
Подробное задание: Для каждой номенклатуры создавать записи с типами цен, указанными по формулам:"Цена закупки" тогда берется обычная цена. Когда тип цены "Цена продажи" тогда удваивается.
Я наверное не совсем понял задание, но мне сказали что должно выдаваться две строки в Регистре. Получается нужно сделать если тип цены закупки то тогда одна строка выдается, а если тип цены продажи тогда другая? |
|||
17
Бледно Золотистый
24.03.15
✎
13:18
|
(16) Сам народ запутал, прочитал и сам засомневался? Мдее. Две строки с 2-мя типами цен.
|
|||
18
Nolan
24.03.15
✎
13:19
|
Получается Если я выбираю в документе Тип цены "Цена продажи" то цена должна удвоиться. Как этот механизм реализовать в коде???
|
|||
19
Nolan
24.03.15
✎
13:20
|
БледноЗолотистый, есть такое. Совсем не опытный(((
|
|||
20
1976vas
24.03.15
✎
13:23
|
ТипЦены какой тип имеет?
|
|||
21
necro
24.03.15
✎
13:25
|
(18)
Процедура ОбработкаПроведения(Отказ, Режим) // регистр Цены Движения.Цены.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена * ?(ТипЦены=ЦенаПродажи,2,1); КонецЦикла; КонецПроцедуры |
|||
22
Nolan
24.03.15
✎
13:25
|
Справочник.ТипыЦен
|
|||
23
Nolan
24.03.15
✎
13:26
|
1976vas, Справочник.ТипыЦен
|
|||
24
1976vas
24.03.15
✎
13:36
|
(23) см. (21) а ЦенаПродажи будет Справочники.ТвойСправочник.НайтиПоКоду("Код");
|
|||
25
фобка
24.03.15
✎
13:37
|
(0) проще новый регистр создать такойже
|
|||
26
1976vas
24.03.15
✎
13:38
|
Это если не надо строки дублировать, а если надо как в (17) то в цикле еще одно движение делаешь Движение = Движения.Цены.Добавить(); и записываешь туда удвоенную цену.
|
|||
27
Nolan
24.03.15
✎
13:46
|
1976vas, нужно как в (16). в цикле еще одно движение делаешь Движение = Движения.Цены.Добавить() это так нужно:
Процедура ОбработкаПроведения(Отказ, Режим) // регистр Цены Движения.Цены.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена; КонецЦикла; Движения.Цены.Добавить(); Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена*2; КонецЦикла; КонецПроцедуры ? |
|||
28
fisher
24.03.15
✎
13:49
|
(27) Откуда берется тип цены? Это модуль проведения какого документа?
|
|||
29
1976vas
24.03.15
✎
13:49
|
Второй цикл убери, в одном делай, а во втором движении у тебя еще будет ТипЦены = Справочники.ТвойСправочник.НайтиПоКоду("Код");
Т.е. получится, у тебя в документе выбрана ЦенаЗакупки, а ЦенуПродажи ты вычисляешь. |
|||
30
Nolan
24.03.15
✎
13:55
|
fisher, Тип Цены берется из Справочник.ТипыЦен. Это модуль проведения документа "Поступления товаров"
|
|||
31
hhhh
24.03.15
✎
13:59
|
(30) почему тогда один тип цены везде фигачишь? Нужно ведь два.
|
|||
32
Nolan
24.03.15
✎
14:04
|
1976vas, сделал так
Движения.Цены.Записывать = Истина; Движения.Цены.Добавить(); Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена; Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = Справочники.ТипыЦен.НайтиПоКоду("Код"); Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена*2; КонецЦикла; при проведении документа "поступление товаров" пишит ошибку "Период не может быть пустым. Цены: 01.01.0001...(Регистр сведений:Цены,Номер строки:1) |
|||
33
hhhh
24.03.15
✎
14:06
|
Движения.Цены.Добавить(); два раза подряд захерачил. Одно пустое.
|
|||
34
Nolan
24.03.15
✎
14:09
|
hhhh, можешь пожалуйста исправить в коде как правильно, чтобы и тип цены разный был... потому что я уже нихрена не пойму(((
|
|||
35
1976vas
24.03.15
✎
14:10
|
До цикла убери строчку Движения.Цены.Добавить(); И код элемента справочника напиши вместо "Код"
|
|||
36
fisher
24.03.15
✎
14:10
|
Мда... Тяжелый случай. Ладно 1С вчера увидел. Голову хоть чуть-чуть включать надо. Откуда 1С догадается, какие типы цен записывать надо? Телепатическим усилием?
|
|||
37
1976vas
24.03.15
✎
14:13
|
(36) В первом случае из реквизита документа, во втором из справочника. Тип цен, наверное, реквизит документа, а не табличной части.
|
|||
38
Nolan
24.03.15
✎
14:15
|
fisher не совсем вчера) где-то недели 3 в него смотрю)))
|
|||
39
Nolan
24.03.15
✎
14:19
|
1976vas, да Тип Цен у меня реквизит документа "Поступление товаров". Код элемента справочника это у меня "Тип цен"?
|
|||
40
1976vas
24.03.15
✎
14:21
|
(39) В справочнике заведи ЦенуПродажи, скопируй код и вставь вместо "Код".
|
|||
41
Nolan
24.03.15
✎
14:22
|
О БОГИ, ДРУЗЬЯ ВСЕ ЗАРАБОТАЛО!!!! ВОТ ПРАВИЛЬНЫЙ КОД
// регистр Цены Движения.Цены.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена; Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = Справочники.ТипыЦен.НайтиПоКоду("Цена продажи"); Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена*2; КонецЦикла; Спасибо большое всем за помощь!!! |
|||
42
Nolan
24.03.15
✎
14:23
|
1976vas, отдельное спасибо за помощь и терпение!!!)))
|
|||
43
1976vas
24.03.15
✎
14:24
|
(42) Подожди )), у тебя не может быть код ("Цена продажи");
|
|||
44
1976vas
24.03.15
✎
14:25
|
Код так и называется Код, посмотри в справочник.
|
|||
45
1976vas
24.03.15
✎
14:27
|
Или НайтиПоКоду() замени на НайтиПоНаименованию()
|
|||
46
Бледно Золотистый
24.03.15
✎
14:30
|
(43) Очень даже может, ты недооцениваешь возможности ТСа
|
|||
47
Nolan
24.03.15
✎
14:31
|
1976vas ,справочник "Типы цен", наименование "Цена продажи", код 000000002. теперь понимаю о чем Вы говорите) Но вот я сделал как в (41) и все работает)))
|
|||
48
1976vas
24.03.15
✎
14:32
|
(47) Посмотри регистр, что туда пишется?
|
|||
49
1976vas
24.03.15
✎
14:32
|
(46) )
|
|||
50
Господин ПЖ
24.03.15
✎
14:39
|
пятнично
|
|||
51
D_E_S_131
24.03.15
✎
15:12
|
И, Nolan, когда будешь по человечески искать ТипЦен для цены продажи, то делай это ОДИН раз ПЕРЕД циклом, а потом уже используй его при формировании записей РС.
|
|||
52
Nolan
24.03.15
✎
15:16
|
1976vas, (48) пишется цена продажи)
|
|||
53
hhhh
24.03.15
✎
15:18
|
очень хорошо. Хоть цена записалась.
|
|||
54
Nolan
24.03.15
✎
15:25
|
1976vas, а вообще-то да, все же раньше было пустое поле. а когда в код вписал "000002" тогда все работает правильно. Пишет и цену закупки и цену продажи. Спасибо!)
|
|||
55
1976vas
24.03.15
✎
15:27
|
(54) Вот так сделай (51), там и вправду надо перед циклом получить, а потом присваивать уже в цикле.
|
|||
56
Nolan
24.03.15
✎
15:27
|
D_E_S_131, хорошо, спасибо за совет! Было бы информативней увидеть то что ты говоришь на коде. Если будет время напиши как правильней! Буду благодарен)
|
|||
57
Nolan
24.03.15
✎
15:28
|
а в чем разница? так ведь тоже работает или это не правильно?
|
|||
58
Nolan
24.03.15
✎
15:28
|
1976vas, (55) а в чем разница? так ведь тоже работает или это не правильно?
|
|||
59
1976vas
24.03.15
✎
15:29
|
(57) Ты в цикле каждый раз обращаешься к справочнику, а достаточно один раз, перед циклом.
|
|||
60
D_E_S_131
24.03.15
✎
15:29
|
(57) Это "запрос в цикле", если тебе это о чем-то говорит.
|
|||
61
1976vas
24.03.15
✎
15:30
|
(59) По времени дольше происходит, на величину, равной количеству строк в ТЧ.
|
|||
62
alex_shkut
24.03.15
✎
15:34
|
(27) Возьми этот вариант, только во 2 Движении правильный тип цены поставь. И вынеси "НайтиПоКоду" перед циклом.
ТипПродажная = Справочник.ТипыЦенНоменклатуры...... Для Каждого ... = ТипПродажная; ... КонецЦикла; |
|||
63
Nolan
24.03.15
✎
15:42
|
Все понял, переделал как нужно. Если так правильней буду делать так. alex_shkut спасибо!
|
|||
64
France
24.03.15
✎
15:45
|
(0) создать новый вид цен, и рассчитывать его как *2 от первого типа.
|
|||
65
D_E_S_131
24.03.15
✎
15:50
|
(64) Доброе утро, брат.
|
|||
66
France
24.03.15
✎
15:58
|
(65) и тебе не хворать.. зачем огород городили?))
|
|||
67
1976vas
24.03.15
✎
16:00
|
(66) Он код хотел, а просто так его не дашь же, надо чтобы человек что-то вынес.
|
|||
68
France
24.03.15
✎
16:01
|
(67) истинно говорю: у него неправильные хотения))
|
|||
69
Nolan
24.03.15
✎
16:02
|
может кому пригодиться, вот исправленный код. все работает)
Процедура ОбработкаПроведения(Отказ, Режим) // регистр Цены Движения.Цены.Записывать = Истина; ТипПродажная = Справочники.ТипыЦен.НайтиПоКоду("000000002"); Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены = ТипЦены; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена; Движение = Движения.Цены.Добавить(); Движение.Период = Дата; Движение.ТипЦены=ТипПродажная; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Цена= ТекСтрокаТовары.Цена*2; КонецЦикла; КонецПроцедуры |
|||
70
alex_shkut
24.03.15
✎
16:03
|
(68) Так я же кода и не дал :) только указал на ошибки. Код его.
|
|||
71
France
24.03.15
✎
16:05
|
(69) интересно: типовая? если типовая, то которая из?
|
|||
72
D_E_S_131
24.03.15
✎
16:08
|
(71) А в чем сомнения? В УТ 10.3 ПТиУ может быть регистратором для РС "ЦЕныНоменклатуры".
|
|||
73
France
24.03.15
✎
16:13
|
(72) у меня сомнений не в верности кода..мне интересен только механизм решения задачи без доработки кода..
|
|||
74
alex_shkut
24.03.15
✎
16:30
|
(73) Внешняя обработка
|
|||
75
France
24.03.15
✎
16:33
|
(74) интересная конфа)).. поизучаю)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |