Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ПолучитьИдентификатор() и НайтиПоИдентификатору(Инд)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да пришлось с номером строки решить. Но экзотика проблемы явно есть в платформе.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.