|
Как сделать отбор по регистру сведений? | ☑ | ||
---|---|---|---|---|
0
life
04.11.12
✎
20:35
|
Всем привет, как сделать отбор по регистру сведений, где есть измерение "Цена" которое ссылается на перечисление цены. Я это пробую сделать в форме приходной накладной при выборе номенклатуры.
[CODE]Процедура ПриходТаблицаТМЦПриИзменении(Элемент) ТекСтрока = Элементы.ПриходТаблица.ТекущиеДанные; ТекСтрока.Цена = ПриходнаяЦена(Объект.Дата, ТекСтрока.ТМЦ); КонецПроцедуры [/CODE] а вот функция которая должна получать значение цены [CODE]Функция ПриходнаяЦена(ТекТМЦ, ТекДата) Отбор = Новый Структура("ТМЦ", ТекТМЦ); ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор); Возврат ЗначениеЦены.Цена; КонецФункции[/CODE] вот как здесь можно отсортировать по значению из перечисления Цены, приходные |
|||
1
Wobland
04.11.12
✎
20:39
|
тип цены - перечисление? не очень приятно. в отбор засунь, зачем сортировать
|
|||
2
life
04.11.12
✎
20:41
|
да да, а можно показать этот отбор на примере кода? пожалуйста
|
|||
3
Wobland
04.11.12
✎
20:41
|
вообще, ерунда какая-то. приходная цена у нас внезапно откуда-то выскакивает, когда должна руками заноситься
|
|||
4
life
04.11.12
✎
20:42
|
она заносится в регистр сведений, там три измерения
|
|||
5
Wobland
04.11.12
✎
20:42
|
(2) да вы тут сговорились?
Пример: Доллары = Справочники.Валюты.НайтиПоНаименованию("USD"); Отбор = Новый Структура; Отбор.Вставить("Валюта", Доллары); Курсы = РегистрыСведений.КурсыВалют; ТекКурс = Курсы.ПолучитьПоследнее(ТекущаяДата(), Отбор); Сообщить("Текущий курс доллара: " + ТекКурс.Курс + " руб."); |
|||
6
Wobland
04.11.12
✎
20:43
|
(4) три измерения. одно - номенклатура, понятно. какая из нескольких цен тебя интересуют?
|
|||
7
life
04.11.12
✎
20:49
|
так?
Функция ПриходнаяЦена(ТекТМЦ, ТекДата) Отбор = Новый Структура("ТМЦ", ТекТМЦ); Отбор.Вставить("ВидЦены", Перечисления.ВидЦены.Приходная); ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор); Возврат ЗначениеЦены.Цена; КонецФункции теперь ошибку выдает: Значение не является значением объектного типа (Цена) |
|||
8
Wobland
04.11.12
✎
20:50
|
(7) нуда. Номенклатура, ТипЦены. третье измерение какое? и какая одна из нескольких цен тебя интересует?
|
|||
9
life
04.11.12
✎
20:53
|
нет, измерения у регистра два, ТМЦ и Цены, Цены - это перечисление, мне нужно сделать отбор где значение в перечисление "Приходная". Прошу прощения, я полный нубик в 1с, тяжело мысли выразить. посмотри скрин пожалуйста http://s019.radikal.ru/i643/1211/11/49e4b8c2074b.jpg
|
|||
10
zulu_mix
04.11.12
✎
20:58
|
а чем запрос то не устраивает?
|
|||
11
Wobland
04.11.12
✎
20:58
|
Новый Структура("ТМЦ, ВидЦены", ТекТМЦ, Перечисление.ЧтоТам?);
|
|||
12
zak555
04.11.12
✎
20:58
|
если так написать ?
Отбор = Новый Структура; Отбор.Вставить("ТМЦ", ТекТМЦ); Отбор.Вставить("ВидЦены", Перечисления.ВидЦены.Приходная); |
|||
13
Wobland
04.11.12
✎
20:59
|
(10) они их боятся. у меня второй день репетиторства идёт, ответственно заявляю
"ВЫБРАТЬ и ещё куча букв"; в них вселяет панику (12) ну или так |
|||
14
Wobland
04.11.12
✎
21:02
|
и автор наконец раскроет смысл подстановки цены при поступлении?
|
|||
15
zak555
04.11.12
✎
21:02
|
ошибка как будто ЗначениеЦены не структура
|
|||
16
life
04.11.12
✎
21:03
|
спасибо, но ошибка не исчезла
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(23)}: Значение не является значением объектного типа (Цена) &НаКлиенте Процедура ПриходТаблицаТМЦПриИзменении(Элемент) ТекСтрока = Элементы.ПриходТаблица.ТекущиеДанные; ТекСтрока.Цена = ПриходнаяЦена(Объект.Дата, ТекСтрока.ТМЦ); КонецПроцедуры Функция ПриходнаяЦена(ТекТМЦ, ТекДата) Отбор = Новый Структура("ТМЦ, ВидЦены", ТекТМЦ, Перечисления.ВидЦены.Приходная); ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор); Возврат ЗначениеЦены.Цена; КонецФункции |
|||
17
Wobland
04.11.12
✎
21:04
|
а цена-то есть?
|
|||
18
zak555
04.11.12
✎
21:05
|
&НаСервере
Функция ПриходнаяЦена(ТекТМЦ, ТекДата) Отбор = Новый Структура("ТМЦ, ВидЦены", ТекТМЦ, Перечисления.ВидЦены.Приходная); ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор); Возврат ЗначениеЦены.Цена; КонецФункции |
|||
19
zak555
04.11.12
✎
21:06
|
&НаСервере
Функция ПриходнаяЦена(ТекТМЦ, ТекДата) Отбор = Новый Структура; Отбор.Вставить("ТМЦ", ТекТМЦ); Отбор.Вставить("ВидЦены", Перечисления.ВидЦены.Приходная); ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор); Возврат ЗначениеЦены.Цена; КонецФункции |
|||
20
life
04.11.12
✎
21:07
|
да, я их сразу занес в регистр
вот картинка http://s019.radikal.ru/i600/1211/62/d84a220de708.jpg (не смотри плиз на наименования тмц, это пример только) |
|||
21
Wobland
04.11.12
✎
21:07
|
(18) &НаСервере - это по умолчанию. но лучше ставить, конечно
|
|||
22
Wobland
04.11.12
✎
21:07
|
(20) не вижу
|
|||
23
Wobland
04.11.12
✎
21:08
|
+(22) вижу, что даты не вижу, остальное не вижу
|
|||
24
life
04.11.12
✎
21:09
|
наверно это из-за дат, сейчас исправлю
|
|||
25
Wobland
04.11.12
✎
21:09
|
я тоже был молодым когда-то. но до седых волос дожил,а не знаю, как ругается платформа на ПолучитьПоследнее к непериодическому регистру
|
|||
26
zak555
04.11.12
✎
21:09
|
(23) получитьПоследнее и для непериодчиского же действует
|
|||
27
Wobland
04.11.12
✎
21:10
|
(26) СП против
|
|||
28
life
04.11.12
✎
21:13
|
поставил периодичность в пределах секунды, сделал новые записи в регистр. теперь такая ошибка
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(24)}: Ошибка при вызове метода контекста (ПолучитьПоследнее) ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор); по причине: Несоответствие типов (Параметр номер ""1"") Несоответствие типов (Параметр номер ""1"") |
|||
29
Wobland
04.11.12
✎
21:14
|
(28) сказать тебе, что ТекДата - это не дата или сам догадаешься?
|
|||
30
Wobland
04.11.12
✎
21:14
|
+(29) точно, она у тебя ТМЦ
|
|||
31
zak555
04.11.12
✎
21:15
|
(27) действительно
|
|||
32
zak555
04.11.12
✎
21:15
|
забыл
|
|||
33
life
04.11.12
✎
21:15
|
так это же только аргумент по назначению?
Процедура ПриходТаблицаТМЦПриИзменении(Элемент) ТекСтрока = Элементы.ПриходТаблица.ТекущиеДанные; ТекСтрока.Цена = ПриходнаяЦена(Объект.Дата, ТекСтрока.ТМЦ); КонецПроцедуры |
|||
34
Wobland
04.11.12
✎
21:16
|
(33) ну. внутри своей функции ТекТМЦ у тебя - это дата, а ТекДата - это ТекСтрока.ТМЦ
|
|||
35
life
04.11.12
✎
21:18
|
спасибо,поменял местами. просто не думал что тут параметры только по ссылку можно передавать (это я про 1с)
|
|||
36
Wobland
04.11.12
✎
21:20
|
(35) я вот сейчас ничего не понял кроме спасибо. ты не мог бы уже сразу сказать, что всё заработало, всем большое спасибо?
|
|||
37
Wobland
04.11.12
✎
21:20
|
+(36) и ответить на сакральный вопрос
|
|||
38
life
04.11.12
✎
21:22
|
спасибо большое всем, работает. что за вопрос?
|
|||
39
Wobland
04.11.12
✎
21:22
|
(38) -> (3)(14)
|
|||
40
life
04.11.12
✎
21:26
|
в тестовом задании написано так сделать. в принципе все логично, сначала вносятся цены, потом приходуется товар. а что не так?
|
|||
41
Wobland
04.11.12
✎
21:29
|
(40) цены определяются поступлением. по сколько дали, столько и цена. и действовать тут надо наоборот как раз - при проведении поступления менять регистр про цены. ну это по моей скромной логике вещей
|
|||
42
Wobland
04.11.12
✎
21:30
|
вот юзер взял портянку на 250 позиций, пробежался, вбил цены в регистр. потом пошёл создавать документ поступление, опять пошёл сканировать портянку...
|
|||
43
life
04.11.12
✎
21:41
|
завтра уточню этот момент, спасибо за советы.
|
|||
44
hhhh
04.11.12
✎
21:51
|
(42) нет ну если постоянный поставщик, он прайсы пересылает заранее в экселе, почему нет?
|
|||
45
Wobland
04.11.12
✎
21:53
|
(44) а ни о чём таком автор не говорил. почему бы и нет, конечно
|
|||
46
Wobland
04.11.12
✎
21:56
|
>сначала вносятся цены
ладно, убедил. необязательно руками вносятся ;) |
|||
47
life
04.11.12
✎
22:17
|
а как можно получить значение реквизита документа? метод ТекущиеДанные не работает
|
|||
48
Wobland
04.11.12
✎
22:28
|
(47) какого и зачем*?
|
|||
49
Wobland
04.11.12
✎
22:29
|
и где? ТекущиеДанные - это для таблицы на форме. телпатирую: Объект.Реквизит
|
|||
50
life
04.11.12
✎
22:32
|
в документе расходная накладная есть реквизит цены, который ведет на перечисление виды цен, при его изменении должна меняться значение цены в табличной части.
т.е. я так понимаю нужно узнать значение этого реквизита и сделать выборку из регистра сведений по этому значению. |
|||
51
Wobland
04.11.12
✎
22:35
|
(50) Объект.ТипЦен или как там у тебя
|
|||
52
life
04.11.12
✎
22:39
|
то что нужно, спасибо.
|
|||
53
Wobland
04.11.12
✎
22:44
|
а ну-ка вопрос на засыпку. скажи, зачем нужен реквизит Цена в ТЧ документа? цены ж и без этого в регистре есть
|
|||
54
life
04.11.12
✎
22:50
|
что бы их в ручную можно было править, в случаи необходимости.
|
|||
55
Wobland
04.11.12
✎
22:50
|
и что делать, если я завтра новый тип цен захочу, и насколько это будет удобно
|
|||
56
Wobland
04.11.12
✎
22:51
|
(54) изменишь в документе руками. что от этого изменится, кроме самого документа?
|
|||
57
Wobland
04.11.12
✎
22:53
|
а сумму в ТЧ менять можно? цена пересчитывается?
|
|||
58
life
04.11.12
✎
22:53
|
я так глубоко не вникал в такие вопросы, я еще учусь.
|
|||
59
Wobland
04.11.12
✎
22:53
|
(58) а я тебя учу. делай так, чтоб твоя поделка не рухнула от любых допустимых действий
|
|||
60
life
04.11.12
✎
22:55
|
я с тобой согласен. но мне нужно сделать т.к. дали в задании, это на вакансию джуниора типа)
|
|||
61
Wobland
04.11.12
✎
22:58
|
(60) дык делай. при изменении количества сумму считаешь - это из задания? а про цену ничего не сказано? додумай
|
|||
62
Wobland
04.11.12
✎
22:58
|
(61) *про сумму
|
|||
63
Wobland
04.11.12
✎
22:58
|
дойдёшь до реализации - скажи, фокус покажу ;)
|
|||
64
life
04.11.12
✎
23:16
|
а цена должно меняться, если изменено значение Виды цен ( это реквизит расходной накладно, перечисление которое) и нужно еще меня когда выбирается контрагент. и вот тут еще один вопрос, в справочники контрагентов есть реквизит Вид цены (все то же, многострадальное перечисление) вот как получить этот атрибут при выборе в реквизитах расходной накладной?
ТекЦена = Объект.Контрагент. - и здесь тип цены которое у него в реквизите указано |
|||
65
life
04.11.12
✎
23:17
|
оффтоп. а как тут форматировать код?
|
|||
66
Wobland
04.11.12
✎
23:19
|
>справочники контрагентов есть реквизит Вид цены
представь себе контрагента, который продаёт нам и покупает у нас. кривое проектирование налицо вопрос не понял. Объект.Контрагент.ТипЦены - не оно? {1С}тут код{/1С} - только с квадратными скобками |
|||
67
life
04.11.12
✎
23:23
|
насчет проектирования согласен, но это же только учебный пример.
ТекЦена = Объект.Контрагент.ВидЦены; ошибка : Поле объекта не обнаружено (ВидЦены) но этот реквизит есть у справочника и заполнен. |
|||
68
Wobland
04.11.12
✎
23:25
|
(67) нету этого реквизита
ты же видишь, как я ломаю твою учебную поделку. будет лучше, если её будет ломать кто-то другой и в более официальной обстановке? |
|||
69
life
04.11.12
✎
23:27
|
мне тяжело дать однозначный ответ =) но я склоняюсь к тому что следует выполнять задания строго по ТЗ.
|
|||
70
Wobland
04.11.12
✎
23:30
|
(69) слушай, а покажи. я падавана нагружу
|
|||
71
life
04.11.12
✎
23:35
|
завтра фотик -сфоткаю, а то на теле камера плохая.
посмотри пожалуйста на реквизит http://s57.radikal.ru/i156/1211/5a/a4aa4c0fcc66.jpg |
|||
72
life
04.11.12
✎
23:36
|
завтра заберу фотик*
а как тут свои сообщения редактировать? |
|||
73
Wobland
04.11.12
✎
23:37
|
(71) ты продолжаешь издеваться мелким разрешением?
|
|||
74
Wobland
04.11.12
✎
23:37
|
(72) никак
|
|||
75
Wobland
04.11.12
✎
23:38
|
контрагент у тебя не контрагент
|
|||
76
life
04.11.12
✎
23:41
|
почему? ссылка на справочник контрагенты есть.
|
|||
77
Wobland
04.11.12
✎
23:42
|
(76) Объект.Контрагент какого типа?
|
|||
78
life
04.11.12
✎
23:45
|
вот такого СправочникСсылка.Контрагенты
|
|||
79
Wobland
04.11.12
✎
23:48
|
(78) тогда где-то врёшь. покажи по аналогии с этим: справочники контрагентов есть реквизит Вид цены
|
|||
80
Wobland
04.11.12
✎
23:48
|
тфу, с этим: http://screencast.com/t/FQZ59bLle2Qv
|
|||
81
life
04.11.12
✎
23:52
|
http://s017.radikal.ru/i412/1211/38/540cd110afb6.jpg ссори за разрешение.
|
|||
82
Wobland
04.11.12
✎
23:54
|
а, нуда. за этим придётся на сервер сходить
|
|||
83
life
04.11.12
✎
23:56
|
спасибо заработало, а как ты определил?
|
|||
84
Wobland
04.11.12
✎
23:57
|
(83) посмотрел внимательными глазами. я вообще мелкое разрешение не разглядывал
|
|||
85
life
05.11.12
✎
00:01
|
ошибки нет, но и не выводит нечего
&НаСервере Процедура КонтрагентПриИзменении(Элемент) ТекЦена = Объект.Контрагент.ВидЦены; Сообщить(ТекЦена); КонецПроцедуры |
|||
86
Wobland
05.11.12
✎
00:03
|
(85) Сообщить("От такой вот вид цены: "+Объект.Контрагент.ВидЦены);
|
|||
87
life
05.11.12
✎
00:05
|
все равно не какого сообщения нет
|
|||
88
life
05.11.12
✎
00:08
|
сообщения не выводятся только в этой процедуре
&НаСервере Процедура КонтрагентПриИзменении(Элемент) ТекЦена = Объект.Контрагент.ВидЦены; Сообщить(ТекЦена + "sss"); Сообщить("От такой вот вид цены: "+Объект.Контрагент.ВидЦены); Сообщить("От такой вот вид цены: "); КонецПроцедуры |
|||
89
Wobland
05.11.12
✎
00:09
|
хм, даже на клиенте
&НаКлиенте Процедура КонтрагентПриИзменении(Элемент) Сообщить("От такой вот вид цены: "+Объект.Контрагент.ВидЦены); КонецПроцедуры http://screencast.com/t/c2RE27OZfwj |
|||
90
Wobland
05.11.12
✎
00:09
|
||||
91
life
05.11.12
✎
00:11
|
это значит что у меня....?
|
|||
92
Wobland
05.11.12
✎
00:12
|
(91) не оттуда растут руки ;)
платформа какая? |
|||
93
life
05.11.12
✎
00:12
|
8.2
|
|||
94
Wobland
05.11.12
✎
00:12
|
(93) это я понял
|
|||
95
Wobland
05.11.12
✎
00:13
|
у меня 1С:Предприятие 8.2 (8.2.16.352)
|
|||
96
Wobland
05.11.12
✎
00:13
|
плин, а я не верил, что сотню сделаем
|
|||
97
life
05.11.12
✎
00:16
|
а из-за чего это процедура может не работать?
|
|||
98
life
05.11.12
✎
00:18
|
это ппц какой то, для аналогично реквизита склад все работает(
|
|||
99
Wobland
05.11.12
✎
00:18
|
(97) фантазировать не хочу, мож, в платформе что-то испортилось
|
|||
100
Wobland
05.11.12
✎
00:18
|
(98) конфигурацию обновил?
|
|||
101
life
05.11.12
✎
00:24
|
да, вообщем все нормально пока не дописываю метод .ВидЦены
если на клиенте, то поле объекта не обноружено если на сервере, вообще не каких действий, как будет процедура не отрабатывается. |
|||
102
Wobland
05.11.12
✎
00:27
|
(101) это не метод, а свойство, если уж ты начал пользоваться терминологией ООП. наружено, никаких.
ф7 нажимал перед тем, как проверять? |
|||
103
life
05.11.12
✎
00:43
|
неа, а что это должно дать?
|
|||
104
life
05.11.12
✎
00:44
|
Синтаксических ошибок не обнаружено!
|
|||
105
life
05.11.12
✎
00:46
|
что то вообще не могу получить доступ к реквизитам справочников в РН, уже и по дописывал обычные строки для проверки, все равно поле объекта не обнаружено.
|
|||
106
crotnn
05.11.12
✎
10:27
|
(105) Потому что за реквизитами надо на сервер ходить. На клиенте есть только ссылка. Примерно так:
|
|||
107
Wobland
05.11.12
✎
10:57
|
(106) сможешь объяснить (89)?
|
|||
108
crotnn
05.11.12
✎
11:30
|
(107) Та же проблема, ты на клиенте хочешь получить значение реквизита от ссылки "Объект.Контрагент.ВидЦены".
|
|||
109
Wobland
05.11.12
✎
11:39
|
(108) я тебе больше скажу: я его получаю
|
|||
110
life
05.11.12
✎
17:05
|
спасибо большое, такой вариант работает.
|
|||
111
life
05.11.12
✎
17:31
|
у меня еще вопрос, как обновить колонку Сумма для всех строк при изменении контрагента или вида цены?
Процедура КонтрагентПриИзменении(Элемент) ТекЦена = ПолучитьВидЦеныКонтрагента(Объект.Контрагент); ТекСтрока = Элементы.РасходТаблица.ТекущиеДанные; ТекСтрока.Цена = ВидЦеныИзменение(Объект.Дата, ТекСтрока.ТМЦ, ТекЦена); ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена; КонецПроцедуры так обновляется только та что в фокусе. |
|||
112
Wobland
05.11.12
✎
17:57
|
(111) а ты пройдись по всем строкам. только не элемента формы, а ТЧ объекта
|
|||
113
Wobland
05.11.12
✎
17:58
|
и, наверное, было бы хорошим тоном спросить у юзера, нужно ли ему это. вопрос в помощь
|
|||
114
Wobland
05.11.12
✎
18:00
|
а я уже спрашивал, на кой хрен цена в ТЧ нужна, когда все цены живут в регистре?
|
|||
115
life
05.11.12
✎
18:16
|
спасибо, получилось
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |