|
v7: Помогите найти ошибку | ☑ | ||
---|---|---|---|---|
0
Косяк
22.12.17
✎
09:38
|
Процедура Сформировать()
Перем ТЗ,ТЗСвернутая, ОС,Таб, Код,Наименование,ШифрПоОКОФ,КодПоОКОФ, НомерСтроки, Искомый_КодПоОКОФ, СпрОС, XL, Файл, XLS; XLS = СоздатьОбъект("ТаблицаЗначений"); XLS.НоваяКолонка("ШифрПоОКОФ"); XLS.НоваяКолонка("Наименование_ШифрПоОКОФ","Строка",100); XLS.НоваяКолонка("КодПоОКОФ"); XLS.НоваяКолонка("Наименование_КодПоОКОФ","Строка",100); XL = СоздатьОбъект("Excel.Application"); РабочиеКниги = XL.Workbooks; Попытка Книга = РабочиеКниги.Open("C:\1.xlsx"); Исключение Предупреждение("Ошибка при открытии файла загрузки!",15); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Лист = Книга.WorkSheets(1); //Получааем количество строк Строк = XL.Cells.CurrentRegion.Rows.Count; Для НомерСтроки = 1 По Строк Цикл XLS.НоваяСтрока(); XLS.ШифрПоОКОФ = Строка(Лист.Cells(НомерСтроки,1).Value); XLS.Наименование_ШифрПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,2).Value); XLS.КодПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,3).Value); XLS.Наименование_КодПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,4).Value); КонецЦикла; XL.Workbooks.Close(); XLS.Выгрузить(ТЗ_Экр); //Выгружаем XLS в ТЗ_Экр на экранной форме ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Код","Число",15,0); ТЗ.НоваяКолонка("Наименование","Строка",100); ТЗ.НоваяКолонка("ШифрПоОКОФ","Справочник.КлассификаторОКОФ"); ТЗ.НоваяКолонка("КодПоОКОФ","Справочник.КлассификаторОсновныхФондов"); ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); ОС.ИспользоватьДату(ВыбКонПериода); ОС.ВыбратьЭлементы(); Пока ОС.ПолучитьЭлемент()=1 Цикл //Сообщить("Код: "+ОС.Код+" Наименование: "+ОС.Наименование+" КодПоОКОФ="+ОС.КодПоОКОФ+" ШифрПоОКОФ="+ОС.ШифрПоОКОФ); ТЗ.НоваяСтрока(); ТЗ.Код = ОС.Код; ТЗ.Наименование = ОС.Наименование; ТЗ.ШифрПоОКОФ = ОС.ШифрПоОКОФ; ТЗ.КодПоОКОФ = ОС.КодПоОКОФ; Код = ТЗ.Код; Наименование = ТЗ.Наименование; ШифрПоОКОФ = Строка(ТЗ.ШифрПоОКОФ); КодПоОКОФ = ТЗ.КодПоОКОФ; Если XLS.НайтиЗначение(ШифрПоОКОФ, НомерСтроки, "ШифрПоОКОФ")<>0 Тогда КодПоОКОФ = Строка(XLS.КодПоОКОФ); //Сообщить("НомерСтроки = "+НомерСтроки+" Найден ШифрПоОКОФ = "+ШифрПоОКОФ+ " XLS.КодПоОКОФ = "+КодПоОКОФ); Сообщить("НомерСтроки = "+Строка(НомерСтроки)); КонецЕсли; КонецЦикла; КонецПроцедуры Ругается на переменную НомерСтроки OS1.ERT(57)}: Номер за пределами значения! В чем тут ошибка. В переменной должен содержаться номер строки из таблицы значений XLS |
|||
1
Косяк
22.12.17
✎
09:40
|
Если XLS.НайтиЗначение(ШифрПоОКОФ, НомерСтроки, "ШифрПоОКОФ")<>0 Тогда
КодПоОКОФ = Строка(XLS.КодПоОКОФ); //Сообщить("НомерСтроки = "+НомерСтроки+" Найден ШифрПоОКОФ = "+ШифрПоОКОФ+ " XLS.КодПоОКОФ = "+КодПоОКОФ); Сообщить("НомерСтроки = "+Строка(НомерСтроки)); КонецЕсли; Что не так с функцией XLS.НайтиЗначение |
|||
2
GreyMen
22.12.17
✎
09:42
|
Вставь НомерСтроки = 0; перед
Если XLS.НайтиЗначение(ШифрПоОКОФ, НомерСтроки, "ШифрПоОКОФ")<>0 Тогда |
|||
3
Darych
22.12.17
✎
09:42
|
XLS.НайтиЗначение(ШифрПоОКОФ, Номер, "ШифрПоОКОФ")
|
|||
4
АЛьФ
22.12.17
✎
09:43
|
НомерСтроки = "";
Если XLS.НайтиЗначение(ШифрПоОКОФ, НомерСтроки, "ШифрПоОКОФ")<>0 Тогда XLS.ПолучитьСтрокуПоНомеру(НомерСтроки); |
|||
5
VladZ
22.12.17
✎
09:44
|
(0) Жуть.
|
|||
6
Darych
22.12.17
✎
09:44
|
(3)+ либо новая переменная либо (2)
|
|||
7
igorPetrov
22.12.17
✎
09:52
|
И чего ты ждешь в этом НомереСтроки?
|
|||
8
igorPetrov
22.12.17
✎
09:59
|
(0) Если ты не поленишься и протестируешь отдельно код с циклом, то увидишь, что после завершения цикла в "НомереСтроки" действительно хранится невалидный номер. Который реально за пределами значения )
|
|||
9
igorPetrov
22.12.17
✎
10:03
|
(5) +100500
|
|||
10
Косяк
22.12.17
✎
10:13
|
Спасибо всем. Особенно ФЛьФ! Всех с Наступающим!
|
|||
11
Косяк
22.12.17
✎
12:41
|
Почему то новые значения в справочник не записываются
ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Код","Число",15,0); ТЗ.НоваяКолонка("Наименование","Строка",100); ТЗ.НоваяКолонка("ШифрПоОКОФ","Справочник.КлассификаторОКОФ"); ТЗ.НоваяКолонка("КодПоОКОФ","Справочник.ОбщероссийскийКлассификаторОсновныхФондов"); ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); ОС.ИспользоватьДату(ВыбКонПериода); ОС.ВыбратьЭлементы(); СпрОКОФ = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов"); Пока ОС.ПолучитьЭлемент()=1 Цикл //Сообщить("Код: "+ОС.Код+" Наименование: "+ОС.Наименование+" КодПоОКОФ="+ОС.КодПоОКОФ+" ШифрПоОКОФ="+ОС.ШифрПоОКОФ); ТЗ.НоваяСтрока(); ТЗ.Код = ОС.Код; ТЗ.Наименование = ОС.Наименование; ТЗ.ШифрПоОКОФ = ОС.ШифрПоОКОФ; ТЗ.КодПоОКОФ = ОС.КодПоОКОФ; Код = ТЗ.Код; Наименование = ТЗ.Наименование; ШифрПоОКОФ = Строка(ТЗ.ШифрПоОКОФ); КодПоОКОФ = ТЗ.КодПоОКОФ; Номер = 0; Если ПустаяСтрока(ШифрПоОКОФ)<>1 Тогда //Только заполненные //Сообщить("ОС.ШифрПоОКОФ="+ОС.ШифрПоОКОФ+" ОС.АмортизационнаяГруппа="+ОС.АмортизационнаяГруппа+" ОС.КодПоОКОФ = "+ОС.КодПоОКОФ); Если XLS.НайтиЗначение(ШифрПоОКОФ, Номер, "ШифрПоОКОФ")<>0 Тогда XLS.ПолучитьСтрокуПоНомеру(Номер); КодПоОКОФ = Строка(XLS.КодПоОКОФ); Если СпрОКОФ.НайтиПоКоду(XLS.КодПоОКОФ,0)<>0 Тогда ОС.КодПоОКОФ = XLS.КодПоОКОФ; ОС.АмортизационнаяГруппа = СпрОКОФ.АмортизационнаяГруппа; //ОС.УстановитьАтрибут("КодПоОКОФ",СпрОКОФ.Код); ОС.Записать(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Почему то не записываются изменения в справочник ОС. Ошибки нет |
|||
12
Ёпрст
22.12.17
✎
12:44
|
(11) весь код в топку
|
|||
13
Ёпрст
22.12.17
✎
12:46
|
Непонятен бред с запихиванием реквизитов справочника в ТЗ и потом извлечением их оттуда .. загадка
|
|||
14
Ёпрст
22.12.17
✎
12:48
|
+ зачем то из ссылки на справочник строку делать
|
|||
15
Darych
22.12.17
✎
12:51
|
ОС.КодПоОКОФ = XLS.КодПоОКОФ -в ссылку строку пихаешь
|
|||
16
Darych
22.12.17
✎
12:54
|
(15) ... ступил я
|
|||
17
Косяк
22.12.17
✎
12:55
|
(15) и по другому не получается
ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); ОС.ИспользоватьДату(ВыбКонПериода); ОС.ВыбратьЭлементы(); СпрОКОФ = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов"); Пока ОС.ПолучитьЭлемент()=1 Цикл //Сообщить("Код: "+ОС.Код+" Наименование: "+ОС.Наименование+" КодПоОКОФ="+ОС.КодПоОКОФ+" ШифрПоОКОФ="+ОС.ШифрПоОКОФ); ТЗ.НоваяСтрока(); ТЗ.Код = ОС.Код; ТЗ.Наименование = ОС.Наименование; ТЗ.ШифрПоОКОФ = ОС.ШифрПоОКОФ; ТЗ.КодПоОКОФ = ОС.КодПоОКОФ; Код = ТЗ.Код; Наименование = ТЗ.Наименование; ШифрПоОКОФ = Строка(ТЗ.ШифрПоОКОФ); КодПоОКОФ = ТЗ.КодПоОКОФ; Номер = 0; Если ПустаяСтрока(ШифрПоОКОФ)<>1 Тогда //Только заполненные Если XLS.НайтиЗначение(ШифрПоОКОФ, Номер, "ШифрПоОКОФ")<>0 Тогда XLS.ПолучитьСтрокуПоНомеру(Номер); КодПоОКОФ = Строка(XLS.КодПоОКОФ); Если СпрОКОФ.НайтиПоКоду(XLS.КодПоОКОФ,0)<>0 Тогда ОС.КодПоОКОФ = СпрОКОФ.Код; ОС.Записать(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
18
Косяк
22.12.17
✎
12:56
|
Перебирается справочник ОС и устанавливается значение реквизита КодПоОКОФ
|
|||
19
Косяк
22.12.17
✎
12:58
|
руками КодПоОКОФ меняется а программно не хочет и ошибки не выдает
|
|||
20
Косяк
22.12.17
✎
12:59
|
Если СпрОКОФ.НайтиПоКоду(XLS.КодПоОКОФ,0)<>0 Тогда
ОС.КодПоОКОФ = СпрОКОФ.Код; ОС.Записать(); КонецЕсли; где тут ошибка |
|||
21
Darych
22.12.17
✎
12:59
|
ты ищешь кодпоокоф из элемента справочника, находишь его и пишешь в тот же элемент... Странно что не изменяется, да?
|
|||
22
Ёпрст
22.12.17
✎
13:01
|
(17)
1.Выкинуть ТЗ из кода за ненадобностью 2.в ОС.КодПоОКОФ пихать ссылку на элемент справочника, а не строку. 3...... |
|||
23
Ёпрст
22.12.17
✎
13:01
|
(20) в днк
|
|||
24
Косяк
22.12.17
✎
13:03
|
Пихаю ссылку и ничего не записывается вообще, поле пустое остается в справочнике
|
|||
25
Ёпрст
22.12.17
✎
13:04
|
(24) больше кода
|
|||
26
Ёпрст
22.12.17
✎
13:05
|
нам отсюда не видно, что ты там творишь
|
|||
27
Косяк
22.12.17
✎
13:07
|
Сама задача такая: с справочнике ОС проставлен только реквизит ШифрПоОКОФ (устаревший уже.). Требуется заполнить другой реквизит, а именно КодПоОкоф. Его значение выбирается из таблицы значений, загруженной из специального файла Excel.
Нужная строка в этой ТЗ находится по ШифрПоОКОФ, далее из этой найденной строки берется значение реквизита КодПоОкоф, его нужно записать. |
|||
28
Darych
22.12.17
✎
13:08
|
(27) зачем тебе ТЗ?
|
|||
29
Косяк
22.12.17
✎
13:09
|
ОС.КодПоОКОФ = СпрОКОФ.Код;
ОС.Записать(); почему не срабатывает эта комбинация? Никакой ошибки не выдается! |
|||
30
catena
22.12.17
✎
13:10
|
(20)Отладчиком он вообще туда заходит?
|
|||
31
catena
22.12.17
✎
13:10
|
Тип реквизита КодПоОКОФ ? Периодический, не?
|
|||
32
Ёпрст
22.12.17
✎
13:12
|
(29) КодПоОКОФ - это НЕ СТРОКА
|
|||
33
Ёпрст
22.12.17
✎
13:12
|
Открой, наконец, пофигуратор, и посмотри, какого типа реквизит КодПоОКОФ
|
|||
34
Косяк
22.12.17
✎
13:13
|
(31)Нет, не периодический
|
|||
35
Darych
22.12.17
✎
13:14
|
ладно... спрпоокоф.текущийэлемент()
|
|||
36
Косяк
22.12.17
✎
13:21
|
Если XLS.НайтиЗначение(ШифрПоОКОФ, Номер, "ШифрПоОКОФ")<>0 Тогда
XLS.ПолучитьСтрокуПоНомеру(Номер); КодПоОКОФ = Строка(XLS.КодПоОКОФ); Если СпрОКОФ.НайтиПоКоду(XLS.КодПоОКОФ,0)<>0 Тогда ОС.КодПоОКОФ = СпрОКОФ.ТекущийЭлемент(); Сообщить(СпрОКОФ.ТекущийЭлемент()); ОС.Записать(); КонецЕсли; КонецЕсли; Печатает правильные данные: 210.00.11.10.450 210.00.11.10.450 210.00.11.10.450 Но в справочник не записывает! |
|||
37
Косяк
22.12.17
✎
13:24
|
(33) Реквизит в справочнике ОС имееет тип "Справочник.ОбщероссийскийКлассификаторОсновныхФондов"
|
|||
38
Ёпрст
22.12.17
✎
13:26
|
(36)
с чего уверенность, что не записывает ? С чего уверенность, что найденный элемент - не группа ? |
|||
39
Ёпрст
22.12.17
✎
13:28
|
Покажи весь код целиком
|
|||
40
Косяк
22.12.17
✎
13:28
|
(38)Пока этот реквизит в справочнике не заполнялся, т.е. он пустой.
|
|||
41
Ёпрст
22.12.17
✎
13:29
|
(40)и как ты это проверил ?
|
|||
42
Косяк
22.12.17
✎
13:30
|
Процедура Сформировать()
Перем ТЗ,ТЗСвернутая, ОС,Таб, Код,Наименование,ШифрПоОКОФ,КодПоОКОФ, Номер, Искомый_КодПоОКОФ, СпрОС, XL, Файл, XLS; XLS = СоздатьОбъект("ТаблицаЗначений"); XLS.НоваяКолонка("ШифрПоОКОФ"); XLS.НоваяКолонка("Наименование_ШифрПоОКОФ","Строка",100); XLS.НоваяКолонка("КодПоОКОФ"); XLS.НоваяКолонка("Наименование_КодПоОКОФ","Строка",100); XL = СоздатьОбъект("Excel.Application"); РабочиеКниги = XL.Workbooks; Попытка Книга = РабочиеКниги.Open("C:\1.xlsx"); Исключение Предупреждение("Ошибка при открытии файла загрузки!",15); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Лист = Книга.WorkSheets(1); //Получааем количество строк Строк = XL.Cells.CurrentRegion.Rows.Count; Для НомерСтроки = 1 По Строк Цикл XLS.НоваяСтрока(); XLS.ШифрПоОКОФ = Строка(Лист.Cells(НомерСтроки,1).Value); XLS.Наименование_ШифрПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,2).Value); XLS.КодПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,3).Value); XLS.Наименование_КодПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,4).Value); КонецЦикла; XL.Workbooks.Close(); XLS.Выгрузить(ТЗ_Экр); //Выгружаем XLS в ТЗ_Экр на экранной форме ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Код","Число",15,0); ТЗ.НоваяКолонка("Наименование","Строка",100); ТЗ.НоваяКолонка("ШифрПоОКОФ","Справочник.КлассификаторОКОФ"); ТЗ.НоваяКолонка("КодПоОКОФ","Справочник.ОбщероссийскийКлассификаторОсновныхФондов"); ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); ОС.ИспользоватьДату(ВыбКонПериода); ОС.ВыбратьЭлементы(); СпрОКОФ = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов"); Пока ОС.ПолучитьЭлемент()=1 Цикл //Сообщить("Код: "+ОС.Код+" Наименование: "+ОС.Наименование+" КодПоОКОФ="+ОС.КодПоОКОФ+" ШифрПоОКОФ="+ОС.ШифрПоОКОФ); ТЗ.НоваяСтрока(); ТЗ.Код = ОС.Код; ТЗ.Наименование = ОС.Наименование; ТЗ.ШифрПоОКОФ = ОС.ШифрПоОКОФ; ТЗ.КодПоОКОФ = ОС.КодПоОКОФ; Код = ТЗ.Код; Наименование = ТЗ.Наименование; ШифрПоОКОФ = Строка(ТЗ.ШифрПоОКОФ); КодПоОКОФ = ТЗ.КодПоОКОФ; Номер = 0; Если ПустаяСтрока(ШифрПоОКОФ)<>1 Тогда //Только заполненные Если XLS.НайтиЗначение(ШифрПоОКОФ, Номер, "ШифрПоОКОФ")<>0 Тогда XLS.ПолучитьСтрокуПоНомеру(Номер); КодПоОКОФ = Строка(XLS.КодПоОКОФ); Если СпрОКОФ.НайтиПоКоду(XLS.КодПоОКОФ,0)<>0 Тогда ОС.КодПоОКОФ = СпрОКОФ.ТекущийЭлемент(); Сообщить(СпрОКОФ.ТекущийЭлемент()); ОС.Записать(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
43
Масянька
22.12.17
✎
13:33
|
(42) Это всё, чтобы поменять код ОКОФ?
|
|||
44
Косяк
22.12.17
✎
13:34
|
все
|
|||
45
Sasha_H
22.12.17
✎
13:36
|
Юзал еще с 7.7, сейчас уже более лучше функция для 8.х.
//Обработка импорта файла Ексель // СтруктураКолонок, должен содержать // Представление: "Наименование колонки"; // Значение: "Номер колонки" // если номер колонки не указан или передан служебный символ "#", будет создана просто пустая колонка // Функция ОбработкаИмпортаФайлаЕксель(ИмяФайла, НачСтрока=1, КонСтрока=0, НомерЛиста=0, СтруктураКолонок) Экспорт Если НЕ ЗначениеЗаполнено(ИмяФайла) Тогда #Если Клиент Тогда Предупреждение("Необходимо указать путь к файлу",3); #КонецЕсли Возврат Неопределено; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтруктураКолонок) Тогда #Если Клиент Тогда Предупреждение("Необходимо указать структуру колонок",3); #КонецЕсли Возврат Неопределено; КонецЕсли; //Разбор листов СписокИспользуемыхЛистов = Новый СписокЗначений; КнигаExcel = ПолучитьCOMОбъект(ИмяФайла); //есть несколько вариантов исчисления: //1.Номер последней загружаемой строки. Если не указан, то ищется как последнее // не пустой код производителя, тоесть не пустое последнее значение. А номер Листа определен Если (ЗначениеЗаполнено(НомерЛиста)) И (НЕ ЗначениеЗаполнено(КонСтрока)) Тогда //пользователь указал лист но неуказал КонСтрока Лист = КнигаExcel.Worksheets(НомерЛиста); ИспользуемыйДиапазон = Лист.UsedRange; ПоследняяЯчейка = ИспользуемыйДиапазон.SpecialCells(11); //последня правая нижняя ячейка Если ((ИспользуемыйДиапазон.Address<>ПоследняяЯчейка.Address) ИЛИ (ПоследняяЯчейка.Text<>"")) Тогда СписокИспользуемыхЛистов.Добавить(ИспользуемыйДиапазон.Rows.Count(),Лист.Name); Иначе #Если Клиент Тогда Предупреждение("Не могу опредилить конечную строку"); #КонецЕсли Возврат Неопределено; КонецЕсли; ИначеЕсли (НЕ ЗначениеЗаполнено(НомерЛиста)) И (ЗначениеЗаполнено(КонСтрока)) Тогда //по всех листах но с определенными КонСтрока Для ИндексЛиста = 1 По КнигаExcel.Worksheets.Count Цикл Лист=КнигаExcel.Worksheets(ИндексЛиста); СписокИспользуемыхЛистов.Добавить(КонСтрока,Лист.Name); КонецЦикла; ИначеЕсли (НЕ ЗначениеЗаполнено(НомерЛиста)) И (НЕ ЗначениеЗаполнено(КонСтрока)) Тогда //по всех листах и нужно в каждом из них найти КонСТрока Для ИндексЛиста = 1 По КнигаExcel.Worksheets.Count Цикл Лист = КнигаExcel.Worksheets(ИндексЛиста); ИспользуемыйДиапазон = Лист.UsedRange; ПоследняяЯчейка = ИспользуемыйДиапазон.SpecialCells(11); Если ((ИспользуемыйДиапазон.Address<>ПоследняяЯчейка.Address) ИЛИ (ПоследняяЯчейка.Text<>"")) Тогда СписокИспользуемыхЛистов.Добавить(ИспользуемыйДиапазон.Rows.Count(),Лист.Name); КонецЕсли; КонецЦикла; ИначеЕсли (ЗначениеЗаполнено(НомерЛиста)) И (ЗначениеЗаполнено(КонСтрока)) Тогда //пользователь указал и Лист и КонСтрочку Лист = КнигаExcel.Worksheets(НомерЛиста); СписокИспользуемыхЛистов.Добавить(КонСтрока,Лист.Name); КонецЕсли; // по п. 1) КвоЛистов=СписокИспользуемыхЛистов.РазмерСписка(); // по п. 2) КвоСтрок=СписокИспользуемыхЛистов.Получить(ИмяЛиста); КонСтрокаДляПрогреса = 0; Для Каждого НомераКонСтроки Из СписокИспользуемыхЛистов Цикл КонСтрокаДляПрогреса = КонСтрокаДляПрогреса + НомераКонСтроки.Значение; КонецЦикла; ТаблицаРезультатов = Новый ТаблицаЗначений; ТаблицаРезультатов.Колонки.Добавить("Лист"); Для Каждого СтрокаКолонки Из СтруктураКолонок Цикл Инд = СтрокаКолонки.Представление; ТаблицаРезультатов.Колонки.Добавить(Инд, Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(155))); КонецЦикла; Для Каждого НомераКонСтроки Из СписокИспользуемыхЛистов Цикл НомерЛиста = НомераКонСтроки.Представление; КонСтрока = НомераКонСтроки.Значение; СостояниеПрогреса = 0; Для НомерОбработанойСтроки = НачСтрока По КонСтрока Цикл СостояниеПрогреса = СостояниеПрогреса + 1; НоваяСтрока = ТаблицаРезультатов.Добавить(); НоваяСтрока.Лист = НомерЛиста; Для Каждого ИндетификатораКолонки Из СтруктураКолонок Цикл iCount = ИндетификатораКолонки.Значение; Если (НЕ ЗначениеЗаполнено(iCount)) ИЛИ (iCount = "#") Тогда //это структура пустой колонки Продолжить; КонецЕсли; ЗначениеЗаписи = СтрЗаменить(СокрЛП(КнигаExcel.Sheets(НомерЛиста).Cells(НомерОбработанойСтроки,iCount).Value),Символ(160),""); НоваяСтрока[ИндетификатораКолонки.Представление] = ЗначениеЗаписи; КонецЦикла; КонецЦикла; КонецЦикла; Возврат ТаблицаРезультатов; КонецФункции |
|||
46
Darych
22.12.17
✎
13:37
|
(45) угу... сейчас вообще с 8-го кода зависнет
|
|||
47
Масянька
22.12.17
✎
13:37
|
(44) А не проще откорректировать справ. ОКОФ?
|
|||
48
Ёпрст
22.12.17
✎
13:38
|
Пиши, че возвращает ЭТО:
Процедура Сформировать() XLS = СоздатьОбъект("ТаблицаЗначений"); XLS.НоваяКолонка("ШифрПоОКОФ"); XLS.НоваяКолонка("Наименование_ШифрПоОКОФ"); XLS.НоваяКолонка("КодПоОКОФ"); XLS.НоваяКолонка("Наименование_КодПоОКОФ"); XL = СоздатьОбъект("Excel.Application"); РабочиеКниги = XL.Workbooks; Попытка Книга = РабочиеКниги.Open("C:\1.xlsx"); Исключение Предупреждение("Ошибка при открытии файла загрузки!",15); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Лист = Книга.WorkSheets(1); //Получааем количество строк Строк = XL.Cells.CurrentRegion.Rows.Count; Для НомерСтроки = 1 По Строк Цикл XLS.НоваяСтрока(); XLS.ШифрПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,1).Value); XLS.Наименование_ШифрПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,2).Value); XLS.КодПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,3).Value); XLS.Наименование_КодПоОКОФ = СокрЛП(Лист.Cells(НомерСтроки,4).Value); КонецЦикла; XL.Workbooks.Close(); XLS.Выгрузить(ТЗ_Экр);//Выгружаем XLS в ТЗ_Экр на экранной форме СпрОКОФ = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов"); ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); ОС.ИспользоватьДату(ВыбКонПериода); ОС.ВыбратьЭлементы(); Пока ОС.ПолучитьЭлемент()=1 Цикл Если ОС.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; Если ПустоеЗначение(ОС.ШифрПоОКОФ)=1 Тогда Продолжить; КонецЕсли; Номер = ""; Если XLS.НайтиЗначение(СокрЛП(ОС.ШифрПоОКОФ), Номер, "ШифрПоОКОФ")<>0 Тогда XLS.ПолучитьСтрокуПоНомеру(Номер); Если СпрОКОФ.НайтиПоКоду(XLS.КодПоОКОФ,0)=1 Тогда ОС.КодПоОКОФ = СпрОКОФ.ТекущийЭлемент(); Сообщить(СпрОКОФ.ТекущийЭлемент()); ОС.Записать(); Сообщить(""+ОС.ТекущийЭлемент()+" КодПоОКОФ = "+ОС.КодПоОКОФ,"i"); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
49
Ёпрст
22.12.17
✎
13:39
|
проверку бы надо еще, что найденный СпрОКОФ - не группа, ну да ладно, и так сойдёт
|
|||
50
Косяк
22.12.17
✎
13:42
|
(48) Справочник не меняется. КодПоОКОФ - остается пустым
|
|||
51
Ёпрст
22.12.17
✎
13:43
|
(50) Пиши, че пишет на экране
|
|||
52
Darych
22.12.17
✎
13:43
|
Напиши, что в табло сообщений выводит, млин
|
|||
53
Косяк
22.12.17
✎
13:44
|
Значения должны быть такими: 210.00.11.10.450
Можете попробовать проставить всем одно это значение.. |
|||
54
Ёпрст
22.12.17
✎
13:44
|
или кинь скриншот
|
|||
55
Darych
22.12.17
✎
13:45
|
он издевается
|
|||
56
Косяк
22.12.17
✎
13:45
|
Печатает вот такое:
Эстакада при складе штучных матер. отд.№39 (сооруж.№104) КодПоОКОФ = 220.25.11.23.131 220.25.11.23.131 Эстакада с козловым краном (сооруж.№38) КодПоОКОФ = 220.25.11.23.131 220.25.11.23.131 Эстакада с навесом (сооруж. №369) КодПоОКОФ = 220.25.11.23.131 220.25.11.23.131 Галлерея КодПоОКОФ = 220.25.11.23.131 220.25.11.23.139 Силос цементный КодПоОКОФ = 220.25.11.23.139 220.25.11.23.139 Силос цементный КодПоОКОФ = 220.25.11.23.139 220.25.11.23.139 Силос цементный КодПоОКОФ = 220.25.11.23.139 220.41.20.20.700 Шлагбаум КодПоОКОФ = 220.41.20.20.700 220.25.11.23.140 Градирня "Росинка - 80/100" КодПоОКОФ = 220.25.11.23.140 |
|||
57
Ёпрст
22.12.17
✎
13:46
|
(56) И ? У тебя всё записалось, че тебя не устраивает ?!
|
|||
58
Косяк
22.12.17
✎
13:48
|
(57)Да, сейчас записалось. Только я пока еще не понял, в чем была причина
|
|||
59
Масянька
22.12.17
✎
13:49
|
(58) Смотри, не спугни :))))
|
|||
60
Косяк
22.12.17
✎
13:51
|
Ёпрст - спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |