Имя: Пароль:
1C
1С v8
Ошибка Переменная не определена в Общем модуле ПроведениеРасчетов
0 Lite2008
 
28.01.22
18:52
1. Добрый день всем! Я ученик-новичок в 1с, потому заранее извиняюсь при наличии элементарных ошибок.

2. Сделал Общий модуль ПроведениеРасчетов. В свойствах поставил галочку "Глобальный". Выбивает ошибку:

{CommonModule.ПроведениеРасчетов.Module(9,3)}: Переменная не определена (Запрос)        <
>Запрос.Текст = {CommonModule.ПроведениеРасчетов.Module(19,3)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("Регистратор", Регистратор);{CommonModule.ПроведениеРасчетов.Module(20,3)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);{CommonModule.ПроведениеРасчетов.Module(21,9)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);{CommonModule.ПроведениеРасчетов.Module(23,23)}: Переменная не определена (Запрос)        ВыборкаРезультата = <
>Запрос.Выполнить().Выбрать();{CommonModule.ПроведениеРасчетов.Module(50,4)}: Переменная не определена (Запрос)         <
>Запрос.Текст ={CommonModule.ПроведениеРасчетов.Module(62,3)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);{CommonModule.ПроведениеРасчетов.Module(63,3)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);{CommonModule.ПроведениеРасчетов.Module(64,3)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("Регистратор", Регистратор);{CommonModule.ПроведениеРасчетов.Module(65,3)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);{CommonModule.ПроведениеРасчетов.Module(66,9)}: Переменная не определена (Запрос)        <
>Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);{CommonModule.ПроведениеРасчетов.Module(68,26)}: Переменная не определена (Запрос)        ВыборкаРезультата = <
>Запрос.Выполнить().Выбрать();

3. Вот сам текст модуля:

Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт
  
   Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;
  
   // Рассчитать первичные записи.
   Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
      
       Запрс = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ
       | НачисленияДанныеГрафика.ЗначениеПериодРегистрации КАК Норма,
       | НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
       | НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки                  
       |ИЗ
       | РегистрРасчета.Начисления.ДанныеГрафика(Регистратор = &Регистратор И
       | ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников))
       | КАК НачисленияДанныеГрафика";
      
       Запрос.УстановитьПараметр("Регистратор", Регистратор);
       Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
       Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
                    
       ВыборкаРезультата = Запрос.Выполнить().Выбрать();

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

4. Я пробовал снять галочку "Глобальный", тогда при попытках действий с  документами Начисления сотрудникам выбивает ошибку:

{Документ.НачисленияСотрудникам.МодульОбъекта(38,2)}: Переменная не определена (Запрос)
   <
>Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
{Документ.НачисленияСотрудникам.МодульОбъекта(41,13)}: Переменная не определена (Запрос)
   ТаблЗнач = <
>Запрос.Выполнить().Выгрузить();
{Документ.НачисленияСотрудникам.МодульОбъекта(45,2)}: Переменная не определена (ПроведенияРасчетов)
   <
>ПроведенияРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников);
{Документ.НачисленияСотрудникам.МодульОбъекта(47,2)}: Переменная не определена (ПроведенияРасчетов)
   <
>ПроведенияРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, МассивСотрудников);

5. Вот модуль Документа НачисленияСотрудникам:

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

   // регистр Начисления
   Движения.Начисления.Записывать = Истина;
   Для Каждого ТекСтрокаНачисления Из Начисления Цикл
       Движение = Движения.Начисления.Добавить();
       Движение.Сторно = Ложь;
       Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
       Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;
       Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);
       Движение.ПериодРегистрации = Дата;
       Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;
       Движение.БазовыйПериодКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);
       Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;
       Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы;
       Движение.ИсходныеДанные = ТекСтрокаНачисления.Начислено;
   КонецЦикла;
   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
  
   // Записываем движения регистров.
   Движения.Начисления.Записать();
  
   // Получим список всех сотрудников, содержащихся в документе.
   Запрс = Новый Запрос(
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    НачисленияСотрудникамНачисления.Сотрудник
   |ИЗ
   |    Документ.НачисленияСотрудникам.Начисления
   | КАК НачисленияСотрудникамНачисления
   |
   |ГДЕ
   |    НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");
  
   Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
  
   // Сформируем список сотрудников.
   ТаблЗнач = Запрос.Выполнить().Выгрузить();
   МассивСотрудников = ТаблЗнач.ВыгрузитьКолонку("Сотрудник");
  
   // Вызов процедуры РассчитатьНачисления из общего модуля.
   ПроведенияРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников);
   Движения.Начисления.Записать( , Истина);
   ПроведенияРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, МассивСотрудников);
   Движения.Начисления.Записать( , Истина);
  
КонецПроцедуры

6. Помогите пожалуйста решить ошибку.
1 Фрэнки
 
28.01.22
18:57
эх...

почти в самом конце простыни опечатка

// Записываем движения регистров.
   Движения.Начисления.Записать();
  
   // Получим список всех сотрудников, содержащихся в документе.
   Запрс = Новый Запрос(
   "ВЫБРАТЬ РАЗЛИЧНЫЕ

Видишь?
А дальше идет текст модуля уже без опечатки в слове Запрос и оно не определено.
2 Lite2008
 
28.01.22
19:33
Благодарю. Опечатку исправил, но все равно выбивает ошибку:

{Документ.НачисленияСотрудникам.МодульОбъекта(42,2)}: Переменная не определена (ПроведенияРасчетов)
    <<?>>ПроведенияРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников);
{Документ.НачисленияСотрудникам.МодульОбъекта(44,2)}: Переменная не определена (ПроведенияРасчетов)
    <<?>>ПроведенияРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, МассивСотрудников);
3 Михаил Козлов
 
28.01.22
19:48
Проверьте имя модуля.
4 Lite2008
 
28.01.22
21:14
Исправил в модуле Документа НачисленияСотрудникам ошибки в названиях общего модуля ПроведениеРасчетов:

с

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

на

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

Но все равно, при любых раскладах, выбивает ошибку:

{ОбщийМодуль.ПроведениеРасчетов.Модуль(9,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.Текст =
{ОбщийМодуль.ПроведениеРасчетов.Модуль(19,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("Регистратор", Регистратор);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(20,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(21,9)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(23,23)}: Переменная не определена (Запрос)
        ВыборкаРезультата = <<?>>Запрос.Выполнить().Выбрать();
{ОбщийМодуль.ПроведениеРасчетов.Модуль(50,4)}: Переменная не определена (Запрос)
         <<?>>Запрос.Текст =
{ОбщийМодуль.ПроведениеРасчетов.Модуль(62,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(63,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(64,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("Регистратор", Регистратор);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(65,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(66,9)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(68,26)}: Переменная не определена (Запрос)
        ВыборкаРезультата = <<?>>Запрос.Выполнить().Выбрать();
5 pechkin
 
28.01.22
21:58
глобальный он же клиентский, а не серверный
6 Lite2008
 
28.01.22
22:16
pechkin "глобальный он же клиентский, а не серверный" То есть? Что нужно исправить?
В свойствах Общего модуля ПроведениеРасчетов я пробовал так ставить галочки (1 вариант - "Глобальный", "Сервер", "Вызов сервера"), (2 вариант - "Сервыер" и "Вызов сервера"), (3 вариант - только "Сервер"). Во всех случаях выбивало следующую ошибку (или не могло вовсе запустить режим Отладки или при попытке проведения/перепроведения документов Начисления сотрудникам в режиме отладки):

{ОбщийМодуль.ПроведениеРасчетов.Модуль(9,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.Текст =
{ОбщийМодуль.ПроведениеРасчетов.Модуль(19,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("Регистратор", Регистратор);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(20,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(21,9)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(23,23)}: Переменная не определена (Запрос)
        ВыборкаРезультата = <<?>>Запрос.Выполнить().Выбрать();
{ОбщийМодуль.ПроведениеРасчетов.Модуль(50,4)}: Переменная не определена (Запрос)
         <<?>>Запрос.Текст =
{ОбщийМодуль.ПроведениеРасчетов.Модуль(62,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(63,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(64,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("Регистратор", Регистратор);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(65,3)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(66,9)}: Переменная не определена (Запрос)
        <<?>>Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
{ОбщийМодуль.ПроведениеРасчетов.Модуль(68,26)}: Переменная не определена (Запрос)
        ВыборкаРезультата = <<?>>Запрос.Выполнить().Выбрать();

Что делать в таком случае?
7 pechkin
 
28.01.22
22:21
(6) сними галку глобальный
8 Lite2008
 
28.01.22
22:28
снял. все равно то же самое. Я пробовал (2 вариант - "Сервыер" и "Вызов сервера") и (3 вариант - только "Сервер") без галки глобальный. то же само. Может быть причина в чем-то другом?
9 AlvlSpb
 
28.01.22
22:41
Запрс = Новый Запрос; У тебя во всем коде так. Потому и нет Переменной Запрос, есть переменная Запрс
10 Lite2008
 
28.01.22
22:50
Очень благодарю за помощь со словом Запрос. Все наконец-то исправилось!)))