Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 4
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> НайтиПоРеквизиту - почему не работает на реквизит неограниченной длины          
Gigi Подменю пользователя
сообщение 23.08.17, 10:19
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 355
Спасибо сказали: 5 раз
Рейтинг: 2

Всем привет!
Уважаемые форумчане. Никто не подскажет, почему команда НайтиПоРеквизиту выдает ошибку если на реквизите пойска стоит галка "Неограниченная длина"

РезультПойска = Документы[МетаданныеИмя].НайтиПоРеквизиту(СтолбецПойска, ТекстПойска);


Нажимал выполнить и бац и выдает ошибку
Рыл .. копал .. искал ошибку .. думал может синтаксис не правильный. Аж извивался ... но ошибки вроде нигде не обнаружилвал. Думаю че за хрень еб....ая.
Потом думаю давай другой реквизит укажу. Указал... и что я вижу ... все без сбоев.
Потом вспомнил, что прежний "СтолбецПойска" имел неограниченную длину. И понял, что в этом и все дело.
Блин! Че за опять капризы платформы. Почему эта команда не работает на реквизит неограниченной длины.
И что с эти делать? Сменю длину могут стереться данные.
И вообще ... что бы реквизит был неограниченной длины это НУЖНО!
Как заставить команду работать на такой тип реквизита?

Буду признателен!




logist Подменю пользователя
сообщение 23.08.17, 10:24
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Mecтный
Сообщений: 9334
Из: Харьков
Спасибо сказали: 2455 раз
Рейтинг: 0

Цитата(Gigi @ 23.08.17, 11:19) *
И что с эти делать?

Искать запросом, с явным ограничением длинны поля


Signature
Весь комплекс услуг по 1С 8.х. От консультаций до внедрения. ИТС. 1С-Звіт. Интеграция IP-телефонии. Написание конфигураций под требования заказчика, доработка типовых решений. Переход с 7.7 на 8.х.
Пишите в ЛС. Звоните +380 (44) 2227507, (57) 7547700, (98) 5147778, (50) 7147778, (93) 2147778 (участник "САБ")

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 23.08.17, 10:34
Сообщение #3

Оратор
*****
Группа: Пользователи
Сообщений: 355
Спасибо сказали: 5 раз
Рейтинг: 2

Цитата(logist @ 23.08.17, 11:24) *
с явным ограничением длинны поля

Это никогда не делал и с этим не сталкивался.
Но имеется ввиду в запросе длину ограничить на указанную цифру?
На пример на 500 или 1000?
logist @ Сегодня, 11:24 * ,

Batchir Подменю пользователя
сообщение 23.08.17, 11:00
Сообщение #4

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3478
Из: Одесса
Спасибо сказали: 1329 раз
Рейтинг: 977.8

Цитата(logist @ 23.08.17, 11:24) *
Искать запросом, с явным ограничением длинны поля


Я вообще уже давно не использую конструкции НайтиПоРеквизиту.
А причина на самом деле проста. Метод НайтиПоРеквизиту быстрее запроса, если объект поиска простой и не используется в цикле.
Но представьте что в объекте поиска есть реквизит с типом ХранилищеЗначений и в котором будет храниться скажем 50МБ информации.
Метод НайтиПоРеквизиту получит всю эту информацию и поместит в память, а нужно ли это?
Если нужно, то использование будет оправданным, а если нет, то просто так дадим неоправданную нагрузку на сервер.
А с помощью запроса мы получаем только ту информацию с ИБ, которая нам нужна.

З.ы. если честно, то тесты "что лучше НайтиПоРеквизиту или Запрос" проводил давно, может ситуация уже и изменилась, но привычка "получать данные только запросом" осталась)))

Сообщение отредактировал Batchir - 23.08.17, 11:00


Signature

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 23.08.17, 11:33
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 355
Спасибо сказали: 5 раз
Рейтинг: 2

Цитата(Batchir @ 23.08.17, 12:00) *
Я вообще уже давно не использую конструкции НайтиПоРеквизиту.
А причина на самом деле проста. Метод НайтиПоРеквизиту быстрее запроса, если объект поиска простой и не используется в цикле

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

Просто нужно получить реквизит по поиску текста строк реквизита ТЧ и потом вставить нужные данные уже в другой указанный реквизит для вставки данных
Т.е. тут речь не о реквизите с типом ХранилищеЗначений. Речь об обычных реквизитах. И процедур пойска и вставки данных в нужные поля.
Не знаю как это с точки зрения скорости работы, но чисто для написания кода так легче. А то уже надоело писать.. писать... кучу процедур и функций, когда есть встроенные команды.
Просто так меньше писанины и труда.
Но при этом нужно, что бы реквизит пойска имел неограниченную длину.
Если это невозможно ... ладно .. сниму галку и сделаю длину на пример 500 и все.
Вот собственно вся задача
Ладно! Спасибо!

Егор Динин Подменю пользователя
сообщение 23.08.17, 11:49
Сообщение #6

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1446
Из: Киев
Спасибо сказали: 531 раз
Рейтинг: 364.7

база sql?
как-то давно сталкивался с ошибками в типовых,
в sql такой тип данных отсутствует.

logist Подменю пользователя
сообщение 23.08.17, 11:53
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Mecтный
Сообщений: 9334
Из: Харьков
Спасибо сказали: 2455 раз
Рейтинг: 0

Цитата(Gigi @ 23.08.17, 12:33) *
Но в моем случае команда НайтиПоРеквизиту используется в цикле табличной части.

Тогда тем более запрос - лучшее решение, всё что нужно можно сделать запросом, не перебирая ТЧ.


Signature
Весь комплекс услуг по 1С 8.х. От консультаций до внедрения. ИТС. 1С-Звіт. Интеграция IP-телефонии. Написание конфигураций под требования заказчика, доработка типовых решений. Переход с 7.7 на 8.х.
Пишите в ЛС. Звоните +380 (44) 2227507, (57) 7547700, (98) 5147778, (50) 7147778, (93) 2147778 (участник "САБ")

Batchir Подменю пользователя
сообщение 23.08.17, 18:29
Сообщение #8

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3478
Из: Одесса
Спасибо сказали: 1329 раз
Рейтинг: 977.8

Цитата(Gigi @ 23.08.17, 12:33) *
Просто нужно получить реквизит по поиску текста строк реквизита ТЧ и потом вставить нужные данные уже в другой указанный реквизит для вставки данных
Т.е. тут речь не о реквизите с типом ХранилищеЗначений. Речь об обычных реквизитах. И процедур пойска и вставки данных в нужные поля.
Не знаю как это с точки зрения скорости работы, но чисто для написания кода так легче. А то уже надоело писать.. писать... кучу процедур и функций, когда есть встроенные команды.
Просто так меньше писанины и труда.
Но при этом нужно, что бы реквизит пойска имел неограниченную длину.
Если это невозможно ... ладно .. сниму галку и сделаю длину на пример 500 и все.
Вот собственно вся задача

Браво, 5 балов )))
т.к. Вы сравнительно недавно с 1С, то я ваш ход мыслей понимаю, но не в коем случае не соглашусь с ним.
команда НайтиПоРеквизиту на уровне СУБД это тот же запрос так же как и обращение к реквизиту ссылки через точку.
Вот когда Вы осмыслите разницу между (код чисто для примера):
Артикул = НоменклатураСсылка.Артикул;

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

РезультатЗапроса = Запрос.Выполнить();
Ариткул = "";
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        Ариткул = Выборка.Ариткул;
    КонецЦикла;    
КонецЕсли;

Тогда мы сможем конструктивно разговаривать, т.к. будем друг друга понимать.
Сейчас, к сожалению, что бы я и другие люди не говорили - Вы нас не поймете.

Цитата(Gigi @ 23.08.17, 12:33) *
Но в моем случае команда НайтиПоРеквизиту используется в цикле табличной части.

Советую так же изучить тему запросов в цикле.
Удачи в изучении 1С.

Сообщение отредактировал Batchir - 23.08.17, 18:31


Signature

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.19, 16:52
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне