Как обеспечить хранение хранилищ значений в строках табличной части в управляемой форме? #804310


#0 by TormozIT
Есть динамически создаваемый объектный реквизит управляемой формы (например СправочникОбъект.Номенклатура). У него есть табличные части с реквизитами типа ХранилищеЗначения. Нужно предоставить пользователю возможность просматривать представления и редактировать содержимое этих хранилищ значений. Как оптимальнее всего решать такую задачу? Пока я вижу только способ создания реквизита ТаблицаЗначений для каждой ТЧ с созданием дочерних реквизитов по колонкам ТЧ, но хранилища значений заменять на Строка. При чтении объекта помещать каждое хранилище значения во временное хранилище, а в реквизит таблицы помещать его адрес. Перед записью соответственно делать обратную процедуру. Но уж очень хлопотный способ.
#1 by TormozIT
Ап
#2 by Филиал-msk
Смириться или переделать архитектуру. Сколько копий уже ломали, что хранилище значений в ТЧ - это зло...
#3 by Lama12
А чем РС не устраивает?
#4 by TormozIT
Не понял.
#5 by jsmith82
А что находится в ХЗ?
#6 by jsmith82
Ты просто так излагаешь странно, будто в обычных формах ХЗ - это такой прям клиентский редактируемый тип данных.
#7 by Zhuravlik
"При чтении объекта помещать каждое хранилище значения во временное хранилище, а в реквизит таблицы помещать его адре" - мне кажется лишнее... Правится должна одна строка, а читаются все 20.. Сделать форму для редактирования, как возникла нужда править - открывать ее, блокируя владельца, и обновлять ХЗ соотв. Это также позволит разделить код по редактированию от кода по сохранению.
#8 by Lama12
Сделай регистр сведений. Храни в нем хранилища.
#9 by TormozIT
Форму то сделать проще простого. Как хранить хранилища значений для строк ТЧ (до записи объекта в базу)?
#10 by TormozIT
Посмотри мой "Редактор объекта БД" из подсистемы "Инструменты разработчика". Там полная поддержка хранилищ значений (в ТЧ, в движениях, в реквизитах объекта).
#11 by toypaul
не понимаю чем тут ТЗ поможет. как не крути ХЗ напрямую нельзя редактировать
#12 by FIXXXL
СправочникОбъект после редактирования ХЗ что мешает принудительно записать?
#13 by FIXXXL
хотя можно и не писать... только про модифицированность основной формы не забыть получаешь ХЗ из ОБЪЕКТА на сервере, передаешь в форму редактирования параметром, ХЗ МОЖНО ПЕРЕДАВАТЬ, ОНО СЕРИАЛИЗУЕТСЯ, ПриСозданииНаСервере формы редактирования читаешь из ХЗ и помещаешь в реквизит формы обратно передаешь так же: пакуешь реквизит в ХЗ и отдаешь как параметр оповещения в исходной форме ловишь оповещение, на сервере присваиваешь ОБЪЕКТУ через вот после этого надо по идее или взвести модифицированность основной формы или принудительно записать ОБЪЕКТ
#14 by TormozIT
Ты уже вроде прочитал и даже ответил. Там я писал что форму для редактирования хранилища значения сделать просто. Но возможно кому то будет полезно.
#15 by TormozIT
Давайте сосредоточимся на . Платформа для реквизитов объектов типа ХранилищеЗначения реализует в серверном контексте формы внутреннее хранилище, т.е. на самом деле хранлища значений лежат в строках ТЧ данных формы на сервере, но они не видны в объектной модели и получить их нельзя. Если удалить строку ТЧ, то удалится и ее хранилище значения из серверных данных формы. Если переместить строку ТЧ, то у нее сохранится хранилище значения. При записи объекта все эти хранилища значений в реквизитах строк ТЧ появляются, но до этого момента их нельзя увидеть. Поэтому я и написал в что очевидным способом является реализованная на прикладном уровне альтернатива механизму платформы, но с возможностью получать хранилище значения ячейки на клиент и там редактировать его.
#16 by D3O
ну а чем он хлопотный? прописать ПриЧетнииНаСервере, ПередЗаписьюНаСервере... но я бы в ТЗ-реквизитах формы добавил поле для хранения индекса соответствующей табличной части объекта и дополнительно обработку удаления/добавления строк ТЧ.
#17 by Остап Сулейманович
"хранлища значений лежат в строках ТЧ ". Вот вам, видимо, болт. В строках ТЧ лежат не собственно значения, а их адреса в специально предназначенном для этих целей хранилище в БД. Потому и работа с ними организована в стиле поместить и получить. Все остальное - на прикладном разработчике. Если допустим в хранилище лежит какой-нибудь специфичный файл. Например чертеж АвтоКада. Как вы предлагаете его редактировать в ячейке табличного поля?
#18 by TormozIT
Про редактирования хранилищ в форме смотри . Про хранение адресов вместо самих хранилищ - это понятно. Я написал так для  упрощения, чтобы понятнее передать смысл. Ведь в я по сути предложил тоже самое, только кодировать самому.
#19 by DmitrO
а зачем создавать таблицу значений для каждой ТЧ? Если можно просто добавить реквизит формы с адресом прямо в ТЧ (вроде, так все и делают)?
#20 by TormozIT
Да, действительно делают. Забыл об этой возможности. Спасибо. Это упрощает реализацию.
#21 by FIXXXL
а как редактировать ХЗ без доп.формы, файл или ТЗ или пять томов ВойнаИМир в ячейке? :)
#22 by TormozIT
Зачем редактировать без доп. формы?
#23 by sapphire
Использовать значения произвольного типа или двоичные данные
#24 by FIXXXL
тогда я не понял вопроса и трудностей передаешь ХЗ из строки Объекта в доп.форму как параметр, в доп.форме разворачиваешь его, через Оповестить отдаешь обратно и пишешь в основной форме в реквизит строки Объекта
#25 by TormozIT
Не прокатит. При первой же синхронизации данных формы между сервером и клиентом возникнет ошибка "Отсутствует отображение типа ХранилищеЗначения".
#26 by TormozIT
В 3-й раз: у меня нет проблемы редактировать одно хранилище значения на клиенте. Вопрос был: Как это сделать, когда у ТЧ есть реквизит типа ХранилищеЗначения?
#27 by sapphire
Прокатит. Если разбирать что именно там хранится. Внутри хранилища хранилища значений еще одно хранилище значения?
#28 by TormozIT
Проверил. Ты прав. Произвольный тип позволяет хранить хранилище значения в реквизите формы, причем независимо от его содержимого. Спасибо. Это мне сильно поможет. Итак текущий план действий такой. 1. В ТЧ добавить реквизиты с типом Произвольный для каждого реквизита типа ХранилищеЗначения 2. Загрузить туда данные при чтении на сервере. 3. На толстом клиенте их оттуда получить и показать в отдельной форме-редакторе. 4. Поместить отредактированное значение обратно в реквизит ТЧ приозвольного типа. 5. Перед записью на сервере поместить из добавленных реквизитов ТЧ данные в оригинальные реквизиты ТЧ.
#29 by FIXXXL
тоже не понял простой пример: тыркаешь два раза в строку, срабатывает процедура Выбор, в ней определяешь текущую строку, читаешь ХЗ этой строки, отдаешь как параметр формы в форму редактирования ХЗ и т.д.
#30 by Адинэснег
нетленка для типовых "без изменения конфигураций", угадал?)
#31 by Адинэснег
аа, это же ТС
#32 by TormozIT
Как читать хранилище значения соответствующее строке из данных формы?
#33 by TormozIT
это я обращался к
#34 by FIXXXL
через идстроки на сервере
#35 by TormozIT
Покажи код, который позволит прочитать хранилище значения из строки через ИД на сервере.
#36 by FIXXXL
немножко соврамши про ИД, давно писал весь фокус - найти нужную строку в ТЧ &НаСервере
#37 by TormozIT
Если это работает, то это будет лучшим ответом на мой вопрос и очень странно что никто другой так долго на рассказал об этом способе. Спасибо.
#38 by TormozIT
А способ то хотя видимо рабочий, но не универсальный. Не во всех ТЧ есть реквизит "ИмяОбъектаОбмена".
#39 by TormozIT
Универсальный способ должен опираться на номер строки ТЧ, т.е. вместо поиска по значению реквизита надо брать строку ТЧ по индексу из данных формы.
#40 by TormozIT
Универсальный видимо будет типа такого &НаСервере
#41 by FIXXXL
индексы ДанныеФормыЭлементКоллекции и ОБ.ТЧ боюсь не совпадут :(
#42 by TormozIT
Совпадут. Иначе как номера строк устанавливаются при сохранении?
#43 by TormozIT
Вот только обратное действие, т.е. сохранение отредактированного значения в строке ТЧ на сервере будет приводить каждый раз к куче сбросов текущих строк и подобного.
#44 by FIXXXL
к сожалению не гарантируется, судя по ДанныеФормыКоллекция (FormDataCollection) Индекс (IndexOf) Синтаксис: Индекс(<Элемент>) Описание: Получает индекс элемента коллекции. именно Элемента из ДанныеФормыКоллекция про совпадение результата с методом Табличная часть (Tabular section) Индекс (IndexOf) Синтаксис: Индекс(<Строка>) Параметры: <Строка> (обязательный Описание: Получает индекс строки в табличной части. ни слова :(
#45 by TormozIT
Не согласен с твоим обоснованием твоего предположения. Если оно верно, то дай хотя бы одно предположение, в каком порядке расставляются строки ТЧ при преобразовании из данных формы.
#46 by FIXXXL
лучше вот чего ДанныеФормыЭлементКоллекции (FormDataCollectionItem) ИсходныйНомерСтроки (SourceLineNumber) Использование: Только чтение. Описание: Тип: Число. Если объект ДанныеФормыКоллекция был получен из табличной части, то свойство содержит номер данной строки в оригинальной табличной части. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
#47 by TormozIT
Номер строки в ОРИГИНАЛЬНОЙ табличной части никак не поможет передать порядок строки из ДанныеФормыКоллекция в ТЧ.
#48 by FIXXXL
я предложил ИсходныйНомерСтроки  только как ИД строки использовать потому как индексы не сойдутся :)
#49 by TormozIT
Еще раз почему индексы не сойдутся? Слишком слабый (очень косвенный) аргумент.
#50 by FIXXXL
потому как это разные по сути коллекции если строку на форме подвигать вверх-вниз, индекс элемента в ДанныеФормыКоллекции изменится? а в коллекции РеквизитФормыВЗначение.ТЧ?
#51 by TormozIT
Сдвиг строки в таблице формы приведет к изменению индекса  ДанныеФормыЭлементКоллекции и соответсвенно получаемой из нее через РеквизитФормыВЗначение строки ТЧ
#52 by FIXXXL
проверял? :)
#53 by FIXXXL
+а если строка новая и подвинута промеж "старых"?
#54 by TormozIT
Не проверял. А ты проверял? Где тогда порядок строк в ДанныеФормыКоллекция хранится?
#55 by TormozIT
Причем здесь старые строки?
#56 by FIXXXL
короч, отпишись как реализуешь, интересно :)
#57 by TormozIT
Да, напишу о результатах. Спасибо еще раз за наиболее ценную информацию по теме.
#58 by TormozIT
В итоге получилось этим способом. Способ с обращением к серверу для получения/установки хранилища значения через РеквизитФормыВЗначение не заработал. Мои представления о том, как хранятся хранилища значений в коллекциях данных формы оказались не верными. Если преобразовать объект с хранилищем значения в ТЧ в данные формы и обратно, то хранилище значения очищается. Таким образом получается, что платформа вообще не хранит хранилища значений для коллекций формы. Получается, что они будут всегда очищаться при записи, если явно не позаботиться об их сохранении?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С