Имя: Пароль:
1C
1С v8
не очищается поле табличного документа
,
0 LivingStar
 
30.07.13
10:48
На форме лежит поле табличного документа, в него вывожу секции отчета.
Перед каждом формировании отчета хочу очищать предыдущий результат.
Почему эта инструкция не очищает поле?

    ЭлементыФормы.ТабРезультат.Очистить();
1 Капитан О
 
30.07.13
10:49
ползут по пустыне три черепашки..
2 Rie
 
модератор
30.07.13
10:50
(0) Не очищает - и ничего не говорит?
А она точно выполняется?
3 LivingStar
 
30.07.13
10:53
(2) Так вот в этом то и дело, ошибки не выдает, и очищать не очищает. Формирую отчет, потом выбираю контрагента по которому нет данных. должно очиститься, а все остается на месте, отрабатывает только код и все. Точно выполняется !!!
4 mikecool
 
30.07.13
10:54
а так ТабРезультат.Очистить();
5 mikecool
 
30.07.13
10:55
(1) +1 )
6 Капитан О
 
30.07.13
10:56
Первая черепаха говорит: — Передо мной нет черепах, а за мной — две черепахи.
7 Maxus43
 
30.07.13
10:56
ну не бывает чудес жеж
8 Rie
 
модератор
30.07.13
10:57
(3) Не верю.
На форме точно есть поле табличного документа с именем ТабРезультат?
Именно в это поле табличного документа выводится отчёт?
"Точно выполняется!!!" - как проверено?
Что после выполнения получается в поле табличного документа? Два отчёта один за другим - или нечто иное?
9 LivingStar
 
30.07.13
10:58
(4) так пишет что переменная не определена ТабРезультат
10 LivingStar
 
30.07.13
10:59
(8) есть, в него выводится

ЭлементыФормы.ТабРезультат.Вывести(ОбластьСтрока1);
11 Rie
 
модератор
30.07.13
11:01
(10) И что получается-то в результате?
12 Любопытная
 
30.07.13
11:02
А почему через ЭлементыФормы все делается? Как-то странно
13 Godofsin
 
30.07.13
11:03
(12) Ну наверное потому что ТабРезультат не принадлежит к реквизитам объекта =)
14 Maxus43
 
30.07.13
11:03
(10) у ЭлементыФормы.ТабРезультат в свойствах в поле Данные - там смотри чего, и его очищай
15 Капитан О
 
30.07.13
11:04
(12) нормально
16 LivingStar
 
30.07.13
11:04
(11) данные если есть выводятся, если нет, отчет стоит со старым формированием
17 Любопытная
 
30.07.13
11:04
(13) Мне кажется - это какое-то легкое извращение
18 Rie
 
модератор
30.07.13
11:05
(16) А вот с этого места - поподробнее...
Если данные есть - то они выводятся _вместо_ (поверх, затирая) старого отчёта?
19 LivingStar
 
30.07.13
11:05
(14) метод Очистить() есть именно у Элементыформы.ТабРезультат, у данных наверное нет его...

вот процедура вывода:

Процедура ПечатьТз(ТабЗнач)
    Ном = 1;
    ЭлементыФормы.ТабРезультат.Очистить();
    ЭлементыФормы.ТабРезультат.ИмяПараметровПечати     = "ПАРАМЕТРЫ_ПЕЧАТИ_Возвраты";
    ЭлементыФормы.ТабРезультат.ОриентацияСтраницы      = ОриентацияСтраницы.Ландшафт;
    ЭлементыФормы.ТабРезультат.АвтоМасштаб                = Истина;
    ЭлементыФормы.ТабРезультат.ПолеСверху              = 0;
    ЭлементыФормы.ТабРезультат.ПолеСлева               = 0;
    ЭлементыФормы.ТабРезультат.ПолеСнизу               = 0;
    ЭлементыФормы.ТабРезультат.ПолеСправа              = 0;
    ЭлементыФормы.ТабРезультат.РазмерКолонтитулаСверху = 0;
    ЭлементыФормы.ТабРезультат.РазмерКолонтитулаСнизу  = 0;
    ЭлементыФормы.ТабРезультат.ФиксацияСверху          = 6;
    // Установка опций форматированной печати ->
    //ТабДок                             = Новый ТабличныйДокумент;    
    //ТабДок.ИмяПараметровПечати         = "ПАРАМЕТРЫ_ПЕЧАТИ_Возвраты";
    //ТабДок.Очистить();
    Макет                              = ПолучитьМакет("Макет");
    //ТабДок.ОриентацияСтраницы          = ОриентацияСтраницы.Ландшафт;
    //ТабДок.АвтоМасштаб                    = Истина;
    //ТабДок.ПолеСверху                  = 0;
    //ТабДок.ПолеСлева                   = 0;
    //ТабДок.ПолеСнизу                   = 0;
    //ТабДок.ПолеСправа                  = 0;
    //ТабДок.РазмерКолонтитулаСверху     = 0;
    //ТабДок.РазмерКолонтитулаСнизу      = 0;
    // <-
    // Определение областей шапки печатной формы макета ->
    ОбластьШапка1                         = Макет.ПолучитьОбласть("Шапка|Первая");
    ОбластьШапка2                         = Макет.ПолучитьОбласть("Шапка|Номер");
    ОбластьШапка3                         = Макет.ПолучитьОбласть("Шапка|НоменклатураВозврата");
    //ОбластьШапка4                         = Макет.ПолучитьОбласть("Шапка|Количество");
    ОбластьШапка5                         = Макет.ПолучитьОбласть("Шапка|КолЕдОтч");    
    ОбластьШапка6                         = Макет.ПолучитьОбласть("Шапка|Сумма");
    ОбластьШапка7                         = Макет.ПолучитьОбласть("Шапка|ТипВозврата");
    ОбластьШапка8                         = Макет.ПолучитьОбласть("Шапка|Контрагент");
    ОбластьШапка9                         = Макет.ПолучитьОбласть("Шапка|ТорговаяТочка");
    ОбластьШапка10                     = Макет.ПолучитьОбласть("Шапка|ТА");
    //
    ОбластьШапка2.Параметры.ДатаНач    = ФОРМАТ(ЭлементыФормы.ДатаНач.Значение, "ДЛФ=Д");
    ОбластьШапка2.Параметры.ДатаКон       = ФОРМАТ(ЭлементыФормы.ДатаКон.Значение, "ДЛФ=Д");
    Если ФильтрСкладов.Количество() <> 0 Тогда
        Для каждого Стр Из ФильтрСкладов Цикл
            Если Стр.НомерСтроки = 1 Тогда
                ПереченьСкладов    = СокрЛП(Стр.Склад);
            Иначе
                ПереченьСкладов    = ПереченьСкладов +", "+ СокрЛП(Стр.Склад);
            КонецЕсли;
        КонецЦикла;
    Иначе
        ПереченьСкладов    = "По всем";
    КонецЕсли;
    Если ФильтрНоменклатуры.Количество() <> 0 Тогда
        Для каждого Стр Из ФильтрНоменклатуры Цикл
            Если Стр.НомерСтроки = 1 Тогда
                ПереченьНоменклатуры = СокрЛП(Стр.Номенклатура);
            Иначе
                ПереченьНоменклатуры = ПереченьНоменклатуры +", "+ СокрЛП(Стр.Номенклатура);
            КонецЕсли;
        КонецЦикла;
    Иначе
        ПереченьНоменклатуры = "По всей";
    КонецЕсли;
    ОбластьШапка2.Параметры.Склад        = ПереченьСкладов;
    ОбластьШапка2.Параметры.Номенклатура = ПереченьНоменклатуры;
    Если ЗначениеЗаполнено(Контрагент) Тогда
        ОбластьШапка2.Параметры.Контрагент = Контрагент;
    Иначе
        ОбластьШапка2.Параметры.Контрагент = "По всем";
    КонецЕсли;
    Если ЗначениеЗаполнено(ТА) Тогда
        ОбластьШапка3.Параметры.ТА = ТА;    
    Иначе
        ОбластьШапка3.Параметры.ТА = "По всем";    
    КонецЕсли;
    // <-
    // Вывод областей шапки печатной формы макета ->
    // 1. Первая
    ЭлементыФормы.ТабРезультат.Вывести(ОбластьШапка1);
    // 2. Номер
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка2);
    // 3. НоменклатураВозврата
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка3);
    // 4. Количество
    //ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка4);
    // 5. КолЕдОтч
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка5);
    // 6. Сумма
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка6);
    // 7. ТипВозврата
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка7);
    // 8. Контрагент
    Если Не ЗначениеЗаполнено(Контрагент) или Контрагент.ЭтоГруппа Тогда
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка8);
    КонецЕсли;
    // 9. ТорговаяТочка
    //Если Не ЗначениеЗаполнено(ТА) Тогда
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка9);
    //КонецЕсли;
    // 10. ТА
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка10);
    // <-
    // 1.
    ОбластьСтрока1 = Макет.ПолучитьОбласть("Строка|Первая");
    // 2.
    ОбластьСтрока2 = Макет.ПолучитьОбласть("Строка|Номер");
    // 3.
    ОбластьСтрока3 = Макет.ПолучитьОбласть("Строка|НоменклатураВозврата");
    // 4.
    //ОбластьСтрока4 = Макет.ПолучитьОбласть("Строка|Количество");
    // 5.
    ОбластьСтрока5 = Макет.ПолучитьОбласть("Строка|КолЕдОтч");
    // 6.
    ОбластьСтрока6 = Макет.ПолучитьОбласть("Строка|Сумма");
    // 7.
    ОбластьСтрока7 = Макет.ПолучитьОбласть("Строка|ТипВозврата");
    // 8.
    ОбластьСтрока8 = Макет.ПолучитьОбласть("Строка|Контрагент");
    // 9.
    ОбластьСтрока9 = Макет.ПолучитьОбласть("Строка|ТорговаяТочка");
    // 10.
    ОбластьСтрока10 = Макет.ПолучитьОбласть("Строка|ТА");
    // вывод строк и столбцов макета печатной формы
    //
    Для каждого Стр из ТабЗнач Цикл
        // 1. Первая
        ЭлементыФормы.ТабРезультат.Вывести(ОбластьСтрока1);
        // 2. Номер
        ОбластьСтрока2.Параметры.Ном             = Ном;
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока2);
        // 3. НоменклатураВозврата
        ОбластьСтрока3.Параметры.Номенклатура    = Стр.Номенклатура;
        ОбластьСтрока3.Параметры.пНоменклатура   = Стр.Номенклатура;
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока3);
        // 4. Количество
        //ОбластьСтрока4.Параметры.Количество      = Стр.Количество;
        //ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока4);
        // 5. КолЕдОтч
        ОбластьСтрока5.Параметры.КолЕдОтч        = ФОРМАТ(Стр.КолЕдОтч, "ЧЦ=10; ЧДЦ=3");
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока5);
        // 6. Сумма
        ОбластьСтрока6.Параметры.Сумма           = Стр.Сумма;
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока6);
        // 7. ТипВозврата
        ОбластьСтрока7.Параметры.ТипВозврата     = Стр.ТипВозврата;
        ОбластьСтрока7.Параметры.пТипВозврата    = Стр.Ссылка;
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока7);
        // 8. Контрагент
        Если Не ЗначениеЗаполнено(Контрагент) или Контрагент.ЭтоГруппа Тогда
            ОбластьСтрока8.Параметры.Контрагент  = Стр.Контрагент;
            ОбластьСтрока8.Параметры.пКонтрагент = Стр.Контрагент;
            ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока8);
        КонецЕсли;
        // 9. ТорговаяТочка
        ОбластьСтрока9.Параметры.ТорговаяТочка   = Стр.ТорговаяТочка;
        ОбластьСтрока9.Параметры.пТорговаяТочка  = Стр.ТорговаяТочка;
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока9);
        // 10. ТА
        //Если Не ЗначениеЗаполнено(ТА) Тогда
            ОбластьСтрока10.Параметры.ТА         = Стр.ТА;
            ОбластьСтрока10.Параметры.пТА        = Стр.ТА;
            ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтрока10);
        //КонецЕсли;
        Ном = Ном + 1;
    КонецЦикла;
    ЭлементыФормы.ТабРезультат.ТолькоПросмотр = Истина;
КонецПроцедуры
20 Капитан О
 
30.07.13
11:05
(16) ещё один вопрос остался, соберись
21 Rie
 
модератор
30.07.13
11:06
(19) А эта замечательная процедура - при каких условиях вызывается?
22 Maxus43
 
30.07.13
11:07
(21) +1. наверняка туда и не заходит, если ТЗ пустая
23 LivingStar
 
30.07.13
11:08
(18) Ну да, переформировывая сформированный предварительно отчет.

(19) При нажатии кнопки сформировать она вызывается.
24 LivingStar
 
30.07.13
11:08
(22) заходит в любом случае, ставлю же точку останова, цикл перебора не срабатывает если нет строк в Тз
25 Капитан О
 
30.07.13
11:08
(23) вот там ты её и не вызываешь
26 Капитан О
 
30.07.13
11:09
хм, а это ловко придумано

Если ФильтрСкладов.Количество() <> 0 Тогда
        Для каждого Стр Из ФильтрСкладов Цикл
27 LivingStar
 
30.07.13
11:11
очистилась
28 Rie
 
модератор
30.07.13
11:11
(24) Если бы заходила в любом случае - то очищала бы.
Значит, не заходит.
Код обработчика нажатия кнопки покажи.
29 Любопытная
 
30.07.13
11:13
(27)Мистика :)
30 Капитан О
 
30.07.13
11:14
а я такую мистику наблюдаю при редактировании обработки с запущенной отладкой
31 Любопытная
 
30.07.13
11:15
(30) Думаешь ТС дописывал Очистить() после того, как посмотрел, что получилось?
32 Капитан О
 
30.07.13
11:16
(31) ТС - легенда, от него всего можно ожидать
33 Infsams654
 
30.07.13
11:20
(12), (15) это не нормально, как впрочем (32)
34 LivingStar
 
30.07.13
11:20
(28)

Процедура КнопкаСформироватьНажатие(Кнопка)
    ЭлементыФормы.ТабРезультат.Очистить();
    Тз = СформироватьТзЗапроса();
    Если Тз <> 0 Тогда
        ПечатьТз(Тз);
    КонецЕсли;
КонецПроцедуры


вот сюда эту строку перенёс, стало очищать!!!
35 Капитан О
 
30.07.13
11:21
(34) поздравлять?
36 Maxus43
 
30.07.13
11:21
(34) Если Тз <> 0 Тогда
и зачем врал то?
37 Rie
 
модератор
30.07.13
11:21
(34) А ведь прав был (22)!
38 LivingStar
 
30.07.13
11:22
(36) я не врал не досмотрел просто... вот значит как, я то смотрю что точка останова через раз работает!!!
39 Rie
 
модератор
30.07.13
11:22
(34) Но ТЗ<>0 - это ты о чём?
40 Капитан О
 
30.07.13
11:23
СформироватьТЗ возвращает число. тоже ловко придумано
41 LivingStar
 
30.07.13
11:23
(39)

    Если Не Рез.Пустой() Тогда
        ТчВыборка = Рез.Выгрузить();
        Возврат ТчВыборка;
    КонецЕсли;
Возврат 0;    
КонецФункции
42 Rie
 
модератор
30.07.13
11:25
(41) Тогда понятно...
43 Любопытная
 
30.07.13
11:26
Это чтоб никто не догадался))
44 cw014
 
30.07.13
11:31
(41) Эээээ, это очень тонкое извращение
45 LivingStar
 
30.07.13
11:33
(44) Это прямая реализация, движение к цели, возможно что то не то попутно было придумано, или не совсем то, ко всему можно вернуться и переправить на то как желаемо. Что вам не нравится незнаю.
46 Infsams654
 
30.07.13
11:33
(43) Да, уж... Если уж функция возвращает значения разных типов, то по правильному надо при получении определять тип значения,
а так бы лучше
ТчВыборка = Новый ТаблицаЗначений();
далее заполнение как в (41)

а в приеме проверить
ТчВыборка.Количество()
47 Rie
 
модератор
30.07.13
11:35
(45) Да нет, что Вы, нравится! Я просто тащусь!..
48 Любопытная
 
30.07.13
11:37
(45) Всем все нравится! Просто создается впечатление, что ты пытаешься бежать вверх по эскалатору, который движется вниз)