|
Заполнение табличной части создаваемого документа через ЗначениеЗаполнения в ОткрытьФорму. | ☑ | ||
---|---|---|---|---|
0
Mikeware
09.11.20
✎
07:01
|
Подскажите, как (можно ли) такое реализовать?
шапка заполняется. добавить в параметры заполнения таблицу значений не могу - на клиенте ТаблицыЗначений не существует. Структура структур? в ИТС не нашел, в типовой КА тоже примера не нашел. |
|||
1
SleepyHead
гуру
09.11.20
✎
08:44
|
(0) Либо значения, доступные на клмиенте, либо где-то на сервере положить ТЗ во временное хранилище и запомнить его адрес. Передать при открытии формы.
|
|||
2
Mikeware
09.11.20
✎
08:50
|
(1) т.е. список в структуру и на сервер. на сервере структуру загнать в ТЗ. ТЗ - поместить в хранилище. адрес на клиента, на клиенте адрес в структуру? круто...
а если тз в реквизитах обработки сделать? |
|||
3
Дык ё
09.11.20
✎
08:54
|
(0) у тебя вызывается обработчик заполнения в модуле объекта с переданной структурой. передавай как хочешь, а в модуле объекта обрабатывай
|
|||
4
SleepyHead
гуру
09.11.20
✎
08:54
|
(2) Стой-стой, я не это говорил.
Если все передаешь через клиента, то вместо ТЗ передавай массив структур. Каждой строке ТЗ соответствует структура в массиве. Если же принципиально передавать именно ТЗ, то сделай серверную процедуру, которая поместит нужные данные в ТЗ, потом эту ТЗ во временное хранилище и вернет строку (адрес временного хранилища), эту строку уже передавай в форму при открытии. |
|||
5
SleepyHead
гуру
09.11.20
✎
08:55
|
(2) " если тз в реквизитах обработки сделать?"
Не понял, что это даст, ты же создаешь новый документ, и передаешь в него данные заполнения. |
|||
6
Mikeware
09.11.20
✎
09:09
|
(3) я не хочу модуль документа менять.
(4) массив структур - спасибо, не додумался. сейчас попробую Мне непринципиально передавать именно ТЗ - но я не понимал, что еще можно передать, ведь на структуру ТЧ хорошо ложится именно ТЗ. сейчас попробую с масссивом структур (5) заполню "ТЗ в реквизитах" на клиенте, на сервере уложу это в хоронилище, верну адрес и т.д.... |
|||
7
Дык ё
09.11.20
✎
09:13
|
(6) добавь подписку или расширение
|
|||
8
Mikeware
09.11.20
✎
09:21
|
(7) не уверен, что это постоянно надо будет. ну и хочется типовой механизЪм, ведь "в восьмерке все реализовано"®. а велосипеды лепить я умею, да - все как полагается, и колеса квадратные, и педали на руле...
|
|||
9
Mikeware
09.11.20
✎
10:56
|
массив структур не сработал. печаль.
Еще "типовые" решения есть, как считаете? |
|||
10
FIXXXL
09.11.20
✎
10:57
|
(9) "не сработал" - это как? его же на входе надо получить и кодом заполнить ТЧ
само оно не заполнится... |
|||
11
Mikeware
09.11.20
✎
10:59
|
(10) тююю. а шо, механизма типового заполнения - нету?
|
|||
12
Василий Алибабаевич
09.11.20
✎
11:02
|
(0) Непонятно. Обработка заполнения выполняется на сервере.
"добавить в параметры заполнения таблицу значений не могу" через патамучта на клиенте... Как так? Зачем на клиенте иметь ТЗ? Типовой сценарий с ТЗ: Заполнить ТЗ (на сервере). Поместить во временное хранилище (на сервере). Адрес вернуть клиенту. Адрес передать в ПараметрахЗаполнения. В открываемой форме (на сервере) в ОбработкаЗаполнения получить ТЗ из временного хранилища. Все. |
|||
13
Mikeware
09.11.20
✎
11:10
|
(12) у меня сценарий такой - дерево "с флажками" на клиенте. кнопка "сформировать документы" - на клиенте. открывается форма (формы, последовательно) документа юзверю - на клиенте.
все данные для заполнения документа у меня есть на клиенте. зачем мне таскать данные туда-сюда? шапка дока через передачу ЗначенияЗаполнения в параметры открываемой формы заполняется. вопрос: есть ли типовой, штатный механизм заполнения ТЧ? |
|||
14
Василий Алибабаевич
09.11.20
✎
11:17
|
(13)
1. "дерево "с флажками" на клиенте" - это скорее всего ТЗ на сервере. Или ДС с доп реквизитами. И то и то живет на сервере. Иначе я не могу понять что означает "дерево на клиенте". 2. ОбработкаЗаполнения при любом раскладе живет на сервере. Для "типового сценария" туда все равно ходить нужно. |
|||
15
Василий Алибабаевич
09.11.20
✎
11:18
|
+ (14) Возможно "дерево с флажками" это ДС + какой-то СписокЗначений для отмечания флажками? Тогда просто передай этот список.
|
|||
16
Василий Алибабаевич
09.11.20
✎
11:20
|
+ (15) Покажи "ПутьКДанным" из твоего дерева.
|
|||
17
Mikeware
09.11.20
✎
11:25
|
(14) дерево - это ДеревоЗначений на форме. в котором юзверь отмечает, что он выберет для "сделать щазз", а что пока отложит на потом.
да, сформированон на сервере, передано на клиента. обрабатывается юзверем уже на клиенте Обработка заполнения - ну мне пофиг, где она живет. я же ОткрытьФорму только на клиенте могу. ВОт я и хочу п осреговиковой методологии открыть форму нового документа и передать в параметре все данные для заполнения этого документа. все данные у меня есть на клиенте. я даже могу Форма=ПолучитьФорму("Документ.*.Форма.ФормаДокумента"); ДанныеФормы=Форма.Объект; ДанныеФормы=СоздатьНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы,Форма.Объект); Форма.Открыть(); |
|||
18
Mikeware
09.11.20
✎
11:28
|
||||
19
Василий Алибабаевич
09.11.20
✎
11:31
|
(17) Птля... Так у тебя ОФ? (Исходя из ПолучитьФорму(...)).
В таком варианте у тебя есть полный доступ к реквизитам через объект "Форма". Для ОФ это и есть практически "типовой вариант". |
|||
20
Mikeware
09.11.20
✎
11:32
|
(19) УФ
|
|||
21
Mikeware
09.11.20
✎
11:33
|
(19) прочитал, что так делать нехаляльно, халяльно - заполнять через структуру параметры, указывая в ней структуру ЗначенияЗаполнения. вот, пытаюсь сделать халяльно уже второй день
|
|||
22
Василий Алибабаевич
09.11.20
✎
11:34
|
(18) "ДеревоОстатков" и есть ТЗ. И живет она на сервере.
|
|||
23
Василий Алибабаевич
09.11.20
✎
11:36
|
(21) "пытаюсь сделать халяльно". Халяльно - это через ОткрытьФорму. Через ПолучитьФорму - "это залет, воин".
|
|||
24
Mikeware
09.11.20
✎
11:38
|
(22) но форму-то я открываю на клиенте... и жду ее закрытия оповещением тоже на клиенте.
зы. да, я тупой семерочник. ззы. мне надо тупое Для каждого стр из ТЗ ОткрытьФормуМодально("Документ.*", стр) |
|||
25
Mikeware
09.11.20
✎
11:39
|
(23) вотя я и пытаюсь
ПараметрыЗаполнения = Новый Структура("Организация", Организация); ПараметрыЗаполнения.Вставить("Дата",Период.ДатаОкончания); Парам=Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения); ОткрытьФорму("Документ.*.Форма.ФормаДокумента", Парам,,,,,Оповещение,); Шапку заполняет, ТЧ не могу |
|||
26
Василий Алибабаевич
09.11.20
✎
11:41
|
(25) Нужно смотреть ОбработкаЗаполнения в открываемом объекте.
|
|||
27
Mikeware
09.11.20
✎
11:44
|
(26) уййоооо. так вроде в общем модуле заполняться должно, в доке нет особой обработки. а трассировать я задолбался. нервов на эти УГФ не хватает.
|
|||
28
Mikeware
09.11.20
✎
11:48
|
я правильно понимаю, что "в восьмерке реализовано всё, кроме именно этого"?
зы. КА2.4. УФ |
|||
29
RomanYS
09.11.20
✎
11:49
|
(25) Если не заморачиваться с обработкой заполнения каждой формы, можно после открытия формы дозаполнить ТЧ. Правда нюансы могут вылезти, т.к. на момент открытия данных в ней не было всякие итоги могут не посчитаться.
Ф = ОткрытьФорму("Документ.*.Форма.ФормаДокумента",Парам,,,,,Оповещение,); Для каждого Стр Из ТЗ цикл СтрТЧ = Ф.Объект.ТЧ.Добавить(); ЗаполнитьЗначенияСвойств(СтрТЧ, Стр); КонецЦикла |
|||
30
Василий Алибабаевич
09.11.20
✎
11:49
|
(28) Не путай платформу и конкретную конфигурацию.
|
|||
31
Василий Алибабаевич
09.11.20
✎
11:51
|
(29) А если "заполнение" заключается не в тупом ЗаполнитьЗначенияСвойств, а по отметке в списке (как у ТС) взять например ссылку нужного объекта, да получить связанные реквизиты..?
|
|||
32
Mikeware
09.11.20
✎
11:54
|
(29) да знаю (прочитал на ИТС и инфостарте). собственно, из-за этого и решил не "заполнять вручную" и не "пересчитывать вручную", а по советам оттуда "воспользоваться типовым механизмом".
|
|||
33
RomanYS
09.11.20
✎
11:55
|
(31) ТС заявляет, что у него "всё есть" на клиенте. А открываемых форм много и корячить их не желательно
|
|||
34
Mikeware
09.11.20
✎
11:59
|
(33) т.е. "дозаполнять вручную"?
|
|||
35
RomanYS
09.11.20
✎
12:02
|
(34) Если у целевых форм/объектов нет нужных интерфейсов, то я бы сделал так.
Если всё-таки решишь разобраться с обработками заполнения, то учти, что передавать надо не ЗначенияЗаполнения, а Основание. |
|||
36
Mikeware
09.11.20
✎
12:04
|
(35) как в анекдоте: "- и вышел обратно на Дерибасовскую!"©
в общем, не читал бы ИТС и инфостарт - сделал бы давно. |
|||
37
Mikeware
09.11.20
✎
12:05
|
(35) спасибо.
зы. основания-то нет. я ж не на основании заполняю, и у данного дока основание не предусмотрено |
|||
38
RomanYS
09.11.20
✎
12:09
|
(37) Ты не правильно понимаешь. Можно передавать и структуру и она обработается в обработке заполнения.
|
|||
39
RomanYS
09.11.20
✎
12:11
|
+(38) Из ЗначенияЗаполнения данные просто копируются причем похоже аналогично ЗаполнитьЗначенияСвойств, поэтому ТЧ и игнорятся.
А Основание придёт параметром в обработку заполнения, и там обрабатывай как хочешь |
|||
40
Василий Алибабаевич
09.11.20
✎
12:29
|
(37) "Основание" и "ОбработкаЗаполнения" в снеговике связаны между собой очень мало.
ОбработкаЗаполнения будет вызвана для любого ЗначенияЗаполнения. Наличие основания - просто будет генерировать системный пункт меню "ввести на основании". При этом также будет вызвана "ОбработкаЗаполнения". Точно также как и для "ОткрытьФорму". И если в "ОткрытьФорму" определены "ЗначенияЗаполнения" то они точно также будут доступны в "ОбработкаЗаполнения" не зависимо от того указано "ЗначенияЗаполнения" в качестве "Основания" или нет. Коротко : события "ввод на основании" и "обработка заполнения" в снеговике разделены. |
|||
41
RomanYS
09.11.20
✎
12:32
|
(40) Что значит события разделены? У ВнО - есть отдельный обработчики?
ЗначенияЗаполнения не будет доступно в обработке заполнения объекта (не формы) |
|||
42
Василий Алибабаевич
09.11.20
✎
12:39
|
(41) Я же написал ввод на основании в снеговике больше интерфейсная штука. ОбработкаЗаполнения - бизнеслогика.
https://its.1c.ru/db/v8std/content/396/hdoc |
|||
43
Василий Алибабаевич
09.11.20
✎
12:43
|
+ (42) А вот место для ОбработкаЗаполнения :
https://its.1c.ru/db/metoddevu#content:8021375:hdoc:_top:обработказаполнения ЦЫ " Для самых простых случаев можно использовать свойство ЗначениеЗаполнения, которое есть у реквизитов объектов конфигурации (см. Как сделать, чтобы при создании новой накладной автоматически подставлялся главный склад?). В более сложных случаях можно использовать данные заполнения (см. Как сделать, чтобы при вводе новой накладной в нее сразу же подставлялись те значения склада и поставщика, по которым отобран список накладных?). Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта. Для этого предназначено событие объекта Обработка заполнения. Это событие можно обработать в модуле объекта в процедуре со стандартным именем ОбработкаЗаполнения. " О доступности в модуле объекта - отдельное упоминание. |
|||
44
RomanYS
09.11.20
✎
12:44
|
(42) Именно, что интерфейсная, это просто "кнопка". Вызывается событие ОбработкаЗаполнения и разницы нет откуда.
|
|||
45
Mikeware
09.11.20
✎
12:45
|
Попробовал с помещением в хранилище, и адресом - тоже не взлетает.
Странно - вроде типовая задача для заполнения... придется "ручками" |
|||
46
Василий Алибабаевич
09.11.20
✎
12:46
|
(44) 100 пудов. И ЗначенияЗаполнения передаются в ОбработкаЗаполнения независимо от того есть что-либо в списке "вводится на основании" или нет. Если они указаны в ОткрытьФорма.
|
|||
47
Василий Алибабаевич
09.11.20
✎
12:46
|
(45) Что не получилось? Покажи процедуру помещения во временное хранилище.
|
|||
48
RomanYS
09.11.20
✎
12:48
|
(46) В обработку заполнения передаётся <!>Основание</!> первым параметром. ЗначенияЗаполнения могут быть доступны через параметры формы и точно не доступны в модуле объекта.
|
|||
49
RomanYS
09.11.20
✎
12:49
|
(45) На уровне платформы нет заполнения ТЧ, или ты попадаешь в интерфейсы конфигурации/БСП или пилишь сам.
|
|||
50
Василий Алибабаевич
09.11.20
✎
12:51
|
(48) "и точно не доступны в модуле объекта." ГЫ. А у меня доступны. И в ИТС тоже. см (43)
|
|||
51
Mikeware
09.11.20
✎
12:53
|
(47)
.... ПараметрыЗаполнения.Вставить("КредиторскаяЗадолженность", УпаковатьМассивВТЗ(МассивКредиторов)); Парам=Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения); ОткрытьФорму("Документ.ВзаимозачетЗадолженности.Форма.ФормаДокумента", Парам,,,,,Оповещение,); КонецПроцедуры &НаСервере Функция упаковатьМассивВТЗ(МассивТЧ) ТЗ=Новый ТаблицаЗначений; Если МассивТЧ.Количество()=0 Тогда Возврат Неопределено; КонецЕсли; ЗаписьШаблон=МассивТЧ[0]; Для Каждого Элемент Из ЗаписьШаблон Цикл тз.Колонки.Добавить(Элемент.Ключ); КонецЦикла; Для Каждого эл Из МассивТЧ Цикл СтрТЗ=ТЗ.Добавить(); ЗаполнитьЗначенияСвойств(стрТЗ, эл); КонецЦикла; Адрес=ПоместитьВоВременноеХранилище(ТЗ,Новый УникальныйИдентификатор ); Возврат адрес; КонецФункции |
|||
52
RomanYS
09.11.20
✎
12:53
|
(50)
(43) "410 Страница не найдена" вход выполнен |
|||
53
Mikeware
09.11.20
✎
12:56
|
(49) нету, согласен. как нет заплнения и шапки тоже.
Шапка заполняется через ЗаполнитьЗначенияСвойств в модуле ОбщегоНазначенияУТ |
|||
54
Василий Алибабаевич
09.11.20
✎
12:59
|
(45) Примерно так :
//Получим ТЧ из удаленной системы &НаСервере Функция ЗагрузитьИсториюПродажНаСервере(ДатаНачала, ДатаОкончания) Перем ТекстОшибки; Прокси = ОбменМобильныеПереопределяемый.ПолучитьПрокси(ТекстОшибки); ... ТЧ = Прокси.ПолучитьИсториюПродаж(ДатаНачала, ДатаОкончания, Объект.Покупатель).Получить(); ... Возврат ПоместитьВоВременноеХранилище(ТЧ, ЭтаФорма.УникальныйИдентификатор); КонецФункции //Откроем форму подбора &НаКлиенте Процедура ВыборПериодаИстории(Результат, П) Экспорт ... АдресИстории = ЗагрузитьИсториюПродажНаСервере(Результат.ДатаНачала, Результат.ДатаОкончания); П = Новый Структура; П.Вставить("ЗакрыватьПриВыборе", Ложь); П.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); П.Вставить("АдресИстории", АдресИстории); ОткрытьФОрму("ОбщаяФорма.ПодборВыборТипа", П, ЭтаФорма); КонецПроцедуры ****************************** В общей форме &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АдресИстории") Тогда АдресИстории = Параметры.АдресИстории; ТЧ = ПолучитьИзВременногоХранилища(АдресИстории); КонецЕсли; КонецПроцедуры |
|||
55
Василий Алибабаевич
09.11.20
✎
13:01
|
(54) Я сам себя обхитывал вот здесь :
Возврат ПоместитьВоВременноеХранилище(ТЧ, ЭтаФорма.УникальныйИдентификатор); Возвращал не Адрес, а ЭтаФорма.УникальныйИдентификатор |
|||
56
RomanYS
09.11.20
✎
13:01
|
(50) Проверил, действительно передается. Если есть оба параметра- приходит Основание, иначе приходит один указанный.
|
|||
57
Mikeware
09.11.20
✎
13:02
|
(54) и тут опять попадаем на правку документа (у тебя - ОбщейФормы)?
|
|||
58
Василий Алибабаевич
09.11.20
✎
13:06
|
(57) 100 пудов. Оно же универсальное. И заранее не знает откуда брать и куда впихнуть невпихуемое. Если имена реквизитов совпадают просто скопирует из источника в приемник по примеру ЗаполнитьЗначенияСвойств и все. Более сложные случаи - сам. Руцями.
|
|||
59
Василий Алибабаевич
09.11.20
✎
13:08
|
(57) Слушай. А может тебе пойти другим путем? Накидать внешнюю "обработкуЗаполненияТабличныхЧастей"? Не знаю твоей задачи, но без вмешательства во внутрь стандартных объектов оно ИМХО самое то.
|
|||
60
RomanYS
09.11.20
✎
13:08
|
(57) открыл КА2 и документ реализации. Заполнение ТЧ Товары там предусмотрено:
Процедура ЗаполнитьДокументПоОтбору(Знач ДанныеЗаполнения) Если ДанныеЗаполнения.Свойство("РеквизитыШапки") Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения.РеквизитыШапки); КонецЕсли; Если ДанныеЗаполнения.Свойство("Партнер") Тогда Партнер = ДанныеЗаполнения.Партнер; Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда ЗаполнитьУсловияПродажПоУмолчанию(); КонецЕсли; КонецЕсли; Если ДанныеЗаполнения.Свойство("ВариантОформленияПродажи") Тогда ВариантОформленияПродажи = ДанныеЗаполнения.ВариантОформленияПродажи; КонецЕсли; Если ДанныеЗаполнения.Свойство("Товары") Тогда Для Каждого ТекСтрока Из ДанныеЗаполнения.Товары Цикл ЗаполнитьЗначенияСвойств(Товары.Добавить(), ТекСтрока); КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
61
Mikeware
09.11.20
✎
13:22
|
(58) Ну вот казалось бы, типовой же случай:
есть все данные для заполнения документа. заполнить, открыть форму незаписанного дока, и предложить юзверю решить - записать как есть, исправить или вообще отменить запись... типовее некуда... ан нет... и всего-то добавить что-то типа: Для каждого ТабЧасть ИЗ Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти Цикл Если ДанныеЗаполнения.Свойство(Табчасть.Имя, ДЗТабчасть) тогда Для Каждого ТекСтрока Из ДЗТабчасть Цикл ЗаполнитьЗначенияСвойств(Табчасть.Добавить(), ТекСтрока); |
|||
62
RomanYS
09.11.20
✎
13:30
|
(61) Сделай такую подписку для нужных объектов.
|
|||
63
Mikeware
09.11.20
✎
13:54
|
(62) в общем, как всегда... "...и патронов тоже нет!"©.
|
|||
64
Дык ё
09.11.20
✎
14:01
|
(63) не кипишуй :) восьмерка еще сырая. там нормально сделано только то, что красиво смотрится на слайдах презентаций
|
|||
65
Mikeware
09.11.20
✎
14:06
|
(64) "я знаю!"©анекдот про "формулу всего"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |