Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 15:45

Изменение табличной части

Автор Новенькая, 16 мая 2013, 10:03

0 Пользователей и 1 гость просматривают эту тему.

Новенькая

Здравствуйте, вопрос вроде элементарный, но не соображу как правильно сделать. Имеем элемент справочника "ДоговорыКонтрагентов", при открытии формы в процедуре "ПриСозданииНаСервере" происходит заполнение табличной части значениями из Контрагента. В Процедуре "ПриЗаписиНаСервере" необходимо сделать проверку, если были изменения в ТЧ, тогда получить объект "контрагент" и перезаполнить в нем табличную часть. Вот собственно и вопрос как более правильно и просто отследить была ли изменена табличная часть. Заранее спасибо

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Yura063

сделайте запросом!
Добавлено: 16 мая 2013, 10:44


Модифицированность() - показывает если были изменения всех объектов!
Помогли, отблагодари!

Новенькая

Т.е. все равно придется сравнивать между собой в цикле то, что было и то что стало? А Модифицированность()  - да она ведь на все объекты сработает...

Dethmontt

А вам не кажется что ваша схема немного какая то странная?
Добавлено: 16 мая 2013, 11:20


Может не использовать табличную часть в справочнике?
Тогда и проверять ничего не придется!
Добавлено: 16 мая 2013, 11:22


Может открываем справочник контрагентов и видим список его договоров открываем нужный договор и меняем там то что нам нужно?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Новенькая

Просто такая возможность должна быть и там и там. Может такое быть, что контрагент создан, а договора нет еще, а мы должны занести информацию в табл часть.

Codokopatel

Скорее всего вы не правильно ставите вопрос. Если у вас типовая конфигурация - например: 1С:Бухгалтерия, то в этой конфигурации у справочника ДоговорыКонтрагентов нет табличной части. А то, что вы видите в справочнике Контрагентов на закладке "Счета и договоры" записи из справочника ДоговорыКонтрагентов, подчиненные текущему элементу справочника Контрагентов.
И, при добавлении нового договора на закладке "Счета и договоры" некоторые данные по текущему контрагенту проставляются автоматически.
Или же, вы хотите отследить не менял ли кто данные в договорах контрагента без вашего ведома?

Новенькая

Напишу немного поподробнее, может подскажите, как действительно правильно лучше реализовать. Конфигурация нетиповая, самописная. Задача следующая. Имеем справочник "контрагенты". В нем есть несколько ревизитов типа булево "Поставщик", "Арендодатель", "Подрядчик" и т.д. Один контрагент может быть, к примеру, одновременно и поставщиком и арендотателем. Также имеем табличную часть, состоящую из 2 колонок "Тип отношений"(Перечисление.ТипыОтношений) и "Значение характеристик"(Справочник.ХарактеристикиКонтрагентов). В зависимости от поставленных галочек в колонке Тип отношений нам даст выбрать либо Постащик, либо Арендотель и т.д. ну и соответственно их характеристику. К примеру:
контрагент ООО "Добрый гном"
табличная часть:
Тип отношений   Значение характеристики
Постащик              Поставка окон
Поставщик             Поставка досок
Подрядчик             Подряд №1 и т.д.

Так же имеем справочник "Договоры" в котором, владельцем является Контрагент. В нем есть реквизит "Тип договора"(договор подряда, аренда, поставка). при открытии договора в зависимости от типа в табличную часть должны перетащиться характеристики именно этого типа из контрагента. К примеру в нашем случае, если создали договор с типом поставка то в табл части будет 2 строки
Поставка окон
Поставка досок
Если в договоре мы добавим еще характеристику или что-то удалим, то соответственно эти изменнения надо перенести и в контрагента. Может конечно надо использовать регистр сведений, а не табличные части? Но формы управляемые, придется динамические списки создавать. Не знаю как правильно это все дело реализовать. Буду признательна за помощь.

Codokopatel

Судя по Вашему описания у вас есть некоторые недочеты  в структуре Вашей БД.
Во-первых: это избыточность информации. То есть, значения характеристик повторяются и в справочнике "Контрагенты" и в справочнике "Договора".
Во-вторых: у Вас присутствует лишние "прогоны" данных между справочниками. При создании нового договора происходит запрос данных из справочника "Контрагенты" и размещение их в справочнике "Договора". Затем, при записи данных в справочнике "Договора", данные пересылаются обратно в справочник "Контрагенты". А это не очень хорошо сказывается на производительности.
И еще есть один подводный камень. Вы пишите, что в договоре возможно придется что-то менять: добавлять или удалять. При такой постановке вопроса, Вам точно придется использовать регистры сведений. Ведь может быть такая ситуация - контрагент ООО "Добрый гном" регулярно поставляет вам гвозди и доски, а однажды по случаю продал вашей фирме красивую вазу для холла. Эта поставка была разовая и, скорее всего, она более не повторится. Как быть с  такой поставкой. Если её внести в договор вместе с гвоздями и досками, то она будет выглядеть не совсем уместной. Она перенесется в справочник "Контрагенты", а затем, при создании нового договора  с данным поставщиком запись  о поставке вазы отразится вместе с гвоздями и досками. Оператор создавший новый договор со спокойной совестью удалит запись о вазе из договора (ведь новом договоре о вазе нет и речи), но, при этом, запись о вазе исчезнет и в контрагенте. Как говорится: "Вот она была и нету".

Я бы сделал так.

Справочник "контрагенты содержит общие данные:
Наименование;
ИНН/КПП;
Адрес и т.п.
Булевых реквизитов типа "Поставщик", "Арендодатель", "Подрядчик" и т.д. в справочнике "Контрагенты быть не должно. Эти реквизиты заменяются на "Тип отношений" в справочнике "Договора".
Ведь может быть такая ситуация - появится новый тип отношений (например Аутсортинг) и что, вы будете добавлять в справочник еще одно булево поле и перекраивать форму.
По моему мнению, проще создать справочник "Отношения" из которого, при создании нового договора, очень просто будет выбрать значение.

Справочник "Договора" (а может даже лучше документ "Договора") содержит:
Тип отношений (поставка, подряд, аренда и т.п.);
Табличную часть со значениями характеристик;
и т.п.
Для каждого статуса контрагента (арендодатель, поставщик, и.т.п.) создается свой договор.
Для каждой разовой хозяйственной операции, также создается отдельный договор. Тогда, ничего не потеряется и упроститься отчетность по контрагенту.
А при необходимости получить данные о хозяйственных взаимоотношениях с контрагентом есть такой инструмент как отчет, который предоставит информацию в любом желаемом разрезе.

Моё мнение - Вам надо перекроить структуру Вашей БД.
И прочитайте популярную статью "Нормализация баз данных", это поможет в дальнейшем избежать многих ошибок при проектировании БД.
ПРИМЕЧАНИЕ. Дальше третей формы не изучайте. И поищите статью, где объяснения даются простым языком, без математической зауми.

Если будут вопросы можете писать мне на email.
Просто, я не знаю интересна ли еще остальным участникам форума данная тема.

Новенькая

Спасибо огромное за разъяснения, на "волшебную" кнопку нажала.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск