Имя: Пароль:
1C
1С v8
Загрузка из 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) да не обширные. Писал на коленке для разовой загрузки. Допилите под себя.