Имя: Пароль:
1C
1С v8
Как сделать отбор по регистру сведений?
0 life
 
04.11.12
20:35
Всем привет, как сделать отбор по регистру сведений, где есть измерение "Цена" которое ссылается на перечисление цены. Я это пробую сделать в форме приходной накладной при выборе номенклатуры.
[CODE]Процедура ПриходТаблицаТМЦПриИзменении(Элемент)
   ТекСтрока = Элементы.ПриходТаблица.ТекущиеДанные;
   ТекСтрока.Цена = ПриходнаяЦена(Объект.Дата, ТекСтрока.ТМЦ);
КонецПроцедуры
[/CODE]
а вот функция которая должна получать значение цены
[CODE]Функция ПриходнаяЦена(ТекТМЦ, ТекДата)
   Отбор = Новый Структура("ТМЦ", ТекТМЦ);
   ЗначениеЦены = РегистрыСведений.Цены.ПолучитьПоследнее(ТекДата, Отбор);
   Возврат ЗначениеЦены.Цена;
КонецФункции[/CODE]
вот как здесь можно отсортировать по значению из перечисления Цены, приходные
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
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
спасибо, получилось
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан