Форум программистов, компьютерный форум CyberForum.ru

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
Knogg
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 17
#1

1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения - 1С

15.12.2016, 22:59. Просмотров 241. Ответов 4
Метки нет (Все метки)

Имеется справочник, в нем есть реквизиты, также табличные части, в которых также есть реквизиты.

Я создал кнопку которая должна выдать где есть совпадения с конкретным значением. (вывести наименования всех кафедр, у которых есть дисциплина с наименованием «Базы данных») Но не работает, неправильно возможно выполняю функцию поиска.

Ниже прикладываю код кнопки обработки

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&НаКлиенте
Процедура Поиск(Команда)
    ПоискС();
КонецПроцедуры
 
Процедура ПоискС()
    СпрНовКаф = Справочники.НовыеКафедры;
    ТаблСд = Справочники.НовыеКафедры.Выбрать();
    рррр = Справочники.Дисциплины; // Справочник со всеми дисциплинами
    ииии = рррр.НайтиПоНаименованию("Базы Данных"); //То что я ищу в табличной части, дисциплину "базы данных"
    Пока ТаблСд.Следующий() = 1 Цикл
    Сообщить(ТаблСд.НаименованиеКафедры); //какая кафедра сейчас проходит   
        Тч=ТаблСд.СписокДисциплин; //Табличная часть
        Стр=Тч.Найти(ииии.Наименование, "Дисциплина");
            //Стр=Тч.Получить(0); получаю структуру а не результат
        Сообщить(Стр); //постоянно неопределенный результат
        Если Стр = Неопределено Тогда
            Сообщить(ииии.Наименование); //Выводит то что я ищу.
            Сообщить("Неопределено"); 
        КонецЕсли;
        
        Если Стр = (ииии.Наименование) Тогда
            Сообщить("Имеется1");
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры
Добавлено через 45 секунд
Пожалуйста помогите, я новичок в 1c
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2016, 22:59     1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения
Посмотрите здесь:

Как сделать форматированный вывод табличной части документа в макет? 1С 1C 8.x
1С 1C 8.x Запрос к табличной части
Загрузка табличной части 1С
1С Запрос к табличной части 1С
1С 1C 8.x (тонкий) Автозаполнение табличной части
Вывод данных из справочника при изменении табличной части 1С
1С Значение строки табличной части получить в табличной части другого документа
1С 1C 8.x Создание табличной части
1С Автозаполнение табличной части
Данные - Табличной части 1С 1C 8.x
Вывод столбца табличной части элемента справочника в форму списка 1С
Вывод табличной части документа в форму списка журнала документов 1С

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Joker_vad
451 / 392 / 47
Регистрация: 26.09.2012
Сообщений: 1,688
16.12.2016, 10:41     1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения #2
А в табличной части реквизит дисциплина, какого типа?
Knogg
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 17
16.12.2016, 14:25  [ТС]     1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения #3
СправочникСсылка.Дисциплины где там она уже строка 25 симв
Joker_vad
451 / 392 / 47
Регистрация: 26.09.2012
Сообщений: 1,688
16.12.2016, 14:29     1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения #4
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&НаКлиенте
Процедура Поиск(Команда)
    ПоискС();
КонецПроцедуры
 
Процедура ПоискС()
    СпрНовКаф = Справочники.НовыеКафедры;
    ТаблСд = Справочники.НовыеКафедры.Выбрать();
    рррр = Справочники.Дисциплины; // Справочник со всеми дисциплинами
    ииии = рррр.НайтиПоНаименованию("Базы Данных"); //То что я ищу в табличной части, дисциплину "базы данных"
    Пока ТаблСд.Следующий() = 1 Цикл
    Сообщить(ТаблСд.НаименованиеКафедры); //какая кафедра сейчас проходит   
        Тч=ТаблСд.СписокДисциплин; //Табличная часть
        Стр=Тч.Найти(ииии, "Дисциплина");
            //Стр=Тч.Получить(0); получаю структуру а не результат
        Сообщить(Стр); //постоянно неопределенный результат
        Если Стр = Неопределено Тогда
            Сообщить(ииии.Наименование); //Выводит то что я ищу.
            Сообщить("Неопределено"); 
        КонецЕсли;
        
        Если Стр = (ииии.Наименование) Тогда
            Сообщить("Имеется1");
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры
Попробуй так, если нет кидай конфу посмотрим.
renat_dmitriev
92 / 92 / 26
Регистрация: 26.08.2016
Сообщений: 308
18.12.2016, 20:44     1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения #5
Цитата Сообщение от Knogg Посмотреть сообщение
1C
1
2
СпрНовКаф = Справочники.НовыеКафедры;
ТаблСд = Справочники.НовыеКафедры.Выбрать();
К чему первая строка? Если переменную СпрНовКаф вы все равно не используете

Цитата Сообщение от Joker_vad Посмотреть сообщение
1C
1
2
рррр = Справочники.Дисциплины; // Справочник со всеми дисциплинами
ииии = рррр.НайтиПоНаименованию("Базы Данных");
Во первых нет смысла в рррр, если в дальнейшем вы все равно эту переменную не используете, почему не написать сразу

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

1C
1
ЭлементБазыДанных = Справочники.Дисциплины.НайтиПоНаименованию("Базы Данных");
Цитата Сообщение от Knogg Посмотреть сообщение
1C
1
Пока ТаблСд.Следующий() = 1 Цикл
метод Следующий( имеет тип Булево. Не знаю, может с единицей и сработает, не проверял, но в любом случае выглядит не очень правильно. Просто напишите
1C
1
Пока ТаблСд.Следующий() Цикл
Цитата Сообщение от Knogg Посмотреть сообщение
1C
1
Стр=Тч.Найти(ииии.Наименование, "Дисциплина");
Если Дисциплина - ссылка на справочник, то зачем вы ищете по наименованию? Правильно будет как выше уже подметили

1C
1
Стр=Тч.Найти(ииии, "Дисциплина");
Цитата Сообщение от Knogg Посмотреть сообщение
1C
1
Сообщить(Стр);
Малоинформативное и как мне кажется лишнее сообщение. Стр - это просто ссылка на найденную строку, если дальше вы все равно проверяете на неопределено, то можно эту строку опустить.

Цитата Сообщение от Knogg Посмотреть сообщение
1C
1
2
3
Если Стр = (ииии.Наименование) Тогда
            Сообщить("Имеется1");
        КонецЕсли;
Этот код никогда и ни при каких обстоятельствах не будет выведен, потому что Стр не может быть равно строке. Само условие абсолютно бессмысленно. Таким образом правильный код будет
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Процедура ПоискС()
 
    КафедрыВыборка = Справочники.НовыеКафедры.Выбрать();
    ЭлементБазыДанных = Справочники.Дисциплины.НайтиПоНаименованию("Базы Данных"); 
 
    Пока КафедрыВыборка.Следующий() Цикл
        Сообщить(КафедрыВыборка.НаименованиеКафедры); //какая кафедра сейчас проходит   
        
        СтрокаДисциплины = КафедрыВыборка.СписокДисциплин.Найти(ЭлементБазыДанных, "Дисциплина");
            
        Если СтрокаДисциплины = Неопределено Тогда
            Сообщить("" + ЭлементБазыДанных.Наименование + " не найден"); 
        Иначе
            Сообщить("Имеется");
        КонецЕсли;
        
    КонецЦикла;
 
КонецПроцедуры
Добавлено через 2 минуты
В качестве тренировки работы с выборкой такой код подойдет, но выполняются такие вещи долго, быстрее будет запросом
Yandex
Объявления
18.12.2016, 20:44     1C 8.x Поиск по табличной части совпадение с каким-то наименованием и вывод совпадения
Ответ Создать тему
Опции темы

Текущее время: 15:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru