|
Интерактивное ХранилищеЗначения в УФ | ☑ | ||
---|---|---|---|---|
0
lEvGl
гуру
06.04.24
✎
08:43
|
Доброго всем
Дошло наконец дело до УФ, не пинайте На форме Таблица к ТЧ, в ТЧ реквизит с Хранилищем + ПолеТабличногоДокумента нв форме, логика работы: при активизации строки получить из хранилища ТабДок и показать его в ПолеТабДока, изменить в нем текст и записать обратно, чтобы потом при активизации показать уже измененный ТабДок. Сначала запись табдока в реквизит: &НаКлиенте Процедура СохранитьТабличныйДокумент(Команда) ТекущиеДанные = Элементы.Таблица.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда СохранитьТабличныйДокументСервер(); КонецЕсли; КонецПроцедуры &НаСервере Процедура СохранитьТабличныйДокументСервер() Хранилище = Новый ХранилищеЗначения(ТабличныйДокумент); Документ = РеквизитФормыВЗначение("Объект"); Документ.ТЧ[Элементы.Таблица.ТекущаяСтрока].Требования = Хранилище; Документ.Записать(); КонецПроцедуры потом соответственно получение: &НаКлиенте Процедура ПриАктивизацииСтроки(Элемент) ТекущиеДанные = Элемент.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда ПолучитьТабличныйДокумент(Элементы.Таблица.ТекущаяСтрока); КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьТабличныйДокумент(ТекущаяСтрока) Документ = РеквизитФормыВЗначение("Объект"); ТабличныйДокумент = Документ.ТЧ[ТекущаяСтрока].Требования.Получить(); КонецФункции данные объекта записываются, но это что, обязательно? каждый раз записывать объект, чтобы потом прочитать и показать табдок, как то это нагруженно получается нельзя изменить реквизит (хранилище только на сервере есть) и без записи объекта, не закрывая форму, потом его получить измененный и показать в ПолеТабДока? |
|||
1
Смотрящий
06.04.24
✎
08:10
|
Хвастаешься ?
|
|||
2
lEvGl
гуру
06.04.24
✎
08:13
|
(1) жалуюсь
|
|||
3
lEvGl
гуру
06.04.24
✎
08:21
|
почему так измененные данные не летают между объектом и формой?
Документ = РеквизитФормыВЗначение("Объект"); Документ.ТЧ[Элементы.Таблица.ТекущаяСтрока].Требования = Хранилище; ЗначениеВРЕквизитФормы(Документ, "Объект"); |
|||
4
Смотрящий
06.04.24
✎
09:08
|
Все покрадено до нас ...
&НаКлиенте Процедура СохранитьТабличныйДокумент(Команда) ТекущиеДанные = Элементы.Таблица.ТекущиеДанные; Если НЕ ТекущиеДанные = Неопределено Тогда СохранитьТабличныйДокументСервер(ТекущиеДанные.ПолучитьИдентификатор()); КонецЕсли; КонецПроцедуры &НаСервере Процедура СохранитьТабличныйДокументСервер(СтрокаИдентификатор) ТекущиеДанные = Объект.Таблица.НайтиПоИдентификатору(СтрокаИдентификатор); ТекущиеДанные.Требования = Хранилище; КонецПроцедуры |
|||
5
lEvGl
гуру
06.04.24
✎
09:17
|
(4) не, в ДанныеФормыКоллекция из Объекта нет реквизита с типом Хранилище
его нет на клиенте, соответственно в данных формы тоже |
|||
6
lEvGl
гуру
06.04.24
✎
10:35
|
лажа долбанная
места, куда положить объект, чтобы его продолжать редактировать, а не начинать заново, нету. в бд только. хрена уже, можно было и в файл сделать что бы сохранять, че уж там. хранилища на клиенте нет, потому в форме до него не добраться, она не знает о его существовании, зато когда в объекте поменял значение этого хранилища, она, унылая, это видит и соответствующую звездочку вверху дока как всегда рисует в общем редактировать недоступные на клиенте типы можно только через субд, с сохранением, потом чтением, и это без закрытия/открытия формы, очень оптимально |
|||
7
Смотрящий
06.04.24
✎
11:36
|
Ты что то не так делаешь.
"редактировать недоступные на клиенте типы можно только через субд" - покайся. |
|||
8
yopQua
06.04.24
✎
12:13
|
1с такая 1с
|
|||
9
lEvGl
гуру
06.04.24
✎
12:17
|
(7) что например
(8) угу откуда здесь ТекущиеДанные = Объект.Таблица.НайтиПоИдентификатору(СтрокаИдентификатор); ТекущиеДанные.Требования = Хранилище; требования = хранилище? там нет такого поля, откуда ему взяться в данных формы, если ХранилищеЗначения (ValueStorage) Методы: Получить (Get) Конструкторы: На основании значения Доступность: Сервер, толстый клиент, внешнее соединение. Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве име |
|||
10
lEvGl
гуру
06.04.24
✎
12:37
|
"редактировать недоступные на клиенте типы можно только через субд" - покайся. ну то есть получил из бд, отредактировал, положил на место. потом опять взял из нее же. и все это в рамках одной открытой формы. потому что только сервер может с такими типами работать, а переменные у него существуют, пока процедура выполняется. это как бы нормально, все это происходит при каждом открытии документа/справочника/и т д, но конкретно в моем сейчас случае нужно это делать при переходе с одной строки таблицы на форме к другой, приактивизации. Активизировали строку - сервером получили из бд объект - достали из него хранилище - вывели на форму, отредактировали клиентом этот табдок, потом сервером при сходе со строки опять его пишем в бд через субд соответственно. А иначе я его потом в измененном виде никак не получу, все изменения улетают, что логично, т к переменная в серверном контексте после выхода из процедуры больше не переменная. В ОФ объект доступен на клиенте всегда, его не надо таскать туда сюда, записывать в бд и снова считывать, когда он потребуется, один раз при открытии получили объект и шпиливилим его как и сколько хотим) количество обращений к бд с одного (в ОФ, приОткрытии) увеличивается во столько раз, сколько пользователь по строчка таблицы щелкать будет, хз как так то хранилища на клиенте нет... скучно не будет в общем |
|||
11
Смотрящий
06.04.24
✎
13:09
|
(9) Оттуда - у тебя так в (0) написано
|
|||
12
Web00001
06.04.24
✎
14:08
|
Нужно понять, что хранилище значений на клиенте недоступно. Это то из чего следует исходить. Понять и смириться. предлагаю вытащить значения табдоков на клиент. А не таскать туда сюда форму со всеми реквизитами из-за одного табдока. Если документ будет иметь несколько тысяч строк, будет очень неприятно. Да и в целом на каждый чих гонять на сервер вместо со всей формой - такое себе.
Нужно при активизации строки подключить обработчик. В активизации строки не имеет морального права находиться ничего кроме него. Или каких то других легких действий выполняемых на клиенте. Этот обработчик тащит из БД(не из объекта, вызов безконтекста) и сохраняет в локальной переменной с типом "Соответствие" твой таб док. В качестве ключа текущая строка, в качестве значения ТабДок. Перед записью в соответствующем сервермном контекстном вызове сохраняешь значения из своей переменоой, в объекте. Все или только те которые изменились. Бонусом получаешь кеширование обращений к серверу. При работе с очень большим документом, есть риск получить кеш мегалбайт на 200. С этим тоже можно будет бороться если это станет проблемой. И да, текущая строка и номер строки это не одно и тоже. Текущая строка это идентификатор строки. Он может совпадать с номером строки а может и не совпадать. |
|||
13
lEvGl
гуру
06.04.24
✎
18:25
|
(11) у меня реквизитформывзначение, это докОбъект, потом в нем уже меняем. а у тебя данныеформыструктура, там нет хз
(12) да, спасибо, как вариант, табличку и в ней рулить.. но у меня уже есть табличка! ТЧ называется, очень хотелось бы не иметь доп проблем с доп табличками) |
|||
14
Web00001
06.04.24
✎
19:53
|
(12)Не надо никаких таблиц. Тебе нужны табдоки на клиенте. Так и держи их на клиенте. Я предлагаю добавить только кеширование, чтобы избежать лишних запросов к серверу в момент, Когда пользователь перебирает строки на форме. В каком виде у тебя будет кеш и будет ли вообще, вопрос 10й.
|
|||
15
Смотрящий
06.04.24
✎
21:14
|
(14) Он не волокёт. А выяснять где он буксует - лень
|
|||
16
lEvGl
гуру
06.04.24
✎
21:18
|
(14) не надо? а это что
сохраняет в локальной переменной с типом "Соответствие" твой таб док. В качестве ключа текущая строка, в качестве значения ТабДок. Перед записью в соответствующем сервермном контекстном вызове (15) шта? запусти свой код, получи ошибку контекста и успокойся |
|||
17
Смотрящий
06.04.24
✎
21:33
|
(16) У меня все хорошо - все работает. У тебя не очень
|
|||
18
lEvGl
гуру
06.04.24
✎
21:51
|
(17) ну давай, проверяю
|
|||
19
lEvGl
гуру
06.04.24
✎
22:01
|
Поле объекта не обнаружено (Требования)
{Документ.Документ.Форма.ФормаДокумента.Форма(189)}:ТекущиеДанные.Требования = Хранилище; {Документ.Документ.Форма.ФормаДокумента.Форма(178)}:СохранитьТабличныйДокументСервер(ТекущиеДанные.ПолучитьИдентификатор()); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка] картинки вешать не буду, поверь так, и давай выходи из этого состояния, тупанул - бывает, не надо доказывать, что слон это морж, просто я на него неправильно смотрю |
|||
20
Смотрящий
06.04.24
✎
22:30
|
Прям как билингкэты - у нас есть доказательства; но мы их вам не покажем.
|
|||
21
lEvGl
гуру
06.04.24
✎
22:56
|
та.. детский сад
|
|||
22
FIXXXL
07.04.24
✎
00:01
|
нет ТЗ на клиенте, смирись
массив структур в помощь |
|||
23
Web00001
07.04.24
✎
07:05
|
>не надо? а это что
Не хочешь кешировать не используй. Используй, что-то другое. Соответствие влетает просто идеально. Не понимаю почему оно тебе не нравится. Мысль не в этом. Ты сейчас на каждое движение вынужден тащить ВЕСЬ объект на сервер, чтобы получить ОДИН табдок. А все почему? Потому, что "ну у меня же есть табличка, а если их будет две я запутаюсь", ну или как-то так я тебя понял. В (12) я переживал, что слишком много табдоков скопиться можно в кеше, так ты их все каждый раз собираешься таскать с клиента на сервер при каждом движении клиента. https://memepedia.ru/wp-content/uploads/2019/02/potryasayuschiy-hod-1.jpg |
|||
24
Web00001
07.04.24
✎
07:44
|
(17)Ты очень убедителен. Я прям полез проверять. Не работает.
(20) Ну допустим вот https://imgur.com/a/RfU1AAs реквизит2 с типом Хранилище. Не доступен, если ты берешь его из данных формы как у тебя написано в (4). Или у меня просто лыжи не едут? |
|||
25
lEvGl
гуру
07.04.24
✎
09:03
|
(23) без вопросов, структура, соответствие, или как (22) массив структур, или структура структур, без разницы, таблички. я всегда смотрю из целей экономии - у меня уже есть табличка, ТЧ, всегда ее юзал для таких целей.
Дело не в запутывании, проблема в том что нельзя использовать ту табличку, которая уже есть, надо лепить еще, вот что косяк (24) Ему нужно ник поменять на "Асфальт", с лыжами все нормально |
|||
26
lEvGl
гуру
07.04.24
✎
09:08
|
(22) да пох что, сам принцип унылый
вы слишком технически смотрите, тз - мз, я про архитектуру, а описание объектов с доступностью, свойствами и методами можно и в сп посмотреть |
|||
27
lEvGl
гуру
07.04.24
✎
09:12
|
ладно, пойду табдоки рисовать, спасибо откликнувшимся
|
|||
28
FIXXXL
07.04.24
✎
14:49
|
(26) я бы написал оперу нытья
но живем как есть разложи свою таблицу в массив, и обратно сложи если получится :) |
|||
29
lEvGl
гуру
08.04.24
✎
00:06
|
(28) ага, ныть не мешки ворочать, ну я так спросил, чтобы уж точно можно было начинать ныть, а то может я чего не понимаю с этими вашими 1Сами
ну и массив - не таблица что ли о_о? в двумерный уж точно любая тз уложится, ну только если это не "двумерная" тз будет) хотя.. если допускатеся не разбирать вплоть до примитивных данных, а хранить в элементе массива тз, то двумерного массива хватит как по мне, все оно одно, таблички и таблички, только один объект дает одни возможности, другой другие, что периодически значительно облегчает жизнь, это их различает, да (а, ну теперь еще доступностью в контексте отличаются). Кстати процентов на 50 методы/свойства у всех подобных типов одинаковые, тоже не спроста. Коллекция жы |
|||
30
Web00001
08.04.24
✎
05:09
|
Плюс еще одна фобия программистов в копилку - боязнь лишних табличек. Чрезмерный оптимизатор. Только не открывайте ЗУП, есть шанс словить пердечный сриступ. Там почти у каждого регистра сведений есть один или два вспомогательных. Такой оптмиизаторский дух так сказать, с одной стороны лишнюю таблицу завести боится, с другой делает контекстные вызовы при активизации строки(руки поотрубал бы если бы у своих увидел такой код как в (0)). Парадокс какой-то.
|
|||
31
lEvGl
гуру
08.04.24
✎
08:51
|
(30) ок, научите. надо в одной форме к списку номенклатуры(может добавляться руками тут же), например, показывать все ее серии (могут добавляться руками тут же), к каждой серии цены закупок (могут добавляться руками тут же), и каждой цене надо прилепить таб док, с накладной, ну например, или с техническим описанием, спецификацией, сертификатом или чем то еще с картинками, текстом, данными из экселя (вводить вручную или копировать без форматирования трудоемко, не вариант). И к каждой серии тоже самое. Пример к реальности отношения не имеет, смысл только. Ну чтобы это было эргономично там, без лишних движений мышой и тд
|
|||
32
Web00001
11.04.24
✎
07:03
|
(31)Вопрос то какой?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |