Имя: Пароль:
1C
1С v8
Помогите разобраться с ошибкой (+)
0 guestirk
 
18.07.19
04:15
Здравствуйте. Я в 1с совсем не бум бум, помогите разобраться
Что имеем: 1с Предприятие 8.3.12.1855, конфигурация ЗУП КОРП 2.5.134.1, режим совместимости конфигурации установлен 8.2.13
Есть функция (запрос) данные вытаскиваю через HTTP-Сервисы, при попытке выполнить данный запрос ошибка: "{HTTPСервис.HTTPService1.Модуль(276)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)"
------------------------------
Функция GetEmployeeList(Запрос)
    //Объявление результирующего массива
    ResultList = Новый Массив;
    
    //Получение значений параметров из запроса
    ContractTypeLine = Запрос.ПараметрыЗапроса.Получить("contractType");
    Если ContractTypeLine = НеОпределено Тогда
         ContractTypeLine = "";
    КонецЕсли;

    ParentOrgCodesLine = Запрос.ПараметрыЗапроса.Получить("parentOrgCode");
    Если ParentOrgCodesLine = НеОпределено Тогда
         ParentOrgCodesLine = "";
    КонецЕсли;
    
    //Пропустим сотрудников, организация которых удовлетворяет поставленным требованиям
    PermittedOrgCodesArr = Новый Массив;
    PermittedOrgCodesArr = GetCutDepartmetnsWithChildView(ParentOrgCodesLine);
             
    //Выполнение запроса к бд
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ФИОФизЛицСрезПоследних.Фамилия КАК Фамилия,
    |    ФИОФизЛицСрезПоследних.Имя КАК Имя,
    |    ФИОФизЛицСрезПоследних.Отчество КАК Отчество,
    |    СписокРуководителей.Ссылка Как Руководитель,
    |    СписокРуководителей.Ссылка.Код Как ТабНомРуководителя,
    |    СотрудникиОрганизаций.Ссылка КАК Сотрудник,
    |    СотрудникиОрганизаций.Организация.Код КАК КодОрганизации,
    |   СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код КАК КодПодразделения,
    |    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации,
    |    СотрудникиОрганизаций.ТекущаяДолжностьОрганизации,
    |    СотрудникиОрганизаций.Код,
    |    СотрудникиОрганизаций.ДатаПриемаНаРаботу,
    |    СотрудникиОрганизаций.ДатаУвольнения,
    |    Выбор Когда СотрудникиОрганизаций.ДатаУвольнения = null
    |         Тогда &ПустаяДата
    |          Иначе СотрудникиОрганизаций.ДатаУвольнения
    |    Конец КАК ДатаУвольнения,      
    |
    |    СостояниеРаботниковОрганизацийСрезПоследних.Период,
    |    СостояниеРаботниковОрганизацийСрезПоследних.Состояние,
    |    СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения
    |ИЗ
    |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаЗапроса, ) КАК ФИОФизЛицСрезПоследних
    |         ПО СотрудникиОрганизаций.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо
    |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&ДатаЗапроса, ) КАК СостояниеРаботниковОрганизацийСрезПоследних
    |         ПО СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник = СотрудникиОрганизаций.Ссылка
    |
    |
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СотрудникиОрганизаций.Ссылка,
    |                                  ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница
    |                          ИЗ РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&ДатаЗапроса, ) КАК ОтветственныеЛицаОрганизацийСрезПоследних
    |                          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |                          ПО ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо = СотрудникиОрганизаций.Физлицо
    |                          И ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница ССЫЛКА Справочник.ПодразделенияОрганизаций
    |                          ) КАК СписокРуководителей
    |        ПО СотрудникиОрганизаций.ТекущееПодразделениеОрганизации = СписокРуководителей.СтруктурнаяЕдиница                
    |
    |
  //|ГДЕ
  //|СотрудникиОрганизаций.АРМ    
  //|    И Фамилия <> ""
  //|    И Имя <> ""
  //|    И СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код В (&ParentOrgCodes)
  //|
    |УПОРЯДОЧИТЬ ПО
    |    Фамилия,
    |    Имя,
    |    Отчество
    |";
    
    ДатаЗапроса = ТекущаяДата();
    ПустаяДата  = Дата('00010101');
    ParentOrgCodes = PermittedOrgCodesArr;

    Запрос.УстановитьПараметр("ДатаЗапроса", ДатаЗапроса);    
    Запрос.УстановитьПараметр("ПустаяДата",  ПустаяДата);
    Запрос.УстановитьПараметр("ParentOrgCodes",  ParentOrgCodes);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    //Формирующий цикл
    Пока Выборка.Следующий() Цикл
        
    //Пропустим сотрудников, у которых дата приема раньше даты запроса
    Если Выборка.ДатаПриемаНаРаботу>ДатаЗапроса Тогда
        Продолжить;
    КонецЕсли;
          
    //Пропустим сотрудников, у которых тип занятости совпадает с разрешенными из анкея
    ContractType = обИмяПеречисления(Выборка.Сотрудник.ВидЗанятости);
    Если ContractTypeLine = "" Тогда
        флагНаВидЗанятости = 1;
    Иначе    
    ContractTypesArr = Новый Массив;
    ContractTypesArr = Split(ContractTypeLine, ",");
    флагНаВидЗанятости = 0;
        
        Для Каждого contractTypePermitted Из ContractTypesArr Цикл        
            Если ContractType = contractTypePermitted
                Тогда  флагНаВидЗанятости = 1;
            КонецЕсли;
        КонецЦикла;
          
    КонецЕсли;
        
    Если флагНаВидЗанятости = 0
        Тогда Продолжить;
    КонецЕсли;

    //Формирование параметров для организации
    Guid = Строка(Выборка.Сотрудник.УникальныйИдентификатор());
    Lastname = Выборка.Фамилия;
    Firstname = Выборка.Имя;
    Middlename = Выборка.Отчество;
    Department = ""+СокрЛП(Выборка.КодОрганизации)+?(Выборка.КодПодразделения=Null, "", "~"+СокрЛП(Выборка.КодПодразделения));
    Position = Выборка.ТекущаяДолжностьОрганизации.Наименование;
    Tabnum = ""+СокрЛП(Выборка.КодОрганизации)+"~"+СокрЛП(Выборка.Код);
    StartDate = Выборка.ДатаПриемаНаРаботу;
    EndDate = ?(Выборка.ДатаУвольнения = Дата('00010101'), "", Выборка.ДатаУвольнения);
    StartLeaveDate = "";
    EndLeaveDate = "";
    ManagerGuid = ?(Выборка.Руководитель = Null, "", Строка(Выборка.Руководитель.УникальныйИдентификатор()));
    ManagerTabNum = ?(Выборка.ТабНомРуководителя = Null, "", ""+Выборка.КодОрганизации+"~"+Выборка.ТабНомРуководителя);
        
    //Установка состояния и дат связанных с состоянием
    Состояние = "Работает";
    Период = Выборка.Период;
    ПериодЗавершения = Выборка.ПериодЗавершения;
        
    Если Выборка.Состояние <> Null Тогда
        Состояние = Строка(Выборка.Состояние);
    КонецЕсли;
        
    Если EndDate <> "" и EndDate <= ДатаЗапроса  Тогда
        StartLeaveDate = "";
        EndLeaveDate = "";
        DisableReason = "Уволен";                  
    ИначеЕсли
        Состояние = "Работает" или Состояние <> "Работает" и ПериодЗавершения < ДатаЗапроса Тогда
                  
        Если Период <> null Тогда StartLeaveDate = Период;
        Иначе StartLeaveDate = "";
        КонецЕсли;
                  
        Если ПериодЗавершения <> null Тогда EndLeaveDate = ПериодЗавершения;
        Иначе EndLeaveDate = "";
        КонецЕсли;

        DisableReason = "Работает";
    ИначеЕсли          
        Состояние <> "Работает" и ПериодЗавершения >= ДатаЗапроса Тогда
        StartLeaveDate = Период;
        EndLeaveDate = ПериодЗавершения;
        DisableReason = Состояние;
    КонецЕсли;
                            
    //Занесение результатов запроса в структуру
    Структура = Новый Структура;
    
    Структура.Вставить("Guid" , Guid);
    Структура.Вставить("Lastname" , Lastname);
    Структура.Вставить("Firstname" , Firstname);
    Структура.Вставить("Middlename" , Middlename);
    Структура.Вставить("UserOrg" , Department);
    Структура.Вставить("Position" , Position);
    Структура.Вставить("Tabnum" , Tabnum);
    Структура.Вставить("StartDate" , StartDate);
    Структура.Вставить("EndDate" , EndDate);
    Структура.Вставить("StartLeaveDate" , StartLeaveDate);
    Структура.Вставить("EndLeaveDate" , EndLeaveDate);
    Структура.Вставить("ManagerGuid" , ManagerGuid);
    Структура.Вставить("ManagerTabNum" , ManagerTabNum);
    Структура.Вставить("DisableReason" , DisableReason);
    Структура.Вставить("СontractType" , ContractType);
         
    //Занесение организации в результирующий массив
    ResultList.Добавить(Структура)    
        
    КонецЦикла;
    
     //Формирование json ответа
    СтрокаДляОтвета = СформироватьJSON(ResultList);
    
    Ответ = Новый HTTPСервисОтвет(200);    
    Ответ.Заголовки.Вставить("Content-type", "application/json;  charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
        
    Возврат Ответ;
      
КонецФункции
1 guestirk
 
18.07.19
04:26
Забыл добавить, строка 276 на которую ругается вот эта:
    Если Выборка.ДатаПриемаНаРаботу>ДатаЗапроса Тогда
2 ДенисЧ
 
18.07.19
04:41
Если Выборка.ДатаПриемаНаРаботу <> NULL И Выборка.ДатаПриемаНаРаботу>ДатаЗапроса Тогда
3 Случайный прохожий
 
18.07.19
06:06
В целях повышения производительности лучше условия писать в запросе, а не после того как получите выборку данных.
4 guestirk
 
18.07.19
08:16
(2) Спасибо ОГРОМНОЕ!!! ошибка эта ушла.
Но пришла другая, по другой функции))), буду разбираться дальше
5 guestirk
 
18.07.19
13:09
Может подскажете все таки, не могу победить далее вышла ошибка такая:
Модуль(397)}: Значение не является значением объектного типа (Метаданные)
Строка 397: ИмяПеречисления = Ссылка.Метаданные().Имя;

--------------------------сама функция вот------------------
Функция обИмяПеречисления(Ссылка) Экспорт
                ИмяПеречисления = Ссылка.Метаданные().Имя;
                Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);

                Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;

КонецФункции
6 hhhh
 
18.07.19
13:13
(5) тут только один вариант может быть: в поле Ссылка ты не ссылку хреначишь.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс