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