|
v7: Программное создание справочников. | ☑ | ||
---|---|---|---|---|
0
ErrorEd88
24.02.12
✎
11:19
|
Код пишу по аналогии с 8.х. В цикле программно создаю элементы номенклатуры. Торговля и Склад. Вот кусок кода:
Спр = СоздатьОбъект("Справочник.Номенклатура"); СпрВидНом = СоздатьОбъект("Справочник.ВидыНоменклатуры"); СпрНДС = СоздатьОбъект("Справочник.СтавкиНДС"); СпрНП = СоздатьОбъект("Справочник.СтавкиНП"); СпрЕд = СоздатьОбъект("Справочник.ЕдиницыИзмерений"); Спр.Новый(); Спр.ИспользоватьДату('01.11.2011'); Спр.Родитель = Спр.НайтиПоКоду("Сй111"); Спр.Наименование = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value)); Спр.ТипТовара = Перечисление.ТипыТоваров.Собственный; Спр.ВидНоменклатуры = СпрВидНом.НайтиПоКоду("0000001"); Спр.ПолнНаименование = Спр.Наименование; Если ВидыЦен = 1 Тогда Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value)); ИначеЕсли ВидыЦен = 2 Тогда Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value)); КонецЕсли; Спр.СтранаПроисхожд = 1; Спр.СтавкаНДС = СпрНДС.НайтиПоКоду("3"); Спр.СтавкаНП = СпрНП.НайтиПоКоду("1"); Спр.ЕдиницаИзмерения = СпрЕд.НайтиПоКоду("796"); Спр.Записать(); В итоге создается только один элемент (который последним создавался в цикле) - и то это пустая группа номенклатуры. Если комментирую Родитель=..., тогда все элементы создаются в "корне" справочника. Но реквизиты СтавкаНДС, СтавкаНП, ЕдиницаИзмерения, ВидНоменклатуры - не заполнены. В отладчике все значения Родитель, СтавкаНДС и пр. - пустые. Т.е. все значения пустые, где использовалось НайтиПоКоду(). Пробовал НайтиПоНаименованию() - тот же результат. Создавал новую переменную вне цикла: Спр2 = СоздатьОбъект("Справочник.Номенклатура"); (НачалоЦикла) ... Спр.Родитель = Спр2.НайтиПоКоду("Сй111"); ... (КонецЦикла) Не помогло. |
|||
1
ErrorEd88
24.02.12
✎
11:19
|
(0) Не ТиС, а Бух.
|
|||
2
Kondarat
24.02.12
✎
11:21
|
А почитать, что возвращает НайтиПоКоду() и НайтиПоНаименованию() не пробовал?
|
|||
3
Андрей_Андреич
naïve
24.02.12
✎
11:24
|
+(2)
Если СпрНДС.НайтиПоКоду("3")=1 Тогда спр.ставкандс=спрндс.текущийэлемент(); КонецЕсли; |
|||
4
ErrorEd88
24.02.12
✎
11:32
|
(2) Почитал СП, спасибо за совет)
(3) Теперь все заполняется как нужно. Спасибо. |
|||
5
povar
24.02.12
✎
11:32
|
(0) ЖКК внематочно читай
|
|||
6
Escander
24.02.12
✎
11:37
|
попробуй записать а потом присвоить родителя и снова записать... есесьно для поиска родителя использовать другой экземпляр справочника, если он у всех один и тот-же - ненадо его искать в цикле. Это-же касается и некоторых других реквиззитов.
|
|||
7
Чайник Рассела
24.02.12
✎
11:38
|
вот это г0внокод!
|
|||
8
ErrorEd88
24.02.12
✎
12:57
|
(7) А ты проголосуешь, если я на сайт г@внокода залью?
|
|||
9
Tatitutu
24.02.12
✎
13:02
|
(0) а можно весь кусок с ЦИКЛОМ посмотреть (чисто поржать)
я уже тоже готов проголосовать но если покажешь код с циклом - нас будет тысячи! |
|||
10
ErrorEd88
24.02.12
✎
13:17
|
(9)Пока столько кода, но скоро в обработку будет добавлена процедура по программному созданию документов.
//!! Процедура ОбработкаНоменклатуры() НомерЛистаТипы = 1; Попытка ExcelТипы = СоздатьОбъект("Excel.Application"); ФайлДанныхТипы = ExcelТипы.Workbooks.Open(НазваниеФайла); Исключение КонецПопытки; //Лист = ФайлДанныхТипы.WorkSheets(НазваниеФайла); ЗагрузкаТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange; //КоличествоСтрокЭкселеТипы = Лист.Rows.Count; КоличествоСтрокЭкселеТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange.Rows.Count; ExcelТипы.Sheets(НомерЛистаТипы).Select(); Спр2 = СоздатьОбъект("Справочник.Номенклатура"); СпрВидНом = СоздатьОбъект("Справочник.ВидыНоменклатуры"); СпрНДС = СоздатьОбъект("Справочник.СтавкиНДС"); СпрНП = СоздатьОбъект("Справочник.СтавкиНП"); СпрЕд = СоздатьОбъект("Справочник.ЕдиницыИзмерений"); Для СтрТипы = НачСтр+1 По КонСтр Цикл Спр = СоздатьОбъект("Справочник.Номенклатура"); Если Спр.НайтиПоНаименованию(Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value))) = 1 Тогда Сообщить("Номенклатура найдена"); Если ВидыЦен = 1 Тогда Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value)); ИначеЕсли ВидыЦен = 2 Тогда Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value)); КонецЕсли; Спр.Записать(); Иначе Спр.Новый(); Спр.ИспользоватьДату('01.11.2011'); Если Спр2.НайтиПоКоду("Сй111")=1 Тогда Спр.Родитель =Спр2.ТекущийЭлемент(); Конецесли; Спр.Наименование = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value)); Сообщить("Создается номенклатура" + Спр.Наименование); Спр.ТипТовара = Перечисление.ТипыТоваров.Собственный; Если СпрВидНом.НайтиПоНаименованию("Товар")=1 Тогда Спр.ВидНоменклатуры = СпрВидНом.ТекущийЭлемент(); КонецЕсли; Спр.ПолнНаименование = Спр.Наименование; Если ВидыЦен = 1 Тогда Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value)); ИначеЕсли ВидыЦен = 2 Тогда Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value)); КонецЕсли; Спр.СтранаПроисхожд = 1; Если СпрНДС.НайтиПоКоду("3")=1 Тогда Спр.СтавкаНДС = СпрНДС.ТекущийЭлемент(); КонецЕсли; Если СпрНП.НайтиПоКоду("1")=1 тогда Спр.СтавкаНП = СпрНП.ТекущийЭлемент(); КонецЕсли; Если СпрЕд.НайтиПоНаименованию("шт")=1 Тогда Спр.ЕдиницаИзмерения = СпрЕд.ТекущийЭлемент(); КонецЕсли; Спр.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
11
Escander
24.02.12
✎
13:33
|
какие из реквизитов Спр периодические?
|
|||
12
ErrorEd88
24.02.12
✎
14:45
|
(9) http://govnokod.ru/9532 голосуем!
(11) Уже точно не помню, но прога ругалась, поэтому написал: Спр.ИспользоватьДату('01.11.2011'). База после свертки, поэтому не принципиально. |
|||
13
ErrorEd88
24.02.12
✎
15:27
|
Голосуем активней.
|
|||
14
Tatitutu
24.02.12
✎
15:45
|
(0) Классный комментарий
"Я не делаю отступы. Чтобы другой программист пришел к моему клиенту - и за пять минут во всем разобрался?" бойся гуру и следи за его пальцами если он успеет нажать случайно Ctrl+A и потом Ctrl+Shift+F знай - ты встретил Учителя )))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |