Имя: Пароль:
1C
1C 7.7
v7: Процедура. Укажите на промахи.
0 ErrorEd88
 
19.02.12
15:56
В 7.7 почти никогда не пишу. По аналогии с 8.х делал обработку. В итоге ни одной уже забитой в базу номенклатуры обработка не нашла, а создала в справочнике только один элемент с кодом "С111". Скажите, хотя бы "каркас" кода правильный?

Процедура ОбработкаНоменклатуры()
   
НомерЛистаТипы = 1;
// Вставить содержимое обработчика.
Попытка ExcelТипы = СоздатьОбъект("Excel.Application");
ФайлДанныхТипы = ExcelТипы.Workbooks.Open(НазваниеФайла);        
Исключение
КонецПопытки;
ЗагрузкаТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange;        
КоличествоСтрокЭкселеТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange.Rows.Count;
ExcelТипы.Sheets(НомерЛистаТипы).Select();  

//!!
Для СтрТипы = НачСтр+1 По КонСтр Цикл
Спр = СоздатьОбъект("Справочник.Номенклатура");
Если Спр.НайтиПоНаименованию(Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value))) =  1 Тогда
   Сообщить("Номенклатура найдена");
Если ВидыЦен = 1 Тогда
   Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
ИначеЕсли ВидыЦен = 2 Тогда
   Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
КонецЕсли;
Спр.Записать();
Иначе
   Сообщить("Создается номенклатура");
СпрВидНом = СоздатьОбъект("Справочник.ВидыНоменклатуры");
СпрНДС = СоздатьОбъект("Справочник.СтавкиНДС");
СпрНП = СоздатьОбъект("Справочник.СтавкиНП");
СпрЕд = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
Спр.Родитель = Спр.НайтиПоКоду("С111");
Спр.ТипТовара = Перечисление.ТипыТоваров.Собственный;
Спр.ВидНоменклатуры = СпрВидНом.НайтиПоКоду("0000001");
Спр.Наименование = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value));
Спр.ПолнНаименование = Спр.Наименование;
Если ВидыЦен = 1 Тогда
   Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
ИначеЕсли ВидыЦен = 2 Тогда
   Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
КонецЕсли;
Спр.СтранаПроисхожд = 1;
Спр.СтавкаНДС = СпрНДС.НайтиПоКоду("3");
Спр.СтавкаНП = СпрНП.НайтиПоКоду("1");
Спр.ЕдиницаИзмерения = СпрЕд.НайтиПоКоду("796");
Спр.Записать();
КонецЕсли;  
КонецЦикла;

КонецПроцедуры
1 Amra
 
19.02.12
16:05
Создала с кодом С111? Похоже у тебя родителем всех созданных элементов стал ЭЛЕМЕНТ с кодом С111. То есть элементы есть, но их не видно, так как открыть элемент как группу нельзя
2 Попытка1С
 
19.02.12
16:06
А что в 8 создание объекта в цикле считается нормой?
3 Дядя Васька
 
19.02.12
16:07
(1) В семерке? :)
4 Amra
 
19.02.12
16:08
(3) Именно в семерке. Программно так в семерке можно сделать) Только эти элементы, у которых родитель- элемент, при выводе списка по группам не отображаются
5 Дядя Васька
 
19.02.12
16:10
(0) А в восьмерке СокрЛП() не строку возвращает? И да.. отладчик в семерке тоже есть.
6 Дядя Васька
 
19.02.12
16:11
(4) Да ладно... Сколько лет в ней писал, ни разу не умудрился такого сделать.
7 Amra
 
19.02.12
16:12
(6) До этого он потом дойдет) К тому же наверняка реквизиты цена и себестоимость переодические...
8 Amra
 
19.02.12
16:12
(6) Я умудрился как то, и тож не мог понять, как и ТС, что элементы создаются, но я их не вижу...))
9 Дядя Васька
 
19.02.12
16:14
(7) Причем сильно сомневаюсь что строковые :) Не, ну к числу-то оно преобразуется конечно. Но присваивая значение цене результат строковой функции принудительно еще раз к строке преобразовать это сильно )
10 Amra
 
19.02.12
16:16
(9) И это понятно почему, тип колонки не обязательно числовой в экселе. Автор еще забыл про один ньюансик, которые возникает, если число больше 1000.
11 МастерВопросов
 
19.02.12
16:22
(1) строка " Спр.НайтиПоКоду("С111");" возвращает единицу :-)
Правильно так:

Если Спр.НайтиПоКоду("С111")=1 Тогда
Спр.Родитель = Спр.ТекущийЭлемент();
КонецЕсли;
12 МастерВопросов
 
19.02.12
16:27
(0) " Спр.ВидНоменклатуры = СпрВидНом.НайтиПоКоду("0000001");"


это тоже исправь как я в (11) написал
13 Amra
 
19.02.12
16:29
(11) Ндя?)) забыл уже, в восьмерке найтипокоду возвращает ссылку))
14 Cthulhu
 
19.02.12
16:34
(11): это как раз неправильно. потому что сбивает выборку - находит элемент с наименованием С111 и пытается установить ему в родители его же самого.
(на ошибки в коде (0), простите, пытаться указывать как-то уныло - настолько их много, и настолько лишено смысла без знания о том, в какой переменной что содержится... напоминает притчу об одном дураке и тысяче мудрецов)
15 МастерВопросов
 
19.02.12
16:40
(14) тьфу ты, "слона то я и не приметил"(с)
Шипка сомневаюсь что так и в снеговике приемлимо писать.
16 zavsom
 
19.02.12
16:48
(0) как то вы пишите через опу - и где так учат? Обычно все сначала грузится в ТЗ , а уж потом отдельной процедурой создается все что нужно. Тогда и посмотреть и отладить легче.
17 Amra
 
19.02.12
16:51
(16) Тут соглашусь. Чтото типа как на ИТС обработка "ЗагрузкаИзТабличногоДокумента"
18 Amra
 
19.02.12
16:52
(14) Слуш, точно, именно поэтому один элемент с кодом С111 и грузится...