Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 18:02

При выводе формы не видится переменная, описанная в модуле этой же формы

Автор pfconst, 20 мая 2011, 17:18

0 Пользователей и 1 гость просматривают эту тему.

pfconst

Ситуация простейшая но непонятная ...
Есть 1С Предприятие версии 7.7 для  SQL (релиз 023, старый, но вполне рабочий :D)
Есть документ - Налоговая накладная
Есть раздел2 таблицы этого документа, где перебираются и выводятся строки с товаром  накладной...
В первой строке товара нужно выводить номер раздела налоговой накладной  - I (т.е.первый)
Во всех последующих строках этого раздела ничего выводить не нужно...

Делаю следующее:

В таблице документа , в первую ячейку строки вывода заношу
?(ПерваяСтрока=1, "I","") и делаю значение ячейки выражением, - все элементарно ...

В модуле этого документа , в процедуре "Печать" определяю переменную ПерваяСтрока =0;
Непосредственно перед циклом переборки строк ввожу ПерваяСтрока=1;
а внутри цикла "Если", после окончания первого шага цикла обнуляю (для всех прочих строк товара)ПерваяСтрока =0;
Сохраняю конфигурацию...
Проверяю...
При печати документа (налоговой накладной) возникает ошибка
?(ПерваяСтрока<<?>>=1,"I","")
Переменная не определена (ПерваяСтрока)....

Что только не делал (в модуле естественно), (только с бубном не плясал) но переменная так и не видится... 
Буду рад выслушать советы...
У кого-нибудь есть мысли по этому поводу?


volodya1122

я для себя решил этот вопрос по другому
В модуле перед Циклом выбора строк написал:
 
ПерваяСтрока = 1;

В самом цикле
Пока ПолучитьСтроку() > 0 Цикл
.....
            Если ПерваяСтрока=1 тогда
            Номер1="I";
            иначе
            Номер1="";
             КонецЕсли;
             ПерваяСтрока=ПерваяСтрока+1;
На печатной форме просто вставил в ячейку Выражение  <Номер1>

volodya1122

после этого:
ВывестиСекцию("нужнаяСекция");
КонецЦикла;

pfconst

Цитата: volodya1122 от 20 мая 2011, 17:58
я для себя решил этот вопрос по другому
В модуле перед Циклом выбора строк написал:
 
ПерваяСтрока = 1;

В самом цикле
Пока ПолучитьСтроку() > 0 Цикл
.....
            Если ПерваяСтрока=1 тогда
            Номер1="I";
            иначе
            Номер1="";
             КонецЕсли;
             ПерваяСтрока=ПерваяСтрока+1;
На печатной форме просто вставил в ячейку Выражение  <Номер1>

Смешно, но делал и подобное...переменная только называлась по другому (Штамп)- результат тот же - не видится переменная Штамп...

prog1c7.7

неправильное обращение к строке.
модуль в студию, поправим

pfconst

Цитата: prog1c7.7 от 21 мая 2011, 15:52
неправильное обращение к строке.
модуль в студию, поправим
Весь модуль думаю смысла нет (большой), а вот процедуру печати этого модуля - пожалуйста....

//============================
Процедура Печать(Копии = 1)
//Перем ПечЦенаБезНДс, ПечсуммаБезскидки, ПечсуммаБезТранс, ПечсуммаТранс, ПечВозвТара,
   //ПечсуммаНадбавки, Печсуммаскидки, ПечИтогсуммаБезНДс, ПечИтогНДс, ПечИтогсуммасНДс, ПечВсего;

   ФирмаНалогНомер = Фирма.ИНН;
   ФирмаНомсвид = Фирма.Номерсвидетельства;
   КлиентНалогНомер = Клиент.ИНН;
   КлиентНомсвид = Клиент.Номерсвидетельства;
   Приложение1 = "";
   ПерваяСтрока = 0;

   Таб = создатьОбъект( "Таблица" );
   Если Число(ставкаНДс.Код) = 6 Тогда
      Таб.ИсходнаяТаблица("БезНДс");
   ИначеЕсли Число(ставкаНДс.Код) = 7 Тогда
      Таб.ИсходнаяТаблица("НДс0");
   Иначе
      Таб.ИсходнаяТаблица("НДс20");
   КонецЕсли;
    Если Валюта <> Гривня Тогда
       Таб.ИсходнаяТаблица("НДсЭкспорт");
   КонецЕсли;

   суммаНадбавки = ?(Итог("скидка")<0,-Итог("скидка"),0);
   суммаскидки = ?(Итог("скидка")>=0,Итог("скидка"),0);

   Для страница = Копии По Копии Цикл
      Если страница = 1 Тогда
         //Таб.Вывестисекцию( "Пробел" );
         //Таб.Вывестисекцию( "Оригинал" );
         Печатьсекции(Таб, "Пробел");
         Печатьсекции(Таб, "Оригинал");
      ИначеЕсли страница = 2 Тогда
         //Таб.Вывестисекцию( "Пробел" );
         //Таб.Вывестисекцию( "ПерваяКопия" );
         Печатьсекции(Таб, "Пробел");
         Печатьсекции(Таб, "ПерваяКопия");
      Иначе
         //Таб.Вывестисекцию( "Пробел" );
         //Таб.Вывестисекцию( "ВтораяКопия" );
         Печатьсекции(Таб, "Пробел");
         Печатьсекции(Таб, "ВтораяКопия");
      КонецЕсли;

      //Таб.Вывестисекцию( "ЗаглНалНаклад" );
      //Таб.Вывестисекцию( "Заголовок" );
      //Таб.Вывестисекцию( "сапка" );
      //Таб.Вывестисекцию( "НомераКол" );
      Печатьсекции(Таб, "ЗаглНалНаклад");
      Печатьсекции(Таб, "Заголовок");
      Печатьсекции(Таб, "сапка");
      Печатьсекции(Таб, "НомераКол");

      
      Выбратьстроки();
      //Таб.Вывестисекцию("РазделI1");
      Печатьсекции(Таб, "РазделI1");

      ТранссуммаБезНДс = 0;
      ТранссуммасНДс = 0;
      ТрансНДс = 0;
        ПерваяСтрока = 1; // установим для первой строки
         
      Пока ( Получитьстроку() > 0 ) Цикл
         Если ТМЦ.Вид()="ТМЦ" Тогда
            Если ТМЦ.Транспорт = Нет Тогда
               ЕдИзм = Ед;
               Если Валюта <> Гривня Тогда
                  ПечЦенаБезНДс = Формат(Пересчет(ЦенаБезНДс*Коэффициент,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
                  ПечсуммаБезскидки = Формат(Пересчет(суммаБезскидки,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
               КонецЕсли;       
               //Таб.Вывестисекцию("РазделI2");
               Печатьсекции(Таб, "РазделI2");
            Иначе
               ТранссуммаБезНДс = ТранссуммаБезНДс + суммаБезНДс;
               ТранссуммасНДс = ТранссуммасНДс + суммасНДс;
               ТрансНДс = ТрансНДс + НДс;
            КонецЕсли;
         Иначе
            ЕдИзм = ТМЦ.БазЕдиница;
            Если Валюта <> Гривня Тогда
               ПечЦенаБезНДс = Формат(Пересчет(ЦенаБезНДс*Коэффициент,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
               ПечсуммаБезскидки = Формат(Пересчет(суммаБезскидки,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
            КонецЕсли;
            //Таб.Вывестисекцию("РазделI2");
            Печатьсекции(Таб, "РазделI2");
         КонецЕсли;
         ПерваяСтрока =0; // сбросим для всех остальных строк
      КонецЦикла;
      Если Валюта <> Гривня Тогда
         ПечсуммаБезТранс = Формат(Пересчет(Итог("суммаБезскидки")-ТранссуммаБезНДс,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечсуммаТранс = Формат(Пересчет(ТранссуммаБезНДс,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечВозвТара = Формат(Пересчет(ВозвТара,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечсуммаНадбавки = Формат(Пересчет(суммаНадбавки,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         Печсуммаскидки = Формат(Пересчет(суммаскидки,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечИтогсуммаБезНДс = Формат(Пересчет(Итог("суммаБезНДс"),Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечИтогНДс = Формат(Пересчет(Итог("НДс"),Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечИтогсуммасНДс = Формат(Пересчет(Итог("суммасНДс"),Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
         ПечВсего = Формат(Пересчет(Итог("суммасНДс")+ВозвТара,Валюта,Гривня,Курс,ДатаДок),"Ч12.2");
      КонецЕсли;
      //Таб.Вывестисекцию( "РазделIВсего" );
      //Таб.Вывестисекцию( "ТовТранс" );
      //Таб.Вывестисекцию( "ВозврТара" );
      //Таб.Вывестисекцию( "Надбавка" );
      //Таб.Вывестисекцию( "ВсегоПоI_II_IV" );
      //Таб.Вывестисекцию( "НДс" );
      //Таб.Вывестисекцию( "Общаясумма" );
      //Таб.Вывестисекцию( "Подвал" );
      
      Печатьсекции(Таб, "РазделIВсего");
      Печатьсекции(Таб, "ТовТранс");
      Печатьсекции(Таб, "ВозврТара");
      Печатьсекции(Таб, "Надбавка");
      Печатьсекции(Таб, "ВсегоПоI_II_IV");
      Печатьсекции(Таб, "НДс");
      Печатьсекции(Таб, "Общаясумма");
      Печатьсекции(Таб, "Подвал");

      Если страница <> 2 Тогда
         Таб.Новаястраница();
      КонецЕсли;

   КонецЦикла;

   Таб.Опции(0, 0, 0, 0) ;
   //Таб.Параметрыстраницы(1,,,,,,,,);
   Таб.Защита(Константа.ФлагЗащитыТаблиц);
   Таб.ТолькоПросмотр(1);
   УстановкаПараметровстраницы(Таб);
   Таб.Показать("Печать налоговой накладной","");
   
   Если СокрЛП(Форма.Параметр)="2" тогда
      Таб.Напечатать(0);
      Таб.Показать("",,-1);
      Форма.Закрыть(0);
   КонецЕсли;
КонецПроцедуры

prog1c7.7

код конечно,... помолчим, ну да по проблемме,
вы  забанили вывестисекцию
используете функцию (либо процедуру) печатьсекции,
а переменную перваястрока туда не передали, и там не объявляли (в этой функции)
лучше верните вывестисекцию

pfconst

Цитата: prog1c7.7 от 23 мая 2011, 13:44
код конечно,... помолчим, ну да по проблемме,
вы  забанили вывестисекцию
используете функцию (либо процедуру) печатьсекции,
а переменную перваястрока туда не передали, и там не объявляли (в этой функции)
лучше верните вывестисекцию
1. На счет "кода" в целом  ничего сказать не могу, так как он не мой... (старый, но работает..,а раз работает...лучше не лезть без нужды... (хороший принцип)
2. Забаненная Секция1 здесь не причем...не в ней вывод номера раздела в данной таблице.
3. А вот правило "явно объявлять переменные" действительно никто не отменял...., я думал что простого присвоения значения переменной в теле модуля будет достаточно ...(давно не программировал на 1С, нужда заставила самого залезть... быстро подправить мелочь..)

В целом - большое спасибо за подсказку и потраченное время...

prog1c7.7

прочитайте ВНИМАТЕЛЬНЕЕ: вы забанили ВЫВЕСТИСЕКЦИЮ
и пользуетесь функцией (либо процедурой)
ПЕЧАТЬСЕКЦИИ()

где вы в моем посте нашли - Забаненная Секция1 ???

явное объявление переменной - здесь зачем?
верните Таб.Вывестисекцию
Вы же не вникли, отсюда и полемика

prog1c7.7


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск