|
поиск контрагента по наименованию и родителю | ☑ | ||
---|---|---|---|---|
0
r2d24
12.12.13
✎
12:19
|
Надо вывести наименование контрагента, у которого "Наименование" равно переменной "Контр", и "Родитель" равен переменной "РодитКонтр".
Текст = новый ТекстовыйДокумент; Текст.Прочитать(ПолеВвода1 + "\" +"ДоговораКонтрагентов.txt"); Запр = новый Запрос; Запр.Текст="ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование = &Наименование | И Контрагенты.Родитель = &Родитель"; Для р = 1 по Текст.КоличествоСтрок() Цикл Слово = РазобратьДоговор(Текст.ПолучитьСтроку(р));// эта функция, она разбивает строку текстового документа на 4 части //:"наименование контрагента", "наименование договора контрагента", "уровень договора", "родитель контрагента" - но это не надо, так, для пояснения Контр=Слово[1]; //наименование контрагента Догов=Слово[2]; УровКонтр=Число(Слово[3]); РодитКонтр=Слово[4];// родитель контрагента Запр.УстановитьПараметр("Наименование", Контр); Запр.УстановитьПараметр("Родитель", РодитКонтр); Результат = Запр.Выполнить(); Если Результат.Пустой() Тогда Выборка=Результат.Выбрать(); Сообщить(Выборка.Ссылка.Наименование); КонецЕсли; КонецЦикла |
|||
1
Godofsin
12.12.13
✎
12:26
|
Родитель это ссылка
|
|||
2
samozvanec
12.12.13
✎
12:26
|
"Результат = Запр.Выполнить();
Если Результат.Пустой() Тогда Выборка=Результат.Выбрать(); Сообщить(Выборка.Ссылка.Наименование); КонецЕсли;" нуну |
|||
3
Godofsin
12.12.13
✎
12:26
|
запрос в цикле = ай-яй-яй
|
|||
4
Godofsin
12.12.13
✎
12:27
|
и (2) тоже в точку
|
|||
5
samozvanec
12.12.13
✎
12:29
|
(0) а можно взглянуть на функцию, которая разбивает строку текстового документа на 4 части? любопытно очень
|
|||
6
r2d24
12.12.13
✎
12:31
|
(5)
Функция РазобратьДоговор(Стр) Слово = Новый Массив(30); Для Каждого ТекСлово Из Слово Цикл ТекСлово=""; КонецЦикла; текСлово="";Номер=0; Для Ц=1 По СтрДлина(Стр) Цикл Символ=Сред(Стр,Ц,1); Если Символ="|" Тогда Номер = Номер+1; Слово[Номер] = текСлово; текСлово = ""; Иначе текСлово = текСлово+Символ; КонецЕсли; КонецЦикла; Возврат Слово; КонецФункции |
|||
7
r2d24
12.12.13
✎
12:33
|
+(6) она не совсем на 4 части разбивает, а разбивает ровно на столько, сколько символов "|" в строке, у меня таких символов 4
|
|||
8
r2d24
12.12.13
✎
12:41
|
Кто нибудь может подсказать ошибку в коде?
Текст = новый ТекстовыйДокумент; Текст.Прочитать(ПолеВвода1 + "\" +"ДоговораКонтрагентов.txt"); Запр = новый Запрос; Запр.Текст="ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Наименование = &Наименование | И Контрагенты.Родитель = &Родитель"; Для р = 1 по Текст.КоличествоСтрок() Цикл Слово = РазобратьДоговор(Текст.ПолучитьСтроку(р));// эта функция, она разбивает строку текстового документа на 4 части //:"наименование контрагента", "наименование договора контрагента", "уровень договора", "родитель контрагента" - но это не надо, так, для пояснения Контр=Слово[1]; //наименование контрагента Догов=Слово[2]; УровКонтр=Число(Слово[3]); РодитКонтр=Слово[4];// родитель контрагента Запр.УстановитьПараметр("Наименование", Контр); Запр.УстановитьПараметр("Родитель", РодитКонтр); Результат = Запр.Выполнить(); Если НЕ Результат.Пустой() Тогда Выборка=Результат.Выбрать(); Сообщить(Выборка.Ссылка.Наименование); КонецЕсли; КонецЦикла |
|||
9
МихаилМ
12.12.13
✎
12:41
|
что за бред
Для Каждого ТекСлово Из Слово Цикл ТекСлово=""; КонецЦикла; |
|||
10
Жан Пердежон
12.12.13
✎
12:44
|
| И Контрагенты.Родитель.Наименование = &Родитель";
|
|||
11
r2d24
12.12.13
✎
12:44
|
(9) знаю, но ошибка не там
|
|||
12
Жан Пердежон
12.12.13
✎
12:44
|
но код все равно уг
|
|||
13
AaNnDdRrEeYy
12.12.13
✎
12:45
|
табе в (1) подсказали, Родтель - это ссылка, а ты ее в запросе со строкой сравниваещь.
|
|||
14
МихаилМ
12.12.13
✎
12:45
|
||||
15
AaNnDdRrEeYy
12.12.13
✎
12:46
|
(11) выборку позиционировать надо методом Следующий()... у тебя этого нету.
|
|||
16
r2d24
12.12.13
✎
12:46
|
(10) не, не то
|
|||
17
AaNnDdRrEeYy
12.12.13
✎
12:50
|
Результат = Запр.Выполнить();
Если Результат.Пустой() Тогда // Результат Пустой!!!! что ты из него получить еще что-то хочещь? Выборка=Результат.Выбрать(); Сообщить(Выборка.Ссылка.Наименование); КонецЕсли; ////////////////////////////////////////// Результат = Запр.Выполнить(); Если НЕ Результат.Пустой() Тогда Выборка=Результат.Выбрать(); Если Выборка.Следующий() ТОгда //ПОзиционируешся на первом элементе выборки. Сообщить(Выборка.Ссылка.Наименование); КонецЕсли; КонецЕсли; |
|||
18
r2d24
12.12.13
✎
12:50
|
(13) и что это значит, ее нельзя сравнивать? Почему наименование можно сравнить?
|
|||
19
AaNnDdRrEeYy
12.12.13
✎
12:52
|
(18) можно сравнивать, только результат будет ложь.
Ты себя выдал, троль. завязывай. |
|||
20
Жан Пердежон
12.12.13
✎
12:52
|
(16) все то + еще у тебя Выброка.следующий() пропущено
|
|||
21
hhhh
12.12.13
✎
12:53
|
(18) потому что наименование - это строка.
(16) попробуйте текСлово="";Номер=1; |
|||
22
hhhh
12.12.13
✎
12:53
|
да и Выборка.Следующий()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |