8.х Код справочника!

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем spiteful41, 9 окт 2008.

  1. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Подскажите пожалуйста, вот если я присваиваю объекту справочника код "106 318 "(с пробелами в конце), 1с пробелы урезает или оставляет? Просто так не посмотришь, потому что в окне редактирования объекта в поле код полюбому в конце пробелы ставятся, даже если их убрать, нажать ок, снова посмотреть - они тут как тут))
  2. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Код имеет определенную длину. И в конце будут стоять пробелы, если других разрешенных символов на всю длину не хватает.
  3. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Если я использую SQL запрос, что бы выбрать номенклатуру, с параметром код, и задаю код "106 318"(без пробелов в конце), то результат запроса будет пустым?
  4. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Попробуй. Расскажешь. Не все же коту масленица.
  5. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Я уже попробывал. Делал в консоле запросов.
    Код:
    ВЫБРАТЬ
    Номенклатура.Ссылка
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.ПометкаУдаления = ЛОЖЬ
    И Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.Код = &Код
    
    
    Коду присваивал номер "106 318 ". Пусто! Присвоил "106 318" - тоже. Изменил параметр код на наименование, присвоил наименование которое соответсвует этому коду, в результате получил новую позицию. Нажал на коде ctrl + c, изменил назад параметр на код, присвоел ему ctrl+v, и только после этого результат удачный. Но почему в первом случае он пустой? Мне просто нужно получить именно по коду. Возможно ли это так сделать? НайтиПоКоду - тут не подходит. Именно запрос.
  6. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    На свой страх и риск предложу использовать в запросе ПОДОБНО. По своему опыту и высказываниям других, использование этого вида сравнения сильно тормозит запрос.
  7. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Я думаю, что найдется такая номенклатура. Вроде, 1С забьет пробелами строку до длины поля. А вот нормальный SQL не нашел бы.
  8. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Я где-то уже писал:
    НайтиПоКоду(<Код>, <Поиск по полному коду>, <Родитель>, <Владелец>) ,
    где Поиск по полному коду имеет тип булево. Поиграй.
    Но это без запроса.
  9. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    не находится
  10. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Создал сейчас в Номенклатуре элемент с кодом "106 318"
    Выполняю в консоли запрос:
    Код:
    ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Представление
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Код = "106 318"
    
    
    Находит ссылку без проблем
  11. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Кстати, а может проще сделать так: накидать обработку перезаписи кодов?
    Код:
    Спр = Справочники.Номенклатура.Выбрать()
    Пока Спр.Следующий() Цикл
    Номенклатура = Спр.ПолучитьОбъект();
    Номенклатура.Код = СокрЛП(Номенклатура.Код);
    Номенклатура.Записать();
    КонецЦикла;
    
    
    А потом делай свои запросы как тебе вздумается, и не будет проблем с поиском.

    З.Ы. По поводу последнего поста: а как ты параметр задаешь?
    Код:
    Запрос.УстановитьПараметр("Код", СокрЛП(<Какой-то код>));
    
  12. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Еще вопрос. В отладке, поставил на строке результат=ЗапросНоменклатура.Выполнить точку останова, перед этой строкой установил параметр ЗапросНоменклатура.УстановитьПараметр("Код",Номер), при shift+f9, у запроса нет параметров, почему?
  13. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    У меня тут просто полный пипец)))Идет синхронизация с ораклом.
    параметр=СокрЛП(строкаизоракла.ID)

    Попробуй тоже самое сделай через параметр
  14. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    А что говорит отладчик по Shift+F9 на "Номер"???
    Получаешь ли ты значение из Oracle?
  15. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Из оракла норм, все получаю)
  16. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Если это внешняя обработка, скинь, либо кусок кода с запросом и присвоением значений параметрам выложи.
  17. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Код:
    Если ИДНоменклатупы="id" Тогда
    НоменклатураКод = СтрокаТЗНоменклатура.id;	
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">	Иначе	</span>
    НоменклатураКод = СтрокаТЗНоменклатура.detid;
    КонецЕсли;
    ИД = ПолучитьФорматСтроки(НоменклатураКод);
    ТЗ = ВыполнитьЗапросКИсточнику("SELECT * FROM ware.DETLIST WHERE id = "+ИД);
    СтрокаТЗНоменклатура_ = ТЗ.Получить(0);
    НоменклатураНаименование = СокрЛП(СтрокаТЗНоменклатура_.name);
    НоменклатураАртикул =      СокрЛП(СтрокаТЗНоменклатура_.code);
    НоменклатураКод=           СокрЛП(СтрокаТЗНоменклатура_.id); 
    //Остальные поля
    НоменклатураПолноеНаименование      = НоменклатураНаименование;
    ЕдиницаИзмеренияНаименование        = СокрЛП(СтрокаТЗНоменклатура_.measure);
    ЕдиницаИзмеренияКод                 = СтрокаТЗНоменклатура.okei;
    Если ИДНоменклатупы="detid" Тогда
    НоменклатураНаименованиеПодгрупы    = СокрЛП(СтрокаТЗНоменклатура.subtype_name);
    НоменклатураКодПодгрупы             = СокрЛП(СтрокаТЗНоменклатура.subtype_id);
    НоменклатураНаименованиеГрупы       = СокрЛП(СтрокаТЗНоменклатура.type_name);
    НоменклатураКодГрупы                = СокрЛП(СтрокаТЗНоменклатура.type_id);
    ИначеЕсли ИДНоменклатупы="id" Тогда
    
    НоменклатураНаименованиеПодгрупы    = СокрЛП(СтрокаТЗНоменклатура.subtypename);
    НоменклатураКодПодгрупы             = СокрЛП(СтрокаТЗНоменклатура.subtypeid);
    НоменклатураНаименованиеГрупы       = СокрЛП(СтрокаТЗНоменклатура.typename);
    НоменклатураКодГрупы                = СокрЛП(СтрокаТЗНоменклатура.typeid);	
    КонецЕсли;
    ЗапросНоменклатура = Новый Запрос;
    ЗапросНоменклатура.Текст = "ВЫБРАТЬ
    |	Номенклатура.Ссылка
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ПометкаУдаления = ЛОЖЬ
    |	И Номенклатура.ЭтоГруппа = ЛОЖЬ
    |	И Номенклатура.Код = &Код";	
    
    ЗапросНоменклатура.УстановитьПараметр("Код",НоменклатураКод);	
    //ЗапросНоменклатура.УстановитьПараметр("Наим",НоменклатураНаименование);
    
    
    Результат = ЗапросНоменклатура.Выполнить();
    Если Не Результат.Пустой() Тогда
    //Есть такой элемент	
    Выборка = Результат.Выбрать();
    Выборка.Следующий();
    ТекущийОбъект = Выборка.Ссылка;
    
    
  18. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Убиться апстену! :unsure:
    Эт зачем?

    Код:
            Если ИДНоменклатупы="id" Тогда
    НоменклатураКод = СтрокаТЗНоменклатура.id;    
    Иначе    
    НоменклатураКод = СтрокаТЗНоменклатура.detid;
    КонецЕсли;
    
    
    ,
    если ты ниже делаешь
    Код:
    НоменклатураКод=           СокрЛП(СтрокаТЗНоменклатура_.id);
    
    
    из другой таблицы, насколько я понял..

    По коду за исключением этой непонятки все вроде нормально, в отладчике смотри значения.
  19. TopicStarter Overlay
    spiteful41
    Offline

    spiteful41 Опытный в 1С

    Регистрация:
    24 июл 2008
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Ну вот в строке
    Код:
    Результат = ЗапросНоменклатура.Выполнить();
    
    
    Я выделяю ЗапросНоменклатура, нажимаю shift+f9, параметров нет :unsure:
  20. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    а в отладчике исполняемая строка у тебя при этом (желтая стрелка) где установлена?

Поделиться этой страницей