Имя: Пароль:
1C
1С v8
Доступ к реквизитам формы
, ,
0 Aldnepr
 
22.11.16
10:02
В форме документа имеются реквизиты, которые не являются реквизитами документа. Как получить к ним доступ и записать туда нужные значения программно? Неужели через регистры сведений. Конкретно - Документы.ЧекККМ.Форма.ВидОплаты= ?//ТипЗначения= СправочникСсылка.ВидыОплатЧекаККМ
1 catena
 
22.11.16
10:13
ЭлементыФормы.ВидОплаты.Значение =
2 Defender aka LINN
 
22.11.16
10:16
(0) При открытии формы они откуда-то заполняются. Вот туда и пиши
3 Остап Сулейманович
 
22.11.16
10:16
(0) Все просто.
Присвоение значения :
ИмяРеквизита = Значение;
Чтение точно так же через ИмяРеквизита.
4 Aldnepr
 
22.11.16
10:53
(1) Немного не поняли меня. Я пишу обработку и хочу записать в форму к обращаемому документу , т.е.
Документы.ЧекККМ.ЭлементыФормы -//нет возможности напрямую к ним обратиться
5 jurayed
 
22.11.16
10:57
(4) Подробнее и понятнее напиши вопрос...
6 Aldnepr
 
22.11.16
10:57
(3) Не понял как просто? К реквизиту документа, согласен, а к реквизиту формы ?
7 Nzn
 
22.11.16
10:58
Так форму сначала получить надо... а потом обращаться
8 Aldnepr
 
22.11.16
11:00
9 Aldnepr
 
22.11.16
11:07
(7) как получить форму подскажите? Когда задаю так:

Ч=Чек.СоздатьДокумент();
Ч.Метаданные().ОсновнаяФормаОбъекта.Форма. //- после этой точки не выпадает список для выбора, значит доступ к форме не получен я так понимаю?
10 Nzn
 
22.11.16
11:09
ВидОплаты это реквизит
ВидОплаты=Справочники.ВидыОплатЧекаККМ.НайтиПоРеквизиту("ТипОплаты",Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта);
ТвойЧек.ВидОплаты=ВидОплаты
11 catena
 
22.11.16
11:10
(9)>как получить форму подскажите?

ПолучитьФорму()
12 Nzn
 
22.11.16
11:11
(11)
ТвойЧек = Документы.ЧекККМ.СоздатьДокумент();
     ТвойЧек.ПолучитьФорму("ФормаДокумента")
13 catena
 
22.11.16
11:11
(12)Не мне, это к (9)
14 Defender aka LINN
 
22.11.16
11:12
(11) Удачи на сервере
15 catena
 
22.11.16
11:16
(14)Каков вопрос - таков ответ. Если автору понадобятся подробности, он же нам расскажет.
16 Nzn
 
22.11.16
11:21
(14) А сервер при чем... я думала человек на клиенте форму получает)
17 Aldnepr
 
22.11.16
11:22
(15) Толстый клиент , если об этом... вот что придумал, так нет?))

ВидОпл=Ч.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Найти(ВидОплаты);
        ВидОпл=Справочники.ВидыОплатЧекаККМ.НайтиПоРеквизиту("ТипОплаты",Перечисления.ТипыОплатЧекаККМ.Наличные);
18 catena
 
22.11.16
11:23
(17)Не взлетит
19 catena
 
22.11.16
11:24
ЭлементыФормы.Найти (Controls.Find)
ЭлементыФормы (Controls)
Найти (Find)
Синтаксис:

Найти(<Наименование>)
Параметры:

<Наименование> (обязательный)

Тип: Строка.
Наименование элемента формы.
20 Nzn
 
22.11.16
11:25
(17) Почему к форме то? Заполняй реквизит... потом если нужно получай форму да и открывай ее
21 Serg_1960
 
22.11.16
11:26
+(14) Подробность "управляемая форма" автором будет сообщена после сотого поста :)
22 Aldnepr
 
22.11.16
11:27
(21) извините,я ж танцевал как мог- написал РЕКВИЗИТЫ ФОРМЫ, а надо было "реквизиты управляемой формы" ?
23 Nzn
 
22.11.16
11:28
(22) судя по (8) форма обычная
24 Serg_1960
 
22.11.16
11:28
Автор, озвучь ясно и чётко :) У тебя обычные или управляемы формы?

Для платформы 8.3 и управляемых форм есть
http://its.1c.ru/db/pubdevguide83#content:1:hdoc
По теме:
http://its.1c.ru/db/pubdevguide83#content:549:hdoc
25 Aldnepr
 
22.11.16
11:31
(23) значит обычная) , для этого скрин и выложил.
(24) Доступа к итс нет
26 Aldnepr
 
22.11.16
11:32
(19) Тип "Строка"...

ВидОпл=Ч.ПолучитьФорму("ФормаДокумента").ЭлементыФормы.Найти("ВидОплаты");
        ВидОпл=Справочники.ВидыОплатЧекаККМ.НайтиПоРеквизиту("ТипОплаты",Перечисления.ТипыОплатЧекаККМ.Наличные);

так не летит тоже(
27 Nzn
 
22.11.16
11:33
(25) Почему форме, а не объекту реквизит устанавливаешь?
28 Nzn
 
22.11.16
11:35
(26) И желательно все же конфигурацию озвучить, если желаешь что бы помогли
29 Serg_1960
 
22.11.16
11:36
(офф)
(25) Для платформы 8.2 есть аналогичный учебник - "1С:Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы" (авторы Радченко Максим Григорьевич и Хрусталева Елена Юрьевна). Я не могу дать ссылку, но ты сам погугли. Там всё ясно и чётко расписано.
30 Aldnepr
 
22.11.16
11:38
(27) да путаю педали после 7,7. Вот пытаюсь разобраться в этих "реквизитах". Пока понял только, что Есть реквизиты Объекта (док, справочник) а есть Реквизиты формы (еще и управляемой формы теперь выяснилось). Конфигурация УТП для Украины 1,2 (8,3). тыкните меня в код пжлста- это лучший пример)
31 catena
 
22.11.16
11:41
(27)"В форме документа имеются реквизиты, которые не являются реквизитами документа. "

(30)Если все-таки реквизиты обычной формы, то там лишних букв не надо.

ДокОбъ = ДОкументы[ИмяДок].СоздатьДокумент();
фДокОбъ = ДокОбъ.ПолучитьФорму();
фДокОбъ[ИмяРекв] = "99999";
фДокОбъ.Открыть();
32 Nzn
 
22.11.16
11:46
(30)
ТвойЧек = Документы.ЧекККМ.СоздатьДокумент();
    ВидОплаты=Справочники.ВидыОплатЧекаККМ.НайтиПоРеквизиту("ТипОплаты",Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта);
    Оплата=ТвойЧек.Оплата.Добавить();
    Оплата.ВидОплаты=ВидОплаты;
    Оплата.Сумма=111111111;
    ТвойЧек.Организация="ляляля";
    ТвойЧек.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа;
    ТвойЧек.Склад="ляляля";
    ТвойЧек.ПолучитьФорму("ФормаДокумента").Открыть();
33 Aldnepr
 
22.11.16
12:04
(31) Ну вот! Как всё просто... никогда б не догадался,строил бы до сих пор 3-х этажный спагетти. Спасибо)

фДокОбъ = ДокОбъ.ПолучитьФорму();
фДокОбъ["ВидОплаты"] = "Наличные";
34 Aldnepr
 
22.11.16
14:29
(31) Поспешил радоваться- дело в том, что моя обработка создаёт ряд новых документов (прописан цикл) бывает что и 30 например, и каждый из них открывается, благодаря этой строке

фДокОбъ.Открыть();

А не открыв форму ничего не записывается. Как это обойти?
35 catena
 
22.11.16
14:30
(34)Реквизиты формы живут только пока жива форма. Вот такой вот косяк платформы...
36 Aldnepr
 
22.11.16
14:49
(35) т.е. никак не избежать открытия? А возможно сделать,так:

фДокОбъ.Открыть();
фДокОбъ.Закрыть();

и чтобы во время закрытия формы, когда выскакивает формочка-вопрос "сохранить изменения", чтобы программно "нажалась" кнопка "да" , т.е. "сохранить" и тогда форма закроется...
37 catena
 
22.11.16
14:51
(36)Смысл? Может от задачи плясать?
38 Fish
 
22.11.16
14:53
(36) Уже давно бы посмотрел, куда у тебя пишется этот реквизит формы. Форма тут не нужна. Совсем.
39 Nzn
 
22.11.16
15:26
(34) Если бы была озвучена задача, то ответы бы давали соответственно ей, а так гадание на кофейной гуще
40 Aldnepr
 
22.11.16
15:27
(38) пока не знаю где и посмотреть. Ни в ПриЗаписи() ни ПередЗаписью() этого реквизита нет
единственно что нашел вот:
// Процедура выполняет необходимые действия при изменении реквизита "ВидОплаты".
//
Процедура ПриИзмененииВидаОплаты()

    Если Оплата.Количество() = 0 Тогда
        СтрокаОплаты = Оплата.Добавить();
    Иначе
        СтрокаОплаты = Оплата[0];
    КонецЕсли;

    СтрокаОплаты.ВидОплаты = ВидОплаты;

    ПересчитатьАвтоматическиеСкидки();

КонецПроцедуры // ПриИзмененииВидаОплаты()
41 Aldnepr
 
22.11.16
15:28
(39) Задача вроде озвучена и проиллюстрирована (8). При програмном создании документа ЧекККМ необходимо записать "ВидОплаты= Наличные"
42 Nzn
 
22.11.16
15:39
Посмотри (32)
43 Nzn
 
22.11.16
15:40
измени ПлатежнаяКарта на наличные
44 Aldnepr
 
22.11.16
15:49
(42) Я понял, результат будет как и в (31) скорее всего, только длиннее, но опять же- открытая форма  30-и доков....

ТвойЧек.ПолучитьФорму("ФормаДокумента").Открыть();
45 Fish
 
22.11.16
15:51
(40) А оплата - это ТЧ? Тогда получается, что у тебя вид оплаты пишется в реквизит ТЧ. Вот сразу туда и пиши.
46 Fish
 
22.11.16
15:52
(44) Ну так не открывай форму, а просто записывай документ.
47 Nzn
 
22.11.16
15:56
(44) код это пример можно форму не открывать а просто записывать...
48 Aldnepr
 
22.11.16
15:57
(45) если ТЧ- табличная часть, то нет см. (8)
(46) если не открывать форму, то ничего не записывается, потому что видимо- (35)
49 Nzn
 
22.11.16
16:00
у тебя реквизит формы связан с реквизитом таб части. см (40)
50 Nzn
 
22.11.16
16:00
СтрокаОплаты = Оплата.Добавить();
51 Fish
 
22.11.16
16:00
(48) 1. На картинке в (8) ТЧ не видно.
А чтобы записалось, надо в коде (32) вместо последней строки написать:
ТвойЧек.Записать(), т.к. без команды записи ничего не запишешь. Неожиданно, не правда ли?
52 Nzn
 
22.11.16
16:02
у тебя на к.8 есть выбор списком выбери и будет тебе счастье
53 Nzn
 
22.11.16
16:03
если одна строка ТЧ то ТЧ не видно
54 Aldnepr
 
22.11.16
16:08
(51) Та ладно вам, не такой уже тупой. Конечно Записать() прописано дальше, но если не открыть перед этим форму, то ничего и не запишется
55 Fish
 
22.11.16
16:16
(54) Ну значит, не то заполняешь. Показывай свой код целиком (с учётом (32)).
56 Aldnepr
 
22.11.16
16:37
Ч=Чек.СоздатьДокумент();
        Ч.Дата=ТекущаяДата();
        Ч.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа;
        Ч.КассаККМ=Справочники.КассыККМ.НайтиПоКоду("23");
        Ч.Организация=Справочники.Организации.НайтиПоКоду("2");
        Ч.Склад=Справочники.Склады.НайтиПоКоду("000000001");
        Ч.Контрагент=Кинц;
        фДокОбъ = Ч.ПолучитьФорму();
        фДокОбъ["ВидОплаты"] = "Наличные";
        фДокОбъ.Открыть();
        
        Ч.Записать();
        Сообщить("Создан V8 "+Ч);
57 Fish
 
22.11.16
16:38
(56) Ещё раз смотрим (32).
58 Fish
 
22.11.16
16:39
(56) И почему ты в ВидОплаты пихаешь строку, если на картинке в (8) там совсем другой тип?
59 Nzn
 
22.11.16
16:41
ТвойЧек = Документы.ЧекККМ.СоздатьДокумент();
    ВидОплаты=Справочники.ВидыОплатЧекаККМ.НайтиПоРеквизиту("ТипОплаты",Перечисления.ТипыОплатЧекаККМ.Наличные);
    Оплата=ТвойЧек.Оплата.Добавить();
    Оплата.ВидОплаты=ВидОплаты;
    Оплата.Сумма=111111111;
    ТвойЧек.Организация=Справочники.Организации.НайтиПоКоду("2");
    ТвойЧек.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа;
    ТвойЧек.Склад=Справочники.Склады.НайтиПоКоду("000000001");
Попытка
ТвойЧек.Записать();
Исключение
    ТвойЧек.ПолучитьФорму("ФормаДокумента").Открыть();
КонецПопытки
60 Nzn
 
22.11.16
16:44
и проверяй что заполнилось, а что нет
61 Мимохожий Однако
 
22.11.16
16:46
(60) Он отладчиком пользоваться не умеет.
62 Aldnepr
 
22.11.16
16:51
(60) Да так и есть, взлетело)). Вот не послушал женщину, и получил всё наоборот!)
63 Aldnepr
 
22.11.16
16:59
(60) Спасибо забыл сказать.Не каждый тут готов столько возиться с такими вопросами. То к отладчику норовят послать. а то и вообще
64 Мимохожий Однако
 
22.11.16
17:10
(63) К отладчику послать, это лучше чем женщине.
65 Nzn
 
22.11.16
17:42
(62) я программист лет 15 и 10 из достаточно высокооплачиваемый)))
66 Nzn
 
22.11.16
17:43
(64) )))))
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший