![]() |
![]() |
![]() |
|
Ошибка при установке значения атрибута контекста : Реквизит недоступен для | ☑ | ||
---|---|---|---|---|
0
Старуха Шапокляк
28.05.10
✎
15:20
|
В спр.Контрагенты добавлен реквизит "Ключ" - строка, 25символов. Надо загрузить контрагентов из Эксель. В Эксель они попали из другой программы, которая является наиболее приоритетной, чем та, в которую загружать будем. Поэтому при загрузке, надо предусмотреть несколько условий:
анализируем Ключ: Ключ не совпал анализируем ИНН: ИНН совпал анализируем КПП: КПП совпал В таком случае, надо заполнить Ключ и все остальные заполненные поля данными из файла (Кроме ИНН и КПП, т.к. они совпали). Выходит ошибка: Ошибка при установке значения атрибута контекста (ЮрФизЛицо): Реквизит недоступен для группы ОбъектКА.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо; по причине: Реквизит недоступен для группы Вот мой код: Ексель = новый COMОбъект("Excel.Application"); Для ТекНомер = 1 По КоличествоСтраниц Цикл для н= 1 по ВсегоКоличестовСтрок -1 цикл Ключ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки).Value; Ключ = СтрЗаменить(Ключ, Символы.НПП, ""); //убрала пробел как разделитель КодКА = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +1).Value; КодКА = СтрЗаменить(КодКА, Символы.НПП, ""); ИНН = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +2).Value; ИНН = СтрЗаменить(ИНН, Символы.НПП, ""); КПП = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +3).Value; КПП = СтрЗаменить(КПП, Символы.НПП, ""); ЮРФЛ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +4).Value; Название = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +5).Value; // ....... // Ищем контрагента в справочнике по реквизиту КА = Справочники.Контрагенты.НайтиПоРеквизиту("Ключ",Ключ); Если КА.Пустая() Тогда //не нашли с таким ключом Если не ИНН = "" Тогда //ИНН не пустое в файле КА = Справочники.Контрагенты; СсылкаКА = КА.НайтиПоРеквизиту("ИНН",ИНН); Если НЕ СсылкаКА.Пустая() Тогда //нашли такой ИНН Если не КПП = "" Тогда //КПП не пустое в файле СсылкаКА = КА.НайтиПоРеквизиту("КПП",КПП); Если Не СсылкаКА.Пустая() Тогда //нашли такое КПП ОбъектКА = СсылкаКА.ПолучитьОбъект(); // вставила это условие и все равно ошибка вылетает Если ОбъектКА.ЭтоГруппа Тогда //если элемент это группа Сообщить(ОбъектКА + " - является группой!!! Пропускаем его..."); Продолжить; Иначе ОбъектКА.Ключ = Ключ; //ИНН не берем, т.к. он совпал //КПП не берем, т.к. он совпал //Код не меняем, т.к. в базе уже введен код Если не ЮРФЛ = "" Тогда //если значение "ЮРФЛ" в файле заполнено Если СокрЛП(ЮРФЛ) = "Юридическое лицо" Тогда ОбъектКА.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо; ИначеЕсли СокрЛП(ЮРФЛ) = "Физическое лицо" Тогда ОбъектКА.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо; КонецЕсли; Иначе Сообщить ("ЮЛ/ФЛ для контрагента " + Название + " в файле не заполнен!"); КонецЕсли; Если не Название = "" Тогда ОбъектКА.Наименование = Название; КонецЕсли; // ... ОбъектКА.Записать(); КонецЕсли; //если элемент это группа Иначе // не нашли такое КПП КонецЕсли; //нашли такое КПП КонецЕсли; //КПП не пустое в файле КонецЕсли; //нашли такой ИНН КонецЕсли; //ИНН не пустое в файле КонецЕсли; //не нашли с таким ключом КонецЦикла; КонецЦикла; |
|||
1
maxar
28.05.10
✎
15:24
|
включаем отладку - ставим галку остановка по ошибке - и смотрим результаты своих ошибок...
|
|||
2
mikecool
28.05.10
✎
15:27
|
"Реквизит недоступен для группы " - не надо группе устанавливать этот реквизит
смотри признаки реквизитов - если только для элемента - не устанавливай для группы |
|||
3
Старуха Шапокляк
28.05.10
✎
15:30
|
(2) Так я и поставила условие в (0):
Если ОбъектКА.ЭтоГруппа Тогда //если элемент это группа Сообщить(ОбъектКА + " - является группой!!! Пропускаем его..."); Продолжить; Иначе |
|||
4
butterbean
28.05.10
✎
15:31
|
мне одному кажется, что поиск по ИНН и поиск по КПП между собой никак не связаны??
|
|||
5
hhhh
28.05.10
✎
15:32
|
(4) связаны
|
|||
6
mikecool
28.05.10
✎
15:32
|
а кпп всегда уникальны?
|
|||
7
mikecool
28.05.10
✎
15:33
|
(5) как? меня это тоже напрягло
|
|||
8
maxar
28.05.10
✎
15:34
|
пипец - если нашли по инн - потом если есть кпп ищем по кпп -
кпп - это не уникальный реквизит - т.е. ищем всегда один и тот эе элемент по кпп |
|||
9
mikecool
28.05.10
✎
15:35
|
КА = Справочники.Контрагенты;
СсылкаКА = КА.НайтиПоРеквизиту("ИНН",ИНН); Если НЕ СсылкаКА.Пустая() Тогда //нашли такой ИНН вот здесь будет только одна ссылка, если таковой имеется затем ищем по кпп и находим другого контрагента |
|||
10
Старуха Шапокляк
28.05.10
✎
15:39
|
(9) спасибо, а как мне тогда в связке искать эти два значения - сначала ИНН, затем если нашли, то проверять у него КПП???
|
|||
11
butterbean
28.05.10
✎
15:40
|
(10) запросом ищи
|
|||
12
Старуха Шапокляк
28.05.10
✎
15:43
|
В (0) вопрос снимается, нашла где была ошибка.
Но вопрос про связь ИНН и КПП - остается открытым: Как сначала у этого контрагента проанализировать сначала ИНН, а затем у него же КПП? |
|||
13
mikecool
28.05.10
✎
15:43
|
(10) пробежалась по файлу, собрала инн-кпп в кучу, и затем параметром в (11)
|
|||
14
Старуха Шапокляк
28.05.10
✎
15:44
|
(13) Легко вам сказать! Как это сделать???
|
|||
15
mikecool
28.05.10
✎
15:47
|
инн-кпп в таблицу значений
таблицу значений во врем таблицу потом запрос типа выбрать ИНН, КПП поместить ВТ_Данные Из &ТЗ; выбрать Контрагенты.ссылка, ВТ_Данные.ИНН, ВТ_Данные.КПП из ВТ_Данные левое соединение справочник.контрагенты Как Контрагенты по ВТ_Данные.ИНН = Контрагенты.ИНН И ВТ_Данные.КПП = Контрагенты.КПП |
|||
16
mikecool
28.05.10
✎
15:47
|
+15 там где нулл в ссылка - контрагент не найден
|
|||
17
Шапокляк
28.05.10
✎
15:48
|
СсылкаКА = КА.НайтиПоРеквизиту("ИНН",ИНН);
Если НЕ СсылкаКА.Пустая() Тогда //нашли такой ИНН Если не КПП = "" Тогда //КПП не пустое в файле ////////////////////////// Если СсылкаКА.КПП=КПП Тогда /////////////////////////// вместо вот этого: СсылкаКА = КА.НайтиПоРеквизиту("КПП",КПП); Если Не СсылкаКА.Пустая() Тогда //нашли такое КПП |
|||
18
butterbean
28.05.10
✎
15:52
|
(17) так ты не найдешь тех, у кого один ИНН, но разные КПП
|
|||
19
Шапокляк
28.05.10
✎
15:56
|
(17) Мне не надо, это к автору пожалуйста. Я только догадываться могу, что у нее там в базе происходит. Так, чуть-чуть ее код подрихтовала, не более того
|
|||
20
Шапокляк
28.05.10
✎
15:56
|
19 к (18)
|
|||
21
Старуха Шапокляк
28.05.10
✎
16:03
|
(17),(18) cпасибо!
Но мне бы код полегче, без таблиц значений и временных таблиц, например, как в (17). Неужели, задать простое условие: проанализировать у контрагента ИНН, а затем у него же КПП - надо такую сложную конструкцию делать??? |
|||
22
hhhh
28.05.10
✎
16:06
|
(21)
ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.ИНН = &ИНН И Контрагенты.КПП = &КПП |
|||
23
Шапокляк
28.05.10
✎
16:11
|
(21)Ну не так там и слоно, хотя я бы запросом без соединений и попробовала, что-то вроде
Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Представление |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ИНН = &ИНН | И Контрагенты.КПП = &КПП"; Запрос.УстановитьПараметр("ИНН", ИНН); Запрос.УстановитьПараметр("КПП", КПП); Результат = Запрос.Выполнить(); ВыборкаДетали = Результат.Выбрать(); ЕстьКонтрагент=0; Пока ВыборкаДетали.Следующий() Цикл ЕстьКонтрагент=1; СсылкаКА=ВыборкаДетали.ссылка; ОбъектКА=СсылкаКА.ПолучитьОбъект(); //пиши тут что надо КонецЦикла; Если ЕстьКонтрагент=0 Тогда //НЕТ с таким ИНН и КПП КонецЕсли; |
|||
24
Старуха Шапокляк
28.05.10
✎
16:19
|
(22), (23) - спасибо, а как мне связать ваш запрос с данными из файла (Ключ, ИНН и КПП)?
|
|||
25
Шапокляк
28.05.10
✎
16:20
|
Для ТекНомер = 1 По КоличествоСтраниц Цикл
для н= 1 по ВсегоКоличестовСтрок -1 цикл Ключ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки).Value; Ключ = СтрЗаменить(Ключ, Символы.НПП, ""); //убрала пробел как разделитель КодКА = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +1).Value; КодКА = СтрЗаменить(КодКА, Символы.НПП, ""); ИНН = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +2).Value; ИНН = СтрЗаменить(ИНН, Символы.НПП, ""); КПП = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +3).Value; КПП = СтрЗаменить(КПП, Символы.НПП, ""); ЮРФЛ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +4).Value; Название = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +5).Value; // ....... Запрос=Новый Запрос; и вот сюда. |
|||
26
Старуха Шапокляк
28.05.10
✎
16:24
|
(25) Большое СПАСИБО!!!! Буду пробовать!!!
))))))) |
|||
27
Старуха Шапокляк
28.05.10
✎
16:34
|
Подскажите еще, пожалуйста, два момента:
1) Нужен вначале анализ на реквизит Ключ. Если такого ключа нет в базе, то идет запрос как в (23) и тогда этот Ключ тоже надо вбить в базу. 2) В запросе (23) я найду контрагентов, которых: или нет с таким как в файле ИНН и КПП или есть с таким как в файле ИНН и КПП. Т.е. это случаи или полного совпадения или полного несовпадения. А как мне тогда найти тех, у кого ИНН совпадает, а КПП из базы или не совпадает или вообще не заполнено (в этом случае, приоритет у КПП из файла, его надо вбить). |
|||
28
Старуха Шапокляк
28.05.10
✎
16:38
|
+(27) На мой первый вопрос из (27):
Я так полагаю, что должно быть что-то вроде: КА = Справочники.Контрагенты.НайтиПоРеквизиту("КодSAP",КодСап); Если КА.Пустая() Тогда //не нашли с таким ключом Запрос=Новый Запрос; ... СсылкаКА=ВыборкаДетали.ссылка; ОбъектКА=СсылкаКА.ПолучитьОбъект(); ... Иначе //нашли с таким ключом КонецЕсли; Но как тогда дальше связать Ключ, ИНН и КПП? Не знаю, понятно ли я изложила свою мысль... |
|||
29
mikecool
28.05.10
✎
16:40
|
запрос в цикле - уже не оригинально
смотрим (15) |
|||
30
hhhh
28.05.10
✎
16:46
|
(29) по сравнению с тем, что было до этого, запрос в цикле - большой шаг вперед.
|
|||
31
Шапокляк
28.05.10
✎
16:47
|
Запрос один и тот же почти: для Ключа
"ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Представление |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Ключ = &Ключ"; Запрос.УстановитьПараметр("Ключ", Ключ); нашла есть ли кто с таким ключом. Если нету ищем по какой-то логике. Если есть что делаем? Как вариант проверяем, совпадает ли у найденного ИНН и КПП. Если не совпадают что делаем? Перезаписываем, спрашиваем? По вопросу ИНН и КПП. Не нашли с ИНН и КПП какими нужно. Что делаем? Ищем сначала по ИНН (запрос по аналогии сделаете, надеюсь). не нашли никого, по КПП искать бессмысленно дальше (все кто в одной налоговой имеют один и тот же КПП за редким исключением). Нашли нескольких с одним ИНН. Перебираем. У контрагента КПП не пустое и не совпадает с нашим. Что делаем? Варианты - проверяем наименование или еще что, спрашиваем у пользователя, идем дальше. У контрагента КПП пустое. Что делаем? Варианты - заполняем своим кпп, спрашиваем у пользователя, идем дальше. Короче, вы на бумажке алгоритм составьте для начала и решите что делать, а инструмент вот он. (29) Никто не претендует на оригинальность. Пусть хоть как-то с мертвой точки сдвинется, к тому же все равно, как правило, вмешательство пользователей потребуетя в принятие решения. А ваша временная таблица убьет автора :) К тому же Ваш запрос из (15) не решает ее задачу, а для единичного прогона не сильно оптимален. |
|||
32
Старуха Шапокляк
28.05.10
✎
16:51
|
(31) Шапокляк - огромное Вам СПАСИБО!!! Что бы я делала без Вас!?
:*) |
|||
33
Шапокляк
28.05.10
✎
16:51
|
(32) :) Успехов!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |