Только изучаю 1С и в процессе написания кода столкнулся с необходимостью воспользоваться глобальной переменной, вот только проблема заключается в том, что мне ее банально не удается объявить, для дальнейшего использования без выскакивания ошибки. Вопрос в том как это сделать? И можно ли это сделать вообще в Модуле объекта документов.
Сам Код:

```1c
    Перем Гл_Перем = 0;// Глобальная Переменная

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

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

    КонецЦикла;

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

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

Синтаксис:
Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2> [Экспорт], …]
Т.е. при объявлении такой переменной ей нельзя ничего присваивать.
---
столкнулся с необходимостью воспользоваться глобальной переменной
1. Такая необходимость сообщает о недоработках в структуре программы.
2. Ткни нас носом в то место документации/СП, где объясняется термин "глобальная переменная". особенно в применении у УФ.
---
Функция возвращает только один объект, но мне необходимо чтобы функция возвращала регистратор по которому будет происходить заполнение колонок до определенного значения, после чего остаток должен перейти в следующую подходящую строку, как избежать применения глобальной переменной? Создавать Еще одну условную функцию которая будет совершать проверку, пробегая все если и уже в зависимости от ее значения идти по нужному сценарию? Зачем столько лишнего?
---
учтите, что на сервере глобальные переменные не сохраняют свое значение между серверными вызовами.
---
Структуры с сегодняшнего дня запретили использовать в возврате функций?
---
Функция возвращает
С синтаксисом у вас проблемы.
Функция в приведенном коде ничего не возвращает.
---
Возвращает. Неопределено lives matters!
---
из СП:

Синтаксис:
Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2> [Экспорт], …]
Т.е. при объявлении такой переменной ей нельзя ничего присваивать.
---
А в каком учебнике написано, что так

```1c
    Перем Гл_Перем = 0;
```

можно писать?
---
https://www.youtube.com/watch?v=KFR5UriKR38&list=PL6Nx1KDcurkBdxssD1k56SDnwuTuX2bBr&index=­6
---
Что вы привираете.
В ролике все верно.
---
```1c
    Перем Гл_Перем;
    Гл_Перем = 0;
```
---
Действительно Глобальная переменная была не нужна, нужно было подробнее разобраться с работой оборотов в регистре накоплений.

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

    КонецЦикла;

    КонецПроцедуры
    Процедура ЗаполнитьРегистрФИФО(ДатаПриход,ДатаУход,Наименование,КоличествоПриход,КоличествоУход,СтоимостьПриход,СтоимостьУход)
    Движения.ФИФО.Записывать = Истина;
    Движение = Движения.ФИФО.Добавить();
    Движение.Период = ДатаПриход;
    Движение.ДатаУход = ДатаУход;
    Движение.СтоимостьПриход = СтоимостьПриход;
    Движение.СтоимостьУход = СтоимостьУход;
    Движение.Наименование = Наименование;
    Движение.КоличествоПриход =КоличествоПриход;
    Движение.КоличествоУход = КоличествоУход;
    КонецПроцедуры
    Процедура ДобавитьКоличествоВыход (Дата,Наименование,Количество)
    Движения.РегистрПриход.Записывать = Истина;
    Движение = Движения.РегистрПриход.Добавить();
    Движение.Период = Дата;
    Движение.Дата = Дата;
    Движение.Количество = 0 - Количество;
    Движение.Наименование = Наименование;
    КонецПроцедуры
```

Всем спасибо, тема закрыта.