Имя: Пароль:
1C
1С v8
Как сохранить табличную часть в регистре?
0 Мисти
 
04.03.13
10:37
2 маленьких таблички в обработке. При печати данные (там еще 40 реквизитов) сохраняются в регистр, при повторном открытии - данные обработки заполняются из регистра.
Как таблички сохранить?
В 7 я писала что-то вроде встрокувнутрь, а в 8?
1 Wobland
 
04.03.13
10:37
так же
2 Мисти
 
04.03.13
19:40
Говорит - "ошибка потока данных"
Почему?
3 Мисти
 
04.03.13
20:29
НаборЗаписей[0].ДоговораПоставщика - это {"#",595cddf9-e61d-47fe-ad92-3cb955fb5c92} (отладчик говорит)
ЗначениеИзСтрокиВнутр(НаборЗаписей[0].ДоговораПоставщика) - а это - неопределено говорит.
4 Мисти
 
04.03.13
20:30
А сохраняла так -
МенеджерЗаписи.ДоговораПоставщика  =   ЗначениеВСтрокуВнутр(ДоговораПоставщика) - ДоговораПоставщика Табличка их договоров.
5 Живой Ископаемый
 
04.03.13
20:31
так делают только .удаки.
зачем что-то сохранять из обработки? просто кинь табличное поле у которого установи источник данных - твой регистр. Только нужно будет озаботится регистратором, но это легко.
6 Живой Ископаемый
 
04.03.13
20:33
и не начинайте "я в 7 делала" - это зразу два, это сразу значит что вы точно делаете не так. и нужно по-другому.
7 shuhard
 
04.03.13
20:33
(5) ты угадал с оценкой =)
8 Мисти
 
04.03.13
20:36
Возможно! Но у меня другой фокус.
Регистр содержит 40 реквизитов, в 2 из них должны сохранится табличные части.
9 Живой Ископаемый
 
04.03.13
21:10
и что?
10 Лефмихалыч
 
04.03.13
21:12
(0) откуда такие еретические мысли - хранить табличные части обработки в базе?
11 Мисти
 
04.03.13
21:17
(9) Ну, в этом смысле - нужно будет 3 регистра, нет?
(10) А почему нет? Были найдены 5 договоров, из них 2 - нужны для печати (в некотором пункте большого документа), а некоторые - нет. Нужные сохраняем для повторной печати.
12 Живой Ископаемый
 
04.03.13
21:18
Не, ну чисто гипотетически это может быть например фильтр отбора в скд, но все это прекрасно хмлсериализуется
13 kotletka
 
04.03.13
21:19
(11)договоры это не табличная часть, так и скажи нужно хранить данные в регистре, а то табличную часть, табличную часть
14 Живой Ископаемый
 
04.03.13
21:19
(11) господи, да почемуже?
15 kotletka
 
04.03.13
21:20
в регистре измерение типа справочниксс...договоры контрагентов и записываешь в него свои договры
16 Живой Ископаемый
 
04.03.13
21:21
(11) ничего не понятно. У нас сомнения что в следущий раз мы найдем эти два договора?
17 kotletka
 
04.03.13
21:21
(14)да потому что это мисти,она в 1с не "взубногой", любой вопрос решает на мисте, путём взятия на слабо доверчивых 1сников
18 Мисти
 
04.03.13
21:47
(13) А что это? В обработке выглядит, как 2 табличные части.
(16) Найти-то найдем! Но их 5 нужно визуально выбрать 2 (например). В этот момент можно ошибиться при повторе.
19 Мисти
 
04.03.13
21:48
(15) Так их сразу 2!
Почему нельзя - вСтрокуВнутрь?
в 7 было красиво - сколько хочешь табличных частей в документе!
20 Живой Ископаемый
 
04.03.13
22:06
2(19)и в8 скалько хочешь табличных частей и без значениевстрокувнутр и поэтому и говорим , что если будете с подходом "как в 7" будет непоавильно
21 Мисти
 
04.03.13
22:10
(20) ну и куда мне их деть в обработке, чтоб при открытии ее из того же начального документа я увидела все те реквизиты, что распечатались?
22 Мисти
 
04.03.13
22:12
И, главное, если это возможно технически - может, вы мне лучше подскажете - как? И почему не работает?
23 Steel_Wheel
 
04.03.13
22:41
Потому что встрокувнутр не гарантирует сохранность объекта, при изменении метаданных извлекаемого объекта может и не сработать
24 hhhh
 
04.03.13
22:42
(21) ну стандартное же есть на любой форме обработки и отчета. СохранитьЗначения и ВосстановитьЗначения. И в свойствах формы просто указываете какие поля сохранять.
25 Мисти
 
04.03.13
22:47
(24) Не пойдет! Оно сохраняет последнее значение, а мне нужна зависимость от объекта, из которого вся эта хрень вызывается.
(23) Фик с ней! Пока-то ничего не поменялось!
Я готова сохранить даже просто названия договоров!
Ну не рисовать же строку из табличной части вручную? А потом обратно?
26 Steel_Wheel
 
04.03.13
23:08
Кстати, список настроек фиксирован? Если да, то я бы все-таки сделал собственный регистр с измерением документ и набором характеристик в ресурсах. Или через справочник.
Возможно, потребуется написать на несколько строк больше, но такое решение более стабильно и лучше поддерживается
27 hhhh
 
04.03.13
23:12
(15) она сохраняетс не последнее значение, а по имени настройки, чтоб вы знали. И это вам подходит идеально.
28 Мисти
 
04.03.13
23:15
Откуда я знаю имя настройки? У меня их, может, штук 200!
Где я их искать буду? И почему не в регистр-то??
(26) Именно так я и сделала! Только 2 табличные части там не сохраняются, и еще одна мелкая заминка.
29 Мисти
 
04.03.13
23:23
Еще одна проблема:
При пером запоонении формы формируется список адресов, из них выбирается нужный и сохраняется в регистре. При открытии он должен попасть в тот же реквизит!
   АдресПредметаЛизинга=НаборЗаписей[0].АдресПредметаЛизинга;
   ЭлементыФормы.Адреса.Значение= АдресПредметаЛизинга;

Адреса - определен как "неопределенный" со списком выбора.
30 Мисти
 
04.03.13
23:27
АдресПредметаЛизинга=НаборЗаписей[0].АдресПредметаЛизинга;
   СписокАдр = Новый СписокЗначений;
   СписокАдр.Добавить(АдресПредметаЛизинга);    
   ЭлементыФормы.Адреса.СписокВыбора.ВыбратьЭлемент(АдресПредметаЛизинга);
как его туда засунуть-то??
Чтоб уже не выбирать из списка выбора, а уже выбран?
31 Мисти
 
04.03.13
23:45
АдресПредметаЛизинга=НаборЗаписей[0].АдресПредметаЛизинга;
   СписокАдр = Новый СписокЗначений;
   СписокАдр.Добавить(АдресПредметаЛизинга);
   ЭлементыФормы.Адреса.СписокВыбора= СписокАдр;
   ЭлементыФормы.Адреса.СписокВыбора.НайтиПоЗначению(АдресПредметаЛизинга);

При этом фокусе формируется нужный список выбора, только мне нужно, чтоб он уже был выбран!!
32 Мисти
 
04.03.13
23:54
ЭлементыФормы.Адреса.СписокВыбора.ВыбратьЭлемент(СписокАдр.НайтиПоЗначению(АдресПредметаЛизинга));
О! А вот так - она мне аж интерактивно предлагает выбрать адрес!
Ну уж это - слишком!
33 Мисти
 
05.03.13
00:07
ау?
34 Живой Ископаемый
 
05.03.13
00:12
У психологов должна быть специалиазация- лечение 1сников от клюшечных привычек
35 Мисти
 
05.03.13
00:21
ЭлементыФормы.Адреса.СписокВыбора.НайтиПоЗначению(АдресПредметаЛизинга);
   ЭлементыФормы.Адреса.Значение = АдресПредметаЛизинга;
Что-то из этого сработало.
36 Мисти
 
05.03.13
00:33
(34) Понятно, что дело не в психологии, а в том, что 8-рочных приемов я не знаю, но в данном случае, мне кажется, что выбран оптимальный вариант.
Только не работает!
37 Steel_Wheel
 
05.03.13
01:06
1) Есть такое понятие Document-View model. Если интересно -- нужно гуглить.
Смысл в том, что DOcument -- это данные (объект), View -- это их вид (форма). ЭлементыФормы -- это обращение к View с просьбой поменять model. Гораздо лучше обращаться сразу к Model, тем более, что View сразу актуализирует данные.
Форма -- это не сами данные, а то, как их видит пользователь.

2) (29) >>Адреса - определен как "неопределенный" со списком выбора.
Для неопределенного типа нужно сначала принудительно тип установить. В вашем случае луше использовать составной тип, и просто написать
ДокументОбъект.Адреса = СписокАдр.Найти(...)
система сама определит тип и осуществит присвоение

3) Да, восьмерка требует более глубоких знаний в области программирования, чем 7-ка. Но мне, когда я работал с 1с, она нравилась намного больше, т.к. если знаешь, то сделать можно почти что угодно. И интерфейс намного дружественнее, к пользователю, чем в 7-ке. В принципе, интерфейс -- это слабая сторона 7-ки.
38 Мисти
 
05.03.13
07:50
(37) Прекрасный ответ, но не по делу! С адресами я разобралась, а с табличными частями - нет ответа!
39 mzelensky
 
05.03.13
08:11
(0) не совсем понимаю проблему!? Есть обработка. НА ней есть какой-то общий реквизит + 2 ТЧ. Нужно сохранить куда-то.
Делаешь РС - сохраняй туда не всю ТЧ целиком, а построчно. Получается У тебя в измерениях будет общий реквизит + строкаТЧ1, потом общий реквизит и строкаТЧ2 и так далее...

А потом обратно так же считываешь...

Или я что-то не догоняю?!
40 Мисти
 
05.03.13
08:25
(39) Ну уж нет, это дикость какая-то! У меня 40 реквизитов, часть из которых - строка неопределенной длины, зачем мне это дублировать??, тем более, что ТЧ - 2, а может завтра их 3 будет!
Если "без проблем", то я могу сама свернуть тч в строку и потом развернуть, но существует же метод! Он обычно работает, почему у меня - вдруг нет?
41 Мисти
 
05.03.13
08:43
МенеджерЗаписи.ДоговораПоручительства  =   ЗначениеВСтрокуВнутр(ДоговораПоручительства);
ТекДоговораПоручительства= ЗначениеИзСтрокиВнутр(МенеджерЗаписи.ДоговораПоручительства);

Туда сохранилось - нечто похожее, обратно - неопределено.
42 Мисти
 
05.03.13
08:46
А вот как работало в 7:
   Документы = ЗначениеВСтроку(ТДокументы);
КонецПроцедуры // ПриЗаписи()

   Если ПустоеЗначение(Документы) = 0 тогда
       ТаблицаДок = ЗначениеИзСтроки(Документы);
       Если ТаблицаДок.КоличествоКолонок() <> 0 тогда
           ТаблицаДок.ВыбратьСтроки();
           Пока ТаблицаДок.ПолучитьСтроку() = 1 ЦИКЛ
               ТДокументы.НоваяСтрока();
               ТДокументы.Документ = ТаблицаДок.Документ;  
           КонецЦикла;
       Иначе
           ТДокументы.Загрузить(ТаблицаДок);
       КонецЕсли;
   КонецЕсли;    
   
КонецПроцедуры // ПриОткрытии()
43 kosts
 
05.03.13
08:49
(40) Сохранять в строку ссылочные типы и хранить в базе строку - это совсем плохо.
То что 40 реквизитов это ничего страшного, 1С может и больше сохранить.
А вообще переделай обработку в справочник и создай там табличные части.
Опиши задачу полно. Может подскажут чего еще.
44 Мисти
 
05.03.13
08:52
Я могу сохранять номера документов. Так лучше?
45 kosts
 
05.03.13
09:09
(44) Каждый решает сам, что, в конце концов, ему лучше.
Мы только подсказываем направление.
46 КонецЕсли
 
05.03.13
11:52
(0) Рассмотри вариант ещё в справочнике хранить. Там можно табличные части сделать.