Имя: Пароль:
1C
1С v8
Слетают ссылки в строке табличной части при записи.
,
0 tlg25
 
17.04.13
15:22
Здравствуйте!
Возникла проблема в 8.2 в управляемых формах.

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

Не могу отловить ошибку.
Код для записи у меня такой:
************************
Для Каждого ТекущаяСтрока Из СписокТН(Моя Таблица Значений) Цикл
  СтрокаТЧ = Справочники.Назначения_детализация.СоздатьЭлемент();
  СтрокаТЧ.Владелец = НайденнаяСсылка.Ссылка; //Определяется в предыдущем кусе кода
  //Заполнение других реквизитов справочника
  ...
  ////////////////////
  Для k = 1 по КоличествоДополнительныхКолонок Цикл;
    СтрокаТЧДробная = СтрокаТЧ.НазначениеДробное.Добавить();
    СтрокаТЧДробная.ДатаНачала = ДатаНачалаИнтервала + (k-1)*3600*24;
    //Далее доп. код по заполнению другого поля табличной части с разными условиями
  КонецЦикла;
  СтрокаТЧ.Записать();
КонецЦикла;
1 НЕА123
 
17.04.13
15:30
(0)
ничего не понял, но скажу (с)
сделай у Объект тип СправочникОбъект.ТакойТо
2 tlg25
 
17.04.13
16:05
Вот теперь я не поняла.
У меня форма обработки.
У неё Объект имеет тип ОбработкаОбъект.ИмяМоейОбработки
А со справочниками я работаю с помощью процедур вызываемых по кнопкам.
Не понимаю, как изменение типа объекта может на них повлиять.
(На всякий случай, предложенное Вами действие проделала, результат само собой не поменялся.)

P.S. Попробую объяснить ещё раз:
Пользователь хочет видеть табличную в виде дополнительных столбиков в списке(я изворачиваюсь и превращаю ему одну/несколько записей и табличной части в один/несколько столбцов дополнительых справа в списке). Поэтому не использую стандартные 1С формы, а рисую свою(привязанную к обработке). В ней создаю свою таблицу значений, куда записываю всё из справочника и его табличной части в том виде,  в котором хочет пользователь. Пользователь редактирует эту таблице значений. А потом нажимает мою кнопку "Сохранить" по которой, а анализирую, что он наделал в таблице значений и уже программно записываю в справочник и его табличную часть. И при записи периодически происходит описанная мной в исходном посте проблема.
3 grayshadow
 
17.04.13
17:12
а собсна где ссылка на записанный объект вставляется в ТЧ?
раз уж переменная СтрокаТЧ у нас является справочником :)
4 tlg25
 
17.04.13
18:18
(3) Название переменной СтрокаТЧ, да - путающее. Атавизм  от старой структуры БД. Строка ТЧ - сейчас строка справочника.
А НазначениеДробное - название табличной части этого справочника.

Я думала, что код СтрокаТЧ.НазначениеДробное.Добавить()
автоматом привязывает табличную часть к нужной строке справочника. Собственно в половине случаев он как раз привязывает полностью как надо.
В остальных привязывает только наполовину - визуально на экране стандартной формы элемента справочника вижу их как строки табличной части, а вот ссылка не заполнена.
Когда я обращаюсь к строке табличной части у меня после точки нет возможности написать слово "Ссылка" - 1С ругается, если пишу его от руки, а автоматом выдаёт набор всех реквизитов табличной части только.

Имя_табличной_части.Ссылка 1С разрешает мне писать в только в запросе. И там с ним работает. Я уже думала принудительно ещё раз самой присваивать значение ссылке, но 1С не дал. Может быть надо какие-то галочки выставить в настройках, чтобы поле Ссылка табличной части стало видимым и доступным для редактирования из программного кода?
5 grayshadow
 
17.04.13
18:38
СтрокаТЧ.НазначениеДробное.Добавить() - привязывает:)
я прально поняла, что в ТЧ элемента справочника СтрокаТЧ хранится ссылка на тот же самый элемент СтрокаТЧ? зачем?!
6 grayshadow
 
17.04.13
18:41
маленько для ясности: ТЧ.Ссылка - ссылка на объект, к которому привязана ТЧ (в данном случае элемент справочника СтрокаТЧ). Это зашито в платформу. Никаких колонок по имени "Ссылка" в ТЧ не должно быть.
7 tlg25
 
17.04.13
18:45
(5) Она не мной хранится, я не создаю такое поле(реквизит) в табличной части.
А автоматом 1С-м. Только видимо как-то хитро хранится. Не в виде доступного реквизита.
Специально дополнительно реквизит для ссылки в табличной части я, естественно, не создаю.
Но когда я разбиралась с тем, как писать запросы к справочникам с табличной частью то увидела, что там используется слово "Ссылка"
*******
ВЫБРАТЬ * ИЗ Справочник.Назначения_детализация КАК нд ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Назначения_детализация.НазначениеДробное КАК ндд    
ПО нд.Ссылка=ндд.Ссылка ГДЕ Владелец=&Назначение
***

Моя проблема в том, что это зашитое в платформу не всегда зашивается. В половине случаев запрос возвращает результат. В половине изначально нет, и только когда я схожу в форму элемента справочника, увижу там мою табличную часть добавленную ранее программно и нажму "Записать и закрыть", запрос начинает данные возвращать.
8 grayshadow
 
17.04.13
18:48
а что возвращает запрос
выбрать * из Справочник.Назначения_детализация.НазначениеДробное ?
9 grayshadow
 
17.04.13
18:52
и вообще, почему не так:
ВЫБРАТЬ * из Справочник.Назначения_детализация.НазначениеДробное КАК ндд    
ГДЕ ндд.ссылка.Владелец=&Назначение
?
10 tlg25
 
17.04.13
18:58
(9) Не так, потому что в результате запросы мне нужны данные из из строки справочника и из табличной части.
Но, да, выполнила Ваш запрос без связки с самим справочником, только выбор из табличной части, вернул пустоту.

Спасибо Вам большое! Она по ходу вообще незаписывает в табличную, а в форме элемента у меня там особый обработчик, про который напрочь забыла, который
11 tlg25
 
17.04.13
19:00
(9) Не записывает в табличную часть.
а в форме элемента у меня там особый обработчик, про который напрочь забыла, который добавляет 1 строку в табличную часть при создании формы, если там ничего нет.

P.S. Первый день пишу на форму(а не только читаю), пока не разобралась, как редактировать сообщения или удалять, если случайно отправилось недописанное.
12 grayshadow
 
17.04.13
19:00
>из строки справочника и из табличной части
в моем запросе все реквизиты справочника, которые не в ТЧ, можно получить через Ссылка.Реквизит
нз:)
13 tlg25
 
17.04.13
19:02
(12) Учту про "Ссылка.Реквизит", спасибо. Не так давно перешла на 1С, в тех СУБД, с которыми раньше работала не было понятия табличной части у таблицы.
14 grayshadow
 
17.04.13
19:03
ВЫБРАТЬ
ндд.Ссылка,
ндд.Ссылка.Наименование,
ндд.РеквизитТабличнойЧасти
из Справочник.Назначения_детализация.НазначениеДробное КАК ндд    
ГДЕ ндд.ссылка.Владелец=&Назначение
15 tlg25
 
17.04.13
19:09
(14) Да, это понятно.(Про то, как будет выглядеть запрос)

И Спасибо Вам огромное!
Нашла с Вашей помощью ошибку в программе!
Там некие if условия были, которые я опустила в своем примере, которые не выполнялись в ряде случаев(как раз иногда) и строка не записывалась в тч. А из-за забытой мной процедуры при открытии формы элемента, я видела оптическую иллюзию, что значение в строке ТС есть.(Оно добавлялось при при открытии формы(если изначально ТЧ пуста) и записывалось как раз при нажатии "Записать и закрыть"!!! :-) Простите, что отняла время.
16 grayshadow
 
17.04.13
19:12
еще раз, не за что, вы бы знали, сколько мне времени этот форум сэкономил... и до сих пор экономит частенько:)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn