Помощь - Поиск - Пользователи - Календарь
Полная версия: Код справочника!
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
spiteful41
Подскажите пожалуйста, вот если я присваиваю объекту справочника код "106 318 "(с пробелами в конце), 1с пробелы урезает или оставляет? Просто так не посмотришь, потому что в окне редактирования объекта в поле код полюбому в конце пробелы ставятся, даже если их убрать, нажать ок, снова посмотреть - они тут как тут))
ASh
Код имеет определенную длину. И в конце будут стоять пробелы, если других разрешенных символов на всю длину не хватает.
spiteful41
Если я использую SQL запрос, что бы выбрать номенклатуру, с параметром код, и задаю код "106 318"(без пробелов в конце), то результат запроса будет пустым?
LxS
Попробуй. Расскажешь. Не все же коту масленица.
spiteful41
Цитата(LxS @ 9.10.2008, 15:37) *

Попробуй. Расскажешь. Не все же коту масленица.

Я уже попробывал. Делал в консоле запросов.
Код

ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ПометкаУдаления = ЛОЖЬ
И Номенклатура.ЭтоГруппа = ЛОЖЬ
И Номенклатура.Код = &;Код


Коду присваивал номер "106 318 ". Пусто! Присвоил "106 318" - тоже. Изменил параметр код на наименование, присвоил наименование которое соответсвует этому коду, в результате получил новую позицию. Нажал на коде ctrl + c, изменил назад параметр на код, присвоел ему ctrl+v, и только после этого результат удачный. Но почему в первом случае он пустой? Мне просто нужно получить именно по коду. Возможно ли это так сделать? НайтиПоКоду - тут не подходит. Именно запрос.
LxS
На свой страх и риск предложу использовать в запросе ПОДОБНО. По своему опыту и высказываниям других, использование этого вида сравнения сильно тормозит запрос.
ASh
Цитата(spiteful41 @ 9.10.2008, 15:16) *

Если я использую SQL запрос, что бы выбрать номенклатуру, с параметром код, и задаю код "106 318"(без пробелов в конце), то результат запроса будет пустым?


Я думаю, что найдется такая номенклатура. Вроде, 1С забьет пробелами строку до длины поля. А вот нормальный SQL не нашел бы.
LxS
Я где-то уже писал:
НайтиПоКоду(<Код>, <Поиск по полному коду>, <Родитель>, <Владелец>) ,
где Поиск по полному коду имеет тип булево. Поиграй.
Но это без запроса.
spiteful41
Цитата(ASh @ 9.10.2008, 16:10) *

Я думаю, что найдется такая номенклатура. Вроде, 1С забьет пробелами строку до длины поля. А вот нормальный SQL не нашел бы.

не находится
ASh
Цитата(spiteful41 @ 9.10.2008, 16:17) *

не находится


Создал сейчас в Номенклатуре элемент с кодом "106 318"
Выполняю в консоли запрос:
Код
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Представление
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Код = "106 318"



Находит ссылку без проблем
LxS
Кстати, а может проще сделать так: накидать обработку перезаписи кодов?
Код
Спр = Справочники.Номенклатура.Выбрать()
Пока Спр.Следующий() Цикл
Номенклатура = Спр.ПолучитьОбъект();
Номенклатура.Код = СокрЛП(Номенклатура.Код);
Номенклатура.Записать();
КонецЦикла;


А потом делай свои запросы как тебе вздумается, и не будет проблем с поиском.

З.Ы. По поводу последнего поста: а как ты параметр задаешь?
Код
Запрос.УстановитьПараметр("Код", СокрЛП(<Какой-то код>));
spiteful41
Еще вопрос. В отладке, поставил на строке результат=ЗапросНоменклатура.Выполнить точку останова, перед этой строкой установил параметр ЗапросНоменклатура.УстановитьПараметр("Код",Номер), при shift+f9, у запроса нет параметров, почему?
spiteful41
У меня тут просто полный пипец)))Идет синхронизация с ораклом.
параметр=СокрЛП(строкаизоракла.ID)

Цитата(ASh @ 9.10.2008, 16:31) *

Создал сейчас в Номенклатуре элемент с кодом "106 318"
Выполняю в консоли запрос:
Код
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Представление
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Код = \"106 318\"




Находит ссылку без проблем

Попробуй тоже самое сделай через параметр
LxS
А что говорит отладчик по Shift+F9 на "Номер"???
Получаешь ли ты значение из Oracle?
spiteful41
Из оракла норм, все получаю)
LxS
Если это внешняя обработка, скинь, либо кусок кода с запросом и присвоением значений параметрам выложи.
spiteful41
Код

Если ИДНоменклатупы="id" Тогда
НоменклатураКод = СтрокаТЗНоменклатура.id;
Иначе
НоменклатураКод = СтрокаТЗНоменклатура.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);
КонецЕсли;
ЗапросНоменклатура = Новый Запрос;
ЗапросНоменклатура.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ЛОЖЬ
| И Номенклатура.ЭтоГруппа = ЛОЖЬ
| И Номенклатура.Код = &Код";

ЗапросНоменклатура.УстановитьПараметр("Код",НоменклатураКод);
//ЗапросНоменклатура.УстановитьПараметр("Наим",НоменклатураНаименование);


Результат = ЗапросНоменклатура.Выполнить();
Если Не Результат.Пустой() Тогда
//Есть такой элемент
Выборка = Результат.Выбрать();
Выборка.Следующий();
ТекущийОбъект = Выборка.Ссылка;


LxS
Убиться апстену! aua.gif
Эт зачем?

Код
        Если ИДНоменклатупы="id" Тогда
НоменклатураКод = СтрокаТЗНоменклатура.id;
Иначе
НоменклатураКод = СтрокаТЗНоменклатура.detid;
КонецЕсли;

,
если ты ниже делаешь
Код
НоменклатураКод=           СокрЛП(СтрокаТЗНоменклатура_.id);


из другой таблицы, насколько я понял..

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

Результат = ЗапросНоменклатура.Выполнить();


Я выделяю ЗапросНоменклатура, нажимаю shift+f9, параметров нет vis.gif
LxS
а в отладчике исполняемая строка у тебя при этом (желтая стрелка) где установлена?
spiteful41
Пробывал и что бы напротив этой строки и после
LxS
Посмотри файл. Момент объявления параметра запроса. У тебя так?
spiteful41
Да, всё так, и вот когда параметры смотрю, стрелка так же стоит, и пробывал еще что бы после стояла
LxS
Обработку можешь скинуть?
spiteful41
Не обработку не могу(((
spiteful41
LxS, а если я воспользуюсь твоей обработкой, по поводу урезания пробелов у всех позиций номенклатуры в спроавочнике, с движениями по этим позициям ничего ведь не произойдет,да? ячитал вроде что в движухах там коды в 16-ном коде учавствуют, это так?
LxS
ПРобел не является обязательным символом кода. Поэтому ничего не произойдет. Я лично свои базы все так шерстил, очищая коды, когда отдел кадров "хорошо" их вводил (в ЗУП 2.1 поля кода были доступны для изменений). Процедура всего лишь убирает пробелы по краям кода. Для меня единственно, что странно, твоя нумерация с пробелом в середине.
spiteful41
У меня в обоаботке код номенклатуры в 1с должен полностью соответсвовать коду номенклатуры из оракла, ну т.е с движениями ничего не произойдет?
LxS
Движения тут ни причем. Это справочник.
spiteful41
Спасибо за помощь!!!!!!)!)!)!)!))! baby.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.