Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
1

Загрузка в Справочник

12.02.2016, 11:26. Просмотров 1189. Ответов 53
Метки нет (Все метки)

Добрый день! Вопрос наверное глупы но что то я не понимаю почему не так, хочу загрузить в справочник данные с Excel и проверить по реквизиту КодУслуги, если он уже существует тогда пропустить. У меня загружает без проверки, не понимаю почему.

Вот часть кода
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
КодУслуг=ExcelЛист.Cells(Строка, 1).Value;
            Наименование=ExcelЛист.Cells(Строка, 2).Value;
            Ценна=ExcelЛист.Cells(Строка, 3).Value;
            
            ОчиститьСообщения();
            Спр=Справочники.Номенклатура.НайтиПоНаименованию(КодУслуг);
            Если Спр.Пустая()=Истина Тогда 
                НовЭл = Справочники.Номенклатура.СоздатьЭлемент();       
                НовЭл.КодУслуги=КодУслуг;
                НовЭл.Наименование=Наименование;
                НовЭл.Записать();
            
        Иначе
            Сообщить("Уже создан");
                КонецЕсли;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2016, 11:26
Ответы с готовыми решениями:

Загрузка в Справочник
Почему то не загружает в справочник Процедура КнопкаВыполнитьНажатие(Кнопка)...

Загрузка в Справочник
Написал код для загрузки в справочник, начинаю загружать зависает, подскажите...

Загрузка данных из Excel в справочник 1С
Здравствуйте. Очень нужна помощь. У меня есть exel файл с очень нестандартным...

Передача данных: Справочник <-> Документ <-> Справочник
Доброго все времени суток! я в 1С новичек, помогите пожалуйста Я понимаю,...

Загрузка Адреса Из Файла *.dbf В Справочник "физические Лица"
Подскажите, пожалуйста, может быть кто-нибудь сталкивался. Загружаю из *.dbf...

53
SHIFT_969
Злой самаритянин
178 / 179 / 94
Регистрация: 24.04.2014
Сообщений: 686
Завершенные тесты: 1
16.02.2016, 10:06 21
Ermak27,
СправочникОбъект = Ссылка.ПолучитьОбъект();
В СправочникОбъект меняешь все, что нужно, потом:
СправочникОбъект.Записать();
С документами так же.
1
Phil
Эксперт 1С
404 / 281 / 86
Регистрация: 28.05.2014
Сообщений: 1,134
16.02.2016, 11:45 22
Ermak27, ПолучитьОбъект()
Присвоить новое наименование, записать.

p.s. уже ответили, не посмотрел)
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
24.02.2016, 11:30  [ТС] 23
Phil, пишет ошибку

Ошибка чтения строки файла Microsoft Excel.1
{Форма.Форма.Форма(117)}: Поле объекта не обнаружено (Ссылка)

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
....
            КодУслуг=ExcelЛист.Cells(Строка, 1).Value;
            Наименование=ExcelЛист.Cells(Строка, 2).Value;  
 
ТЗ=Новый ТаблицаЗначений;
    Запрос = Новый Запрос;
    ТекстЗапроса =
    "ВЫБРАТЬ
    |   Номенклатура.Ссылка,
    |   Номенклатура.КодУслуги,
    |   Номенклатура.Наименование
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура";
    Запрос.Текст=ТекстЗапроса;  
    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Сортировать("КодУслуги, Наименование");
    ТЗ.Свернуть("КодУслуги, Наименование");
    
Для Каждого СпрЭл из ТЗ Цикл
            Если Не ТЗ.Найти(КодУслуг,"КодУслуги")=Неопределено и СпрЭл.Наименование<>Наименование Тогда
                СправочникОбъект = СпрЭл.Ссылка.ПолучитьОбъект();
                СправочникОбъект.Наименование=Наименование;
                СправочникОбъект.Записать();
            КонецЕсли;
            КонецЦикла;
0
Phil
Эксперт 1С
404 / 281 / 86
Регистрация: 28.05.2014
Сообщений: 1,134
24.02.2016, 11:46 24
Ermak27,
Цитата Сообщение от Ermak27 Посмотреть сообщение
ТЗ.Свернуть("КодУслуги, Наименование");
Свернул по 2 полям, в ТЗ теперь 2 колонки, Ссылки нет, зачем сворачивать? простой группировки в запросе было бы достаточно.
Цитата Сообщение от Ermak27 Посмотреть сообщение
Запрос = Новый Запрос; ТекстЗапроса =
и зачем такие сложности?
Цитата Сообщение от Ermak27 Посмотреть сообщение
Запрос.Текст=ТекстЗапроса;
Сразу бы написал
1C
1
2
3
4
5
6
7
8
 Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Номенклатура.Ссылка,
    |   Номенклатура.КодУслуги,
    |   Номенклатура.Наименование
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура";
1
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
24.02.2016, 11:59  [ТС] 25
Phil, я исправил он мне значение исправил под одно, что тут с условием не так
1C
1
2
3
4
5
6
7
        Для Каждого СтрТЗ из ТЗ Цикл
            Если Не ТЗ.Найти(КодУслуг,"КодУслуги")=Неопределено и СтрТЗ.Наименование<>Наименование Тогда
                СправочникОбъект = СтрТЗ.Ссылка.ПолучитьОбъект();
                СправочникОбъект.Наименование=Наименование;
                СправочникОбъект.Записать();
            КонецЕсли;
            КонецЦикла;
Добавлено через 1 минуту
мне нужно было если наименование меняется а код нет тогда меняет наименование из файла.
0
Phil
Эксперт 1С
404 / 281 / 86
Регистрация: 28.05.2014
Сообщений: 1,134
24.02.2016, 12:11 26
Ermak27, не до конца понял, ты сравниваешь по коду? так сделай условие если код одинаковый а наименование разное, то получай элемент и меняй наименование.
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
24.02.2016, 12:12  [ТС] 27
Phil, да я ищу по коду, если код одинаковый а наименование разное то меняю наименование что в файле. У меня не получается сделать условие!
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
18.03.2016, 10:55  [ТС] 28
Phil, В течении тестирования выявилась что КодЛС пробегает по каждому СтрТЗ.Код, у меня около 40 тыс , как сделать чтобы когда КодЛС =СтрТЗ.Код прекращался поиск и начинался поиск следующего КодЛС

Вот часть кода

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
Запрос = Новый Запрос("ВЫБРАТЬ
                          | ЛицевыеСчетаАбонентовГРО.Ссылка,
                          | ЛицевыеСчетаАбонентовГРО.Код,
                          | ЛицевыеСчетаАбонентовГРО.Наименование
                          |ИЗ
                          | Справочник.ЛицевыеСчетаАбонентовГРО КАК ЛицевыеСчетаАбонентовГРО");
    Выборка = Запрос.Выполнить();
    ТЗ=Выборка.Выгрузить();
    
    Пока НЕ ФайлДБФ.ВКонце() Цикл
        ЛС = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("LSHET"));
КодЛС=Число(ЛС);
 
Для Каждого СтрТЗ из ТЗ Цикл
            Номер=Номер+1;
            СправочникОбъект = СтрТЗ.Ссылка.ПолучитьОбъект();
            Если СтрТЗ.Код=КодЛС и СтрТЗ.Наименование<>Адрес Тогда
                СправочникОбъект.Наименование=Адрес;
                СправочникОбъект.Записать();
            КонецЕсли;
            Состояние("Номер: "+Номер);
        КонецЦикла;
        ФайлДБФ.Следующая(); 
    КонецЦикла;
    ФайлДБФ.ЗакрытьФайл();
Добавлено через 34 секунды
Сейчас он пока все записи в справочнике не пройдет к следующему КодЛС не переходит.
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
18.03.2016, 10:58 29
Ermak27,
1C
1
2
3
4
5
            Если СтрТЗ.Код=КодЛС и СтрТЗ.Наименование<>Адрес Тогда
                СправочникОбъект.Наименование=Адрес;
                СправочникОбъект.Записать();
                Прервать; //?
            КонецЕсли;
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
18.03.2016, 11:22  [ТС] 30
GreenkO, почему то не сработало. Я в отладчике проверил когда СтрТЗ.Код=КодЛС и СтрТЗ.Наименование=Адрес продолжился дальше поиск СтрТЗ.Код а должен был прерваться. Может я конечно не так что то сделал, идея такая, если СтрТЗ.Код=КодЛС а СтрТЗ.Наименование<>Адрес тогда перезаписываем Наименование а если СтрТЗ.Наименование=Адрес тогда прекращаем и ищем по другому КодЛС
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
18.03.2016, 11:28 31
Ermak27, тогда так
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Пока НЕ ФайлДБФ.ВКонце() Цикл
 ЛС = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("LSHET"));
 КодЛС=Число(ЛС);
 
 Для Каждого СтрТЗ из ТЗ Цикл
  Номер=Номер+1;
  СправочникОбъект = СтрТЗ.Ссылка.ПолучитьОбъект();
  Если СтрТЗ.Код=КодЛС и СтрТЗ.Наименование<>Адрес Тогда
   СправочникОбъект.Наименование=Адрес;
   СправочникОбъект.Записать();
  ИначеЕсли СтрТЗ.Наименование = Адрес Тогда //здесь может еще добавить "И СтрТЗ.Код=КодЛС" ?
   Прервать;
  КонецЕсли;
  Состояние("Номер: "+Номер);
  КонецЦикла;
 ФайлДБФ.Следующая(); 
КонецЦикла;
ФайлДБФ.ЗакрытьФайл();
1
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
18.03.2016, 12:31  [ТС] 32
GreenkO, почему то не записывает изменения в наименовании

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
Если ТЗ.Найти(КодЛС,"Код")=Неопределено Тогда           
            НовЭл = Справочники.ЛицевыеСчетаАбонентовГРО.СоздатьЭлемент();
            НовЭл.Код=ЛС;
            НовЭл.КороткийАдрес=УЛ + ","+ ДОМ + БУК + КОМ + "," + КВ + КОРП;
            НовЭл.Наименование=Адрес;
            НовЭл.ФИО=ФИО;
            НовЭл.Телефон=ТЕЛЕФОН;
            НовЭл.Участок=Справочники.Участки.НайтиПоНаименованию(УЧАСТОК);
            Состояние("Загрузка данных Абонент ГРО = "+ Номер);     
            НовЭл.Записать();
        Иначе
            Прервать;
        КонецЕсли;
        
        Для Каждого СтрТЗ из ТЗ Цикл
            Номер=Номер+1;
            СправочникОбъект = СтрТЗ.Ссылка.ПолучитьОбъект();
            
             Если СтрТЗ.Код=КодЛС и СтрТЗ.Наименование<>Адрес Тогда
                СправочникОбъект.Наименование=Адрес;
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.Наименование=Адрес Тогда  
                Прервать; 
            КонецЕсли;
Добавлено через 2 минуты
вот весь код изменения

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        Для Каждого СтрТЗ из ТЗ Цикл
            Номер=Номер+1;
            СправочникОбъект = СтрТЗ.Ссылка.ПолучитьОбъект();
            
             Если СтрТЗ.Код=КодЛС и СтрТЗ.Наименование<>Адрес Тогда
                СправочникОбъект.Наименование=Адрес;
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.Наименование=Адрес Тогда  
                Прервать; 
            КонецЕсли;
            
            Если СтрТЗ.Код=КодЛС и СтрТЗ.КороткийАдрес<>КороткийАдресБ Тогда
                СправочникОбъект.КороткийАдрес=КороткийАдресБ;
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.КороткийАдрес=КороткийАдресБ Тогда    
                Прервать;
            КонецЕсли;
            
            Если СтрТЗ.Код=КодЛС и СтрТЗ.ФИО<>ФИО Тогда
                СправочникОбъект.ФИО=ФИО;
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.ФИО=ФИО Тогда 
                Прервать;
            КонецЕсли;
            
            Если СтрТЗ.Код=КодЛС и СтрТЗ.Телефон<>ТЕЛЕФОН Тогда
                СправочникОбъект.Телефон=ТЕЛЕФОН;
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.Телефон=ТЕЛЕФОН Тогда
                Прервать;
            КонецЕсли;
            
            Если СтрТЗ.Код=КодЛС и СтрТЗ.Участок<>УЧАСТОК Тогда
                СправочникОбъект.Участок=Справочники.Участки.НайтиПоНаименованию(УЧАСТОК);
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.Участок=УЧАСТОК Тогда
                Прервать;
            КонецЕсли;
            
            Если СтрТЗ.Код=КодЛС и СтрТЗ.Персонал<>ПЕРСОНАЛ Тогда
                Если ПЕРСОНАЛ=1 Тогда
                    СправочникОбъект.Персонал=Истина;
                    СправочникОбъект.Записать();
                ИначеЕсли ПЕРСОНАЛ=0 Тогда
                    СправочникОбъект.Персонал=Ложь;
                    СправочникОбъект.Записать();
                КонецЕсли;
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.Персонал=ПЕРСОНАЛ Тогда
                Прервать;
            КонецЕсли; 
 
            Состояние("Номер: "+Номер);
        КонецЦикла;
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
18.03.2016, 12:38 33
Ermak27, ПолучатьОбъект() надо при заходе в условие, где вы его изменяете и записываете.
Про наименование - раньше записывало? У вас типы у СтрТЗ.Код и КодЛС одинаковый? КодЛС - Число, а СтрТЗ.Код?
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
18.03.2016, 13:33  [ТС] 34
GreenkO, В отладчике просмотрел, типы все одинаковые. Почему то не сработало условие Если СтрТЗ.Код=КодЛС и СтрТЗ.ФИО<>ФИО Тогда . Что не так?
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
18.03.2016, 13:50 35
Ermak27, посмотрите в отладчике, какое из этих условий дает ЛОЖЬ
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
18.03.2016, 14:10  [ТС] 36
GreenkO, это как посмотреть?
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
18.03.2016, 14:28 37
Ermak27, ставите точку останова напротив условия, затем при остановке выполнения кода в этом месте выделяете выражение сравнения, например, 'СтрТЗ.Код=КодЛС' и нажимает "вычислить выражение"(значок лупы на панели отладки). Аналогично можно поступить со всеми выражениями
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 17:01  [ТС] 38
Я изменил значение ФИО, т.е должно сработать условие
1C
1
2
3
4
5
6
7
        Если СтрТЗ.Код=КодЛС и СтрТЗ.ФИО<>ФИО Тогда
                СправочникОбъект = СтрТЗ.Ссылка.ПолучитьОбъект();
                СправочникОбъект.ФИО=ФИО;
                СправочникОбъект.Записать();
            ИначеЕсли СтрТЗ.Код=КодЛС и СтрТЗ.ФИО=ФИО Тогда 
                Прервать;
            КонецЕсли;
В отладчике посмотрел СтрТЗ.Код=КодЛС Ложь, а СтрТЗ.ФИО<>ФИО Истина, условие не сработало. почему?
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
21.03.2016, 17:07 39
Ermak27, потому что ЛОЖЬ И ИСТИНА = ЛОЖЬ

Добавлено через 38 секунд
а ЛОЖЬ ИЛИ ИСТИНА = ИСТИНА
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 17:14  [ТС] 40
GreenkO, и что делать?
0
21.03.2016, 17:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2016, 17:14

Справочник.
Ребята, подскажите, как сделать такую вот операцию: Есть справочник товаров, в...

справочник
Здравствуйте, сразу прошу меня не критиковать, я только начала заниматься этим...

Справочник по 1С 8.1
1. Каким образом из модуля формы можно обратиться к измерениям регистра...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru