Использование Глобальных Переменных в Модуле Объекта

1. Snigse 23.04.21 10:58 Сейчас в теме
Только изучаю 1С и в процессе написания кода столкнулся с необходимостью воспользоваться глобальной переменной, вот только проблема заключается в том, что мне ее банально не удается объявить, для дальнейшего использования без выскакивания ошибки. Вопрос в том как это сделать? И можно ли это сделать вообще в Модуле объекта документов.
Сам Код:
Перем Гл_Перем = 0;// Глобальная Переменная

Процедура ОбработкаПроведения(Отказ, Режим)
	// регистр НакопленияТоваров Расход
	Движения.НакопленияТоваров.Записывать = Истина;
	Для Каждого ТекСтрокаПеречень_товаров Из Перечень_товаров Цикл
		Движение = Движения.НакопленияТоваров.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
		Движение.Период = Дата;
		Движение.Наименование = ТекСтрокаПеречень_товаров.Название;
		Движение.колличество = ТекСтрокаПеречень_товаров.Колличество;
	КонецЦикла;

	// регистр РегистрПродаж Приход
	Движения.РегистрПродаж.Записывать = Истина;
	Для Каждого ТекСтрокаПеречень_товаров Из Перечень_товаров Цикл
		Движение = Движения.РегистрПродаж.Добавить();
	    Движение.Период = Дата;
		Движение.Наименования = ТекСтрокаПеречень_товаров.Название;
		Движение.Количество = ТекСтрокаПеречень_товаров.Колличество;
		Движение.ЦенаПродажи = ТекСтрокаПеречень_товаров.Цена;
		
	КонецЦикла;


КонецПроцедуры
Функция ВыведениеРегистратора (наименование,Колличество)
	Запрос = Новый Запрос;
	Запрос.Текст =  "ВЫБРАТЬ
	                |	РегистрОборотовТовара.Период КАК Период,
	                |	РегистрОборотовТовара.Наименование КАК Наименование,
	                |	РегистрОборотовТовара.Себестоимость КАК Себестоимость,
	                |	РегистрОборотовТовара.КолличествоПроданного КАК КолличествоПроданного,
	                |	РегистрОборотовТовара.КолличествоКупленного КАК КолличествоКупленного,
	                |	РегистрОборотовТовара.Доход КАК Доход,
	                |	РегистрОборотовТовара.Регистратор КАК Регистратор
	                |ИЗ
	                |	РегистрНакопления.РегистрОборотовТовара КАК РегистрОборотовТовара
	                |ГДЕ
	                |	РегистрОборотовТовара.Наименование = &Наименование";
	Запрос.УстановитьПараметр("Наименование",Наименование);
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	Пока Выборка.Следующий() Цикл
	  Если ЗначениеЗаполнено(Выборка.КолличествоПроданого) = Ложь Тогда
		Выборка.Регистратор Возврат;
		Прервать;
	ИначеЕсли Выборка.КолличествоКупленного - Выборка.КолличествоПроданного <> 0 Тогда
	 А = Выборка.КолличествоКупленного - КоличествоПроданного - Колличество;
	 Если А >= 0 Тогда
		 Выборка.Регистратор Возврат;
	 Иначе
		 Б = 0 - 1;
		 Гл_Перем = А * Б;
		 Выборка.Регистратор Возврат;
		 Прервать;	  
		  КонецЕсли;
		КонецЦикла;
КонецФункции
Показать


Ошибка синтаксиса:
{Документ.Вывоз_Товаров.МодульОбъекта(2,15)}: Ожидается символ ';'
Перем Гл_Перем<<?>> = 0;// Глобальная Переменная (Проверка: Сервер)
{Документ.Вывоз_Товаров.МодульОбъекта(2,16)}: Неопознанный оператор
Перем Гл_Перем <<?>>= 0;// Глобальная Переменная (Проверка: Сервер)
По теме из базы знаний
Найденные решения
6. spacecraft 23.04.21 11:14 Сейчас в теме
(1) из СП:

Синтаксис:
Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2> [Экспорт], …]

Т.е. при объявлении такой переменной ей нельзя ничего присваивать.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. sssss_aaaaa_2011 23.04.21 11:06 Сейчас в теме
(1)
столкнулся с необходимостью воспользоваться глобальной переменной

1. Такая необходимость сообщает о недоработках в структуре программы.
2. Ткни нас носом в то место документации/СП, где объясняется термин "глобальная переменная". особенно в применении у УФ.
FatPanzer; +1 Ответить
7. Snigse 23.04.21 11:14 Сейчас в теме
Функция возвращает только один объект, но мне необходимо чтобы функция возвращала регистратор по которому будет происходить заполнение колонок до определенного значения, после чего остаток должен перейти в следующую подходящую строку, как избежать применения глобальной переменной? Создавать Еще одну условную функцию которая будет совершать проверку, пробегая все если и уже в зависимости от ее значения идти по нужному сценарию? Зачем столько лишнего?
8. spacecraft 23.04.21 11:16 Сейчас в теме
(7) учтите, что на сервере глобальные переменные не сохраняют свое значение между серверными вызовами.
9. DenisCh 23.04.21 11:17 Сейчас в теме
(7) Структуры с сегодняшнего дня запретили использовать в возврате функций?
10. Sashares 35 23.04.21 11:19 Сейчас в теме
(7)
Функция возвращает

С синтаксисом у вас проблемы.
Функция в приведенном коде ничего не возвращает.
11. DenisCh 23.04.21 12:13 Сейчас в теме
(10) Возвращает. Неопределено lives matters!
6. spacecraft 23.04.21 11:14 Сейчас в теме
(1) из СП:

Синтаксис:
Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2> [Экспорт], …]

Т.е. при объявлении такой переменной ей нельзя ничего присваивать.
2. DenisCh 23.04.21 11:01 Сейчас в теме
А в каком учебнике написано, что так
Перем Гл_Перем = 0;

можно писать?
sssss_aaaaa_2011; NatalkaBal; +2 Ответить
12. Sashares 35 23.04.21 12:43 Сейчас в теме
(3)Что вы привираете.
В ролике все верно.
4. NatalkaBal 29 23.04.21 11:04 Сейчас в теме
Перем Гл_Перем;
Гл_Перем = 0;
13. Snigse 23.04.21 17:26 Сейчас в теме
Действительно Глобальная переменная была не нужна, нужно было подробнее разобраться с работой оборотов в регистре накоплений.
Процедура ОбработкаПроведения(Отказ, Режим)
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	// регистр РегистрУход 
	Движения.РегистрУход.Записывать = Истина;
	Для Каждого ТекСтрокаПеречень_товаров Из Перечень_товаров Цикл
		Движение = Движения.РегистрУход.Добавить();
		Движение.Период = Дата;
		Движение.Наименования = ТекСтрокаПеречень_товаров.Название;
		Движение.Количество = ТекСтрокаПеречень_товаров.Колличество;
		Движение.Стоимость = ТекСтрокаПеречень_товаров.Стоимость;
		Сделаль(Дата,ТекСтрокаПеречень_товаров.Название,ТекСтрокаПеречень_товаров.Колличество,ТекСтрокаПеречень_товаров.Стоимость);
	КонецЦикла;
	
	//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
&НаСервере
Процедура Сделаль(Дата,Название,Количество,Стоимость)
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	РегистрПриходОбороты.Наименование КАК Наименование,
	|	РегистрПриходОбороты.Дата КАК Дата,
	|	РегистрПриходОбороты.КоличествоОборот КАК КоличествоОборот,
	|	РегистрПриходОбороты.СтоимостьОборот КАК СтоимостьОборот
	|ИЗ
	|	РегистрНакопления.РегистрПриход.Обороты КАК РегистрПриходОбороты
	|ГДЕ
	|	РегистрПриходОбороты.Наименование = &Наименование
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата" ;
	Запрос.УстановитьПараметр("Наименование",Название);
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Если Выборка.КоличествоОборот > 0 Тогда
			Если Выборка.КоличествоОборот - Количество >= 0 Тогда
				ЗаполнитьРегистрФИФО(Выборка.Дата,Дата,Название,Выборка.КоличествоОборот,Количество,Выборка.СтоимостьОборот,Стоимость);
				ДобавитьКоличествоВыход(Выборка.Дата,Название,Количество);
				Прервать;
			Иначе
				Остаток = (Выборка.КоличествоОборот - Количество) * (0 - 1);
				А = (Количество - Остаток)/ Количество;//Отношение от общего количества Пример: 10/40 = 0,25
				Количество = Количество - Остаток;//Допустимое Количество Прихода
				Б = Стоимость;//Спасаем общую стоимость
				Стоимость = Стоимость * А;
				ЗаполнитьРегистрФИФО(Выборка.Дата,Дата,Название,Выборка.КоличествоОборот,Количество,Выборка.СтоимостьОборот,Стоимость);
				ДобавитьКоличествоВыход(Выборка.Дата,Название,Количество);
				Стоимость = Б * (1 - А);//Вернули Остаточное отношение
				Количество = Остаток;
			КонецЕсли;	
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Процедура ЗаполнитьРегистрФИФО(ДатаПриход,ДатаУход,Наименование,КоличествоПриход,КоличествоУход,СтоимостьПриход,СтоимостьУход)
	Движения.ФИФО.Записывать = Истина;
	Движение = Движения.ФИФО.Добавить();
	Движение.Период = ДатаПриход;
	Движение.ДатаУход = ДатаУход;
	Движение.СтоимостьПриход = СтоимостьПриход;
	Движение.СтоимостьУход = СтоимостьУход;
	Движение.Наименование = Наименование; 
	Движение.КоличествоПриход =КоличествоПриход;
	Движение.КоличествоУход = КоличествоУход;
КонецПроцедуры
Процедура ДобавитьКоличествоВыход (Дата,Наименование,Количество)
	Движения.РегистрПриход.Записывать = Истина;
	Движение = Движения.РегистрПриход.Добавить();
	Движение.Период = Дата;
	Движение.Дата = Дата;
	Движение.Количество = 0 - Количество;
	Движение.Наименование = Наименование;
КонецПроцедуры
Показать


Всем спасибо, тема закрыта.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот