Имя: Пароль:
1C
1С v8
Баг в платформе. Метод ИзменитьРеквизиты
0 ImNotARobot
 
10.03.22
22:31
Добрый день. Пытаюсь программно создать колонку реквизита формы для реквизита формы с типом таблицы с типом РегистрБухгалтерииНаборЗаписей. При вызове метода ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов) реквизиты успешно создаются для формы, но при этом сбиваютя пути элементов формы (колонки) Регистра Бухгалтерии. Не помогает программное удлаение и создание заново элемента формы, при добавлении в поле путь встает не корректное значение. Заметил, что и при ручном добавлении колонки реквизита формы, новый реквизит добавляется в начало списка подчиненых реквизитов, хотя по идее должен был добавиться в конце. Собственно при ручном добавлении пути точно также сбиваются пути элементов формы.

Сталкивался ли кто с такой проблемой и находил ли пути обхода?

Единственое, что нашёл это вариант такой: вручную добавить колонку реквизита формы (добавиться в начало) и затем её скопировать (добавиться в конец), удалить первый реквизит и работать уже со вторым. Но мне всё таки требуется программное создание реквизита.

Не нашёл на 1С, чтобы эта ошибка была зарегистрирована, хотя это явный баг платформы.

Пробовал на платформе 8.3.20.1549 и 8.3.18.
1 ImNotARobot
 
10.03.22
22:33
(0) Случайно нажал Ctrl + Enter. Второе предложение следует читать так: Пытаюсь программно создать колонку реквизита формы для реквизита формы с типом РегистрБухгалтерииНаборЗаписей.
2 ImNotARobot
 
10.03.22
22:35
(0) Прошу прощения за кучу ошибок... Не успел проверить. Как написал выше: случайно нажал Ctrl + Enter.
3 hhhh
 
10.03.22
23:13
ИзменитьРеквизиты никак не влияет на визуальное отображение. Это вы наверно, когда добавляли элемент формы, накосячили. Как привязали элемент формы ваш к добавленному реквизиту?
4 Ненавижу 1С
 
гуру
10.03.22
23:15
(2) успокойтесь, придите в себя, сделайте паузу. Завтра напишите
5 ImNotARobot
 
11.03.22
11:08
(3) Как выяснилсоь - влияет.

Эксперимент легко повторить:
1. Нужно создать пустую обработку с формой
2. Добавить реквизит с типом РегистрБухгалтерииНаборЗаписей.<ИмяРегистра> или РегистрНакопленияНаборЗаписей.<ИмяРегистра>
3. В эту таблицу добавить свою колонку

Если колонка добавилась в начало списка, значит это баг и часть путей элементов формы таблицы собьются.
6 RomaH
 
naïve
11.03.22
11:30
(5) ну так - давай обработку
7 acht
 
11.03.22
11:33
(5) Черепашка яростно трындит.

&НаСервере
Процедура Команда1НаСервере()
    
    Сообщить("До:");
    Для Каждого Элемент Из Элементы.Реквизит1.ПодчиненныеЭлементы Цикл
        Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
            Сообщить(Элемент.Имя + " -> " + Элемент.ПутьКДанным);
        КонецЕсли;
    КонецЦикла;
    
    Реквизит = Новый РеквизитФормы("Тест", Новый ОписаниеТипов("Число"), "Реквизит1", "Тест заголовок");
    
    Добавлять = Новый Массив;
    Добавлять.Добавить(Реквизит);
    ИзменитьРеквизиты(Добавлять);
    
    Колонка = Элементы.Вставить("Реквизит1Тест", Тип("ПолеФормы"), Элементы.Реквизит1, Элементы.Реквизит1НомерСтроки);
    Колонка.ПутьКДанным = "Реквизит1.Тест";
    Колонка.Вид = ВидПоляФормы.ПолеНадписи;
    
    Сообщить("После:");
    Для Каждого Элемент Из Элементы.Реквизит1.ПодчиненныеЭлементы Цикл
        Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
            Сообщить(Элемент.Имя + " -> " + Элемент.ПутьКДанным);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

До:
Реквизит1НомерСтроки -> Реквизит1.НомерСтроки
Реквизит1Период -> Реквизит1.Период
Реквизит1ВидДвижения -> Реквизит1.ВидДвижения
Реквизит1Сотрудник -> Реквизит1.Сотрудник
После:
Реквизит1Тест -> Реквизит1.Тест
Реквизит1НомерСтроки -> Реквизит1.НомерСтроки
Реквизит1Период -> Реквизит1.Период
Реквизит1ВидДвижения -> Реквизит1.ВидДвижения
Реквизит1Сотрудник -> Реквизит1.Сотрудник

8.3.18.1520, 8.3.20.1674

Радиус рук.
8 ImNotARobot
 
11.03.22
12:37
(7) У меня такой результат после выполение вышего кода:

Реквизит1СубконтоКт1 -> Реквизит1.СубконтоКт1
До:
Реквизит1НомерСтроки -> Реквизит1.НомерСтроки
Реквизит1Период -> Реквизит1.Период
Реквизит1УточнениеПериода -> Реквизит1.УточнениеПериода
Реквизит1Организация -> Реквизит1.Организация
Реквизит1СчетДт -> Реквизит1.СчетДт
Реквизит1СубконтоДт1 -> Реквизит1.СубконтоДт1
Реквизит1СубконтоДт2 -> Реквизит1.СубконтоДт2
Реквизит1СубконтоДт3 -> Реквизит1.СубконтоДт3
Реквизит1ВалютаДт -> Реквизит1.ВалютаДт
Реквизит1ПодразделениеДт -> Реквизит1.ПодразделениеДт
Реквизит1ВалютнаяСуммаДт -> Реквизит1.ВалютнаяСуммаДт
Реквизит1КоличествоДт -> Реквизит1.КоличествоДт
Реквизит1СуммаНУДт -> Реквизит1.СуммаНУДт
Реквизит1СуммаПРДт -> Реквизит1.СуммаПРДт
Реквизит1СуммаВРДт -> Реквизит1.СуммаВРДт
Реквизит1СчетКт -> Реквизит1.СчетКт
Реквизит1СубконтоКт2 -> Реквизит1.СубконтоКт2
Реквизит1СубконтоКт3 -> Реквизит1.СубконтоКт3
Реквизит1ВалютаКт -> Реквизит1.ВалютаКт
Реквизит1ПодразделениеКт -> Реквизит1.ПодразделениеКт
Реквизит1ВалютнаяСуммаКт -> Реквизит1.ВалютнаяСуммаКт
Реквизит1КоличествоКт -> Реквизит1.КоличествоКт
Реквизит1СуммаНУКт -> Реквизит1.СуммаНУКт
Реквизит1СуммаПРКт -> Реквизит1.СуммаПРКт
Реквизит1СуммаВРКт -> Реквизит1.СуммаВРКт
Реквизит1Сумма -> Реквизит1.Сумма
Реквизит1Содержание -> Реквизит1.Содержание
Реквизит1НеКорректироватьСтоимостьАвтоматически -> Реквизит1.НеКорректироватьСтоимостьАвтоматически
Реквизит1СодержаниеАнглийское -> Реквизит1.СодержаниеАнглийское
После:
Реквизит1Тест -> Реквизит1.Тест
Реквизит1НомерСтроки -> Реквизит1.НомерСтроки
Реквизит1Период -> Реквизит1.Период
Реквизит1УточнениеПериода -> Реквизит1.УточнениеПериода
Реквизит1Организация -> Реквизит1.Организация
Реквизит1СчетДт -> Реквизит1.СчетДт
Реквизит1СубконтоДт1 -> Реквизит1.СубконтоДт1
Реквизит1СубконтоДт2 -> Реквизит1.Тест
Реквизит1СубконтоДт3 -> Реквизит1.СубконтоДт3
Реквизит1ВалютаДт -> Реквизит1.ВалютаДт
Реквизит1ПодразделениеДт -> Реквизит1.ПодразделениеДт
Реквизит1ВалютнаяСуммаДт -> Реквизит1.ВалютнаяСуммаДт
Реквизит1КоличествоДт -> Реквизит1.КоличествоДт
Реквизит1СуммаНУДт -> Реквизит1.СуммаНУДт
Реквизит1СуммаПРДт -> Реквизит1.СуммаПРДт
Реквизит1СуммаВРДт -> Реквизит1.СуммаВРДт
Реквизит1СчетКт -> Реквизит1.СчетКт
Реквизит1СубконтоКт1 -> Реквизит1.СубконтоКт1
Реквизит1СубконтоКт2 -> Реквизит1.Тест
Реквизит1СубконтоКт3 -> Реквизит1.СубконтоКт3
Реквизит1ВалютаКт -> Реквизит1.ВалютаКт
Реквизит1ПодразделениеКт -> Реквизит1.ПодразделениеКт
Реквизит1ВалютнаяСуммаКт -> Реквизит1.ВалютнаяСуммаКт
Реквизит1КоличествоКт -> Реквизит1.КоличествоКт
Реквизит1СуммаНУКт -> Реквизит1.СуммаНУКт
Реквизит1СуммаПРКт -> Реквизит1.СуммаПРКт
Реквизит1СуммаВРКт -> Реквизит1.СуммаВРКт
Реквизит1Сумма -> Реквизит1.Сумма
Реквизит1Содержание -> Реквизит1.Содержание
Реквизит1НеКорректироватьСтоимостьАвтоматически -> Реквизит1.НеКорректироватьСтоимостьАвтоматически
Реквизит1СодержаниеАнглийское -> Реквизит1.СодержаниеАнглийское

В полях Субконто2 ПутьКДанным слетел
Ошибка? Это не ошибка, это системная функция.