Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Позиционирование строки Таблицы значений          
Sharzem Подменю пользователя
сообщение 28.06.14, 12:17
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Имеется форма обработки с Таблицей значения которая заполнена данными, строк в ней максимум до 100, с периодичностью в 10 сек. данные в ТЗ обновляются процедурой ПолучитьСравнитьУстановитьЗначение(), которая вызывается из ПроцедурыНаКакуюНужноОбратитьВнимание (). Проблема в следующем:

Есть глобальная переменная гпМодифицированно, с помощью которой я узнаю модифицировалась ли ТЗ или нет (1 - Модифицирована, 0 - Нет) и если ТЗ модифицированна то я ее сортирую и устанавливаю строку туда на каком месте (а точнее Справочнике) она стояла, а если не модифицирована - не вижу смысла применения ТЗ.ТекущаяСтрока(). В таком варрианте ТекущаяСтрока() всегда стает 1. Почему, если ПолучитьСтрокуПоНомеру() нигде не применяется ?

Причиной "нехотения" применения метода ТекущаяСтрока() когда гпМодифицированно = 0 является то, что при позиционировании Форма "потпрыгивает" (Строка ТЗ устанавливается по центру экрана), хотел бы это обойти в случае когда модификация ТЗ не происходит. Код ниже:

Процедура ПолучитьСравнитьУстановитьЗначение(прСтрока,прКолонка, прЗначение)
    лпНовЗначение = прЗначение;
лпЗначение = ТЗ.ПолучитьЗначение(прСтрока,прКолонка);
    Если лпНовЗначение <> лпЗначение Тогда
ТЗ.УстановитьЗначение(прСтрока,прКолонка,лпНовЗначение);
        гпМодифицированно = 1;
    КонецЕсли;
КонецПроцедуры

Процедура НаКакуюНужноОбратитьВнимание ()
    гпМодифицированно = 0;
    лпСтрока = ТЗ.ТекущаяСтрока();
    Если ТЗ.КоличествоСтрок() > 0 Тогда
        лпЗнач = ТЗ.ПолучитьЗначение(лпСтрока,"НекийСправочник");
    КонецЕсли;
    
    лпСпр = СоздатьОбъект "Справочник.НекийСправочник";
    лпСпр.ВыбратьЭлементы();
    Пока лпСпр.ПолучитьЭлемент() = 1 Цикл
        лпСтр = "";
        Если ТЗ.НайтиЭлемент(лпСпр.ТекущийЭлемент(),лпСтр,"НекийСправочник") = 1 Тогда
            ПолучитьСравнитьУстановитьЗначение(лпСтр,"НекаяКолонка", лпСпр.НекийРеквизит);
        Иначе
            ТЗ.НоваяСтрока();
            ТЗ.НекийСправочник = лпСпр.ТекущийЭлемент();
             ПолучитьСравнитьУстановитьЗначение(ТЗ.КоличествоСтрок(),"НекаяКолонка", лпСпр.НекийРеквизит);
        КонецЕсли;
    КонецЦикла
    Если гпМодифицированно = 1 Тогда
        ТЗ.Сортировать("НекийСправочник");
        лпСтр = "";
        лпТекСтрока = лпСтрока;
        Если ТипЗначенияСтр(лпЗнач) = "Справочник" Тогда
            лпСпр.НайтиЭлемент(лпЗнач);
            Если ТЗ.НайтиЗначение(лпСпр.ТекущийЭлемент(),лпСтр,"НекийСправочник") = 1 Тогда
                Если лпСтрока <> лпСтр Тогда
                    лпСтрока = лпСтр;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        лпСтрока = ?(лпСтрока=0,ТЗ.КоличествоСтрок(),лпСтрока);
        Если лпТекСтрока <> лпСтрока Тогда
            ТЗ.ТекущаяСтрока(лпСтрока);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры




Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Sharzem Подменю пользователя
сообщение 28.06.14, 13:28
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Мля, мой провтык, причиной является несовпадение значений, в процедуре ПолучитьСравнитьУстановитьЗначение() это привело к тому что гпМодифицированно всегда = 1 правильный код:

Процедура ПолучитьСравнитьУстановитьЗначение(прСтрока,прКолонка, прЗначение)


    лпНовЗначение = прЗначение;
    лпЗначение = ТЗ.ПолучитьЗначение(прСтрока,прКолонка);
//А вот здесь собственно и хранилась тайна

    Если ТипЗначенияСтр(лпНовЗначение) = "Строка" Тогда
         лпНовЗначение = СокрЛП(лпНовЗначение);
         лпЗначение = СокрЛП(лпЗначение);
    ИначеЕсли ТипЗначенияСтр(лпНовЗначение) = "Число" Тогда
         лпНовЗначение = Число(лпНовЗначение);
         лпЗначение = Число(лпЗначение);
    КонецЕсли;

//Конец тайны

    Если лпНовЗначение <> лпЗначение Тогда

        ТЗ.УстановитьЗначение(прСтрока,прКолонка,лпНовЗначение);


        гпМодифицированно = 1;
    КонецЕсли;

КонецПроцедуры


Извините что даром создал тему, но над данным вопросом бился со вчерашнего дня.



Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 27.04.24, 23:03
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!