Имя: Пароль:
1C
1C 7.7
v7: Обновление содержимого таблицы
0 ado
 
19.11.14
15:35
Есть обработка, с вводом данных через таблицу. Но таблица используется не в режиме ввода данных, а в обычном. РВД использовать не удобно, т.к. состав строк в таблице динамический и неоднородный.
В общем, устроено всё так: в обработке ячейки таблицы открывается диалог ввода значения, потом обновляется содержимое зависимых ячеек через Таблица.Область(). Вот соответствующий фрагмент кода:


Процедура ПересчитатьСтроку(НомерСтроки)
    ТекущийДокумент.ПолучитьСтрокуПоНомеру(НомерСтроки);
    Если ТекущийДокумент.Товар.КолВКор <> 0 Тогда
        ТекущийДокумент.КолКор_КонтПодОтгр = ТекущийДокумент.Количество_КонтПодОтгр/ТекущийДокумент.Товар.КолВкор;
    Иначе
        ТекущийДокумент.КолКор_КонтПодОтгр = 0;
    КонецЕсли;
    ТекущийДокумент.Сумма_КонтПодОтгр = ТекущийДокумент.Цена_КонтПодОтгр*ТекущийДокумент.Количество_КонтПодОтгр;
    ТекущийДокумент.Объем_КонтПодОтгр = ТекущийДокумент.Количество_КонтПодОтгр*ТекущийДокумент.Объем;
    ТекущийДокумент.Масса_КонтПодОтгр = ТекущийДокумент.Количество_КонтПодОтгр*ТекущийДокумент.Масса;
    
    Область = Таблица.Область(ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 30, ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 30);
    Область.Текст = ТекущийДокумент.Количество_КонтПодОтгр;
    Область.Расшифровка(СформироватьРасшифровкуЯчейки("Количество_КонтПодОтгр", ТекущийДокумент.Количество_КонтПодОтгр));
    Область = Таблица.Область(ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 29, ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 29);
    Область.Текст = ТекущийДокумент.КолКор_КонтПодОтгр;
    Область.Расшифровка(СформироватьРасшифровкуЯчейки("КолКор_КонтПодОтгр", ТекущийДокумент.КолКор_КонтПодОтгр));
    Область = Таблица.Область(ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 31, ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 31);
    Область.Текст = ТекущийДокумент.Объем_КонтПодОтгр;
    Область.Расшифровка(СформироватьРасшифровкуЯчейки("Объем_КонтПодОтгр", ТекущийДокумент.Объем_КонтПодОтгр));
    Область = Таблица.Область(ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 32, ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 33);
    Область.Текст = ТекущийДокумент.Масса_КонтПодОтгр;
    Область.Расшифровка(СформироватьРасшифровкуЯчейки("Масса_КонтПодОтгр", ТекущийДокумент.Масса_КонтПодОтгр));
    Область = Таблица.Область(ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 35, ПерваяСтрока+НомерСтроки+ТекущийДокумент.ТипСтроки, 36);
    Область.Текст = ТекущийДокумент.Сумма_КонтПодОтгр;
    Область.Расшифровка(СформироватьРасшифровкуЯчейки("Сумма_КонтПодОтгр", ТекущийДокумент.Сумма_КонтПодОтгр));
    Таблица.АктивнаяОбласть("Тест");
    
КонецПроцедуры // ПересчитатьСтроку

Процедура ОбработкаЯчейкиТаблицы(ЗначениеРасшифровки, ФлагСтандОбраб, Табл, Адрес)
    ФлагСтандОбраб = 0;
    Если ТипЗначенияСтр(ЗначениеРасшифровки) = "СписокЗначений" Тогда
        Дост = ЗначениеРасшифровки.Получить("Доступность");
        Если ПустоеЗначение(Дост) = 1 Тогда
            Возврат;
        ИначеЕсли Дост = 0 Тогда
            Возврат;
        Иначе
            ЗначениеЯчейки = ЗначениеРасшифровки.Получить("Значение");
            НомерСтроки = ЗначениеРасшифровки.Получить("НомерСтроки");
            ИмяЯчейки = ЗначениеРасшифровки.Получить("ИмяЯчейки");
            Если ИмяЯчейки = "Количество_КонтПодОтгр" Тогда
                Если ВвестиЗначение(ЗначениеЯчейки,"Введите количество", "Число", 14, 3) = 1 Тогда
                    ТекущийДокумент.ПолучитьСтрокуПоНомеру(НомерСтроки);
                    ТекущийДокумент.Количество_КонтПодОтгр = ЗначениеЯчейки;
                    ПересчитатьСтроку(НомерСтроки);
                КонецЕсли;    
            КонецЕсли;    
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры  



Проблема в следующем. В таблице в памяти все значения обновляются как надо, а вот в таблице на экране они обновляются только после того, как, например, форму обработки свернуть, и снова развернуть. Или перекрыть другой формй, или еще что в этом духе.
Внимание, вопрос. Как заставить 1С принудительно перерисовать табличку, которая прикреплена к форме обработки?
1 Banned
 
19.11.14
15:39
Показать() - не предлагать? )
Удивлён таким вопросом от тебя...
2 ado
 
19.11.14
15:40
(1) Фигвам. Показать() не работает для таблицы, прикрепленной к форме.
3 Banned
 
19.11.14
15:41
У меня работало...
4 Ёпрст
 
19.11.14
15:41
(2) ошибаешься
5 ado
 
19.11.14
15:46
6 Banned
 
19.11.14
15:47
О май год.
Ложное закрытие для кого придумали?
7 ado
 
19.11.14
15:57
(5) Упс. Почему-то в одном месте срабатывает, а в другом -- нет.
Если я при первом выводе таблицы Показать() вызываю, то вот такая ошибка получается, а если после обновления, то всё нормально. Что за фигня?
8 ado
 
19.11.14
16:02
В общем, нихрена не поняно, но, вроде, работает.
9 kupec
 
20.11.14
08:46
Таблица.Показать();                                                    
    Форма.Обновить(1);