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

Ошибки в 1С платформе 8.3.14.1630 управляемое приложение

Ошибки в 1С платформе 8.3.14.1630 управляемое приложение
Я
   koshka1967
 
14.03.19 - 07:52
Если в любой конфигурации(в т.ч.самописной) в обработке создается табличная часть и в ней,если мы загрузили данные в нее, то при удалении этих данных методами Очистить() или Удалить(индекс)производится неправильный расчет индексов данных этой табличной части.Когда удаления или после полной очистки табличной части добавляются новые данные (методом Добавить()), то они имеют несуществующий индекс(он просто плюсуется).В табличной части имеется только одна строка, а индекс имеет значение > 1.При первичной загрузке данных методом Загрузить() такого нет.
Текст обработки для управляемого приложения:
&НаКлиенте
Процедура КомандаУдалитьВсе(Команда)
    ЭтаФорма.Объект.ТабличнаяЧасть1.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура КомандаУдалить(Команда)
    Для i=0 по ЭтаФорма.Объект.ТабличнаяЧасть1.Количество()-1  Цикл
        ЭтаФорма.Объект.ТабличнаяЧасть1.Удалить(0);
    КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаполнить(Команда)
    Стр = ЭтаФорма.Объект.ТабличнаяЧасть1.Добавить();
    Стр.ЗначСтрока = "1 строка";    
    Стр = ЭтаФорма.Объект.ТабличнаяЧасть1.Добавить();
    Стр.ЗначСтрока = "2 строка";
    Стр = ЭтаФорма.Объект.ТабличнаяЧасть1.Добавить();
    Стр.ЗначСтрока = "3 строка";
    Стр = ЭтаФорма.Объект.ТабличнаяЧасть1.Добавить();
    Стр.ЗначСтрока = "4 строка";
    Стр = ЭтаФорма.Объект.ТабличнаяЧасть1.Добавить();
    Стр.ЗначСтрока = "5 строка";
//либо использовать метод  ЭтаФорма.Объект.ТабличнаяЧасть1.Загрузить(ПеремТаблицаЗначений);
КонецПроцедуры
&НаКлиенте
Процедура КомандаИндекс(Команда)
    ВрИндекс = ЭтаФорма.Элементы.ТабличнаяЧасть1.ТекущаяСтрока;
    сообщить("Текущий индекс="+Строка(ВрИндекс));
    сообщить("Значение 1 строки="+ЭтаФорма.Объект.ТабличнаяЧасть1.Получить(0).ЗначСтрока);
    сообщить("Значение текущей строки=ошибка");
    сообщить(ЭтаФорма.Объект.ТабличнаяЧасть1.Получить(ВрИндекс).ЗначСтрока);
КонецПроцедуры
 
 
   catena
 
1 - 14.03.19 - 08:28
А почему вы решили, что текущая строка таблицы на форме вернет индекс табличной части?
   SilentMan
 
2 - 14.03.19 - 09:22
(0) Абсолютно нормальное поведение. Индекс - это не номер. Есть метод получения строки по индексу.
   d4rkmesa
 
3 - 14.03.19 - 09:26
(0) Это нормально. Во типовых обычно есть функция получения максимального индекса таблицы формы.
   d4rkmesa
 
4 - 14.03.19 - 09:32
(3) К примеру, таким образом:
МаксимальныйИдентификатор = Объект.ТабличнаяЧасть1.Получить(Объект.ТабличнаяЧасть1.Количество() - 1).ПолучитьИдентификатор()
   Smile 8D
 
5 - 14.03.19 - 09:51
(0) Это нормальное поведение системы и появилось оно задолго до 8.3. Нужно просто понять, что есть два отдельных понятия "Номер строки" и "Идентификатор строки". Соответственно, почитать чем они отличаются, в каком случае что следует использовать.
   koshka1967
 
6 - 14.03.19 - 11:31
А Вы проверяли обработку на попытку удаления строки и добавления новой строки? И как обратиться к строке как не по ее индексу, а не по идентификатору.А индекс строки  формируется по ее номеру.
   craxx
 
7 - 14.03.19 - 11:32
(0) Это штатное поведение.
   sqr4
 
8 - 14.03.19 - 11:33
(6) пишите в 1с, пусть исправляют)
   sieben
 
9 - 14.03.19 - 11:45
(4) Ужас-то какой...
Сам-то пробовал? Ну там, строку ввести/удалить, вверх/вниз поперемещать?
   d4rkmesa
 
10 - 14.03.19 - 12:04
(9) Зависит от задачи, если требуется определить макс. идентификатор до интерактивных пользовательских действий, то норм.
   sieben
 
11 - 14.03.19 - 12:11
(10) То есть разные программные .Вставить, .Сортировать и прочие .Сдвинуть ты в принципе не рассматриваешь. Ну ок. Сопровождающие твой код поставят тебе памятник.
   catena
 
12 - 14.03.19 - 12:21
(6)Все потому, что ТекущаяСтрока возвращает Индентификатор, по нему и надо связываться.
Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(Элементы.ТабличнаяЧасть1.ТекущаяСтрока)


ТаблицаФормы (FormTable)
ТекущаяСтрока (CurrentRow)
Использование:

Чтение и запись.
Описание:

Тип: Произвольный.
Идентификатор текущей строки таблицы.
   d4rkmesa
 
13 - 14.03.19 - 12:24
(11) Еще раз, для недостаточно сообразительных. Если все что ты перечислил не используется, то оно не нужно. Ибо нефиг плодить сущности.
   koshka1967
 
14 - 14.03.19 - 16:29
1.Метод ЭтаФорма.Элементы.ТабличнаяЧасть1.ТекущаяСтрока возвращает индекс текущей строки, а не идентификатор.
2.Метод Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(Элементы.ТабличнаяЧасть1.ТекущаяСтрока) возвращает ДанныеФормыЭлементКоллекции, а мне нужно индекс, т.к.Метод ЭтаФорма.Объект.ТабличнаяЧасть1.Удалить(ИндексТекущейСтроки) удаляет строку по индексу, а если не удалять то и индексы методом ЭтаФорма.Элементы.ТабличнаяЧасть1.ТекущаяСтрока считаются правильно. А при удалении они не пересчитываются.
   Garykom
 
15 - 14.03.19 - 17:02
Мне вот интересно как много еще "программистов 1С" не понимают что "Объект" и элементы на "Управляемой форме" это в тонком клиенте очень-очень разная штука?
   Garykom
 
16 - 14.03.19 - 17:03
ЭтаФорма.Элементы.ТабличнаяЧасть1 vs ЭтаФорма.Объект.ТабличнаяЧасть1

юмористы
   sqr4
 
17 - 14.03.19 - 17:04
(15) у них даже окошки разные, один справа а другие слева)
   sieben
 
18 - 14.03.19 - 17:12
(15) "Ибо нефиг плодить сущности" (c) d4rkmesa
(:
   Garykom
 
19 - 14.03.19 - 17:17
(18) Клиент-сервер полноценные заставляют плодить.
1С УФ это трехзвенка очень похожая на веб.
Страничка в браузере на html/js + серверная часть на чем то (php, nodejs и т.д.) + sql база на sql сервере
   ssh2006
 
20 - 14.03.19 - 17:19
(0) всего то надо почитать документацию
   sieben
 
21 - 14.03.19 - 19:34
(19) "Еще раз, для недостаточно сообразительных. Если все что ты перечислил не используется, то оно не нужно." (c) d4rkmesa
(:
   d4rkmesa
 
22 - 14.03.19 - 20:13
(16) Допустим, нужно и то, и другое, идентификатор строки - единственное, посредством чего можно соотнести одно с другим.
(21) Хочешь еще поржать? Держи:

Процедура ПолеПоискаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
    
    Если Не ЗначениеЗаполнено(Текст) Тогда
        Возврат
    КонецЕсли;
    
    ТекущийИдСтроки = ?(Элементы.ТаблицаДокументы.ТекущаяСтрока = Неопределено, 0, Элементы.ТаблицаДокументы.ТекущаяСтрока);
    МаксимальныйИдентификатор = Объект.ОбрабатываемыеДокументы.Получить(Объект.ОбрабатываемыеДокументы.Количество() - 1).ПолучитьИдентификатор();
    
    ПоискНеСНачала = (ТекущийИдСтроки <> 0);
    
    НайденныйИд = Неопределено;
    
    Для ид = ?(ПоискНеСНачала, ТекущийИдСтроки + 1, ТекущийИдСтроки) По МаксимальныйИдентификатор Цикл
        
        ТекСтр = Объект.ОбрабатываемыеДокументы.НайтиПоИдентификатору(ид);
        
        Если ТекСтр = Неопределено Тогда
            Продолжить
        КонецЕсли;        
        
        Если Найти(ТекСтр.Ссылка, Текст) > 0
            ИЛИ Найти(ТекСтр.Комментарий, Текст) > 0 Тогда
            
            НайденныйИд = ид;
            Прервать
            
        КонецЕсли;        
            
        Если ПоискНеСНачала И (ид = МаксимальныйИдентификатор) Тогда
            
            ПоказатьВопрос(Новый ОписаниеОповещения("ПовторитьПоискСНачала", ЭтаФорма), "Достигнута последняя строка, повторить поиск с начала?", РежимДиалогаВопрос.ДаНет);
            Возврат
            
        КонецЕсли;
        
    КонецЦикла;
    
    Если ЗначениеЗаполнено(НайденныйИд) Тогда
        Элементы.ТаблицаДокументы.ТекущаяСтрока = НайденныйИд;
    Иначе
        ПоказатьПредупреждение(,СтрШаблон("Строка ""%1"" не найдена!", Элементы.ПолеПоиска.ТекстРедактирования));
    КонецЕсли;
    
КонецПроцедуры
   Новиков
 
23 - 14.03.19 - 20:39
(22) и что делает это дерьмо?
   catena
 
24 - 15.03.19 - 05:15
(14)СП врет, наверное.

ТаблицаФормы (FormTable)
ТекущаяСтрока (CurrentRow)
Использование:

Чтение и запись.
Описание:

Тип: Произвольный.
Идентификатор текущей строки таблицы.


СП вообще полезная штука:

ДанныеФормыСтруктураСКоллекцией (FormDataStructureAndCollection)
Индекс (IndexOf)
Синтаксис:

Индекс(<Элемент>)
Параметры:

<Элемент> (необязательный)

Тип: ДанныеФормыЭлементКоллекции.
Элемент коллекции, индекс которого требуется получить.
   Filippov
 
25 - 15.03.19 - 08:25
(0) Только зарегистрировался - и сразу же 3 ошибки 1С. То ли ещё будет?


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