![]() |
|
КА 8.2 (8.2.14.540) Управляемая форма: не обновляется ТЧ после заполнения | ☑ | ||
---|---|---|---|---|
0
Kleo
12.03.12
✎
11:55
|
Помогите, пожалуйста, разобраться с управляемой формой:
есть документ, в нем основная форма - управляемая и дополнительная форма (управляемая), которая открывается по команде, в ней вносятся два реквизита для формирования в дальнейшем запросов, в модуле формы этой доп. формы формируются данные для заполнения основной формы. все выполняется, но по результатам выполнения запроса табличная часть основной формы не обновляется. если после записи документа снова зайти в документ, то видно все изменения - табличная часть становится заполненной. почему они не отображаются сразу? а только после записи и закрытии документа. я уже пробовала вставлять: ОтобразитьИзменениеДанных(Объект.Материалы,ВидИзмененияДанных.Изменение); всеравно не помогает(( где и что нужно подправить? |
|||
61
Omskdizel
13.03.12
✎
12:37
|
(58) Команда в таком случае не делает ничего, кроме вызова допформы. ОбработкаВыбора() ловит событие, по структуре полученных данных понимаете, что это из допформы, берете эти данные и заполняете документ как вам надо.
|
|||
62
Kleo
13.03.12
✎
12:39
|
(52) я поняла, что не в доке дело, а вообще в методе реализации. т.к. в УТ 11 попробовала сделать та же песня. смысл в том, что сохранение не прописано нигде, оно требуется даже при заполнении в УТ
|
|||
63
vmv
13.03.12
✎
12:40
|
ГЛАВНОЕ - при заполнении табличных частей на УФ с использрованием вызова дополнительних формы, в качестве ВЛАДЕЛЬЦА ДопФормы нужно передавать форму открытого объекта, как я и делаю.
Тогда в ДопФорме у вас будет доступен контекст первой формы и вы просто заполняте табличные чати через элементы контеста формы-владельца и усе |
|||
64
Omskdizel
13.03.12
✎
12:40
|
+(61) Там даже не по структуре данных а по источнику, он вторым параметром в ОбработкаВыбора() передается.
(62) Блин... Сохранять НЕ надо. Просто заполняйте форму из ее же модуля, пользуйте допформу только для получения выбранных параметров. |
|||
65
Kleo
13.03.12
✎
12:40
|
(55) ошибка выдается конфигурации и при вызове контекстного меню нет такой процедуры Прочитать()
|
|||
66
Omskdizel
13.03.12
✎
12:42
|
(63) Не надо таким образом заполнять форму, потом запаришься искать, откуда что берется на форме. Буквально недавно на подобное нарвался, когда чужой код разгребал. Правда не на УФ.
|
|||
67
vmv
13.03.12
✎
12:42
|
(62) мой метод не требует даже сохранения дока, я его делаю только потому, что там строгий учет по моментам времени, а так контекст формы он и в африке контекст формы и вовсе не обязательно должен содержать данные сохраненного в базе объекта.
Эта все господа спецы, вводных данных я дал достаточно, но мы можете проджолжать пилить ногти пилочкой или что там у вас) |
|||
68
vmv
13.03.12
✎
12:43
|
(66) если ты посмотрить мой код 5 минут, то не увидишь там косяков, если кто-то пишет криво то это его проблемы не мои и отвергать элементарную логику глупо только потому, что в мире полно идиотов!
|
|||
69
Кокос
13.03.12
✎
12:43
|
(67) Аминь
|
|||
70
Kleo
13.03.12
✎
12:45
|
(53) так вы прикрутили к осн.форме. а откуда параметры взять для запроса, которые нужно выбратьв доп.форме? в осн. форме понятно, что будет все работать
|
|||
71
Кокос
13.03.12
✎
12:47
|
(70) также передать при вызове допформы. ничем практически от 8.1 не отличается
|
|||
72
Kleo
13.03.12
✎
12:47
|
(61) как это сделать? мало опыта, непоятно, куда и что?
|
|||
73
Kleo
13.03.12
✎
12:49
|
(71) делала, заполняет, но заполнение отражается только после того, как выйдешь из дока и снова зайти. все, как реализлвывала - написанов данной ветке. хочется именно корректировок в моем коде или объясните как передать параметры из доп.формы в осн.форму?
|
|||
74
Omskdizel
13.03.12
✎
12:49
|
(70) Так, еще раз и по пунктам.
1. Команда - вызывает форму. 2. Доп форма оповещает о выборе пользователем параметров для запроса. 3. ОбработкаВыбора() ловит эти параметры и вызывает например процедуру, аналогично ЗаполнитьНаСервере() в (53) Как вернуть из допформы параметры смотрите в (54) в частности метод ОповеститьОВыборе(Структура) |
|||
75
Кокос
13.03.12
✎
12:50
|
(73) смотри (54) Оповестить о выборе.
|
|||
76
vmv
13.03.12
✎
12:50
|
(72)
ВызываемаяФормаПараметры.Вставить("ЗначенияЗаполнения", Новый Структура("СуточныйРапорт, Параметр1, Параметр2", Объект.Ссылка, Параметр1, Параметр2)); ЗначенияЗаполнения - не обязаятельно реквизиты вызываемой формы - это могут быть любые данные допустымые при передаче управления как их прочесть указано в коде выше |
|||
77
Omskdizel
13.03.12
✎
12:51
|
+(74) Оповещается та форма, которая указана в параметре Владелец при вызове ОткрытьФормуМодально(), т.е. ОбработкаВыбора() сработает в форме Владельца
|
|||
78
Kleo
13.03.12
✎
12:53
|
(59) 2-блок: меня интересует откуда взялась переменная ВладелецФормы?
|
|||
79
vmv
13.03.12
✎
12:53
|
а это обратный возврат, зачем вообще передавать данные, только результат успех/не успех.
допформа как раз и должна брать на себя все функции заполнения, не гоняя массивы данных туда/сюда, иначе практичического смысла в нет просто нет |
|||
80
Kleo
13.03.12
✎
12:53
|
(77) попробую реализовать
|
|||
81
vmv
13.03.12
✎
12:54
|
(78)
Попытка ВызываемаяФорма = ПолучитьФорму(ВызываемаяФормаИмя, ВызываемаяФормаПараметры, ЭтаФорма, УникальныйИдентификатор); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ЭтаФорма |
|||
82
Omskdizel
13.03.12
✎
12:54
|
2Kleo: Если вы пытаетесь понять все, что написано, то смотрите по отдельности сообщение vmv, у него подход как вы планировали сделать. По мне так то, что описываю я и graviton в общем-то проще. Но тут на вкус и цвет как говорится.
|
|||
83
Kleo
13.03.12
✎
12:55
|
(78) вы куски выхватываете... а где это описывать? вообще запуталась
|
|||
84
Kleo
13.03.12
✎
12:56
|
(82) у него я вообще ничего не поняла. лучше вообще сделать как-то по-другому...
|
|||
85
Omskdizel
13.03.12
✎
12:56
|
(79) Массивы она не гоняет, а только параметры запроса.
(83) ОткрытьФормуМодально(<ИмяФормы>, <Параметры>, <Владелец>) Вот он Владелец формы. Туда передавайте ЭтаФорма. |
|||
86
Omskdizel
13.03.12
✎
12:58
|
2vmv: В вашей схеме я бы сделал через другую форму только в одном случае - если это заполнение находится в другой обработке и требуется ее использование не в одном документе.
|
|||
87
Kleo
13.03.12
✎
13:00
|
(74) хорошо. ваш план:
1. Команда - вызывает форму. 2. Доп форма оповещает о выборе пользователем параметров для запроса. 3. ОбработкаВыбора() ловит эти параметры и вызывает например процедуру, аналогично ЗаполнитьНаСервере() в (53): Вызвать доп форму при закрытии которой вызывать код чтото типа: Если ПеренестиВДокумент Тогда АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище); ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); КонецЕсли; а в обработке выбора поймать данные и обновить но у меня тогда куча вопросов по этому кусочку кода? что такое ПоместитьТоварыВХранилище()? |
|||
88
Omskdizel
13.03.12
✎
13:02
|
(87) В этом куске вам надо только ОповеститьОВыборе(Структура)
В Структура запихиваете все выбранные параметры для запроса с этой допформы. |
|||
89
Kleo
13.03.12
✎
13:06
|
можно, пожалуйста, по моему коду:
в модуле доп.формы у меня процедура и функция: &НаКлиенте Процедура ЗаполнитьПоОстаткам(Команда) // Вставить содержимое обработчика. Если Объект.Материалы.Количество() > 0 Тогда ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?"; Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, ); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; Объект.Материалы.Очистить(); КонецЕсли; Выборка = ЗаполнитьПоОстаткамНаСервере(); Для каждого ТекСтрока из Выборка Цикл СтрокаТабличнойЧасти = Объект.Материалы.Добавить(); СтрокаТабличнойЧасти.Номенклатура = ТекСтрока.Номенклатура; СтрокаТабличнойЧасти.Количество = ТекСтрока.Количество; СтрокаТабличнойЧасти.Склад = СкладОтбор; КонецЦикла; Записать(); Оповестить("ОстаткиЗаполнены"); Закрыть(Истина); КонецПроцедуры &НаСервере Функция ЗаполнитьПоОстаткамНаСервере() Документ = РеквизитФормыВЗначение("Объект"); ДатаОстатков = НачалоДня(Документ.Дата+1); Запрос = Новый Запрос; .... ЗначениеВРеквизитФормы(Документ, "Объект"); ТЗ = Запрос.Выполнить().Выгрузить(); Возврат ТЗ; КонецФункции есть в модуле осн.формы процедура: &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) КонецПроцедуры как мне связать выбранные в моей процедуре ЗаполнитьПоОстаткам(Команда) и ОбработкаВыбора() как передать в ВыбранноеЗначение мои поля Склад и Номенклатура на доп.форме в виде структуры в параметр ВыбранноеЗначение ? |
|||
90
Omskdizel
13.03.12
✎
13:06
|
Кстати, попробуйте сначала также как у меня в коде тупо заполнить табличную часть и посмотреть, заполнится она или нет. А то может эти события пока и городить не стоит :)
|
|||
91
Kleo
13.03.12
✎
13:07
|
(88) где мне этот ксок вставить?
Если ПеренестиВДокумент Тогда АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище); ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); КонецЕсли; откуда ПоместитьТоварыВХранилище() ? можно объяснить на моем примере? я просто элементарно не пойму, куда и что вставить? |
|||
92
Kleo
13.03.12
✎
13:07
|
(90) а какой смысл делать как у вас? если у меня точно также сделано? смысл?
|
|||
93
Kleo
13.03.12
✎
13:09
|
ничего не поняла, чем ваш код от моего-то отличается? вы мне скажите, по моему примеру, как мне перенести из доп. формы в осн. форму параметры?
|
|||
94
Кокос
13.03.12
✎
13:09
|
(91) при нажатии кнопки ОК(при закрытии доп формы)
|
|||
95
Omskdizel
13.03.12
✎
13:10
|
(93) Ваш код кардинально отличается тем, что вы заполняете табчасть из допформы, а я из основной формы
|
|||
96
Kleo
13.03.12
✎
13:10
|
вы в (53) сделали процедуру заполнения в осн.форме. это можно сделать, если будут параметры, а у меня их в основной форме нет.... я вообще запуталась
|
|||
97
Kleo
13.03.12
✎
13:12
|
(94) что значит "при нажатии кнопки ОК(при закрытии доп формы)"? вы сами прочитайте, что написали?
что за процедура ПоместитьТоварыВХранилище() ?? что в ней происходит. где пишется этот код? в доп. или осн.форме? |
|||
98
Omskdizel
13.03.12
✎
13:12
|
(96) Представьте, что это запрос и он выполняется с уже переданными параметрами. У вас две задачи к решению - заполнить форму и передать параметры. Решайте их по отдельности.
|
|||
99
Kleo
13.03.12
✎
13:12
|
ПеренестиВДокумент? что это за переменная?
|
|||
100
Кокос
13.03.12
✎
13:12
|
(96) в кнопке на основной форме открываете доп форму с параметрами
как у вмв только без остального мусора: // Инициализируем параметры вызываемой формы ВызываемаяФормаПараметры = Новый Структура; ВызываемаяФормаПараметры.Вставить("ЗначенияЗаполнения", Новый Структура("СуточныйРапорт", Объект.Ссылка)); // Попытка получения вызываемой формы с передачей в качестве владельца этой формы Попытка ВызываемаяФорма = ПолучитьФорму(ВызываемаяФормаИмя, ВызываемаяФормаПараметры, ЭтаФорма, УникальныйИдентификатор); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; // Попытка открытия вызываемой формы с выполнением в ней действий обусловленных ею Попытка ОбовленыДанные = ВызываемаяФорма.ОткрытьМодально(); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; |
|||
101
Кокос
13.03.12
✎
13:13
|
(99) Можете не писать ПеренестиВДокумент.
просто в ПриЗакартии() пишете АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище); ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); |
|||
102
Кокос
13.03.12
✎
13:14
|
ПриЗакрытии.
|
|||
103
Kleo
13.03.12
✎
13:14
|
(98) как заполнить в осн.форме я знаю, такое делала. а вот как передать, подскажите, пожалуйста, на моем примере на примере процедуры, вызываемой из доп.формы
&НаКлиенте Процедура ЗаполнитьПоОстаткам(Команда) // Вставить содержимое обработчика. // здесь что написать, чтобы передать параметры в осн.форму? Закрыть(Истина); КонецПроцедуры |
|||
104
Kleo
13.03.12
✎
13:15
|
(101) где это написать? в доп.форме?
|
|||
105
Kleo
13.03.12
✎
13:15
|
что такое ПоместитьТоварыВХранилище()?
|
|||
106
vmv
13.03.12
✎
13:15
|
(86) Табличная часть "Режим" только одна из несколькох ТЧ документа с которым(ми) работают несколько пользователей, если все загрузчики лепить в модуле формы документа, то он станет монстроидальным. Да и вообще у меня давно строгое правило - все загрузчики выносить на допформы, ибо документ должен давать стандартные средсва редактирования строк и т.д., а держать в его модуле алгоритмы загрузки - моветон. Если учесть, что источники могут быть какие угодно, то это глупо вдвойне.
что там в коде непонятного, упрощено до предела, поменять имена форм и объектов и все |
|||
107
Кокос
13.03.12
✎
13:16
|
пример функции
&НаСервере Функция ПоместитьТоварыВХранилище() Товары = ТаблицаТоваров.Выгрузить(ТаблицаТоваров.НайтиСтроки(Новый Структура("Выбран", Истина))); Серии = Новый ТаблицаЗначений; Серии.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); Серии.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры")); Серии.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры")); Серии.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3))); Если ПолучатьСерииНоменклатуры Тогда Запрос = Новый Запрос; СформироватьТекстЗапросаПоСериямДокументаПоступления(Запрос.Текст); Запрос.УстановитьПараметр("ТаблицаТовары", Товары); Запрос.УстановитьПараметр("Документ", ДокументПоступления); ВыборкаПоНоменклатуре = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоНоменклатуре.Следующий() Цикл ВыборкаПоХарактеристикам = ВыборкаПоНоменклатуре.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоХарактеристикам.Следующий() Цикл КоличествоКРаспределению = ВыборкаПоХарактеристикам.КоличествоВыбрано; Выборка = ВыборкаПоХарактеристикам.Выбрать(); Пока Выборка.Следующий() Цикл СтрокаСерии = Серии.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаСерии, Выборка); КоличествоКРаспределению = КоличествоКРаспределению - СтрокаСерии.Количество; Если КоличествоКРаспределению < 0 Тогда СтрокаСерии.Количество = СтрокаСерии.Количество + КоличествоКРаспределению; Прервать; КонецЕсли; КонецЦикла; Если КоличествоКРаспределению < 0 Тогда Продолжить; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; ВозвращаемаяСтруктура = Новый Структура("Товары, Серии", Товары, Серии); АдресТоваровВХранилище = ПоместитьВоВременноеХранилище(ВозвращаемаяСтруктура, УникальныйИдентификатор); Возврат АдресТоваровВХранилище; КонецФункции // ПоместитьТоварыВХранилище() |
|||
108
Kleo
13.03.12
✎
13:17
|
(107) вы можете ответиь на простой вопрос, где пиштся ваш код? и какое отношение он имеет к решению моей задачи?
|
|||
109
Кокос
13.03.12
✎
13:18
|
(103)
пишешь один в один АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище); ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); а серверную функцию ПоместитьТоварыВХранилище реализовываешь по своему. |
|||
110
Кокос
13.03.12
✎
13:18
|
ПоместитьВоВременноеХранилище это стандартная функция
|
|||
111
vmv
13.03.12
✎
13:19
|
(103)
// здесь что написать, чтобы передать параметры в осн.форму? что есть "параметры" в этой фразе - результат операции загрузки: обновлено/не обновленно - данные загрузки: структура полученных строк в любом случае передать что-либо из допформы в основную можно двумя способами 1. если в допформе есть контекст основной формы 2. через обработку оповещений + хранилище 3. эмуляции глобальных значений - не рассматриваем |
|||
112
vmv
13.03.12
✎
13:22
|
(110) я считаю, что использовать хранилище нужно только тогда, когда работа с данными через контексты формы невозможна.
Ведь операция помещения в хранилище и потом извлечение из него весьма прожорливы да и головомойка с назначением адресов, передачей управления и т.д. А если в ТЧ 50К строк и что помещать/извлекать в хранилище, а если это еще в цикле создания документов за период при загрузке из внешних - не дорогое удовольствие? |
|||
113
Kleo
13.03.12
✎
13:22
|
(110) вы читаете мои вопросы? я про ПоместитьВоВременноеХранилище вопрос не задавала...
(111) все тупо до безумия, а вы горы кода приводите, который мне не нужен. тупо есть доп формы. в ней есть два поля Склад и Номенклатура. нужно их передать в процедуру осн.формы ОбработкаВыбора в параметр ВыбранноеЗначение. вы мне про это скажите? зачем мне ваш код? |
|||
114
vmv
13.03.12
✎
13:25
|
(113) я бы сказал иначе, все просто до безумия, но вы путаетесь в базовых понятих, думаю даже литерал "контекст формы" вами не совсем осознан, пичаль
|
|||
115
Кокос
13.03.12
✎
13:26
|
(113) ну тут люди показывают как надо. А Вы хотите чтобы всё написали за Вас. Тогда просто выложите ТЗ и может кто нибудь напишет именно то что Вам нужно. Может как тут говорят и "взлетит с фоткой"
|
|||
116
Kleo
13.03.12
✎
13:29
|
(115) так вы привели куски кода и даже ответить по своему коду не можете, куда его вставить и где написать.
|
|||
117
Kleo
13.03.12
✎
13:33
|
(114) вообще-то это вы путаетесь в понятиях. эти все понятия мне знакомы. просто я у вас по вашему же коду спрашиваю, вы не отвечаете.
зачем мне ваш код, он даже близко мне не подходит? спасибо, что никто даже ответить не может на элементарный вопрос, как передать параметры в осн. форму и там заполнить? Omskdizel, спасибо за помощь, но вы опять же приводит пример противоположного кода, когда заполняете ТЧ из осн.формы. вы попробуйте мой кусок кода встаить и проверить. зачем проверять противоположное решение??? |
|||
118
vmv
13.03.12
✎
13:36
|
(113) это совсем просто, конкретный ответ на конктретный вопрос)
В модуле формы документа СтрутураВозврата = Допформа.ОткрытьМодально(); В модуле допформыформы &НаКлиенте Процедура КомандаСкладИНоменклатураПередать(Команда) СтруктураВозврата = Новый Структура("СкладВДопФорме, НоменклатураВДопФорме", Склад, Номенткратура); ОбовленыДанные = ОбновитьДанныеРапортаРежим(); Закрыть(СтруктураВозврата); КонецПроцедуры |
|||
119
vmv
13.03.12
✎
13:37
|
ОбовленыДанные = ОбновитьДанныеРапортаРежим();
это лишнее просто я показал, что ответ на этот вопрос уже был) |
|||
120
Kleo
13.03.12
✎
13:39
|
хорошо, а :
В модуле формы документа СтрутураВозврата = Допформа.ОткрытьМодально(); это где нужно прописать? в какой процедуре? |
|||
121
Kleo
13.03.12
✎
13:39
|
и зачем снова ее открывать?
|
|||
122
vmv
13.03.12
✎
13:40
|
может мне кто-нибудь поскажет как написать еще проще, ну не знаю мож язык поменять, итальянский будет понятен, а вдруг)
|
|||
123
Кокос
13.03.12
✎
13:42
|
(120) это нужно писать в команде вызываемой по кнопке
|
|||
124
Кокос
13.03.12
✎
13:43
|
(120)
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура("Ключ", ПараметрКоманды); ИмяФормы = "Документ." + ПараметрКоманды.Метаданные().Имя + ".Форма.ФормаЗаполнить"; ОткрытьФормуМодально(ИмяФормы, ПараметрыФормы, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры вот тут. в Параметры формы вставляете в структуру то что хотите передать в открываему форму. Структуру просто делаете более сложную и все. |
|||
125
vmv
13.03.12
✎
13:43
|
(120) ну вы же как-то где-то ее отккрываете, так?
так вот открыаать ее нужно модально, т.к. при закрытии молдальной, как указано в (118) мы можем передать на сторону вызовать, то ЧТО ХОТИМ. А вот где вы сохраните на стороне вызова результат отработки допформы - это исключительно дело вашего вкуса. предлагате помочь вам создать переменные клиента в модуле документа или ревизиты в форме документа? Ну давайте придумаем красивые названия, например РфСтруткрураИзДоПФормыСкладИНомеклатура - для реквизита формы или ПеремСтруткрураИзДоПФормыСкладИНомеклатура - для переменной клиента ) |
|||
126
Кокос
13.03.12
✎
13:47
|
на всякий случай:
ОбработкаВыбора стандартный эвент формы. если ее нет то надо ее создавать не ручками а лупой через список эвентов формы. |
|||
127
Kleo
13.03.12
✎
13:48
|
(123) в доп.форме?
|
|||
128
Кокос
13.03.12
✎
13:48
|
(127) нет. в основной. где Вы вызываете форму для подбора данных
|
|||
129
Kleo
13.03.12
✎
13:49
|
(126) я знаю, что это типовая процедура. она есть в документе и используется для другого заполнения, но там нет доп.формы, там открывается список документо и на его основании заполняется ТЧ дока. а у меня параметры берутся из доп.формы
|
|||
130
Kleo
13.03.12
✎
13:50
|
(128) в основной у меня есть команда, по которой открывается доп.форма, откуда мне нужно взять параметры. где я параметры свои возьму в осн. форме??
по-моему вы не поняли, что мне нужно сделать... жалко... столько времени здесь постратила... |
|||
131
Кокос
13.03.12
✎
13:51
|
(129) вобщем такая последовательность.
У вас есть кнопка которая вызывает команду с допформой. там открываете модально передав нужные параметры в структуре в допформе при открытии поднимаете параметры делаете то что нужно и при закрытии передаете эти данные как уже было показано в ОбработкаВыбора которая вызовется автоматически при закрытии допформы поднимаете хранилище распаковываете и заполняете нужные данные через серверную функцию |
|||
132
Кокос
13.03.12
✎
13:53
|
вот это код:
АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище); ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); ОповеститьОВыборе в ПриЗакрытии допформы инициирует эвент ОбработкаВыбора с Параметром = Параметру ОповеститьОВыборе в данном случае Структура |
|||
133
Kleo
13.03.12
✎
13:53
|
(125) стоп. вы можете понять, что я делаю.
есть осн.форма. в ней я вызываю команду. в модуле уоманды прописано: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура("Ключ", ПараметрКоманды); ИмяФормы = "Документ." + ПараметрКоманды.Метаданные().Имя + ".Форма.ФормаДокументаЗаполнитьПоОстаткам"; ОткрытьФормуМодально(ИмяФормы, ПараметрыФормы, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры я это уже давно писала в начале ветки. естественно, что я открываю доп.форму, чтобы внести туда в поля свои параметры Склад и Номенклатура |
|||
134
Кокос
13.03.12
✎
13:53
|
+ инициирует эвент ОбработкаВыбора в основной форме
|
|||
135
Kleo
13.03.12
✎
13:54
|
(132) зачем мне этот код? куда его вставить????? у меня уже терпения нет. вы читаете, что я вам пишу?
|
|||
136
Кокос
13.03.12
✎
13:55
|
Структура = Новый Структура("Склад,Номенклатура", Склад,Номенклатура);
ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); |
|||
137
vmv
13.03.12
✎
13:55
|
(131) резюмэ)
После выбора склада и номенклатуры в допформе по команде из основной - основная форма должна сохранить на клиенте в своих переменных или реквизите формы данные выбора. Это может быть переменная структура или две переменные. для реквизитов аналогично. Тогда можно использовать эти значения в методе опевещения, ибо метод команды вызова допформы и метод оповещения - это разные методы, но результаты работы допформы должны быть у них в одной области видимости значений) |
|||
138
Kleo
13.03.12
✎
13:55
|
вот этот код:
АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище); ПеренестиВДокумент = Истина; ОповеститьОВыборе(Структура); я вообще не поняла, куда его вставить и какое он к реализации моей задачи имеет? |
|||
139
vmv
13.03.12
✎
13:56
|
(136) это уже третий вариант, думаю наиболее приемлымый для автора, т.к. вообще ничего не надо делать, аналог "красной кнопки"
|
|||
140
vmv
13.03.12
✎
13:56
|
(138) лучше сказать себе, что такого варианта нет - это слишком сложно, без обид
|
|||
141
Kleo
13.03.12
✎
14:05
|
(136) вы можете ответить просто, где этот код нужно написать?
(139) если честно, то объяснять вы не умеете. и судя по всему сами путаетесь в понятиях. |
|||
142
Кокос
13.03.12
✎
14:13
|
(141) (136) нужно писать в ПриЗакрытии доп формы
|
|||
143
vmv
13.03.12
✎
14:16
|
(141) вам уже все расжевали с разных сторон, как можно что-то объяснить тому, кто не владеет базисным пониманием.)
ведь можно собраться и переосмыслить ключевые посылы тут, а не пытаться сразу получить готовый рецепт - мы ведь не борщ тут варим) |
|||
144
Kleo
13.03.12
✎
14:19
|
(124) мне нужно не в открываемую форму передавать параметры, а из открываемой в основную форму.
задача стоит так: 1. есть команда на осн.форме: Заполнить - Заполнить по остаткам. до мен уже была реализована группа команд "Заполнить", куда я вставила свою команду ("заполнитьПоОстаткам") в модуле команды написан код: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура("Ключ", ПараметрКоманды); ИмяФормы = "Документ." + ПараметрКоманды.Метаданные().Имя + ".Форма.ФормаДокументаЗаполнитьПоОстаткам"; ОткрытьФормуМодально(ИмяФормы, ПараметрыФормы, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры открывается доп.форма, в которой два поля Склад и Номенклатура. мне эти параметры нужно передатьв основную форму, которая открыта уже, т.к. осн.форма - это форма документа, где я вызвала команду для заполнения. ее открывать не нужно. 2. после передачи параметров в осн. форму реализовать заполнение в осн.форме, кот.легко сделать. вопрос лишь в том, как передать. в (107) для чего вы мне код привели? это у вас для обычного заполнения в форме документа. |
|||
145
Kleo
13.03.12
✎
14:20
|
(142) спасибо, попробую.
|
|||
146
Kleo
14.03.12
✎
06:06
|
Сделала вчера вечером. Пишу здесь больше для себя в качестве напоминалки, но вдруг кому-то пригодится.
1) Первая ошибка, по которой происходила блокировка документа, когда в доп.форме выбирался Склад. Не нужно было передавать ПараметрФорм при открытиии доп.формы модально. Итак, первый шаг, в документе создается команда, в модуле которой прописывается процедура: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФормуМодально("Документ.МойДок.Форма.ФормаДокументаЗаполнитьПоОстаткам", , ПараметрыВыполненияКоманды.Источник); // второй параметр пустой КонецПроцедуры 2) Далее создается доп.форма документа "ФормаДокументаЗаполнитьПоОстаткам" в модуле этой формы пишется код: &НаКлиенте Процедура ЗаполнитьПоОстаткам(Команда) // Вставить содержимое обработчика. Структура = Новый Структура("Склад,Номенклатура", СкладОтбор,НоменклатураОтбор); Оповестить("ПередатьПараметрыЗаполнитьПоОстаткам", Структура); ЭтаФорма.Модифицированность = Ложь; Закрыть(Истина); КонецПроцедуры 3) Далее в модуле осн.формы пишется код: ... &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) //Вставить содержимое обработчика Если ИмяСобытия="ПередатьПараметрыЗаполнитьПоОстаткам" Тогда Если Объект.Материалы.Количество() > 0 Тогда ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?"; Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, ); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; Объект.Материалы.Очистить(); КонецЕсли; ЗаполнитьПоОстаткамНаСервере(Параметр.Склад,Параметр.Номенклатура); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьПоОстаткамНаСервере(СкладОтбор,НоменклатураОтбор) Документ = РеквизитФормыВЗначение("Объект"); ДатаОстатков = НачалоДня(Документ.Дата+1); Запрос = Новый Запрос; ... ... Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Количество = 0 Тогда Продолжить; КонецЕсли; СтрокаТабличнойЧасти = Документ.Материалы.Добавить(); СтрокаТабличнойЧасти.Номенклатура = Выборка.Номенклатура; СтрокаТабличнойЧасти.Количество = Выборка.Количество; СтрокаТабличнойЧасти.Склад = СкладОтбор; КонецЦикла; ЗначениеВРеквизитФормы(Документ, "Объект"); КонецПроцедуры все.спасибо большое всем, кто помог и пытался помочь |
|||
147
Omskdizel
14.03.12
✎
06:19
|
Так и хочется сказать "Аминь!" :)
|
|||
148
Кокос
14.03.12
✎
10:44
|
Аминь :)
|
|||
149
эцп
14.03.12
✎
10:55
|
(7) (8) (146) А кто-то говорил еще, что я не прав! Табличная часть заполняется на сервере, а форма, работающая на клиенте, об этом не знает. Её нужно было оповестить об изменениях с помощью:
> ЗначениеВРеквизитФормы(Документ, "Объект"); |
|||
150
vmv
14.03.12
✎
10:55
|
ок, тока сервак можно было и терзать - все что нужно сделать мог делать и клиент.
да ладно, не будем вводить в искушение - это ж не расчет полета на Марс, а торговля вермутом, сайдет - зачтено |
|||
151
vmv
14.03.12
✎
10:56
|
(149) ты прав, но наивен, ибо неоправдано расточительно грузишь сервак черновой работенкай
|
|||
152
эцп
14.03.12
✎
10:57
|
(151) с этого места подробнее
|
|||
153
эцп
14.03.12
✎
10:58
|
(151) весь смысл тонкого клиента - перенести всю работу на сервер
|
|||
154
vmv
14.03.12
✎
11:02
|
Полследний штрих, я заметил, что новички в УФ маниакально не могут отказаться от стандартных привычных коллекций: "ДеревоЗначений", "ТаблицаЗначений", "ТабличнаяЧасть" и при необходимости заполнить ту же ТЧ с упрямоством и отвагой горных казлов, вроде туры из называют, скачут на скалистые откосы сервера, чтобы в звенящей мощи бездны осуществить свои приземленные делишки.
Неужели нельзя понять, что "ДанныеФормыКоллекция" это таже табличная часть и если вы заполнеете ее перебором из некой другой коллекции, например выборки результата запроса, то незачем пригать в бездну, гораздо логичнее покопаться в гумусе у подножья горы, т.е. на клиенте |
|||
155
vmv
14.03.12
✎
11:03
|
(153) это тебе кто тебе такую чущь сказал, назови имя!?)
|
|||
156
эцп
14.03.12
✎
11:11
|
(154) Здесь может вы и правы, но обрати внимание, что к остаткам на клиенте не обратиться, но раз уж произошло обращение к северу, то лучше прямо тут заполнить все нужные реквизиты (в том числе и ТЧ), а потом одним махом все изменения передать на сервер.
|
|||
157
эцп
14.03.12
✎
11:11
|
(155) Это выходит из самого понятия "Тонкий клиент". Сам посмотри на процедуры в (146): на сервере идет обращение к остаткам и заполнение ТЧ, а на клиенте диалог с пользователем.
|
|||
158
vmv
14.03.12
✎
11:30
|
(157) в случае если источник заполнения на основании запроса к БД, то да - без сервера никак.
но использовать Документ = РеквизитФормыВЗначение("Объект"); и ЗначениеВРеквизитФормы(Документ, "Объект"); не иммет смысла, если ТЧ заполняется перебором. Тем же перебором можно заполнить ТЧ и через коллекции данных формы, т.к. работа тут именно интерактивна, а первый вариант оправдан для "роботов" заполнения табличных частей |
|||
159
эцп
14.03.12
✎
11:48
|
(158) Хорошо. С примерами покажи, как ты предлагаешь заполнять ТЧ. Пока твои слова достаточно абстрактны
|
|||
160
эцп
14.03.12
✎
11:49
|
(158) (159) именно с обращением к остаткам
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |