Имя: Пароль:
1C
1С v8
ПолучитьИдентификатор() и НайтиПоИдентификатору(Инд)
0 Sasha_H
 
11.07.19
14:25
1С:Предприятие 8.3 (8.3.13.1644)

Вообщем делаю следующее:

Необходимо в табличной части формы добавить реквизит и чтобы в момент ПослеЗаписи этот реквизит там смог сохранится.
Реквизит добавлен (булево) Имя: "РеквизитыИзменены" - этот параметр свидетельствует о том, что надо перезаписать элементы справочника именно измененных строк.
Почему послеЗаписи - потому как сам документ который записуется должен войти в реквизит Элемента справочника каждой строки ТЧ. А поскольку документ В ПередЗаписью еще не записался то не можем передать туда ссылку на него. и еще куча других строк из документа уходят в справочник.

Поэтому выбран метод послезаписи.

Делаю следующее:

В реквизиты формы добавляю Реквизит с типом произвольный СтрокиРеквизитыИзменены
Перед записью запоминаю какие идентификаторы строк требуются.
После записи проверяю эти идентификаторы и в таблице формы взвожу флаги.

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    
    // Сохранение списка требующих перезаписи объектов характеристики
    //  поскольку метод ПослеЗаписи приводит к очистке реквизитов таблицы формы
    
    СтрокиРеквизитыИзменены = Новый Структура("ИдентификаторыСтрок", Новый Массив);
    МассивСтрок             = Объект.Характеристики.НайтиСтроки(Новый Структура("РеквизитыИзменены", Истина));
    
    Для Каждого СтрокаТЧ Из МассивСтрок Цикл
        
        СтрокиРеквизитыИзменены.ИдентификаторыСтрок.Добавить(СтрокаТЧ.ПолучитьИдентификатор());
        
    КонецЦикла;
    
КонецПроцедуры

//Вызвана из процедуры ПоСлеЗаписиНаСервере

&НаСервере
Процедура ОбновитьРеквизитыХарактеристик()

    // Возобновление флагов
    Для каждого Индекс Из СтрокиРеквизитыИзменены.ИдентификаторыСтрок Цикл
        
        СтрокаТЧ = Объект.Характеристики.НайтиПоИдентификатору(Индекс);
        Если СтрокаТЧ = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        
        СтрокаТЧ.РеквизитыИзменены = Истина;
        
    КонецЦикла;    
.................

А проблема странная. Работает но с одним дефектом:

ВНИМАНИЕ! Тут реально важна последовательность:
Если открыть форму (объект уже записан) и сделать сдвиг строки - Трындец не находит его идентификатора. Последующая перезапись все нормально сдвигай сколько угодно.

Если открыть форму перезаписать (не сдвигая) все работает. Сдвигаешь - работает!!!

Именно проблема в первом открытии - ссдвиг - Запись.
1 butterbean
 
11.07.19
14:31
>> А поскольку документ В ПередЗаписью еще не записался то не можем передать туда ссылку на него
открой для себя ПолучитьСсылкуНового()
2 Sasha_H
 
11.07.19
14:31
(0) Дополню. Пробовал как угодно.

Открыл форму - Запись, а потом сдвиг (проблема не проявлятся).

Почему-то жопа когда Открыть форму СДВИГ - ЗАПИСЬ (вот тут то и в методе НайтиПоИдентификатору = Неопределено)

и все проблема пропадает именно После первой записи. Можно сдвигать сколько угодно.
Если открыть - Записать - проблемы не будет.
Если открыть - Записать - Сдвинуть - Записать - не будет проблемы
Если открыть - Сдвинуть - Записать (проблема). Последующие сдвиги и перезаписи нет проблем.
3 Sasha_H
 
11.07.19
14:32
(1) Я думаю Вам следует открыть это! Потому как я не управляю Объектом и не создаю объект, а нахожусь в форме документа!
4 butterbean
 
11.07.19
14:33
(3) и?
5 Sasha_H
 
11.07.19
14:33
(4) И проверьте для себе - сделаете новых открытий!!!!
6 Sasha_H
 
11.07.19
14:36
ТекущийОбъект.ПолучитьСсылкуНового() и по факту какая ссылка получится будет отличаться!
7 Sasha_H
 
11.07.19
14:36
Данный метод рабочий только для создания объекта на программном уровне!
8 butterbean
 
11.07.19
14:37
(6) если предварительно не сделать УстановитьСсылкуНового(), то конечно будет отличаться
9 Sasha_H
 
11.07.19
14:38
(8) что за чушь вы тут несете!!!!
10 Sasha_H
 
11.07.19
14:38
ЭТО ФОРМА ДОКУМЕНТА. ПЛАТФОРМА САМА УПРАВЛЯЕТ ЭТОЙ ОПИРАЦИЕЙ!!
11 Жан Пердежон
 
11.07.19
14:39
конечно имхо, но ТС нам втирает какую-то дичь!
12 Sasha_H
 
11.07.19
14:41
Сбой исключительно странный и это повдение дикой именно в такой последовательности. Возможно это баг/фича этой платформы или серии платформ. или я туплю!
13 Sasha_H
 
11.07.19
14:42
Цуко хоть бери заводи свой идентификатор строки для идентифкатора!
14 fisher
 
11.07.19
14:59
(0) Предлагаю начать с другого конца - изложите в терминах бизнес-области какую бизнес-задачу вы изначально пытаетесь решить.
15 Жан Пердежон
 
11.07.19
15:06
идентификаторы после записи обновляются
16 Sasha_H
 
11.07.19
15:11
(15) Странно, а почему когда я последовательность другую делаю все работает. Я же дописал в посте (2) дополнение.

Проблема именно, когда открыть -Сдвинуть - записать.

Открыть - Записать - Сдвинуть -Записать Нет проблемы
17 lodger
 
11.07.19
15:12
(10) толсто троллите )
18 Жан Пердежон
 
11.07.19
15:36
(16) и кстати, у формы нет табличной части, тч есть у документов, справочников и т.д.
если у тебя тч документа - просто сохраняй номера строк
19 Sasha_H
 
11.07.19
15:49
(18) Таблица формы. В данном случае выступает ссылкой на табличную часть документа без какого либо преобразования.

Да пришлось с номером строки решить. Но экзотика проблемы явно есть в платформе.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой