Имя: Пароль:
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) Всем все нравится! Просто создается впечатление, что ты пытаешься бежать вверх по эскалатору, который движется вниз)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший