7.7 ВПФ

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем n.s.gnedash, 3 окт 2012.

  1. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Добрый день!! делаю ВПФ в бухе, все вообще нормально, все работает, кроме одного момента

    Код:
    "Всего оказано услуг на сумму: " +
    СуммаПрописью(Док.Итог("Всего")) + ", в т.ч.: НДС - "+ СуммаПрописью(Док.Итог("НДС")) + ?(глПризнакУчетаНалога(Контекст, "НП")=1,", налог с продаж - "+СуммаПрописью(Док.Итог("НП")), "") + "." 
    это строка формируется в самом макете, при выводе на печать выдает ошибку


    Если ПустоеЗначение(Док.ВариантРасчетаНалогов) = 0 Тогда // выбран вариант
    {Глобальный модуль(6279)}: Поле агрегатного объекта не обнаружено (ВариантРасчетаНалогов)

    В отладчике все отрабатывает нормально и выводит значения.

    Как исправить ??
  2. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Хотя нет, вру.
    Когда отладчике проваливаюсь в
    Код:
    Функция глПризнакУчетаНалога(Док, Налог) Экспорт
    
    УчитыватьНалог = 1;
    Ставка = ПолучитьПустоеЗначение("Справочник.Ставки"+Налог);
    Если ПустоеЗначение(Док.ВариантРасчетаНалогов) = 0 Тогда // выбран вариант
    Ставка = Док.ВариантРасчетаНалогов.ПолучитьАтрибут("Ставка"+Налог);
    Если Ставка = глБезНалога(Налог) Тогда
    УчитыватьНалог = 0;
    КонецЕсли;
    КонецЕсли;
    
    Возврат УчитыватьНалог;
    
    КонецФункции // глПризнакУчетаНалога()
    
    Вычисляю Док = ГрупповойКонтекст

    после этой строки сразу выкидывает из процедуры и выводит макет с ошибкой
    ПустоеЗначение(Док.ВариантРасчетаНалогов) =0
  3. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Значит в отладчике открываем "Док" в "вычислителе выражений" и смотрим, какие у него есть реквизиты. Как вариант, смотрим "ТипЗначенияСтр(Док)" - может это контекст НЕ документа?
  4. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Вроде бы оно... Док.Док. ... но как быть?
    ТипЗначениеСтр(Док) = ГрупповойКонтекст
    Посмотреть вложение 12429

    Вложения:

  5. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Так сложно сказать. Нужно разбираться, почему сюда передается это значение (в отладчике есть возможность перейти на точку входа, а потом там поставить точку останова).

    Как вариант, в самом начале функции проверять переданное значение на корректность, если передано значение, которое все таки можно обработать, то обрабатываем его, например:
    Код:
    ТекДок = Док;
    Если ТипЗначенияСтр(Док) = "ГрупповойКонтекст" Тогда
    ТекДок = Док.Док;
    КонецЕсли.
    Хотя в данном условии, лучше выяснить, какой вид документа передается как контекст, и использовать:
    Код:
    Док.Вид() = "[Нужный вид документа]"
  6. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Я просто не могу понять почему вообще так получилось? это ведь типовая конфа, я просто делаю ВПФ на основе обычной.
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    [off]Там тоже сидят люди, и они тоже косячат. Могу только попробовать помочь исправить.[/off]
  8. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Пытаюсь пройтись отладчиком и посмотреть как формируется стандартная ПФ, но он не попадает в процедуру ПЕЧАТЬ. Я раз 10 пробовал по-всякому...
    всегда попадает на конец ф-ции ИтоговаяСтрока
    Посмотреть вложение 12439

    Вложения:

  9. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    закрой все, сохрани конфигурацию и пробуй еще раз
  10. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Сохранил конфу ( хотя там все ок, изменений нет) , все закрыл , в т.ч. конфигуратор.
    Открыл конфигуратор, в модуле дока нашел процедуру печать. Снизу кнопка ОткрытьМодульВОтладчике - открыл, поставил точку останова вначале процедуры Печать.
    При открытии документа в пользовательском режиме программа снова останавливается в конце функции ИтоговаяСтрока и точка останова, которую я ставил на процедуру печать исчезла.
    Ну да ладно. Ставлю снова точку останова на процеду печать, жму кнопку Печать и снова тоже самое. Моя точка исчезает, а останавливается в конце ф-ции ИтоговаяСтрока
  11. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Точки останова можно ставить только на исполняемые операторы.
    Нельзя на пустые строки, на определение процедур и функций, переменных.
    По скриншету - ставь точку на "Таб = ...."
  12. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    а на что вообще влияет вот это ?
    Код:
    глПризнакУчетаНалога(Контекст, "НП")=1,
    процедура, которая обрабатывает это
    Код:
    Функция глПризнакУчетаНалога(Док, Налог) Экспорт
    
    УчитыватьНалог = 1;
    Ставка = ПолучитьПустоеЗначение("Справочник.Ставки"+Налог);
    Если ПустоеЗначение(Док.ВариантРасчетаНалогов) = 0 Тогда // выбран вариант
    Ставка = Док.ВариантРасчетаНалогов.ПолучитьАтрибут("Ставка"+Налог);
    Если Ставка = глБезНалога(Налог) Тогда
    УчитыватьНалог = 0;
    КонецЕсли;
    КонецЕсли;
    
    Возврат УчитыватьНалог;
    
    КонецФункции // глПризнакУчетаНалога()
    Не могу пример состряпать, чтобы посмотреть различия... я убрал пока это из макета, результат вывода на печать типовой и моей впф одинаков.
  13. TopicStarter Overlay
    n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Все можно закрывать! Перенес из глобального модуля ф-ю глПризнакУчетаНалога в обработку и заменил
    Код:
    Док.Варианта РасчетаНалогов
    на
    Код:
    Док.Док.Варианта РасчетаНалогов
    спс Warder
  14. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Судя по коду "глПризнакУчетаНалога" - возвращает 1, если в справочнике номенклатура установлено значение по переданному налогу (в данном случае "НП"), иначе ноль.

Поделиться этой страницей