Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Связь между двумя табличными частями одного документа  (Прочитано 26777 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
sergiyboy
Интересующийся

ua
Offline Offline

« : 08-10-2011 16:30 » new

Здраствуйте. Как можна решить следующую задачу. Есть документ путевой лист в нём две табличных части путевой лист и реестр накладных, каждая строка тч путевой лист имеет информацию о маршруте количестве ездок, растоянии с грузом и без, и тонаже по путевом листе; каждой строке. Как сделать привязку даных из таблицы реестр накладных к каждой строке ТЧ путевой лист. Тоесть необходимо чтобы при изменении строки тч путевой лист отображались только те накладные которые вводились во время редактирования этой строки какой то отбор по строке чтоли, и чтобы при редактировании в табличной части реестр накладных изменялось поле ввода тонаж, который равен суме всех строк которые выбраные отбором. Также есть необходимость из тч реестр накладных извлекать информацию для отчётов.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-10-2011 08:25 » 

В одной фразе поднято несколько вопросов. Давай попытаемся их разбить на отдельные задачи для лучшего понимания действий.
Первая задача - как связать 2 табличных части.
Если в ведущей таблице (путевой лист) есть одно уникальное поле ссылочного типа (справочник или документ) - то добавляем такое же поле во вторую табличную часть и связываем по нему.
Если такого поля нет или уникальна комбинация двух и более полей (например: номенклатура+характеристика) то в обе таблицы добавляется поле с типом УникальныйИдентификатор и связь будет по нему. Генерировать идентификатор нужно в момент добавления строки в таблицу.

Теперь твоя очередь: какая следующая задача?
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #2 : 09-10-2011 08:36 » 

Каким образом сгенерировать этот идентификатор одновремено для первой и второй таблицы???

Добавлено через 2 часа, 7 минут и 8 секунд:
Эту задачу решил следующим образом
Код: (1C v8)
Процедура ШляховийЛистПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
                  Если НоваяСтрока Тогда
            Элемент.ТекущиеДанные.ID = Новый УникальныйИдентификатор;
                                ЭлементыФормы.РеєстрНакладних.ДобавитьСтроку();
                ЭлементыФормы.РеєстрНакладних.ТекущиеДанные.ID= Элемент.ТекущиеДанные.ID;
                КонецЕсли;      
  КонецПроцедуры  

Добавлено через 36 минут и 44 секунды:
Осталась задача сделать отбор. Которую в принципе я сейчас решу. Ну и не понятной для меня осталась задачу сумирования. Тоесть если добавить в табличной части реестры накладных строки, то сума по полю тонаж (если идентификаторы одинаковые) должна быть отображена в тч путевые листы.
« Последнее редактирование: 09-10-2011 09:13 от sergiyboy » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-10-2011 09:43 » 

Осталась задача сделать отбор. Которую в принципе я сейчас решу. Ну и не понятной для меня осталась задачу сумирования. Тоесть если добавить в табличной части реестры накладных строки, то сума по полю тонаж (если идентификаторы одинаковые) должна быть отображена в тч путевые листы.
Отбор - по активации строки в ведущей таблице. И не забуть при добавлении строки в ведомую таблицу копировать ID из ведущей.
Тоннаж: предварительный - по окончании редактирования строки в ведомой таблице, точный - по событию перед записью в модуле объекта
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #4 : 09-10-2011 10:48 » 

Это я сделал. Но последний вопрос который меня интересовал, как по идентификатору возможно подсчитать общую суму поля тонаж из таблицы реестр накладных, и подставить в поле тонаж таблицы путевой лист.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 09-10-2011 12:36 » 

Код:
Свернуть("ID", "тоннаж");
Дальше нужно объяснять?
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #6 : 09-10-2011 12:47 » 

Если можна в двух словах


Добавлено через 44 минуты и 48 секунд:
Может кому то будет полезно решение поставленой задачи Отбор при активизации строки сделал следующим образом [
Код: (1C v8)
                Процедура ШляховийЛистПриАктивизацииСтроки(Элемент)
                        ЭлементыФормы.РеєстрНакладних.ОтборСтрок.ID.Установить(Элемент.ТекущаяСтрока.ID);
                КонецПроцедуры

Также необходимо чтобы при удалении были удалены подченёные строи это решыл следующей обработкой    
Код: (1C v8)
Процедура ШляховийЛистПередУдалением(Элемент, Отказ)
                                        ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("ID",ЭлементыФормы.ШляховийЛист.ТекущиеДанные.ID );
    СтрокиУдалить = РеєстрНакладних.НайтиСтроки(ПараметрыОтбора);
    Для Каждого Стр Из СтрокиУдалить Цикл
        РеєстрНакладних.Удалить(Стр);
    КонецЦикла;
                КонецПроцедуры

Ну а добавление новой строки в регистре накладных сделал следующим образом
   
Код: (1C v8)
Процедура РеєстрНакладнихПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
                  Если НоваяСтрока Тогда
ЭлементыФормы.РеєстрНакладних.ТекущиеДанные.ID= ЭлементыФормы.ШляховийЛист.ТекущиеДанные.ID;
ЭлементыФормы.РеєстрНакладних.ТекущиеДанные.Маршрут=ЭлементыФормы.ШляховийЛист.ТекущиеДанные.Маршрут;
ЭлементыФормы.РеєстрНакладних.ТекущиеДанные.Дата=ЭлементыФормы.ШляховийЛист.ТекущиеДанные.ДатаШялховогоЛиста;
                        КонецЕсли;
                КонецПроцедуры

Но с суммой в тч путевые листы по идентификаторе не складывается как понимаю необходимо сделать что то такого рода Процедура при изменени тч тонаж выбрать все строки которые содержат id текущей строки из путевой лист и в цикле посчитать суму, но как это всё написать понятия не имею. Возможно ли это вообще?Не понялНе понял??
« Последнее редактирование: 09-10-2011 13:32 от sergiyboy » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-10-2011 06:26 » 

В форме при пересчете это будет событие РеєстрНакладнихПриОкончанииРедактирования()
Ну а содержимое будет приблизительно следующее:
Код: (1C v8)
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("ID", ЭлементыФормы.РеєстрНакладних.ТекущиеДанные.ID);
        Строки = РеєстрНакладних.НайтиСтроки(ПараметрыОтбора);
        Тоннаж = 0;
        Для Каждого Стр Из Строки Цикл
                Тоннаж = Тоннаж + Стр.Тоннаж;
        КонецЦикла;
        Строки = ШляховийЛист.НайтиСтроки(ПараметрыОтбора);
        Для Каждого Стр Из Строки Цикл // Должна быть только одна
                Стр.Тоннаж = Тоннаж;
        КонецЦикла;
А  процедуре ПередЗаписью() в модуле объекта для точного подсчета должно быть следующее:
   
Код: (1C v8)
        ТЗ = РеєстрНакладних.Выгрузить(, "ID,Тонаж");
        ТЗ.Свернуть("ID", "Тоннаж");
        Для каждого Стр Из ШляховийЛист Цикл
                Строка = ТЗ.Найти(Стр.ID, "ID");
                Стр.Тонаж = ?(Строка = Неопределено, 0, Строка.Тоннаж);
        КонецЦикла;
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #8 : 10-10-2011 16:21 » 

 Подсчёт привязал к процедуре при изменении, при начале редактирования и после удаления использовав второй код в Вашем совете.
Большое спасибо Вашему форуму. Из многих в сети только он мне уже в который раз помагает в написании моей первой конфигурации. И от уже можна пробовать в деле.  Класс!
« Последнее редактирование: 10-10-2011 16:46 от sergiyboy » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 11-10-2011 10:31 » 

Спасибо на добром слове Улыбаюсь
Offtopic:
Прими к сведению замечание по именованию идентификаторов:
Ты используешь украинские слова, а соответственно - украинские буквы. Рекомендую проверить как такая конфигурация будет себя вести на различных СУБД: MS SQL, DB2, PostgreSQL, Oracle
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines