![]() |
![]() |
![]() |
|
Проблема с Регистром Сведений | ☑ | ||
---|---|---|---|---|
0
kyriil
12.03.12
✎
10:37
|
Занялся переводом из убогой самописной 7.7 на УНФ 8.2
Есть текстовые файлы с инфой из 7.7, начал постепенно грузить данные в УНФ 8.2, после загрузки справочников застрял на Регистрах сведений, а именно на РегистрСведений.ЦеныНоменклатуры, режим записи Независимый. В организации 5 видов розничных цен, пытаюсь загрузить хотя бы один вид. В текстовом файле есть строки: Начало Г~Пироги~1~ Г~Булочки~2~ Э~Пирог вишневый 0,4 кг~10~95~105~115~125~135~шт.~ Э~Пирог абрикосовый 0,5 кг~11~115~125~135~145~155~шт.~ ...и т.п. всего 200 строк-номенклатур Конец то есть: первое (нулевое) значение это тип: (Э)лемент/(Г)руппа, следуюещее наименование, далее: код, и затем пять значений: цена1, цена2, цена3, цена4 и цена5 и единица измерения. На 8.2 пишу код загрузки данных (по похожему коду загружал справочники): ДанныеТХТ = Новый ТекстовыйДокумент; ДанныеТХТ.Прочитать("C:\Обмен77_82\товары.txt"); Можно = 0; НомерСтроки = 0; Для ном = 1 по ДанныеТХТ.КоличествоСтрок() Цикл НомерСтроки = НомерСтроки + 1; Стр = ДанныеТХТ.ПолучитьСтроку(НомерСтроки); Если Стр="Начало" Тогда Можно = 1; НомерСтроки = НомерСтроки + 1; Стр = ДанныеТХТ.ПолучитьСтроку(НомерСтроки); КонецЕсли; Если Стр = "Конец" Тогда Прервать; КонецЕсли; Если Можно = 1 Тогда ДанныеСтроки = СписокИзСтроки(Стр); СПризнак = ДанныеСтроки[0].Значение; Если СПризнак = "Э" Тогда Если (ДанныеСтроки[3].Значение)<>"" Тогда Ном = Справочники.Номенклатура.НайтиПоКоду(ДанныеСтроки[2].Значение); ПериодУстановки = "31.12.2011 23:59:59"; ВидЦенУстановки = Справочники.ВидыЦен.НайтиПоКоду("00-000001"); НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(ПериодУстановки); НаборЗаписей.Отбор.ВидЦен.Установить(ВидЦенУстановки); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ПериодУстановки; НоваяЗапись.ВидЦен = ВидЦенУстановки; НоваяЗапись.Номенклатура = Ном; НоваяЗапись.Цена = ДанныеСтроки[3].Значение; НоваяЗапись.Актуальность = Истина; Если ДанныеСтроки[8].Значение = "шт." Тогда НоваяЗапись.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796"); ИначеЕсли ДанныеСтроки[14].Значение = "Кор." Тогда НоваяЗапись.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("778"); КонецЕсли; НаборЗаписей.Записать(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Но при попытке загрузить данные в РегистрСведений появляется ошибка: {Форма.Форма.Форма(562)}: Преобразование значения к типу Число не может быть выполнено КонецЦикла; То есть программе не нравится условие Цикла "Для ном = 1 по ДанныеТХТ.КоличествоСтрок() Цикл ... КонецЦикла;" При этом он делает первую запись с Пирогом вишневым, а Пирог абрикосовый и всё остальное не записывает... Прошу помочь советом. |
|||
1
Wobland
12.03.12
✎
10:38
|
>режим записи Независимый
УНФ не видел, но всё, что видел, имело спецдокумент для регистрации цен номенклатуры |
|||
2
Reset
12.03.12
✎
10:40
|
>> Для ном = 1 по
+ >> Ном = Справочники.Номенклатура.НайтиПоКоду(ДанныеСтроки[2].Значение); |
|||
3
Wobland
12.03.12
✎
10:41
|
ПериодУстановки = "31.12.2011 23:59:59"; -> ПериодУстановки = '20111231235959'
|
|||
4
Reset
12.03.12
✎
10:41
|
Если бы не ленился с именованием переменных (например,НомерСтроки и НоменклатураСсылка), не получил бы косяк
|
|||
5
Wobland
12.03.12
✎
10:42
|
гыгы:
НомерСтроки = 0; Для ном = 1 по ДанныеТХТ.КоличествоСтрок() Цикл НомерСтроки = НомерСтроки + 1; |
|||
6
Alex S D
12.03.12
✎
10:43
|
бу га га
ном = 1 по ДанныеТХТ.КоличествоСтрок() Цикл ... Ном = Справочники.Номенклатура.НайтиПоКоду(ДанныеСтроки[2].Значение); |
|||
7
Reset
12.03.12
✎
10:43
|
(5) лол, это я еще бегло посмотрел, оказывается ;)
|
|||
8
kyriil
12.03.12
✎
10:43
|
(2) в УНФ этот Регистр независимый, и документа установки цен, увы нет, только Обработка (замороченная). Читал на форумах, многие говорят, что УНФ довольно сырая, при том, что это первая Конфигурация - Управляемое приложение.
|
|||
9
Alex S D
12.03.12
✎
10:43
|
(2) а, сори не заметил)
|
|||
10
vmv
12.03.12
✎
10:44
|
конец итератора цикла ДанныеТХТ.КоличествоСтрок()
вынеси в переменную, так надежнее а то хрен его знает, что ты там творишь с текстом, мож строки грохаешь или съедаешь. это не язык с и тут красивости и экономия ни к чему |
|||
11
Ненавижу 1С
гуру
12.03.12
✎
10:45
|
(10) границы цикла вычисляются один раз перед началом цикла, так что не спасет
|
|||
12
Maxus43
12.03.12
✎
10:47
|
всё уже сказали, переменные названы криво, пересекаются
|
|||
13
Ненавижу 1С
гуру
12.03.12
✎
10:47
|
(8) так какого типа Ном?
тут: ном = 1 по ДанныеТХТ.КоличествоСтрок() Цикл и тут: Ном = Справочники.Номенклатура.НайтиПоКоду(ДанныеСтроки[2].Значение); |
|||
14
Maxus43
12.03.12
✎
10:47
|
(13) буква большая во втором случае! это же всё меняет)
|
|||
15
vmv
12.03.12
✎
10:47
|
(11) т.е. если удалять строки в теле цикла, то все будет ок, циклу будет наплевать, что строк в коллекции на входе уже меньше?)
|
|||
16
Wobland
12.03.12
✎
10:48
|
(15) Н=4;
Для й=0 По Н Цикл Н=2; Сообщить(й); КонецЦикла; говорит с 0 по 4 |
|||
17
Ненавижу 1С
гуру
12.03.12
✎
10:49
|
(15) нет, но выведение просто в отдельную переменную не спасет
|
|||
18
vmv
12.03.12
✎
10:50
|
тогда расстрелять, жаль конечно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |