Помогите разобраться, как сохранять ТЗ в документе ( справочнике) , а потом получить эту информацию виз другого документа или отчёта?

1. sergiowood 07.02.07 12:37 Сейчас в теме
Всем добрый день!
Подскажите новичку!
Нужно на документе сохранять ТЗ с введённой информацией, а потом ее доставать и использовать в другом документе и отчётах. Аналогичная проблема с ТЗ в справочнике.
Читал на форуме похожий вопрос, но у меня ТЗ будет формироваться и заполняться автоматично (при проведении документов и т.п.) и колонки со строками будут добавляться (удаляться) программно т.е. ТЗ по колонкам не фиксированная, т.о. привязать к документу (типа хранилище) не получиться.
Помогите разобраться, как сохранять ТЗ в документе ( справочнике) , а потом получить эту информацию виз другого документа или отчёта?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vladko 07.02.07 13:36 Сейчас в теме
в реквизитах шапки/табл.части документа нельзя указывать поля с типом ТаблицаЗначений или подобное. А именно только в реквизитах хранится введённая информация в документе. Потом можно к ним обращаться из дркгих док-тов/отчётов. Чтобы съимитировать ТЗ в документе, необходимо создать эти реквизиты документа - колонки ТЗ. И причём получится как бы ограничение на кол-во строк.
Например, если ты хочешь хранишь ТЗ в документе о реквизитах доп.документов, Номер|Дата|Контрагент, то ты должен создать реквизиты шапки:
Номер1 Дата1 Контр1 (1-я строка)
Номер2 Дата2 Контр2 (2-я строка)
Номер3 Дата3 Контр3 (3-я строка)
При проведении док-та, ты считываешь строки таблицы и записываешь в эти реквизиты значения ТЗ.
В данном примере, число строк ТЗ в док-те не более 3-х.
При открытии док-та пришешь процедуру, считывающую эти реквизиты и заполняющую ТЗ.
По другому вроде никак.
3. azernot 781 07.02.07 14:20 Сейчас в теме
Нужно завест в объекте (документе, справочнике) ревизит типа Строка неграниченой длины (РеквизитТЗ).
В модуле объекта

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.ДобавитьКолонку(...);
ТЗ.НоваяСрока();
...

При сохранении объекта (после заполнения ТЗ) вызывать метод
РеквизитТЗ = ЗначениеВСтроку(ТЗ);

Во всех местах, где нужна ТЗ нужно вызывать метод
ТЗ = "";
ЗначениеИзСтроки(Объект.РеквизитТЗ).Выгрузить(ТЗ);

Естесвенно в запросе работать с такой ТЗ не получится.. Контроль ссылочной целостности не выполняется и т.п.

По такой эе методике можно работать и со списом значений.
4. sergiowood 07.02.07 14:35 Сейчас в теме
Огромное спасибо за ответы и помощь!!!

Vladko—Спасибо навел на одну идею надо будет попробовать. Я попробую создать несколько справочников и сделать ссылку на них из «Документа», а там как предложено. В общем поэкспериментирую, тем более, что аналоги ребята уже писали.

azernot- Спасибо за ответ!!
Я читал здесь на форуме ответ на похожий вопрос, там был ответ Корума
1. "неправильно" (из-за ссылочной целостности): создать реквизит шапки (строка неогр длины), ПриЗаписи() дополнить ТвойРеквизит = значениевСтрокуВнутр(ТвояТЗ);
ПриОткрытии() дополнить
Попытка
ТвояТЗ= значениеИзСтрокиВнутр(ТвойРеквизит);

2. "правильно": создать подчинённый документ, при открытии его таб часть заливать в свою тз. При закрытии - сливать обратно в документ.
Кода в этом случае чуть больше ;о)

Как быть с его мнением?!! Или я чего-то не правильно понял?
5. azernot 781 07.02.07 14:38 Сейчас в теме
Подчинённый докуменn - конечно лучше! Но он подходит только в случае если ТЗ фиксированная по колонкам. Или придётся в подчинённом докумене создать 1000 и > колонок с неопределённым типом/видом..

Вобщем всё зависит от задачи.
6. poppy 07.02.07 15:37 Сейчас в теме
sergiowood Написал:
-------------------------------------------------------
> azernot- Спасибо за ответ!!
> Я читал здесь на форуме ответ на похожий вопрос,
> там был ответ Корума
> 1. "неправильно" (из-за ссылочной целостности):
> 2. "правильно": создать подчинённый документ, при
>
> Как быть с его мнением?!! Или я чего-то не правильно понял?

ИМХО ты неправильно понял критерий правильность/неправильность.

azernot, в своем сообщении написал "Естесвенно в запросе работать с такой ТЗ не получится.. Контроль ссылочной целостности не выполняется и т.п."
Это есть ограничения такого способа. Если тебя эти ограничения не останавливают, то ты можешь этот способ использовать.

Корум, в своем сообщении подразумевал, что ограничение по контролю ссылочной целостности является принципиальным и необсуждаемым. Отсюда вердикт - "неправльно".

Если в ТЗ ты будешь хранить значения только примитивных типов (дата, строка, число, возможно - перечисление), тогда ограничение по ссылочной целостности не влияет. Если значения будут типа справчоник или документ, то стоит задуматься...

В качестве альтернативы предложу следующий вариант:
Справочник с реквизитами:
Документ;
Номер (наименование) табличной части (если нужно несколько ТЗ в одном документе);
Номер колонки;
Наименование колонки;
Номер строки;
Значение.

В этом случае, кода будет еще больше. Однако снимается ограничение на фиксированное количество колонок.

7. O-Planet 6443 07.02.07 16:10 Сейчас в теме
Я всегда почти использую в 7.7 метод с "ЗначениеВСтроку()". Всегда можно проверить вручную ссылочную целостность там, где это нужно через "НайтиЭлемент()". К сожалению, в 8.0 таким образом таблицу у меня сохранить и восстановить не получилось.

8. sergiowood 07.02.07 16:23 Сейчас в теме
Огромное спасибо за ответы, помощь и разъяснения !!!
Идея в общем достаточно тривиальная, хранение информации в элементах справочника ВалДоз/Расх ( 1С: Бух. для Украины)с целью последующего просмотра и корректировки при составлении Налоговой и Бух отчётности, а то иногда не понятно, что попало в ту или иную строку (ячейку) налоговой декларации (баланса), а так можно будет проверить, сделать пару другую фильтровок. Так же планирую на каждый элемент справочника повесить ссылки на строку (ячейку) налоговой декларации (баланса). Т.о. хранить планирую Документы (ссылка на док.), а для фильтрации и анализа сумму, дату и счёт по которому пошла проводка.
Постараюсь сделать симбиоз идей Vladko, azernot и poppy, а там куда Бог даст.
Может кто-то подскажет как енто можно лучше релизовать?
9. O-Planet 6443 07.02.07 17:03 Сейчас в теме
Сохраняешь просто:

Реквизит=ЗначениеВСтроку(МояТаблица);

А при восстановлении используешь вот что:

Код
МояТаблица=ВосстановитьТаблицуИзСтроки(Реквизит); 
Если МояТаблица=0 Тогда
   МояТаблица=СоздатьОбъект("ТаблицаЗначений");
   МояТаблица.НоваяКолонка(...);
   ...
КонецЕсли;
Показать полностью


где определяешь:

Код
Функция ВосстановитьТаблицуИзСтроки(Стр)
   Т=ЗначениеИзСтроки(Стр);
   Если ТипЗначенияСтр(Т)<>"ТаблицаЗначений" Тогда
      Возврат 0;
   КонецЕсли;
   Справочник=СоздатьОбъект("Справочник.Контрагенты"); 
   // Для проверки целостности
   К=1;
   Пока К<=Т.КоличествоСтрок() Цикл
      Если Справочник.НайтиЗначение(Т.ПолучитьЗначение(К,"Контрагент"))=0 Тогда
         Т.УдалитьСтроку(К);
      Иначе
         К=К+1;
      КонецЕсли;
   КонецЦикла; 
   Возврат Т;
КонецФункции
Показать полностью


10. sergiowood 07.02.07 17:15 Сейчас в теме
O-Planet пасибо за кусок кода с примером!!
11. Gendalf 28 07.02.07 17:35 Сейчас в теме
доки разные чтоль?... могет "ввод на основании" попробуешь? поправок меньше и пыхтеть как то не глубоко надо...
12. sergiowood 07.02.07 17:49 Сейчас в теме
Спасибо за помощь GENDALF, но "ввод на основании" это совсем другая история .
Весь смысл в программном заполнении и хранении информации в ТЗ, а потом её машинная или «ручная» обработка.
13. CheBurator 2712 08.02.07 02:59 Сейчас в теме
сделать забалансовый счет.
к счету в субконто привязать справочник нужный по структуре.
при проведениее - проводки на этот забаланс.
и не надо никаких извратов с тз.
при необходимости вытащить такую "тз" - выбираешь проводки по этому забалансу для этого документа.
14. sergiowood 08.02.07 10:24 Сейчас в теме
Сhe Burashka- огромное спасибо, вся красота в простате.
15. Abadonna 3968 08.02.07 17:46 Сейчас в теме
На сто рядов проверенный способ:
Документ.ХранительДанных
Бухучет = НЕТ
Оперучет = НЕТ
НомерДок [число 5]
———————шапка——————————
Владелец [Неопределенный ]
———————табличная часть—————
Р1 [Неопределенный]
. . . . . . . . . . .
Р15 [Неопределенный]
———————описание——————
Вспомогательный документ для хранения
дополнительной табличной части объектов
метаданных, например:
вторая табличная часть какого-либо документа
16. O-Planet 6443 08.02.07 18:21 Сейчас в теме
Угу. Перегружать бух итоги - это "красота и простота" :)

Слушай вариант на 200%!

1. Создаешь справочник "ХранилищеДанных" с одним реквизитом: "Документ". и подчиненный ему "ДанныеПоДокументам"
2. При записи дока ищешь (создаешь) запись в "Хранилище", куда записываешь ссылку на записываемый документ, а в подчиненных этой записи элементах в справочнике "ДанныеПоДокументам" хранишь и потом используешь все, что заблагорассудится.
3. При пометке на удаление (снятии) помечаешь (снимаешь с пометки) и записи в этих справочниках по текущему документу.

Чем лучше, чем с бухитогами? -
1) Не бухитоги
2) Не ограничен по кол-ву субконто
3) Со справочником работать проще
4) Не изменил план счетов и при обновлении не будет больших проблем
17. Abadonna 3968 08.02.07 18:33 Сейчас в теме
2Сhe Burashka: ты, видать, плохо себе представляешь, что такое разбухшая таблица проводок и сколько времени уходить на банальный персчет итогов при добавлении одного вшивенького счета
O-Planet: а если надо сохранить 2,3 и более ТЧ одного документа?
Столько же починенных справочников делать? А если я вообще еще не знаю сколько в будущем мне понадобится ТЧ в каком-нибудь документе?

Так что см. вариант Abadonna, тем более это ссылка на давно и успешно работающую конфигурацию
18. O-Planet 6443 08.02.07 18:39 Сейчас в теме
См. вариант O-Planet! :)
В подчиненном я могу все что угодно вписать, вплоть до номера ТЧ.
19. CheBurator 2712 08.02.07 19:01 Сейчас в теме
Ну, по бухии я мало работаю, так что не претендую на истинность.
с другой стороны, если в организации такие извороты - я думаю, она сможет себе позволить нормальное железо для "таблицы проводок".
Иначе, имхо, надо сильно думать над схемой данных и методикой учета, которая привела к таким бякам...
20. Abadonna 3968 08.02.07 19:05 Сейчас в теме
И железо наимощнейшее, и организация правильная, и скорость работы, а вот при изменении плана счетов - полная ж...
21. CheBurator 2712 09.02.07 00:48 Сейчас в теме
ну, наверное план счетов не каждый день меняется... ;-)
можно и потерпеть разок...
22. sergiowood 09.02.07 12:39 Сейчас в теме
Добрый день!
Во множестве мнений рождается истинна.
Abadonna- огромное спасибо, что обратил внимание на последствия при изменении плана счетов и на время при обработке (пересчёте) итогов.
Что касается варианта «Документ.ХранительДанных», вариант классный, но для данной задачи, если использовать в чистом виде,то получиться жесткий (ограниченный) по гибкости использования. Его действительно классно применять при создании дополнительной таблице в документе. Хочу переделать планировщик оплаты и сделать планирование бюджета для оплаты полученных поставок, вот там и попробую использовать.
А вот использовать идею poppy с идеей O-Planet и с идеей Abadonna будет то, что надо. Я создам имеющемуся спр. ВалДох/Расх подчинённый справочник (идея O-Planet) с необходимыми для работы реквизитами (аналог идеи poppy), а колонки ТЗ на элементе справочника будут формироваться и соответствовать типу реквизитам из подчинённого справочника (идея Abadonna ).
Думаю, что так должно получиться. Как считаете?!

Можно добавить и справочник хранилище, в который будут добавляться необходимые реквизиты для хранения и обработки, а на его основании и по его реквизитам формировать подчиненный элемент справочника, в котором в шапке будет один реквизит «Документ» и добавить ТЗ шапка которой заполниться от «справочник хранилище» по элементам и его типам. Правда тогда все усложниться, но гибкость получиться…..

Идея Сhe Burashka проста в исполнении и отчёты по счетам стандартные можно использовать, но как подумаю про пересчёт….

P.S.Наверно правду говорят, что иногда самая прямая и короткая дорога в обход.
23. vladko 09.02.07 14:49 Сейчас в теме
Согласен тоже, перегружать бухсчета для хранилища информации не лучшая идея.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот