|
Загрузка из Excel в 1С 8.1 УТ | ☑ | ||
---|---|---|---|---|
0
EKO LX
01.10.12
✎
13:46
|
Обработка работает, но работает не так как нужно. В экселе несколько одинаковых наименований, но с различными параметрами, а именно "Коллекция", "Цвет" и "Размер". Обработка эти характеристики добавляет, но добавляет только первые значение, а следующие строки нет. А также не выбирает их в документе. В чем ошибка? помогите пожалуйста. Срочно нужно закончить.
Процедура ЗагрузкаИзExcel() ФайлОбъект = новый COMОбъект("Excel.Application"); ФайлXLS = ФайлОбъект.Application.Workbooks.Open(Путь); ТекЛист = ФайлXLS.WorkSheets(1); КолСтрок = ТекЛист.Cells(1,1).SpecialCells(11).Row; КолКолонок = ТекЛист.Cells(1,1).SpecialCells(11).Column; КоличествоСтраниц = 1; Для ТекНомер = 1 По КоличествоСтраниц Цикл Артикул = ФайлXLS.Sheets(ТекНомер).Cells(1,Арт).Value; Наименование = ФайлXLS.Sheets(ТекНомер).Cells(1,Наим).Value; Коллекция = ФайлXLS.Sheets(ТекНомер).Cells(1,Коллекция1).Value; Цвет = ФайлXLS.Sheets(ТекНомер).Cells(1,Цвет1).Value; Размер = ФайлXLS.Sheets(ТекНомер).Cells(1,Размер1).Value; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = ФайлXLS.Sheets(ТекНомер).Cells(1,ШК).Value; КонецЕсли; Количество = ФайлXLS.Sheets(ТекНомер).Cells(1,Колич).Value; Цена = ФайлXLS.Sheets(ТекНомер).Cells(1,Цен).Value; Сообщить("Внешняя накладная прочитана, начилась запись элементов справочника Номенклатура!!!"); счСтроки = НачСтрока; ////Заполняем шапку Документа Поступление товаров и услуг ////////////////////////////////////// //Попытка НовыйДокПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); НовыйДокПоступление.Дата = Дата; НовыйДокПоступление.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад; НовыйДокПоступление.Организация = Организация; НовыйДокПоступление.Контрагент = Контрагент; НовыйДокПоступление.ДоговорКонтрагента = Дог; НовыйДокПоступление.ВалютаДокумента = ВалютаЗ; НовыйДокПоступление.КурсВзаиморасчетов = 1; НовыйДокПоступление.КратностьВзаиморасчетов = 1; НовыйДокПоступление.СкладОрдер = Склад; НовыйДокПоступление.ОтражатьВУправленческомУчете = Истина; НовыйДокПоступление.ОтражатьВБухгалтерскомУчете = Истина; НовыйДокПоступление.ОтражатьВНалоговомУчете = Ложь; ДЛя ш=НачСтрока по КолСтрок цикл Артикул = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Арт).Value; Наименование = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Наим).Value; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value; КонецЕсли; //ШтрихКод = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value; Количество = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Колич).Value; Коллекция = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Коллекция1).Value; Цвет = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Цвет1).Value; Размер = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Размер1).Value; Цена = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Цен).Value; счСтроки = счСтроки + 1; если (Наименование="") или (Наименование=Неопределено) или (Наименование=null) тогда Продолжить; КонецЕсли; Запись = Истина; СпрНоменклатура = Справочники.Номенклатура; если Справочники.Номенклатура.НайтиПоНаименованию(Наименование).Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); Родитель = ГрпНом; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Артикул = Артикул; НовыйЭлемент.Наименование = Наименование; НовыйЭлемент.НаименованиеПолное = Наименование; НовыйЭлемент.ВидНоменклатуры = ПолеВвода1; НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер; НовыйЭлемент.Записать(); НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер; НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование; НовыйЕдИзмер.Коэффициент = 1; НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка; НовыйЕдИзмер.Записать(); НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка; НовыйЭлемент.СтавкаНДС = СтавкаНДС; НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина; НовыйЭлемент.Записать(); Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); Характеристика.Владелец = НовыйЭлемент.Ссылка; Характеристика.Наименование = Коллекция + ", " + Цвет + ", " + Размер; Характеристика.Записать(); //Коллекция ЗаписьКоллекция = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); ЗаписьКоллекция.Объект = Характеристика.Ссылка; ВидСвойства = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Коллекция"); ЗаписьКоллекция.Свойство = ВидСвойства; ЗаписьКоллекция.Значение = Коллекция; ЗаписьКоллекция.Записать(); //Цвет ЗаписьЦвет = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); ЗаписьЦвет.Объект = Характеристика.Ссылка; ВидСвойства = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цвет"); ЗаписьЦвет.Свойство = ВидСвойства; ЗаписьЦвет.Значение = Цвет; ЗаписьЦвет.Записать(); //Размер ЗаписьРазмер = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); ЗаписьРазмер.Объект = Характеристика.Ссылка; ВидСвойства = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Размер"); ЗаписьРазмер.Свойство = ВидСвойства; ЗаписьРазмер.Значение = Размер; ЗаписьРазмер.Записать(); СвойстваХарактеристики = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); СвойстваХарактеристики.Отбор.Объект.Значение = Характеристика.Ссылка; СвойстваХарактеристики.Отбор.Объект.Использование = Истина; Характеристика.СформироватьНаименование(СвойстваХарактеристики.Выгрузить()); Характеристика.Записать(); //Запись РегистраСведений Штрихкоды ЗаписьШК = Истина; РегСведШК = РегистрыСведений.Штрихкоды; ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать(); Пока ВыборкаРегСведШК.Следующий() Цикл Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда ЗаписьШК = Ложь; КонецЕсли; КонецЦикла; ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи(); ЗаписьВРегистрСвед.Владелец = НовыйЭлемент.Ссылка; ЗаписьВРегистрСвед.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ЗаписьВРегистрСвед.Штрихкод = ШтрихКод; ЗаписьВРегистрСвед.ТипШтрихкода = ЭлементыФормы.ТипШК.Значение;//ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13; ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод не будет добавлен к данному элементу: "+Наименование); ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда ЗаписьВРегистрСвед.Записать(); КонецЕсли; иначе НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование); КонецЕсли; //Создадим Док Поступления товаров и услуг ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; ДокПоступление.ХарактеристикаНоменклатуры = Характеристика; ДокПоступление.Количество = Количество; ДокПоступление.Цена = Цена; ДокПоступление.Склад = Склад; ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент; ДокПоступление.СтавкаНДС = СтавкаНДС; ДокПоступление.Сумма = Количество * Цена; Сообщить(Наименование+"-"+ШтрихКод+ " -- "+"Элемент записан"); //////////////////////////////////////////////////////// //Создадим Док Поступления товаров и услуг КонецЦикла; Попытка НовыйДокПоступление.Записать(РежимЗаписиДокумента.Проведение); Исключение Сообщить("Не удалось записать единицу: " + ОписаниеОшибки(), СтатусСообщения.Важное); Отказ = Истина; Возврат; КонецПопытки; КонецЦикла; ФайлXLS.Application.Quit(); Сообщить("Загрузка номенклатуры прошла успешно!!!"); КонецПроцедуры |
|||
1
Deon
01.10.12
✎
13:47
|
Што говорит отладчик?
|
|||
2
butterbean
01.10.12
✎
13:48
|
.Ссылка забыл
|
|||
3
GLazNik
01.10.12
✎
13:49
|
Ошибка в
иначе НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование); КонецЕсли; Тут дополнительно нужно проверять изменение характеристик. Сейчас этого не делается. |
|||
4
ProProg
01.10.12
✎
13:49
|
весь код кривой.
|
|||
5
pavelul73
01.10.12
✎
13:51
|
(4)+
|
|||
6
hhhh
01.10.12
✎
13:51
|
Прочитать() тоже не вижу.
|
|||
7
GLazNik
01.10.12
✎
13:53
|
+(3) И если номенклатура найдена, то в документ может подставиться левая характеристика.
и да (4) + |
|||
8
pavelul73
01.10.12
✎
13:53
|
например:
Артикул = ФайлXLS.Sheets(ТекНомер).Cells(СчСтроки,Арт).Value; где ты столбец Арт определил Где НачСтроку определил? |
|||
9
pavelul73
01.10.12
✎
13:54
|
или я просто этого не увидел?
|
|||
10
zladenuw
01.10.12
✎
13:56
|
а я бы все в тз с колонками как в ТЧ, заполнил бы, и потом загрузил бы в документ. примеров то куча как загрузить ёксель в тз
|
|||
11
ProProg
01.10.12
✎
13:57
|
есть у меня полностью готовое решение. на 100 процентов. также по характеристикам - и поиск и содание новых и т.п. и т.д. все под контролем.
|
|||
12
GLazNik
01.10.12
✎
13:57
|
(8) Это фигня. Скорее всего все это на форме.
|
|||
13
pavelul73
01.10.12
✎
14:00
|
(12) может быть, но как-то не красиво написано, сложно, можно намного проще. Хорошее решение предлагают в (10)
|
|||
14
GLazNik
01.10.12
✎
14:03
|
(13) и чем оно хорошее? Использование ТЗ изменит только каких-то 10 строчек. Плюс добавит еще парочку. Основной код останется тот же.
|
|||
15
zladenuw
01.10.12
✎
14:06
|
(0) ты 1 раз создаешь свои свойства при создание товара. а нужно проверить. нашел ссылку товара и смотрим или есть такое свойство ну и т.д.
|
|||
16
pavelul73
01.10.12
✎
14:07
|
думаю так будет проще
|
|||
17
EKO LX
01.10.12
✎
14:11
|
можно по конкретней, эту обработку я только дополнял и изменял. а сам я не профи поэтому криво. тут проблемы с характеристиками. они добавляются в справочник хар. номенклатуры и имеют наименование, но когда открываю в значении ничего нет, пусто.
|
|||
18
EKO LX
01.10.12
✎
14:12
|
(11) может поделитесь как характеристики добавляете?
|
|||
19
EKO LX
01.10.12
✎
14:13
|
(15) точно! а как проверять?
|
|||
20
GLazNik
01.10.12
✎
14:13
|
(16) это вряд ли
А хорошо бы было, закинуть данные екселя в ТЗ (без поисков). Потом ТЗ в запрос и там джойним с номенклатурой и характеристиками. |
|||
21
ProProg
01.10.12
✎
14:48
|
//СИНХРОНИЗАЦИЯ ХАРАКТЕРИСТИК
Если СвойстваХарактеристик.Количество() > 0 Тогда Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда Продолжить; КонецЕсли; Если ЗначениеЗаполнено(СтрокаТЧ.ХарактеристикаНоменклатуры) Тогда Продолжить; КонецЕсли; Отбор = Новый Структура(); Отбор.Вставить("КлючСтроки",СтрокаТЧ.КлючСтроки); Строки = СвойстваХарактеристик.НайтиСтроки(Отбор); Для Каждого Строчка Из Строки Цикл Строчка.Номенклатура = СтрокаТЧ.Номенклатура; КонецЦикла; КонецЦикла; ТаблицаТоваров = СвойстваХарактеристик.Выгрузить(); ТаблицаТоваров.Свернуть("Номенклатура,КлючСтроки"); Для Каждого ВремТовар Из ТаблицаТоваров Цикл Отбор = Новый Структура(); Отбор.Вставить("КлючСтроки",ВремТовар.КлючСтроки); Отбор.Вставить("Номенклатура",ВремТовар.Номенклатура); ПолучитьХарактеристики = СвойстваХарактеристик.НайтиСтроки(Отбор); КоличествоСвойств = ПолучитьХарактеристики.Количество(); Если ПолучитьХарактеристики.Количество() > 0 Тогда ПрерватьПоискПоЭтойПозиции = Ложь; Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЗапросПоХарактеристикам.Номенклатура КАК Номенклатура, | ЗапросПоХарактеристикам.Характеристика КАК Характеристика |ИЗ | (ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект.Владелец КАК Номенклатура, | ЗначенияСвойствОбъектов.Объект КАК Характеристика, | МИНИМУМ(ВЫБОР | КОГДА ЗначенияСвойствОбъектов.Значение В (&МассивЗначенийСвойств) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) КАК ЕстьВсеУказанныеХарактеристики | ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ГДЕ | ЗначенияСвойствОбъектов.Объект.Владелец = &Номенклатура | | СГРУППИРОВАТЬ ПО | ЗначенияСвойствОбъектов.Объект.Владелец, | ЗначенияСвойствОбъектов.Объект) КАК ЗапросПоХарактеристикам |ГДЕ | ЗапросПоХарактеристикам.ЕстьВсеУказанныеХарактеристики = ИСТИНА"; Запрос.УстановитьПараметр("Номенклатура", ВремТовар.Номенклатура); МассивСвойств = Новый Массив(); МассивЗначенийСвойств = Новый Массив(); НомСвойства = 0; Для Каждого ЗначенияСвойства Из ПолучитьХарактеристики Цикл Если НЕ ЗначениеЗаполнено(ЗначенияСвойства.Значение) Тогда Продолжить; КонецЕсли; НомСвойства = НомСвойства+1; СвойствоХарактеристики = ЗначенияСвойства.Свойство; ЗначениеСвойства = СокрЛП(ЗначенияСвойства.Значение); Если СвойствоХарактеристики.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда УстановитьСвойство = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства,Истина,,СвойствоХарактеристики); Если УстановитьСвойство = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда ПрерватьПоискПоЭтойПозиции = Истина; Продолжить; КонецЕсли; ИначеЕсли СвойствоХарактеристики.ТипЗначения.СодержитТип(Тип("Число")) Тогда ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства," ",""); Если Найти(ЗначениеСвойства,".") > 0 И Найти(ЗначениеСвойства,",") > 0 Тогда ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства,",",""); КонецЕсли; УстановитьСвойство = Число(ЗначениеСвойства); Иначе УстановитьСвойство = ЗначениеСвойства; КонецЕсли; МассивСвойств.Добавить(СвойствоХарактеристики); МассивЗначенийСвойств.Добавить(УстановитьСвойство); КонецЦикла; Если ПрерватьПоискПоЭтойПозиции Тогда Продолжить; КонецЕсли; Запрос.УстановитьПараметр("МассивСвойств", МассивСвойств); Запрос.УстановитьПараметр("МассивЗначенийСвойств", МассивЗначенийСвойств); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("КлючСтроки", ВремТовар.КлючСтроки); НайденныеСтроки = ТабличнаяЧасть.НайтиСтроки(ПараметрыОтбора); Для Каждого СтрокаСинхронизации Из НайденныеСтроки Цикл СтрокаСинхронизации.ХарактеристикаНоменклатуры = Выборка.Характеристика; Для Каждого ЗначенияСвойства Из ПолучитьХарактеристики Цикл ЗначенияСвойства.ХарактеристикаНоменклатуры = Выборка.Характеристика; КонецЦикла; КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
22
ProProg
01.10.12
✎
14:49
|
//============================================================================
// ЗАГРУЗКА ХАРАКТЕРИСТИК Процедура ВыполнитьЗагрузитьХарактеристики(Кнопка) Если ЭлементыФормы.ТаблицыДанные.ТекущаяСтраница <> ЭлементыФормы.ТаблицыДанные.Страницы.ЗагрузкаХарактеристик Тогда Сообщить("Вы должны находится на закладке Изменение цен номенклатуры"); Возврат; КонецЕсли; ТаблицаТоваров = СвойстваХарактеристик.Выгрузить(); ТаблицаТоваров.Свернуть("Номенклатура,ХарактеристикаНоменклатуры,КлючСтроки"); НачатьТранзакцию(); КоличествоОбработанных = 0; Для Каждого ВремТовар Из ТаблицаТоваров Цикл Если НЕ ЗначениеЗаполнено(ВремТовар.Номенклатура) Тогда Продолжить; КонецЕсли; Если ЗначениеЗаполнено(ВремТовар.ХарактеристикаНоменклатуры) Тогда Продолжить; КонецЕсли; КоличествоОбработанных = КоличествоОбработанных + 1; НоменклатураВыборка = ВремТовар.Номенклатура; Отбор = Новый Структура(); Отбор.Вставить("КлючСтроки",ВремТовар.КлючСтроки); Отбор.Вставить("Номенклатура",НоменклатураВыборка); ПолучитьХарактеристики = СвойстваХарактеристик.НайтиСтроки(Отбор); КоличествоСвойств = ПолучитьХарактеристики.Количество(); Если ПолучитьХарактеристики.Количество() > 0 Тогда Если НоменклатураВыборка.ВестиУчетПоХарактеристикам = Ложь Тогда ОбъектНоменклатура = НоменклатураВыборка.ПолучитьОбъект(); ОбъектНоменклатура.ВестиУчетПоХарактеристикам = Истина; ОбъектНоменклатура.Записать(); КонецЕсли; НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); НоваяХарактеристика.Владелец = НоменклатураВыборка; НоваяХарактеристика.Наименование = "новая"; НоваяХарактеристика.Записать(); НайденнаяХарактеристика = НоваяХарактеристика.Ссылка; СвойстваИЗначения = Новый СписокЗначений(); СвойстваИЗначения.Очистить(); ГенерируемНаименование = ""; КолСчетчик = 0; Для Каждого ЗначенияСвойства Из ПолучитьХарактеристики Цикл Если НЕ ЗначениеЗаполнено(ЗначенияСвойства.Значение) Тогда Продолжить; КонецЕсли; КолСчетчик = КолСчетчик+1; СвойствоХарактеристики = ЗначенияСвойства.Свойство; ЗначениеСвойства = СокрЛП(ЗначенияСвойства.Значение); Если СвойствоХарактеристики.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда УстановитьСвойство = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства,Истина,,СвойствоХарактеристики); Если УстановитьСвойство = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда НовоеСвойство = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент(); НовоеСвойство.Владелец = СвойствоХарактеристики; НовоеСвойство.Наименование = СокрЛП(ЗначениеСвойства); НовоеСвойство.Записать(); УстановитьСвойство = НовоеСвойство.Ссылка; КонецЕсли; ИначеЕсли СвойствоХарактеристики.ТипЗначения.СодержитТип(Тип("Число")) Тогда ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства," ",""); Если Найти(ЗначениеСвойства,".") > 0 И Найти(ЗначениеСвойства,",") > 0 Тогда ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства,",",""); КонецЕсли; УстановитьСвойство = Число(ЗначениеСвойства); Иначе УстановитьСвойство = ЗначениеСвойства; КонецЕсли; НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(НайденнаяХарактеристика); НаборЗаписей.Отбор.Свойство.Установить(СвойствоХарактеристики); НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); Запись = НаборЗаписей.Добавить(); Запись.Объект = НайденнаяХарактеристика.Ссылка; Запись.Свойство = СвойствоХарактеристики; Запись.Значение = УстановитьСвойство; НаборЗаписей.Записать(); СвойстваИЗначения.Добавить(УстановитьСвойство); ГенерируемНаименование = ГенерируемНаименование + УстановитьСвойство + ?(КолСчетчик < КоличествоСвойств,", "," "); КонецЦикла; Наименование = СформироватьНаименованиеХарактеристики(СвойстваИЗначения); ОбъектХарактеристика = НайденнаяХарактеристика.ПолучитьОбъект(); ОбъектХарактеристика.Наименование = Наименование; ОбъектХарактеристика.Записать(); Отбор = Новый Структура(); Отбор.Вставить("КлючСтроки",ВремТовар.КлючСтроки); Строки = ТабличнаяЧасть.НайтиСтроки(Отбор); Для Каждого Строчка Из Строки Цикл Строчка.ХарактеристикаНоменклатуры = НайденнаяХарактеристика.Ссылка; КонецЦикла; КонецЕсли; Если КоличествоОбработанных = 200 Тогда // промежуточную транзакцию закрываем и открываем новую ЗафиксироватьТранзакцию(); НачатьТранзакцию(); КоличествоОбработанных = 0; КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
23
zladenuw
01.10.12
✎
14:50
|
||||
24
ProProg
01.10.12
✎
14:56
|
(230 не путай уй с пальцем. свойства номенклатуры гораздо проще чем характеристик. И еще проще чем надо и то и другое.
|
|||
25
zladenuw
01.10.12
✎
14:58
|
это для развития ТС. он же написал в (17)
|
|||
26
EKO LX
05.10.12
✎
15:27
|
обработка работает. после поступления хочу заполнить док УстановкаЦенНоменклатуры по двум типам цен: первоначальная и розничная. вариант написанный комментом не срабатывает
Экзель = Новый COMОбъект("Excel.Application"); Книга = Экзель.Application.Workbooks.Open(Путь); ТекЛист = Книга.WorkSheets(1); КолСтрок = ТекЛист.Cells(1,1).SpecialCells(11).Row; КолКолонок = ТекЛист.Cells(1,1).SpecialCells(11).Column; КоличествоСтраниц = 1; Для ТекНомер = 1 По КоличествоСтраниц Цикл Артикул = Книга.Sheets(ТекНомер).Cells(1,Арт).Value; Наименование = Книга.Sheets(ТекНомер).Cells(1,Наим).Value; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = Книга.Sheets(ТекНомер).Cells(1,ШК).Value; КонецЕсли; Коллекция = Книга.Sheets(ТекНомер).Cells(1,Коллекция1).Value; Цвет = Книга.Sheets(ТекНомер).Cells(1,Цвет1).Value; Размер = Книга.Sheets(ТекНомер).Cells(1,Размер1).Value; Количество = Книга.Sheets(ТекНомер).Cells(1,Колич).Value; Цена = Книга.Sheets(ТекНомер).Cells(1,Цен).Value; Сообщить("Внешняя накладная прочитана, начилась запись элементов справочника Номенклатура!"); счСтроки = НачСтрока; ////Заполняем шапку Документа Поступление товаров и услуг ////////////////////////////////////// НовыйДокПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); НовыйДокПоступление.Дата = Дата; НовыйДокПоступление.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад; НовыйДокПоступление.Организация = Организация; НовыйДокПоступление.Контрагент = Контрагент; НовыйДокПоступление.ДоговорКонтрагента = Дог; НовыйДокПоступление.ВалютаДокумента = ВалютаДок; НовыйДокПоступление.КурсВзаиморасчетов = 1; НовыйДокПоступление.КратностьВзаиморасчетов = 1; НовыйДокПоступление.СкладОрдер = Склад; НовыйДокПоступление.ОтражатьВУправленческомУчете = Истина; НовыйДокПоступление.ОтражатьВБухгалтерскомУчете = Истина; НовыйДокПоступление.ОтражатьВНалоговомУчете = Ложь; Для ш = НачСтрока по КолСтрок Цикл Артикул = Книга.Sheets(ТекНомер).Cells(СчСтроки,Арт).Value; Наименование = Книга.Sheets(ТекНомер).Cells(СчСтроки,Наим).Value; Если (ШтрихКод = 0) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = Книга.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value; КонецЕсли; //ШтрихКод = Книга.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value; Коллекция = Книга.Sheets(ТекНомер).Cells(СчСтроки,Коллекция1).Value; Цвет = Книга.Sheets(ТекНомер).Cells(СчСтроки,Цвет1).Value; Размер = Книга.Sheets(ТекНомер).Cells(СчСтроки,Размер1).Value; Количество = Книга.Sheets(ТекНомер).Cells(СчСтроки,Колич).Value; Цена = Книга.Sheets(ТекНомер).Cells(СчСтроки,Цен).Value; счСтроки = счСтроки + 1; Если (Наименование = "") или (Наименование = Неопределено) или (Наименование = null) Тогда Продолжить; КонецЕсли; Запись = Истина; СпрНоменклатура = Справочники.Номенклатура; Если Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер).Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); Родитель = ГрпНом; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Артикул = Артикул; НовыйЭлемент.Коллекция = Коллекция; НовыйЭлемент.Цвет = Цвет; НовыйЭлемент.Размер = Размер; НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.НаименованиеПолное = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.ВидНоменклатуры = ВидНомен; НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер; НовыйЭлемент.Записать(); НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер; НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование; НовыйЕдИзмер.Коэффициент = 1; НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка; НовыйЕдИзмер.Записать(); НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка; НовыйЭлемент.СтавкаНДС = СтавкаНДС; //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина; НовыйЭлемент.Записать(); //Запись РегистраСведений Штрихкоды ЗаписьШК = Истина; РегСведШК = РегистрыСведений.Штрихкоды; ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать(); Пока ВыборкаРегСведШК.Следующий() Цикл Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда ЗаписьШК = Ложь; КонецЕсли; КонецЦикла; ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи(); ЗаписьВРегистрСвед.Владелец = НовыйЭлемент.Ссылка; ЗаписьВРегистрСвед.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ЗаписьВРегистрСвед.Штрихкод = ШтрихКод; ЗаписьВРегистрСвед.ТипШтрихкода = ЭлементыФормы.ТипШтрихкода.Значение;//ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13; ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод не будет добавлен к данному элементу: " + Наименование + " " + Цвет + " " + Размер); Иначе Попытка ЗаписьВРегистрСвед.Записать(); Исключение Сообщить("Номенклатура с таким штрихкодом существует!"); КонецПопытки; КонецЕсли; Иначе НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер); КонецЕсли; //Создадим Док Поступления товаров и услуг //////////////////////////////////////////////////////// ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; ДокПоступление.Количество = Количество; ДокПоступление.Цена = Цена; ДокПоступление.Склад = Склад; ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент; ДокПоступление.СтавкаНДС = СтавкаНДС; ДокПоступление.Сумма = Количество * Цена; Сообщить(НовыйЭлемент.Наименование + " " + ШтрихКод + " : "+"Элемент записан"); КонецЦикла; НовыйДокПоступление.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; // Создаю док УстановкаЦенНоменклатуры //ДокУстановкаЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); //ДокУстановкаЦен.Дата = Дата; //ДокУстановкаЦен.НеПроводитьНулевыеЗначения = Ложь; //СтрокаТипыЦен = ДокУстановкаЦен.ТипыЦен.Добавить(); //СтрокаТипыЦен.ТипЦен = ТипЦен; //ДокУстановкаЦенТовары = ДокУстановкаЦен.Товары.Добавить(); //ДокУстановкаЦенТовары.Номенклатура = НовыйЭлемент.Ссылка; //ДокУстановкаЦенТовары.ТипЦен = ТипЦен; //ДокУстановкаЦенТовары.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; //ДокУстановкаЦенТовары.Цена = Цена; //ДокУстановкаЦенТовары.Валюта = ВалютаДок; //ДокУстановкаЦен.Записать(РежимЗаписиДокумента.Проведение); Экзель.Application.Quit(); Сообщить("Загрузка номенклатуры прошла успешно!"); КонецПроцедуры |
|||
27
Buster007
05.10.12
✎
15:35
|
ТС, сколько денег говори уже.
|
|||
28
EKO LX
05.10.12
✎
15:46
|
ТС это кто или что? какие деньги?
|
|||
29
EKO LX
06.10.12
✎
12:50
|
Элементы создаются, документ поступление создается, но вот установка цен номенклатуры ругается:
{Форма.Форма(209)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Рознизная : хххххххх : : 06.10.2012 0:00:00 (Регистр сведений: Цены номенклатуры; Номер строки: 7) ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Проведение); О чем говорит эта ошибка? номенклатура в экселе встречается несколько раз, и оно не может записаться в регистр сведений, так? Скажите пожалуйста в чем проблема? Процедура ЗагрузкаИзExcel() Экзель = Новый COMОбъект("Excel.Application"); Книга = Экзель.Application.Workbooks.Open(Путь); ТекЛист = Книга.WorkSheets(1); КолСтрок = ТекЛист.Cells(1,1).SpecialCells(11).Row; КолКолонок = ТекЛист.Cells(1,1).SpecialCells(11).Column; КоличествоСтраниц = 1; Для ТекНомер = 1 По КоличествоСтраниц Цикл Артикул = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Арт).Value); Наименование = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Наим).Value); Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,ШК).Value); КонецЕсли; Коллекция = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Коллекция1).Value); Цвет = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Цвет1).Value); Размер = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Размер1).Value); Количество = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Колич).Value); Цена = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Цен).Value); Сообщить("Внешняя накладная прочитана, начилась запись элементов справочника Номенклатура!"); счСтроки = НачСтрока; //// Заполняем шапку Документа Поступление товаров и услуг ////////////////////////////////////// НовыйДокПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); НовыйДокПоступление.Дата = Дата; НовыйДокПоступление.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад; НовыйДокПоступление.Организация = Организация; НовыйДокПоступление.Контрагент = Контрагент; НовыйДокПоступление.ДоговорКонтрагента = Дог; НовыйДокПоступление.ВалютаДокумента = ВалютаДок; НовыйДокПоступление.КурсВзаиморасчетов = 1; НовыйДокПоступление.КратностьВзаиморасчетов = 1; НовыйДокПоступление.СкладОрдер = Склад; НовыйДокПоступление.ОтражатьВУправленческомУчете = Истина; НовыйДокПоступление.ОтражатьВБухгалтерскомУчете = Истина; НовыйДокПоступление.ОтражатьВНалоговомУчете = Ложь; //// Создаю док УстановкаЦенНоменклатуры /////////////////////////////////////////////////////// ДокУстановкаЦенНоменклатуры = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); ДокУстановкаЦенНоменклатуры.Дата = Дата; ДокУстановкаЦенНоменклатуры.ТипыЦен.Очистить(); НовСтрТипыЦен = ДокУстановкаЦенНоменклатуры.ТипыЦен.Добавить(); ТипЦены = ТипЦен; // Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001"); НовСтрТипыЦен.ТипЦен = ТипЦены; Для ш = НачСтрока по КолСтрок Цикл Артикул = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Арт).Value); Наименование = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Наим).Value); Если (ШтрихКод = 0) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value); КонецЕсли; //ШтрихКод = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value); Коллекция = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Коллекция1).Value); Цвет = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Цвет1).Value); Размер = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Размер1).Value); Количество = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Колич).Value); Цена = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Цен).Value); счСтроки = счСтроки + 1; Если (Наименование = "") или (Наименование = Неопределено) или (Наименование = null) Тогда Продолжить; КонецЕсли; Запись = Истина; СпрНоменклатура = Справочники.Номенклатура; Если Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер).Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); Родитель = ГрпНом; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Артикул = Артикул; НовыйЭлемент.Коллекция = Коллекция; НовыйЭлемент.Цвет = Цвет; НовыйЭлемент.Размер = Размер; НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.НаименованиеПолное = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.ВидНоменклатуры = ВидНомен; НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер; НовыйЭлемент.Записать(); НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер; НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование; НовыйЕдИзмер.Коэффициент = 1; НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка; НовыйЕдИзмер.Записать(); НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка; НовыйЭлемент.СтавкаНДС = СтавкаНДС; //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина; НовыйЭлемент.Записать(); //Запись РегистраСведений Штрихкоды ЗаписьШК = Истина; РегСведШК = РегистрыСведений.Штрихкоды; ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать(); Пока ВыборкаРегСведШК.Следующий() Цикл Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда ЗаписьШК = Ложь; КонецЕсли; КонецЦикла; ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи(); ЗаписьВРегистрСвед.Владелец = НовыйЭлемент.Ссылка; ЗаписьВРегистрСвед.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ЗаписьВРегистрСвед.Штрихкод = ШтрихКод; ЗаписьВРегистрСвед.ТипШтрихкода = ЭлементыФормы.ТипШтрихкода.Значение;//ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13; ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод не будет добавлен к данному элементу: " + Наименование + " " + Цвет + " " + Размер); Иначе Попытка ЗаписьВРегистрСвед.Записать(); Исключение Сообщить("Номенклатура с таким штрихкодом существует!"); КонецПопытки; КонецЕсли; Иначе НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер); КонецЕсли; //Создадим Док Поступления товаров и услуг //////////////////////////////////////////////////// ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; ДокПоступление.Количество = Количество; ДокПоступление.Цена = Цена; ДокПоступление.Склад = Склад; ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент; ДокПоступление.СтавкаНДС = СтавкаНДС; ДокПоступление.Сумма = Количество * Цена; Сообщить(НовыйЭлемент.Наименование + " " + ШтрихКод + " : "+"Элемент записан"); //Запишем товар и цену в документ установки цен тчТовары = ДокУстановкаЦенНоменклатуры["Товары"]; СтрокаТаблицаТовары = тчТовары.Добавить(); СтрокаТаблицаТовары["Номенклатура"] = НовыйЭлемент.Ссылка; СтрокаТаблицаТовары["Валюта"] = ВалютаДок; СтрокаТаблицаТовары["ЕдиницаИзмерения"] = НовыйЭлемент.ЕдиницаХраненияОстатков; СтрокаТаблицаТовары["ТипЦен"] = ТипЦены; СтрокаТаблицаТовары["Цена"] = Цена; КонецЦикла; Попытка НовыйДокПоступление.Записать(РежимЗаписиДокумента.Проведение); ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Проведение); Исключение Сообщить("НЕ ЗАПИСАН"); КонецПопытки; КонецЦикла; Экзель.Quit(); Сообщить("Загрузка накладной успешно завершена!"); КонецПроцедуры |
|||
30
Boleev v2
06.10.12
✎
13:27
|
(29) давай почту, есть похожая обработка.
|
|||
31
EKO LX
06.10.12
✎
13:30
|
(30)вот [email protected]
|
|||
32
Boleev v2
06.10.12
✎
13:41
|
(31) ушло
|
|||
33
EKO LX
06.10.12
✎
13:46
|
(32) Спасибо Вам большое! У обработки обширные возможности, сейчас посмотрю как оно устроено?
|
|||
34
Boleev v2
06.10.12
✎
13:51
|
(33) да не обширные. Писал на коленке для разовой загрузки. Допилите под себя.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |