Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
11 Дек 2017, 20:24
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: При выводе формы не видится переменная, описанная в модуле этой же формы  (Прочитано 6417 раз)

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

Оффлайн pfconst

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-20
  • Сайт: 
  • Профессия: Программист 7.7
Ситуация простейшая но непонятная ...
Есть 1С Предприятие версии 7.7 для  SQL (релиз 023, старый, но вполне рабочий :D)
Есть документ - Налоговая накладная
Есть раздел2 таблицы этого документа, где перебираются и выводятся строки с товаром  накладной...
В первой строке товара нужно выводить номер раздела налоговой накладной  - I (т.е.первый)
Во всех последующих строках этого раздела ничего выводить не нужно...

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

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

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

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



Оффлайн volodya1122

  • ***
  • Сообщений: 215
  • РЕПУТАЦИЯ: 31
  • КПД: 14%
  • Регистрация: 2011-01-24
  • Сайт: 
  • Профессия: Программист 7.7
я для себя решил этот вопрос по другому
В модуле перед Циклом выбора строк написал:
 
ПерваяСтрока = 1;

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

Оффлайн volodya1122

  • ***
  • Сообщений: 215
  • РЕПУТАЦИЯ: 31
  • КПД: 14%
  • Регистрация: 2011-01-24
  • Сайт: 
  • Профессия: Программист 7.7
после этого:
ВывестиСекцию("нужнаяСекция");
КонецЦикла;

Оффлайн pfconst

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-20
  • Сайт: 
  • Профессия: Программист 7.7
я для себя решил этот вопрос по другому
В модуле перед Циклом выбора строк написал:
 
ПерваяСтрока = 1;

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

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

Оффлайн prog1c7.7

  • Модератор
  • *****
  • Сообщений: 784
  • РЕПУТАЦИЯ: 260
  • КПД: 33%
  • ну - да , ну - да...
  • Регистрация: 2010-10-20
  • Сайт: 
  • Профессия: Программист 1С
неправильное обращение к строке.
модуль в студию, поправим

Оффлайн pfconst

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-20
  • Сайт: 
  • Профессия: Программист 7.7
неправильное обращение к строке.
модуль в студию, поправим
Весь модуль думаю смысла нет (большой), а вот процедуру печати этого модуля - пожалуйста....

//============================
Процедура Печать(Копии = 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

  • Модератор
  • *****
  • Сообщений: 784
  • РЕПУТАЦИЯ: 260
  • КПД: 33%
  • ну - да , ну - да...
  • Регистрация: 2010-10-20
  • Сайт: 
  • Профессия: Программист 1С
код конечно,... помолчим, ну да по проблемме,
вы  забанили вывестисекцию
используете функцию (либо процедуру) печатьсекции,
а переменную перваястрока туда не передали, и там не объявляли (в этой функции)
лучше верните вывестисекцию

Оффлайн pfconst

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-20
  • Сайт: 
  • Профессия: Программист 7.7
код конечно,... помолчим, ну да по проблемме,
вы  забанили вывестисекцию
используете функцию (либо процедуру) печатьсекции,
а переменную перваястрока туда не передали, и там не объявляли (в этой функции)
лучше верните вывестисекцию
1. На счет "кода" в целом  ничего сказать не могу, так как он не мой... (старый, но работает..,а раз работает...лучше не лезть без нужды... (хороший принцип)
2. Забаненная Секция1 здесь не причем...не в ней вывод номера раздела в данной таблице.
3. А вот правило "явно объявлять переменные" действительно никто не отменял...., я думал что простого присвоения значения переменной в теле модуля будет достаточно ...(давно не программировал на 1С, нужда заставила самого залезть... быстро подправить мелочь..)

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

Оффлайн prog1c7.7

  • Модератор
  • *****
  • Сообщений: 784
  • РЕПУТАЦИЯ: 260
  • КПД: 33%
  • ну - да , ну - да...
  • Регистрация: 2010-10-20
  • Сайт: 
  • Профессия: Программист 1С
прочитайте ВНИМАТЕЛЬНЕЕ: вы забанили ВЫВЕСТИСЕКЦИЮ
и пользуетесь функцией (либо процедурой)
ПЕЧАТЬСЕКЦИИ()

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

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

Оффлайн prog1c7.7

  • Модератор
  • *****
  • Сообщений: 784
  • РЕПУТАЦИЯ: 260
  • КПД: 33%
  • ну - да , ну - да...
  • Регистрация: 2010-10-20
  • Сайт: 
  • Профессия: Программист 1С


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
163 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
56 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
36 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
28 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 324
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal