Имя: Пароль:
1C
1C 7.7
v7: Ошибка "переменная не определена" во внешнем отчете
0 kapez
 
09.08.12
07:46
Не могу понять почему не работает, а только выдает ошибки


//*******************************************
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
   Перем ЕстьИЗДЕЛИЯ;
  Перем ЕстьУСЛУГИ;
  Перем ЕстьТОВАР;  
 
  СтатусВозврата(0);

  АдресТелефон = "";
  глДобавитьРеквизит(АдресТелефон, "Адрес: ", глПредставлениеАдреса(Константа.АдресОрганизации));
  глДобавитьРеквизит(АдресТелефон, ", тел.: ", Константа.ТелефоныОрганизации);
 
  ПоставщикРасчСчет = "";
  ПоставщикИНН = "";
  ПоставщикКПП = "";
  ПоставщикБанк = "";
  Кредит = "";
  ПоставщикБанкБИК = "";
  ПоставщикБанкКорсчет = "";
  Услуга = " ";
  Изделия =" ";
  Товар = " ";
  глПлатежныеРеквизиты(Докум.РасчетныйСчет, ПоставщикРасчСчет, ПоставщикБанк, Кредит, ПоставщикБанкБИК, ПоставщикБанкКорсчет, ПоставщикИНН, ПоставщикКПП,2);

  Если (Докум.Валюта.Выбран() = 1) и (Докум.Валюта <> глРубли) Тогда
     КурсПеч = "Курс: " + Докум.Курс;
  Иначе
     КурсПеч = "";
  КонецЕсли;

  Таб = СоздатьОбъект("Таблица");

     Таб.ИсходнаяТаблица("Таблица");
 
     Таб.ВывестиСекцию("Шапка");
 
     Докум.ВыбратьСтроки();
     Пока Докум.ПолучитьСтроку() = 1 Цикл
        НаименованиеТовара = глПолноеНаименование(Докум.Товар);
        Таб.ВывестиСекцию("Строка");  
     Докум.ВыбратьСтроки();  
  КонецЦикла;
     Пока Докум.ПолучитьСтроку() = 1 Цикл
        НаименованиеТовара = глПолноеНаименование(Докум.Товар);  
  Если Докум.Товар.ПолныйКод()= Номенклатура/Услуги Тогда ЕстьУСЛУГИ = истина;
  ИначеЕсли Докум.Товар.ПолныйКод()= Номенклатура/Товар Тогда ЕстьТОВАР = истина;
  Иначе ЕстьИЗДЕЛИЯ = истина;
  КонецЕсли;
     КонецЦикла;
     Если (Докум.СуммаВклНДС = 1) Тогда
        ИтогоСумма = Докум.Итог("Сумма") - Докум.Итог("НДС");
     Иначе
        ИтогоСумма = Докум.Итог("Сумма");
     КонецЕсли;
     Таб.ВывестиСекцию("ИтогоСумма");
     Если Докум.УчитыватьНДС = 1 Тогда
        ИтогоНДС = Докум.Итог("НДС");
        Таб.ВывестиСекцию("ИтогоНДС");
     КонецЕсли;
     Если (Докум.УчитыватьНП = 1) или (Докум.УчитыватьНП = 2) Тогда
        ИтогоНП = Докум.Итог("НП");
        Таб.ВывестиСекцию("ИтогоНП");
     КонецЕсли;
     ИтогоВсего = Докум.Итог("Всего");
     //Если не(((Докум.СуммаВклНП = 1) или (Докум.УчитыватьНП = 0)) и ((Докум.СуммаВклНДС = 1) или (Докум.УчитыватьНДС = 0))) Тогда
        Таб.ВывестиСекцию("ИтогоВсего");
     //КонецЕсли;
     Пропись(Докум.Валюта.ИмяФайлаПрописи);
     Таб.ВывестиСекцию("Подвал");
     Пропись("");
     
     глПоказатьТаблицу(Таб, "Счет", "Счет", 0, 0, 1);    
   

  Таб.ВывестиСекцию("В0");
  если (естьИЗДЕЛИЯ=ложь)и(естьТОВАР=ложь)и(естьУСЛУГИ=истина) тогда
     Таб.ВывестиСекцию("В1");
  иначеесли (естьИЗДЕЛИЯ=ложь)и(естьТОВАР=истина)и(естьУСЛУГИ=ложь) тогда
     Таб.ВывестиСекцию("В2");
  иначеесли (естьИЗДЕЛИЯ=ложь)и(естьТОВАР=истина)и(естьУСЛУГИ=истина) тогда
     Таб.ВывестиСекцию("В3");
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=Ложь)и(естьУСЛУГИ=ложь) тогда
     Таб.ВывестиСекцию("В4");  
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=Ложь)и(естьУСЛУГИ=истина) тогда
     Таб.ВывестиСекцию("В5");
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=истина)и(естьУСЛУГИ=ложь) тогда
      Таб.ВывестиСекцию("В0");
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=истина)и(естьУСЛУГИ=истина) тогда
      Таб.ВывестиСекцию("В0");
  КонецЕсли;
КонецПроцедуры

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Процедура ПоКнопкеПечать()
 
  Если Док.Выбран() = 0 Тогда
      Предупреждение("Не выбран документ!", 60);
     Возврат;
  КонецЕсли;
 
  Печать(Док);
 
КонецПроцедуры // ПоКнопкеПечать()


//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()
 
  Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
     
     Докум      = Форма.Параметр.Получить("Контекст");
     Устройство = Форма.Параметр.Получить("Устройство");
     КолвоКопий = Форма.Параметр.Получить("КоличествоКопий");
 
     Печать(Докум, Устройство, КолвоКопий);
     Статусвозврата(0);
     Возврат;
  КонецЕсли;
 
 
КонецПроцедуры // ПриОткрытии()
1 Wobland
 
09.08.12
07:48
кто будет читать эту простыню без текста ошибки?
2 Wobland
 
09.08.12
07:49
(1) я. это семёрка?
Если Докум.Товар.ПолныйКод()= Номенклатура/Услуги Тогда ЕстьУСЛУГИ = истина;
бред какой-то
3 kapez
 
09.08.12
07:51
да  семерка, а почему бред, как я понимаю, проблема именно в этой строке Если Докум.Товар.ПолныйКод()= Номенклатура/Услуги Тогда ЕстьУСЛУГИ = истина; и в ИначеЕсли Докум.Товар.ПолныйКод()= Номенклатура/Товар Тогда ЕстьТОВАР = истина;
  Иначе ЕстьИЗДЕЛИЯ = истина;
4 kapez
 
09.08.12
07:52
задача состоит в том чтобы в зависимости от группы номенклатуры выводить разные секции, кроме как по полному коду я ничего другого не придумал
5 kapez
 
09.08.12
08:04
Ошибки выходят на все строки, где есть Если Докум.Товар.ПолныйКод()= Номенклатура
пример: Если Докум.Товар.ПолныйКод()= Номенклатура<<?>>/Услуги Тогда ЕстьУСЛУГИ = истина;
{\\FILESERVER\BASES1C\PUB_77\EXTFORMS\PRNFORMS\SCHETS.ERT(45)}: Переменная не определена (Номенклатура)
и на все строки, где если (естьИЗДЕЛИЯ=
пример: если (естьИЗДЕЛИЯ=ложь<<?>>)и(естьТОВАР=ложь)и(естьУСЛУГИ=истина) тогда
{\\FILESERVER\BASES1C\PUB_77\EXTFORMS\PRNFORMS\SCHETS.ERT(76)}: Переменная не определена (ложь)
6 aleks-id
 
09.08.12
08:07
может Номенклатура.Услуги ?
7 BuHu
 
09.08.12
08:07
(5) Перечисления.Булево.Да/Нет
8 aleks-id
 
09.08.12
08:08
а вообще редкий бред
9 aleks-id
 
09.08.12
08:09
если (НЕ естьИЗДЕЛИЯ)и(НЕ естьТОВАР)и(естьУСЛУГИ) тогда
10 kapez
 
09.08.12
08:09
Номенклатура.Услуги не помогает
11 aleks-id
 
09.08.12
08:13
потому что у тебя в коде бред
перевожу дословно.
>>Если Докум.Товар.ПолныйКод()= Номенклатура/Услуги
в том случае, если полный код товара равен номенклатура разделить на услуги то сделать то-то и то-то
12 kapez
 
09.08.12
08:14
если (НЕ естьИЗДЕЛИЯ)и(НЕ естьТОВАР)и(естьУСЛУГИ) тогда тоже не помогает, а как можно тогда посмотреть по полному коду?
13 aleks-id
 
09.08.12
08:15
а что ты по полному коду собрался определять?
14 Seducer
 
09.08.12
08:15
ПолныйКод(), ЕМНИП, возвращает строку.
Тогда, видимо, надо писать Если Докум.Товар.ПолныйКод()= "Номенклатура/Услуги"
15 aleks-id
 
09.08.12
08:15
черт. это ж 7ка... тогда (9) не будет работать
16 kapez
 
09.08.12
08:16
на что именно счет, на товар, услугу или изделие и в зависимости на что счет, изменяется секция "в"
17 Wobland
 
09.08.12
08:16
семёрочники, скажите, плз, вот это:
Переменная не определена (ложь)
нормально? почему на истину не ругается тогда?
18 aleks-id
 
09.08.12
08:17
естьИЗДЕЛИЯ = Найти(Докум.Товар.ПолныйКод(),"Изделия");
19 Seducer
 
09.08.12
08:18
и вроде в 7-ке нет понятий Ложь и Истина. Есть 0 и 1. Либо вроде были глобальные переменные Да и Нет.
это так, по памяти, но могу и ошибаться.
20 aleks-id
 
09.08.12
08:19
естьТОВАР = Найти(Докум.Товар.ПолныйКод(),"Товар");
естьУСЛУГИ = Найти(Докум.Товар.ПолныйКод(),"Услуг");

Если (естьИЗДЕЛИЯ=0)и(естьТОВАР=0)и(естьУСЛУГИ<>0) Тогда....
21 aleks-id
 
09.08.12
08:22
ВидНоменклатуры = Докум.Товар.ПолныйКод();
естьИЗДЕЛИЯ = Найти(ВидНоменклатуры,"Изделия"); //если 0 тогда это не изделие
естьТОВАР = Найти(ВидНоменклатуры,"Товар"); //если 0 тогда это не товар
естьУСЛУГИ = Найти(ВидНоменклатуры,"Услуг"); //если 0 тогда это не услуга

Если (естьИЗДЕЛИЯ=0)и(естьТОВАР=0)и(естьУСЛУГИ<>0) Тогда
//тут наш код на первое условие
22 kapez
 
09.08.12
08:24
проблема в том, что вида Изделия как такового нет, просто если это не услуга и не товар, тогда изделие
23 miki
 
09.08.12
08:26
(21)Лучше при  сравнении приводить к одному регистру...
Имхо, его "ПолныйКод" - это иерархия, т.е. надо сравнивать с Родителем или юзать ПринадлежитГруппе().
24 aleks-id
 
09.08.12
08:32
ВидНоменклатуры = Докум.Товар.ПолныйКод();
естьТОВАР = Найти(ВидНоменклатуры,"Товар"); //если 0 тогда это не товар
естьУСЛУГИ = Найти(ВидНоменклатуры,"Услуг"); //если 0 тогда это не услуга
естьИЗДЕЛИЯ = ?((естьТОВАР = 0) И (естьУСЛУГИ =0),1,0);

Если (естьИЗДЕЛИЯ=0)и(естьТОВАР=0)и(естьУСЛУГИ<>0) Тогда
//тут наш код на первое условие
25 VladZ
 
09.08.12
08:38
(0) Хм...

Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
   Перем ЕстьИЗДЕЛИЯ;
  Перем ЕстьУСЛУГИ;
  Перем ЕстьТОВАР;  
 
  СтатусВозврата(0);   -  внезапно!!!!
26 VladZ
 
09.08.12
08:39
И где текст ошибки???
27 Godofsin
 
09.08.12
08:40
(17) Потому что истина где-то определена =) однозначно. Или ругается, но ТС нам об этом не говорит.
28 VladZ
 
09.08.12
08:40
Если Докум.Товар.ПолныйКод()= Номенклатура/Услуги Тогда ЕстьУСЛУГИ = истина;
  ИначеЕсли Докум.Товар.ПолныйКод()= Номенклатура/Товар Тогда ЕстьТОВАР = истина;

Это что за полет фантазии???
29 Godofsin
 
09.08.12
08:41
Код просто лютый!!!
30 kapez
 
09.08.12
08:41
естьИЗДЕЛИЯ = ((естьТОВАР<<?>> = 0) И (естьУСЛУГИ= 0),1,0);
{\\FILESERVER\BASES1C\PUB_77\EXTFORMS\PRNFORMS\SCHETS.ERT(74)}: Ожидается символ ')'
31 VladZ
 
09.08.12
08:42
Таб.ВывестиСекцию("В0");
  если (естьИЗДЕЛИЯ=ложь)и(естьТОВАР=ложь)и(естьУСЛУГИ=истина) тогда
     Таб.ВывестиСекцию("В1");
  иначеесли (естьИЗДЕЛИЯ=ложь)и(естьТОВАР=истина)и(естьУСЛУГИ=ложь) тогда
     Таб.ВывестиСекцию("В2");
  иначеесли (естьИЗДЕЛИЯ=ложь)и(естьТОВАР=истина)и(естьУСЛУГИ=истина) тогда
     Таб.ВывестиСекцию("В3");
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=Ложь)и(естьУСЛУГИ=ложь) тогда
     Таб.ВывестиСекцию("В4");  
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=Ложь)и(естьУСЛУГИ=истина) тогда
     Таб.ВывестиСекцию("В5");
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=истина)и(естьУСЛУГИ=ложь) тогда
      Таб.ВывестиСекцию("В0");
  иначеесли (естьИЗДЕЛИЯ=истина)и(естьТОВАР=истина)и(естьУСЛУГИ=истина) тогда
      Таб.ВывестиСекцию("В0");
  КонецЕсли;

- Генерю код 1С. Много и бестолково. Дорого!
32 VladZ
 
09.08.12
08:43
(0) Вот что я тебе скажу... Завязывай с 1С. Не твое это...
33 VladZ
 
09.08.12
08:44
(30) АААААА!!! Держите меня семеро!!!
34 kapez
 
09.08.12
08:45
Спасибо за совет, я не люблю 1с, но на работе вынужден(( Но эта  корявость заработала, спасибо aleks-id)))
35 VladZ
 
09.08.12
08:47
Алекс! Зачем ты это сделал??? :)
36 miki
 
09.08.12
08:48
То, что перестала ругаться на синтаксис не значит, что заработала.
Да и если заработала, не значит, что правильно...
37 vip67
 
09.08.12
08:50
в 7-ке вместо истина ложь используются значения 0 и 1.
38 vip67
 
09.08.12
08:51
а вообще - пройдись отладчиокм - увидишь, что выдает в условии, может типы переменных не совпадают. и вообще - озвуч текст ошибки
39 Скользящий
 
09.08.12
08:54
За такой код надо убивать на лету лопатой.