Подчинённая табличная часть в Управляемом приложении #643221


#0 by Aston86
Привет всем. Я когда то маялся с этим вопросом, но опять вернулся к нему. Как советовали многие сделать две табличные части, в обоих сделать реквизит УникальныйИдентификаторСтроки. При каждом добавлении строк в родительской таблице заполнять этот реквизит, а при добавлении в дочернюю таблицу заполнять этот реквизит из родительской (по текущей строке) и постоянно делать отбор строк по текущей Родительское строке (если она есть). В дочерней таблице убрал колонку номера строк - так как они беспорядочны. Командные панели оставил по умолчанию. Первая проблема с которой я столкнулся - это Переместить текущий элемент вверх или вниз. Покажу на примере: в дочерних указываю номер строки Родитель1 Дочерний 3 Такая ситуация возникнет если в родитель два добавили сначало 2 строки, потом в родитель 1 3 строки и одну в родитель два. Пользователь находясь на родителе два в дочерней таблице пытается переместить 3 строку на вторую и нажимает (Переместить текущий элемент вверх) - ничего не произошло, так как шестая строка поменялась с пятой, для того чтобы переместить на 2 строку надо нажать четыре раза на переместить вверх. Что неправильно как минимум а вдруг будет 20 строк в каждом элементе и тогда нервы пользователя просто не выдержат. Этот подход мне уже кажется неправильным, подскажите плиз как правильно делать подчинённые табличные части и чтоб номер строки в дочерней табличной части тоже отображался и работал нормально. Или как бы сделал и вы. Есть документ такой называется Экспликация к плану строения. В нём описываются этажи, у каждого этажа есть комнаты (сколько их неизвестно), у каждой комнаты есть различные виды площадей. И хотелось бы это всё видеть в одном документе. (На бумаге тоже один документ) С площадями я разобрался а по поводу этажей и комнат сделал подчинённую таблицу и решил как описал выше. Заранее спасибо.
#1 by Надсмотрщик
Виртуальную таблицу не предлагать?
#2 by Aston86
А поподробнее?
#3 by Кокос
делал в УТ11. Только кода под рукой нет.
#4 by Кокос
короче там делаешь не по номеру строки. В основной табличной части делаешь поле КлючСтроки. Ну и в подчиненное его тоже. При добавлении строки в основную таблицу обработке изменения строки в серверной функции приизмененииноменклатуры или еще какого поля какомто там общем модуле этот ключ тупо инкрементом заполняешь, соответственно при удалении строк он всегда остается уникальным.  В подчиненной таблице делаешь всегда отбор при изменении положения курсора в основной таблице. Ну и в подчиненке при добавлении строки устанавливаешь ключстроки из текущей строки основной. Все мучения будут из-за клиент-серверных передач контекста формы.
#5 by Aston86
KazanKokos ты как внимательно читал что я писал выше или нет. Я так и делаю как ты написал ключ у родителя и по этому ключу отбор строк у дочерней, только вот беда в самом реквизите на форме количество строк не меняется отбор идёт в отображении и при отборе есть лажи когда пытаешься поднять строку выше в подчинённой таблице - почитай что я выше написал внимательно. Если не веришь сам попробуй или покажи пример с подчинённой таблицей где нет проблемы с Переместить текущий элемент вверх или вниз.
#6 by Кокос
ну я тоже помучился с этим. Просто код у клиента на серваке. И я проблему решил еще в прошлом январе. Наизусть не помню.
#7 by Кокос
вся лажа возникала из-за того что присвоения ключа делал не в том месте. ну допустим делал в клиентской функции а надо было на сервере. там особая система клиент-серверных вызовов нужна.
#8 by Aston86
Да у меня проблема не с ключами, отбор идёт верно, проблема состоит в том, что в дочерней таблице хранятся все подчинённые строки родительской, при отборе он отображает всё красиво но при перемещении строк в отобранном родителе бывает ничего не происходит внимательно почитай что я написал выше. На форме в таблице все строки упорядочиваются по номеру строки, хоть отображаешь ты его хоть нет - смотри
#9 by Кокос
ну я решил эту проблему насколько я помню. Вот как это вопрос. Надо запрашивать доступ на сервер и скачивать конфу. а это не раньше следующей недели :)
#10 by Кокос
у меня был расчет площади листов кровли под заказ по нарезку. под каждый лист формировалась таблица профилей в УТ11. Все работало.
#11 by Aston86
Тогда жду как решил эту проблему, и до следующей недели не так долго осталось.
#12 by Надсмотрщик
Твоя "подчиненная таблица", при открытой форме, хранится в виртуале, а на экран выводишь только нужные тебе строки
#13 by Aston86
Как в виртуале хранится? - тут поподробнее плиз. В дополнительном реквизите формы (Таблица Значений?) и как на экран выводить только нужные строки?
#14 by Надсмотрщик
В дополнительном реквизите формы ТаблицаЗначений. и на экран выводить только нужные строки - запросом.
#15 by Aston86
Как я понимаю есть ТаблицаЗначений, где хранятся все строки и дополнительная ТаблицаЗначений, где хранятся только подчинённые строки текущего родителя. А в поле формы таблица указать ПУТЬКДанным = дополнительная ТаблицаЗначений?
#16 by Надсмотрщик
Примерно
#17 by vmv
если речь об УФ, то для реализации мастер-детали в виде двух таблиц (одна мастер по которой отбираються записи детали) я бы использовал дерево значений Особенности: Дз должно быть двухуровневое (уровни 0 и 1) это дерево значений объявляешь на форме элементами как  таблицы формы и представление списком. в первой(мастер) устанвливаешь не сбрасываемый отбор (уровень = 0) при создании формы, во второй(деталь) уровень = 1 и родитель = мастер.текущаястрока ну и обработчики там попрописывать
#18 by Aston86
У меня чисто человеческая просьба, дайте более подробную информацию если можно. С деревом значений не работал. Примерно знаю что это такое с C#. TreeView типо я так понимаю. Меня интересует два вопроса.1) Как задать только два уровня в дереве. 2) Второе что на первом уровне должны быть строки определённой структура а на втором совершенно другой? Заранее спасибо.
#19 by Кокос
мне только в среду код дадут :)
#20 by ChAlex
а что так важно строки вверх вниз смыкать? А смысл?
#21 by Aston86
Не смыкать а перемещать вверх и вниз - это важно и нужно!
#22 by Надсмотрщик
На первом уровне - элементы РОДИТЕЛИ На втором - подчиненные
#23 by ChAlex
- есть еще такой механизм, как перетащить. И если так уж нужно вверх и вниз - то опять же рисуешь свою функцию.
#24 by Aston86
В итоге реализовал всё с помощью таблицы значений. При выборе родительского элемента достаю в реквизит формы ТЗ только нужные строки, сделал свои обработчике перемещения, при начале добавления , при удалении и окончании редактирования. Пришлось также свое поле (НомераСтроки) обозвал НомСтроки и сделать чтоб высчитывалось правильно во всех ситуациях и упорядочиваю постоянно по нему вот и всё :) И всё работает пока без проблем.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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