|   |   | 
| 
 | Интерактивное ХранилищеЗначения в УФ | ☑ | ||
|---|---|---|---|---|
| 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)Вопрос то какой?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |