Имя: Пароль:
1C
 
Интерактивное ХранилищеЗначения в УФ
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)Вопрос то какой?