Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с запросом
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
ekris
Гуру 1С помогите! Задача следующая есть в справочнике Контрагенты поле КодпоЕДРПОУ, в существующей базе правильно введены только первые 7 чисел, есть входящая база с правильным ОКПО, нужно запросом найти код и заменить на правильный.
Вот запрос, но он пока не работает...
ЗапросПоискаКонтрагента = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                                    |    Контрагенты.Ссылка,
                                                    |    Контрагенты.КодПоЕДРПОУ КАК ОКПО,
                                                    |    Контрагенты.Наименование
                                                    |ИЗ
                                                    |    Справочник.Контрагенты КАК Контрагенты
                                                    |ГДЕ
                                |Контрагенты.КодПоЕДРПОУ ПОДОБНО &КонтрагентОКПО");
                                                                
            ЗапросПоискаКонтрагента.УстановитьПараметр("КонтрагентОКПО", Лев(ОКПОКонтрагента,7)+"%");
            ВыборкаПоиска = ЗапросПоискаКонтрагента.Выполнить().Выгрузить();
            
            //Ищем контрагента по ОКПО
            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ОКПО", Лев(ОКПОКонтрагента,7)+"%");
            НайденныеКонтрагенты = ВыборкаПоиска.НайтиСтроки(ПараметрыОтбора);

и как потом записать в справочник правильное значение
Vofka
А причем тут запрос? Запрос Выполняется как надо? Проблема в том, что вы хз как справочник записать?
logist
А я вообще не понял, запрос ищет контрагента и потом в единственном результате выполняется еще раз поиск... фигня какая-то smile.gif
ekris
В том то и проблема, что запрос не выполняется. Количество найденных 0, хотя они точно есть.

Так подскажите что исправить, потому что запрос из стандартной обработки, немного подкорректированный. И конечно хз как перезаписать ОКПО, это уже второй к вам вопрос.
pablo
У вас переменная ОКПОКонтрагента как появляется? Не преобразованием ли числового значения в строковое через функцию строка? Если да, то у вас в этой переменной пробелы затесались.
Petre
Я бы соединил существующую базу кодов с таблицей правильных кодов одним запросом, а потом делал запись.
ekris
Цитата(pablo @ 11.04.13, 9:25) необходимо зарегистрироваться для просмотра ссылки
У вас переменная ОКПОКонтрагента как появляется? Не преобразованием ли числового значения в строковое через функцию строка? Если да, то у вас в этой переменной пробелы затесались.


Нет, пробелов там точно нет.

Цитата(Petre @ 11.04.13, 9:25) необходимо зарегистрироваться для просмотра ссылки
Я бы соединил существующую базу кодов с таблицей правильных кодов одним запросом, а потом делал запись.



А можно это как-то поподробнее
pablo
Цитата
Нет, пробелов там точно нет.

А в базе (неправильной) лидирующих пробелов тоже нет?
Petre
Передать ТЗ правильных кодов параметром в запрос, сделать левое соединение существующих кодов с переданной ТЗ, а потом обработать в цикле результат с записью справочников.
ekris
Цитата(pablo @ 11.04.13, 9:33) необходимо зарегистрироваться для просмотра ссылки
А в базе (неправильной) лидирующих пробелов тоже нет?


да, пробелов тоже нет, при отладке видно, что числа все правильные, не корректно работает запрос скорее всего.
Vofka
А так
ЗапросПоискаКонтрагента.УстановитьПараметр("КонтрагентОКПО", "%"+Лев(ОКПОКонтрагента,7)+"%");

?
Petre
Как logist уже сказал, в этом нет смысла:
            //Ищем контрагента по ОКПО
            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ОКПО", Лев(ОКПОКонтрагента,7)+"%");
            НайденныеКонтрагенты = ВыборкаПоиска.НайтиСтроки(ПараметрыОтбора);


Да и разве в таких поисках поддерживаются регулярные выражения?
World1С
|ГДЕ
|Контрагенты.КодПоЕДРПОУ ПОДОБНО &КонтрагентОКПО

ЗапросПоискаКонтрагента.УстановитьПараметр("КонтрагентОКПО", Лев(ОКПОКонтрагента,7)+"%");


Почему условие подобно?

|ГДЕ
|Контрагенты.КодПоЕДРПОУ = &КонтрагентОКПО

ЗапросПоискаКонтрагента.УстановитьПараметр("КонтрагентОКПО", Лев(ОКПОКонтрагента,7));


Так сработает

|ГДЕ
|Контрагенты.КодПоЕДРПОУ В (&КонтрагентОКПО)

ЗапросПоискаКонтрагента.УстановитьПараметр("КонтрагентОКПО", -СписокЗначений-));


Или так.
Только в последнем примере параметр запроса "КонтрагентОКПО" должно содержать тип СписокЗначений, Массив, ТаблицаЗначений

Цитата
Да и разве в таких поисках поддерживаются регулярные выражения?


нет не поддерживается.
Petre
Цитата(World1С @ 11.04.13, 11:35) необходимо зарегистрироваться для просмотра ссылки
Почему условие подобно?

Потому что "правильно введены только первые 7 чисел", а не "введены только первые 7 чисел".
Думаю, под
Цитата
Количество найденных 0, хотя они точно есть.

автор имел ввиду НайденныеКонтрагенты, а не результат запроса.
ekris
Спасибо Логисту icon_beer17.gif , надо было всего лишь убрать 2-й отбор... Зачем он был в типовой конфигурации думать уже не буду.
Vofka
ekris, зачем писать, что проблема в запросе? Зла не хватает. icon_cuss.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.