|   |   | 
| 
 | 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 | 
        За такой код надо убивать на лету лопатой.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |