|
v7: Глюк с периодическим реквизитом | ☑ | ||
---|---|---|---|---|
0
DrRaptor
30.01.13
✎
14:06
|
Процедура ПриОткрытии()
Если ПустоеЗначение(Документы.Получить(РабочаяДата()))=0 Тогда ТабЗнач = ЗначениеИзСтроки(Документы.Получить(РабочаяДата())); Для Н=1 По ТабЗнач.РазмерСписка() Цикл ВыборДоков.Установить(СокрЛП(ТабЗнач.ПолучитьЗначение(Н)),ТабЗнач.ПолучитьЗначение(Н)); КонецЦикла; КонецЕсли; КонецПроцедуры Выдает ошибку: Если ПустоеЗначение(Документы.Получить(РабочаяДата()))=0 Тогда {Справочник.Комиссии.Форма.Модуль(16)}: Значение не представляет агрегатный объект (Получить) Нигде в тексте модуля формы нет "ИспользоватьДату". Реквизит "Документы" - это строка длиной 500, периодический (без галочки "изменяется документами") В чем дело? Подскажите, пожалуйста. |
|||
18
пипец
30.01.13
✎
14:23
|
не поверишь - можно при открытии справочника открывать документ
|
|||
19
Надсмотрщик
30.01.13
✎
14:23
|
(9) Откуда такие "спецы" берутся? После таких ЛОПАТОЙ за год не разгребешь! :-)
|
|||
20
Privalov
30.01.13
✎
14:24
|
(16) ППЦ!!
|
|||
21
zladenuw
30.01.13
✎
14:25
|
(16) зачем ? если можно запросом получить и вывести в Табличный документ
|
|||
22
DrRaptor
30.01.13
✎
14:27
|
Объясняю на пальцах:
есть справочник видов комиссиий в этом справочнике прописывается метод начисления этой кломиссии, устанавливается перечень тарифов, к которым она относится, и перечень документов, в которых эта комиссия может списываться И все эти перечни должны хранить историю изменений. |
|||
23
DrRaptor
30.01.13
✎
14:29
|
Предложите ваши варианты решения, если все такие умные
|
|||
24
zladenuw
30.01.13
✎
14:29
|
(22) я за подчиненный справочник, а хотя можно и документ
|
|||
25
Ёпрст
30.01.13
✎
14:31
|
регистр
|
|||
26
Ёпрст
30.01.13
✎
14:31
|
хотя, можно и на справочнике
|
|||
27
Ёпрст
30.01.13
✎
14:31
|
без разницы.
|
|||
28
пипец
30.01.13
✎
14:32
|
(23) тбе ж все рассказали - или подчиненный справочник у которого реквизит элемента - элемент из списка вариантов или документ как реквизит справочника с табличной частью
|
|||
29
DrRaptor
30.01.13
✎
14:37
|
Ну подчиненный документ более логично...
|
|||
30
Надсмотрщик
30.01.13
✎
14:39
|
(23) Подчиненный справочник.
|
|||
31
DrRaptor
30.01.13
✎
14:44
|
Поменял на тип "Документ" - то же самое выдает. Не может получить/установить значение на дату. Че за хрень?
|
|||
32
пипец
30.01.13
✎
14:50
|
глЗаписьПериодическихРеквизитов(Контекст, Список);
|
|||
33
Builder
30.01.13
✎
14:51
|
(22) Это все работает или ты только пишешь этот функционал?
|
|||
34
DrRaptor
30.01.13
✎
14:52
|
Пишу с нуля
|
|||
35
Ёпрст
30.01.13
✎
15:01
|
(31) см. (4)
|
|||
36
DrRaptor
30.01.13
✎
15:12
|
Переименовал в "Документы" в "Доксы" - то же самое
|
|||
37
Boroda
30.01.13
✎
15:24
|
А может сделать наоборот - создать в документах реквизит типа "Комиссия" с типом твоего справочника. И документ "знает" как начислять комиссию по этой ссылке.
|
|||
38
DrRaptor
30.01.13
✎
15:27
|
В документе и так есть такой реквизит - комиссия в документе предлагается к заполнению, но это не значит, что мы её обязательно заполним. И нужно комиссию докам назначать, а не наоборот.
|
|||
39
DrRaptor
30.01.13
✎
15:30
|
Не нужно менять мою логику - просто скажите почему периодический реквизит не берется.
Такое в другом справочнике уже было - пришлось использовать .Значение и .ДатаЗнач - но это очень муторно. |
|||
40
DrRaptor
30.01.13
✎
15:32
|
А может вообще запрещено обращаться из справочника к его реквизитам .Получить и .Установить ? Может их можно только при стороннем обращении к реквизиту использовать?
|
|||
41
Ёпрст
30.01.13
✎
15:34
|
Заремь весь код - усё будет работать.
1.Либо сделал Перем Документы в коде, 2. либо есть одноименная переменная в глобальнике 3. либо есть ИспользоватьДату Но нлицо - 1 |
|||
42
Boroda
30.01.13
✎
15:35
|
Тога сделай так: :)
Попытка рез = Документы.Получить(РабочаяДата()); Исключение рез = Документы; КонецПопытки; |
|||
43
DrRaptor
30.01.13
✎
15:36
|
(41) см (36)
|
|||
44
Ёпрст
30.01.13
✎
15:36
|
значит, п.3
|
|||
45
DrRaptor
30.01.13
✎
15:37
|
без Получить значение выдается, историю изменений показывает (соответственно реквизит действительно периодический)
|
|||
46
Ёпрст
30.01.13
✎
15:38
|
Хотя, тест на вшивость:
сообщить(ТипЗначенияСтр(Документы)); Сообщить(метаданные.Справочник(Вид()).Реквизит("Документы").Выбран()); |
|||
47
Ёпрст
30.01.13
✎
15:38
|
Сообщить(метаданные.Справочник(Вид()).Реквизит("Документы").периодический);
|
|||
48
Ёпрст
30.01.13
✎
15:39
|
Сообщить(метаданные.Справочник(Вид()).Реквизит("Документы").Тип));
|
|||
49
DrRaptor
30.01.13
✎
15:39
|
ИспользоватьДату - имеет разве глобальное влияние? Если где-то в одном из метаденных прописано - то все, каюк?
|
|||
50
Ёпрст
30.01.13
✎
15:40
|
(49) ты на (46-48) ответь
|
|||
51
DrRaptor
30.01.13
✎
15:45
|
метаданные.Справочник(Вид()).Реквизит("Доксы").Выбран() = 1
метаданные.Справочник(Вид()).Реквизит("Доксы").периодический = 1 метаданные.Справочник(Вид()).Реквизит("Доксы").Тип = "Документ" |
|||
52
Ёпрст
30.01.13
✎
15:46
|
сообщить(ТипЗначенияСтр(Документы));
|
|||
53
Ёпрст
30.01.13
✎
15:46
|
всё это воткнуть перед
Документы.Получить(РабочаяДата()); |
|||
54
1Сергей
30.01.13
✎
15:49
|
>>Реквизит "Документы" - это строка длиной 500, периодический (без галочки "изменяется документами")
>>метаданные.Справочник(Вид()).Реквизит("Доксы").Тип = "Документ" Какая-то из черепашек врёт |
|||
55
DrRaptor
30.01.13
✎
15:50
|
(54) см (31)
|
|||
56
Ёпрст
30.01.13
✎
15:50
|
На (52) будет ответ ?
|
|||
57
DrRaptor
30.01.13
✎
15:53
|
ТипЗначенияСтр(Доксы) = "Документ"
|
|||
58
Ёпрст
30.01.13
✎
15:54
|
(57) не верю.
|
|||
59
Ёпрст
30.01.13
✎
15:54
|
значит, есть использоватьДату в коде (ты её поди в глобальной проце вызываешь)
|
|||
60
Ёпрст
30.01.13
✎
15:55
|
или устанавливаешь через контекст открытой формы
|
|||
61
DrRaptor
30.01.13
✎
16:02
|
нет
поиск ссылок не находит использоватьДату может есть какие-то галочки еще, которые влияют? может глобальные настройки какие-то в конфигураторе? |
|||
62
DrRaptor
30.01.13
✎
16:22
|
Ну что? Нет мыслей?
|
|||
63
Ёпрст
30.01.13
✎
16:23
|
(62) дай мд посмотреть
|
|||
64
Ёпрст
30.01.13
✎
16:23
|
Или кидай весь код модуля формы
|
|||
65
DrRaptor
30.01.13
✎
16:34
|
МД не дам
а форма вот: Перем ТабЗнач; Процедура ВводНового() сообщить(ТипЗначенияСтр(Доксы)); ВыборДоков.Установить(СокрЛП(Перечисление.ТипДокумента.ВводДС),Перечисление.ТипДокумента.ВводДС); ВыборДоков.Установить(СокрЛП(Перечисление.ТипДокумента.ВыводДС),Перечисление.ТипДокумента.ВыводДС); ВыборДоков.Установить(СокрЛП(Перечисление.ТипДокумента.ПереводДС),Перечисление.ТипДокумента.ПереводДС); ВыборДоков.Установить(СокрЛП(Перечисление.ТипДокумента.КонвертацияВалюты),Перечисление.ТипДокумента.КонвертацияВалюты); ВыборДоков.Установить(СокрЛП(Перечисление.ТипДокумента.ЗаймДС),Перечисление.ТипДокумента.ЗаймДС); ВыборДоков.Установить(СокрЛП(Перечисление.ТипДокумента.ПогашениеЗаймаДС),Перечисление.ТипДокумента.ПогашениеЗаймаДС); КонецПроцедуры Процедура ПриОткрытии() Если ПустоеЗначение(Доксы.Получить(ТекущаяДата()))=0 Тогда ТабЗнач = ЗначениеИзСтроки(Доксы.Получить(ТекущаяДата())); Для Н=1 По ТабЗнач.РазмерСписка() Цикл ВыборДоков.Установить(СокрЛП(ТабЗнач.ПолучитьЗначение(Н)),ТабЗнач.ПолучитьЗначение(Н)); КонецЦикла; КонецЕсли; КонецПроцедуры Процедура ПриЗаписи() ТабЗнач.УдалитьВсе(); Для Н=1 По ВыборДоков.РазмерСписка() Цикл Если ВыборДоков.Пометка(Н) = 1 Тогда ТабЗнач.Установить(СокрЛП(ВыборДоков.ПолучитьЗначение(Н)),ВыборДоков.ПолучитьЗначение(Н)); КонецЕсли; КонецЦикла; Доксы.Установить(РабочаяДата(),ЗначениеВСтроку(ТабЗнач)); КонецПроцедуры ТабЗнач = СоздатьОбъект("СписокЗначений"); |
|||
66
DrRaptor
30.01.13
✎
16:35
|
только что это дает? - ошибка то уже на первой строчке алгоритма выскакивает
|
|||
67
Ёпрст
30.01.13
✎
16:39
|
(66)
вставляем, результаты в студию: Процедура ПриОткрытии() Сообщить(ТипЗначенияСтр(Доксы)); Сообщить(Доксы); Сообщить(Метаданные.Справочник(Вид()).Реквизит("Доксы").Выбран()); Сообщить(Метаданные.Справочник(Вид()).Реквизит("Доксы").периодический); Если ПустоеЗначение(Доксы.Получить(ТекущаяДата()))=0 Тогда |
|||
68
DrRaptor
30.01.13
✎
16:55
|
Ответы системы в том же порядке:
Документ 1 1 |
|||
69
Ёпрст
30.01.13
✎
16:56
|
и ?
Ошибка то какая потом ? |
|||
70
DrRaptor
30.01.13
✎
17:00
|
Если ПустоеЗначение(Доксы.Получить(ТекущаяДата()))=0 Тогда
{Справочник.Комиссии.Форма.Модуль(23)}: Поле агрегатного объекта не обнаружено (Получить) |
|||
71
Ёпрст
30.01.13
✎
17:01
|
(70) где то ты врешь или не договариваешь
дай мд |
|||
72
Ёпрст
30.01.13
✎
17:02
|
+
вот это что ? Доксы.Установить(РабочаяДата(),ЗначениеВСтроку(ТабЗнач)); зачет ага, в документы что-то устанавливать |
|||
73
Ёпрст
30.01.13
✎
17:02
|
на форме поди, тоже есть Доксы ?
:)) |
|||
74
DrRaptor
30.01.13
✎
17:07
|
(72) - не понял в чем вопрос?
(73) - на форме нет Доксов, там СписокЗначений "ВфборДоков" |
|||
75
Ёпрст
30.01.13
✎
17:11
|
(72) Доксы - документ, откуда там Установить(РабочаяДата(),ЗначениеВСтроку(ТабЗнач)); ?
|
|||
76
Ёпрст
30.01.13
✎
17:12
|
впрочем, как и бред с
ТабЗнач = ЗначениеИзСтроки(Доксы.Получить(ТекущаяДата())); |
|||
77
DrRaptor
30.01.13
✎
17:19
|
Потому что сначала бал тип "Строка", да не важно это - я создал новый пустой справочник с одним реквизитом - то же самое
|
|||
78
Ёпрст
30.01.13
✎
17:20
|
Ты это.. где всё это пишешь то хоть ? в Форме элемента или в форме списка справочника ?
|
|||
79
Ёпрст
30.01.13
✎
17:22
|
Ну и наконец, последний тест
Сообщить(Выбран()); |
|||
80
Ёпрст
30.01.13
✎
17:22
|
он так сказать, контрольный, в голову
|
|||
81
фобка
30.01.13
✎
17:24
|
"Процедура ПриОткрытии()
Сообщить(ТипЗначенияСтр(Доксы));" "Ответы системы в том же порядке: Документ" |
|||
82
фобка
30.01.13
✎
17:27
|
стопэ.. это строка или документ? он периодический точно?
|
|||
83
DrRaptor
30.01.13
✎
17:28
|
Не там мы копаем - есть какой то еще пунктик, который влияет на периодические реквизиты
|
|||
84
DrRaptor
30.01.13
✎
17:30
|
Я создал новый пустой справочник. Сделал один периодический реквизит "Доксы" типа "Строка" длиной 10.
В форму диалога вставил алгоритм: Процедура ПриОткрытии() Доксы.Установить(ТекущаяДата(),"Привет"); Сообщить(Доксы.Получить(ТекущаяДата())); КонецПроцедуры При открытии ошибка: Доксы.Установить(ТекущаяДата(),"Привет"); {Справочник.Проверка.Форма.Модуль(4)}: Значение не представляет агрегатный объект (Установить) |
|||
85
sapphire
30.01.13
✎
17:31
|
Доксы... Беггинсы...Моя прелесть (с)
|
|||
86
DrRaptor
30.01.13
✎
17:31
|
Ну нет там ничего больше! Форма новая чистая. Просто .Установить не работает.
|
|||
87
Ёпрст
30.01.13
✎
17:34
|
(86) см. (79) это ответ на (0) и всю ветку целиком.
далее (80) |
|||
88
Ёпрст
30.01.13
✎
17:34
|
если еще не понял - нет периодики у НЕ записанного элемента.
|
|||
89
DrRaptor
30.01.13
✎
17:38
|
Доксы.Установить(ТекущаяДата(),"Привет");
Доксы.Записать(); Сообщить(Доксы.Получить(ТекущаяДата())); тоже не работает |
|||
90
пипец
30.01.13
✎
17:40
|
"Доксы" типа "Строка" длиной 10. (с) за такое расстреливать нада - без права переписки
|
|||
91
DrRaptor
30.01.13
✎
17:41
|
(90) - опять не понял. Что еще не так!!??
Напишите ваш правильный алгоритм. А то так и не помогли пока |
|||
92
viktor_vv
30.01.13
✎
17:45
|
(88) Самое прикольное, что в форме диалога справочника и для записанного не работает
ИдентификаторПериодическогоРеквизита.Получить() ; :). Спецом у себя проверил. |
|||
93
miki
30.01.13
✎
17:46
|
(87)+1
|
|||
94
DrRaptor
30.01.13
✎
17:46
|
(88) - что мне делать то?
|
|||
95
DrRaptor
30.01.13
✎
17:47
|
может из формы справочника нельзя обращаться таким образом к реквизиту?
|
|||
96
фобка
30.01.13
✎
17:47
|
да, не работает
Процедура ПриОткрытии() Если Выбран() = 1 Тогда Сообщить(Рек1.Получить(ТекущаяДата())); КонецЕсли; КонецПроцедуры |
|||
97
Ёпрст
30.01.13
✎
17:48
|
(91)
Процедура ПриОткрытии() Если Выбран()=0 Тогда Предупреждение("ПНХ, альфредо!"+"" ""+"нет периодики у таких элементов"+"" ""+запиши их, для начала"); Иначе Доксы.Установить(ТекущаяДата(),"Привет"); Сообщить(Доксы.Получить(ТекущаяДата())); КонецЕсли; КонецПроцедуры |
|||
98
viktor_vv
30.01.13
✎
17:48
|
Вот так работает
Процедура ПриОткрытии() Сообщить(ТекущийЭлемент().Курс.Получить(РабочаяДата())); КонецПроцедуры |
|||
99
viktor_vv
30.01.13
✎
17:49
|
(98)+ И для незаписанного тоже.
|
|||
100
пипец
30.01.13
✎
17:49
|
реквизит формы и периодический реквизит не находящийся на форма без записатьпериодический отрабатывать просто так не будет
|
|||
101
DrRaptor
30.01.13
✎
17:52
|
Кто-нибудь, напишите работающий алгоритм записи значения в реквизит
|
|||
102
фобка
30.01.13
✎
17:53
|
(101) написали уже, запись (97) чтение (98)
|
|||
103
Ёпрст
30.01.13
✎
17:55
|
Я б воткнул ИспользоватьДату и не заморачивался
|
|||
104
пипец
30.01.13
✎
17:57
|
Функция глЗаписьПериодическихРеквизитов(КонтекстФормы, СписокРеквизитов=0, НоваяДата=0,
ПерваяДата=0, СвязьРеквизитов=0, НеизменяемыеРеквизиты="") Экспорт Если ТипЗначенияСтр(СписокРеквизитов) <> "СписокЗначений" Тогда СписокРеквизитов = СоздатьОбъект("СписокЗначений"); МДСправочник = Метаданные.Справочник(КонтекстФормы.Вид()); Сч = 1; Пока МДСправочник.Реквизит(Сч).Выбран() = 1 Цикл Если МДСправочник.Реквизит(Сч).Периодический = 1 Тогда Идентификатор = МДСправочник.Реквизит(Сч).Идентификатор; Если Найти("," + НеизменяемыеРеквизиты + ",", "," + Идентификатор + ",") = 0 Тогда СписокРеквизитов.ДобавитьЗначение(КонтекстФормы.ПолучитьАтрибут(Идентификатор), Идентификатор); КонецЕсли; КонецЕсли; Сч = Сч + 1; КонецЦикла; КонецЕсли; // Список параметров обработки ЗаписьПериодическихРеквизитов. Параметр = СоздатьОбъект("СписокЗначений"); Параметр.Установить("КонтекстФормы", КонтекстФормы); Параметр.Установить("СписокРеквизитов", СписокРеквизитов); Параметр.Установить("НоваяДата", НоваяДата); Параметр.Установить("ПерваяДата", ПерваяДата); Параметр.Установить("СвязьРеквизитов", СвязьРеквизитов); ОткрытьФормуМодально("Обработка.ЗаписьПериодическихРеквизитов", Параметр); Возврат Параметр; КонецФункции // глЗаписьПериодическихРеквизитов() |
|||
105
фобка
30.01.13
✎
17:58
|
Процедура Кнопа()
Если Выбран() = 1 Тогда Спр = СоздатьОбъект("Справочник.Новый1"); Спр.НайтиЭлемент(ТекущийЭлемент()); Спр.Рек1.Установить(ТекущаяДата(),"Привет2"); Сообщить(ТекущийЭлемент().Рек1.Получить(ТекущаяДата())); КонецЕсли; КонецПроцедуры |
|||
106
фобка
30.01.13
✎
17:58
|
Спр.Записать() нетрэба
|
|||
107
DrRaptor
30.01.13
✎
17:58
|
(102) -
Доксы.Установить(ТекущаяДата(),"Привет"); {Справочник.Проверка.Форма.Модуль(7)}: Значение не представляет агрегатный объект (Установить) |
|||
108
фобка
30.01.13
✎
18:00
|
(107) -> (105)
|
|||
109
Ёпрст
30.01.13
✎
18:00
|
(107) ясен пень, у тебя Доксы - документ, а не список значений
|
|||
110
viktor_vv
30.01.13
✎
18:03
|
(109) Да не, скорее всего из-за того что в форме диалога
(107) Так попробуй Если Выбран() = 1 Тогда ТекущийЭлемент().Доксы.Установить(ТекущаяДата(),"Привет") ; КонецЕсли ; Или (105) . |
|||
111
DrRaptor
30.01.13
✎
18:07
|
Только так работает:
Процедура ПриОткрытии() Если Выбран() = 1 Тогда Спр = СоздатьОбъект("Справочник.Проверка"); Спр.НайтиЭлемент(ТекущийЭлемент()); Спр.Доксы.Установить(ТекущаяДата(),"Привет"); КонецЕсли; Сообщить(ТекущийЭлемент().Доксы.Получить(ТекущаяДата())); КонецПроцедуры |
|||
112
viktor_vv
30.01.13
✎
18:08
|
(110) Не, через текущийЭлемент() установить не работает.
Остается (105). |
|||
113
DrRaptor
30.01.13
✎
18:09
|
Вывод: как я и говорил, изнутри нельзя обратится к реквизиту командой .Получить / .Установить
|
|||
114
Ёпрст
30.01.13
✎
18:09
|
(113) можно:
из СП: Метод можно использовать только для объектов-справочников, созданных функцией СоздатьОбъект. |
|||
115
Ёпрст
30.01.13
✎
18:11
|
а вообще, всё это не нужно
Либо использоватьДату, либо через объект Периодический |
|||
116
viktor_vv
30.01.13
✎
18:11
|
В принципе логично, в синтаксисе
Реквизит.Получить() , Реквизит.Установить() в диалоге самого элемента эти методы не могут получить ID элемента, вряд ли при вызове метода контролируется из какого контекста они вызываются. |
|||
117
DrRaptor
30.01.13
✎
18:27
|
Фобке спаисбо
Остальным я поражаюсь: почему вы считаете других тупее себя? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |