Имя: Пароль:
1C
 
объявление глобальных переменных
,
0 Jokerfunny
 
27.03.16
13:06
Посмейтесь профаны, объявил 2 глобальные переменные:

Перем Ар ;
Перем Ш;
Ар=Новый Массив;
Ш=0;

Затем присваиваю значение:

Ар.Добавить(ЭтотОбъект.Объект.Наименование);
Ш=Ш+1;

После чего пытаюсь их вызвать в цикле

А[1][1]=А[1][1]+Справочники.Торты.НайтиПоНаименованию(Ар[Ш]).Тесто;

Выдает ошибки:

{Документ.ВыпускПродуцкии.Форма.Смена.Форма(6,2)}: Переменная не определена (Ар)
<<?>>Ар.Добавить(ЭтотОбъект.Объект.Наименование); (Проверка: Сервер)
{Документ.ВыпускПродуцкии.Форма.Смена.Форма(33,62)}: Переменная не определена (Ш)
    А[1][1]=А[1][1]+Справочники.Торты.НайтиПоНаименованию(Ар[<<?>>Ш]).Тесто; (Проверка: Сервер)
1 Jokerfunny
 
27.03.16
13:12
Кажется понял, переменные созданы на клиенте, процедура выполняется на сервере
2 Jokerfunny
 
27.03.16
13:13
Все равно ошибка((
3 Jokerfunny
 
27.03.16
13:25
&НаСервере
Процедура РасчетСменыНаСервере()
    НоваяСтрока=Объект.ТЗ.Добавить();
    НоваяСтрока.Название=ЭтотОбъект.Объект.Наименование;
    Ар.Добавить(ЭтотОбъект.Объект.Наименование);
    Ш=Ш+1;
    НоваяСтрока.Количество=ЭтотОбъект.Объект.Количество;
КонецПроцедуры

&НаКлиенте
Процедура РасчетСмены(Команда)
    РасчетСменыНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура ТЗНаСервере()
    А=Новый Массив(4,5)    ;
    А[0][0]="Ингредиент";
    А[1][0]="Цена";
    А[2][0]="Общий вес";
    А[3][0]="Стоимость";
    А[0][1]="Тесто";
    А[0][2]="Сливки";
    А[0][3]="Сахар";
    А[0][4]="Масло";  
    А[1][1]=Справочники.Ингредиенты.НайтиПоНаименованию("Тесто").Цена;
    А[1][2]=Справочники.Ингредиенты.НайтиПоНаименованию("Сливки").Цена;
    А[1][3]=Справочники.Ингредиенты.НайтиПоНаименованию("Сахар").Цена;
    А[1][4]=Справочники.Ингредиенты.НайтиПоНаименованию("Масло").Цена;
    Для Счетчик = 1 По Ш Цикл
    А[1][1]=А[1][1]+Справочники.Торты.НайтиПоНаименованию(Ар[Счетчик]).Тесто;
    А[1][2]=А[1][2]+Справочники.Торты.НайтиПоНаименованию(Ар[Счетчик]).Сливки;
    А[1][3]=А[1][3]+Справочники.Торты.НайтиПоНаименованию(Ар[Счетчик]).Сахар;
    А[1][4]=А[1][4]+Справочники.Торты.НайтиПоНаименованию(Ар[Счетчик]).Масло;    
    КонецЦикла;
    
    Построитель = Новый ПостроительОтчета;
    ПостроительИсточникДанных = Новый ОписаниеИсточникаДанных(А);
    Построитель.Выполнить();
    Построитель.Вывести();
КонецПроцедуры
4 ДенисЧ
 
27.03.16
13:43
Глобальные переменные - зло.
Поэтому их использовать не надо.
передавай параметрами.
5 Обработка
 
27.03.16
13:47
обычно под словом "профаны" всегда понимали типа дураки так ведь?
6 DDwe
 
27.03.16
13:49
(5) Свершенно верно )))
7 Jokerfunny
 
27.03.16
13:50
(5) :D Здесь мне часто попадаются люди которые просто смеются над кодом, непонимающие, что я начинающий, так что начало моего сообщения было адресованы для них.
8 DDwe
 
27.03.16
13:51
(7) ПРОФА?Н, профана, муж. (лат. profanus - непосвященный). Человек, совершенно несведущий в чем-нибудь, невежда в какой-нибудь области.
9 Jokerfunny
 
27.03.16
13:51
(4) Спасибо, я из других источников тоже это вычитал... Специфический язык(((
10 DDwe
 
27.03.16
13:51
11 Asmody
 
27.03.16
13:51
(7) Смеются не над кодом, а над нежеланием вдуматься в задачу.
12 Asmody
 
27.03.16
13:52
(9) А в каком языке глобальные переменные — "добро"?
13 DDwe
 
27.03.16
13:52
(9) И над непониманием того, что пишешь. А ты даже простой текст с пониманием не можешь написать.
14 DDwe
 
27.03.16
13:52
(9) Это ты про русский или про 1С ?
15 Jokerfunny
 
27.03.16
13:54
(11) Вдуматься в задачу??? я в ворде разобрал на алгоритмическом языке эту задачу, но реализовать грамотно не могу, поэтому я здесь, (13) Вот и проснулся...
16 Jokerfunny
 
27.03.16
13:55
(12) В Сишниках, подобных, ПХП Глобальные модули это весь ПХП, Питон
17 Записьдампа
 
27.03.16
13:57
(7) Так тебе обучаться или выпендриваться?
18 Jokerfunny
 
27.03.16
13:58
(17) Прости? Причем здесь выпендриваться?
19 Записьдампа
 
27.03.16
14:00
(18) Адресовывать начало сообщения. Да еще и неграмотно?
20 Jokerfunny
 
27.03.16
14:01
(19) А зачем издеваться?
21 DDwe
 
27.03.16
14:03
"в ворде разобрал на алгоритмическом языке эту задачу"
Видимо я чего-то не знаю.
22 DDwe
 
27.03.16
14:04
(20) Ты первый начал.
23 Jokerfunny
 
27.03.16
14:05
(22) относительно
24 Jokerfunny
 
27.03.16
14:06
Но ладно спасибо за совет (4) Спасибо тебе
25 DDwe
 
27.03.16
14:06
(23) Относительно чего?
26 Jokerfunny
 
27.03.16
14:06
относительно темы, относительно форума
27 Asmody
 
27.03.16
14:18
(16) То, что язык поддерживает глобальные переменные, не означает, что нужно использовать глобальные переменные.
28 Asmody
 
27.03.16
14:19
А за "НайтиПоНаименованию" в 1С давно принято бить линейкой по пальцам.
29 Jokerfunny
 
27.03.16
14:23
(28) Серьезно? А как тогда?
30 hhhh
 
27.03.16
17:43
ошибка хоть какая??

и хотя бы так напиши

    Для Счетчик = 1 По Ш Цикл
        Торт = Справочники.Торты.НайтиПоНаименованию(Ар[Счетчик]);
       А[1][1]=А[1][1] + Торт.Тесто;
       А[1][2]=А[1][2]+Торт.Сливки;
       А[1][3]=А[1][3]+Торт.Сахар;
       А[1][4]=А[1][4]+Торт.Масло;    
    КонецЦикла;

это же дикость - искать одно и то же 4 раза. Поиск - это вообще-то долго. А ты его 4 раза.
31 marvak
 
27.03.16
18:39
(0)
При повторном вызове серверной функции глобальные серверные переменные инициализируются заново.
Поэтому передавай то что хочешь в параметрах, или сохраняй в хранилище между вызовами сервера.
А насмешки над новичками на наших форумах это к сожалению наша плохая традиция.
:(
32 pessok
 
27.03.16
23:46
(28) самое грустное, что 1С к этому принуждает в БСП-конфах. Там везде представление справочников - наименование. Если надо - делай константу, суй туда... Но когда используешь доп.реквизит, и найти элемент плана вида характеристик можно *только* по наименованию... Это пиз. ненене, это разрушает созданный годами внутренний мир :)
33 pessok
 
27.03.16
23:47
+(31) зачем в параметрах то? явно ж видно по коду, что УФ, можно хранить просто в реквизитах формы