Имя: Пароль:
1C
1C 7.7
v7: Сваял обработку загрузки справочника. Пришел за пинками.
,
0 bizon2008
 
29.08.11
16:53
День добрый народ. Коли не в тягость гляньте обработку. Заранее премного благодарен.

//*******************************************
Процедура Сформировать()
 тзТовар.Очистить();
 тзТовар.НоваяКолонка("Код");
 тзТовар.НоваяКолонка("Товар");
 тзТовар.НоваяКолонка("Ед");
 тзТовар.НоваяКолонка("Цена");
 тзТовар.НоваяКолонка("ШтрихКод");
 тзТовар.НоваяКолонка("Кф");
 тзТовар.НоваяКолонка("КодЧП");
   
 тзТовар.УстановитьПараметрыКолонки("Код", , , , ,8);
 тзТовар.УстановитьПараметрыКолонки("Товар", , , , ,50);
 тзТовар.УстановитьПараметрыКолонки("Ед", , , , ,5);
 тзТовар.УстановитьПараметрыКолонки("Цена","Число",10,2, ,15);
 тзТовар.УстановитьПараметрыКолонки("ШтрихКод", , , , ,15);
 тзТовар.УстановитьПараметрыКолонки("Кф","Число",10,3, ,10);
 тзТовар.УстановитьПараметрыКолонки("КодЧП", , , , ,2);
 
 Текст = СоздатьОбъект("Текст");
 Список = СоздатьОбъект("СписокЗначений");
 Текст.Открыть("c:\tmp\spr_tovar.txt");
 Для Ном=1 По Текст.КоличествоСтрок() Цикл  
   Стр = Текст.ПолучитьСтроку(Ном);
   Список.ИзСтрокиСРазделителями(Стр); //преобразуем строку в список значений
   тзТовар.НоваяСтрока();
   тзТовар.Код = Список.ПолучитьЗначение(1);
   тзТовар.Товар = Список.ПолучитьЗначение(2);
   тзТовар.Ед = Список.ПолучитьЗначение(3);
   тзТовар.Цена = Список.ПолучитьЗначение(4);
   тзТовар.ШтрихКод = Список.ПолучитьЗначение(5);
   тзТовар.Кф = Список.ПолучитьЗначение(6);
   тзТовар.КодЧП = Список.ПолучитьЗначение(7);
 КонецЦикла;
 Сообщить("Закончено");
КонецПроцедуры                                                                    


Процедура СоздатьНовуюКарточкуТовара()
 СпрТовар  = СоздатьОбъект("Справочник.Номенклатура");
 СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
 СпрЦены = СоздатьОбъект("Справочник.Цены");
 СпрКлассификаторЕдИзм = СоздатьОбъект("Справочник.КлассификаторЕдИзм");
 
 СпрТовар.ИспользоватьДату(ТекущаяДата());
 СпрЦены.ИспользоватьДату(ТекущаяДата());
 тзТовар.ВыбратьСтроки();
 Пока тзТовар.ПолучитьСтроку()=1 Цикл
   
     //Если не нашли единицу измерения товар не записывать.    
   Если СпрКлассификаторЕдИзм.НайтиПоНаименованию(тзТовар.Ед) = 0 Тогда
     Сообщить("Не найдена единица измерения - " + тзТовар.Ед + " для товара - " + тзТовар.Товар);
     Продолжить;
   КонецЕсли;
   
   ЭтоНовый = 0;
   //Ищем товар по общему коду, если не найден создаем новый.
   Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0) = 0 Тогда
     СпрТовар.Новый();
       СпрТовар.КодЧр = тзТовар.Код;
       ЭтоНовый = 1;
   КонецЕсли;
   СпрТовар.Наименование = тзТовар.Товар;
   СпрТовар.ПолнНаименование = тзТовар.Товар;
   СпрТовар.ВалютаУчета = Константа.ОсновнаяВалюта;
   СпрТовар.БазоваяЕдиница = СпрКлассификаторЕдИзм.ТекущийЭлемент();
   СпрТовар.СтавкаНДС=Константа.ОсновнаяСтавкаНДС;
   СпрТовар.ВидТовара=Перечисление.ВидыТоваров.Товар;
   СпрТовар.ТипТовара=Перечисление.ТипыТоваров.Штучный;
   СпрТовар.ШтрихКод = тзТовар.ШтрихКод;
   СпрТовар.Записать();
   Сообщить("Товар записан - " + тзТовар.Товар);
       
   //Заполнение подчиненых спрвочников
   Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0) = 1 Тогда
     
     //Заполнение починеного справочника единицы    
     СпрЕдиницы.ИспользоватьВладельца(СпрТовар.ТекущийЭлемент());    
     Если СпрЕдиницы.НайтиПоНаименованию(тзТовар.Ед) = 0 Тогда
       СпрЕдиницы.Новый();
       СпрЕдиницы.Наименование = СпрКлассификаторЕдИзм.ТекущийЭлемент().Наименование;
     КонецЕсли;
     СпрЕдиницы.Единица = СпрКлассификаторЕдИзм.ТекущийЭлемент();
     СпрЕдиницы.ШтрихКод = тзТовар.ШтрихКод;;
     СпрЕдиницы.Коэффициент = тзТовар.Кф;
     СпрЕдиницы.Записать();
     
     //Установка единицы по умолчанию
     Если ЭтоНовый = 1 Тогда
       СпрЕдиницы.ИспользоватьВладельца(СпрТовар.ТекущийЭлемент());
       Если СпрЕдиницы.НайтиПоНаименованию(тзТовар.Ед) = 1 Тогда
         СпрТовар.ЕдиницаПоУмолчанию = СпрЕдиницы.ТекущийЭлемент();
         СпрТовар.Записать();
       Иначе
         Сообщить("Единица измерения не найдена" + тзТовар.Товар +"не удалось заполнить единицу измерения по умолчанию ");
       КонецЕсли;
     КонецЕсли;    
     
     //Заполнение подчиненого спрвочника цены
     СпрЦены.ИспользоватьВладельца(СпрТовар.ТекущийЭлемент());
     Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0) = 0 Тогда
       СпрЦены.Новый();
       СпрЦены.Наименование = ВыбТипЦены.Наименование;
     КонецЕсли;
     СпрЦены.Валюта = Константа.ОсновнаяВалюта;
     СпрЦены.КатегорияЦены = ВыбТипЦены;
     СпрЕдиницы.ИспользоватьВладельца(СпрТовар.ТекущийЭлемент());
     Если СпрЕдиницы.НайтиПоНаименованию(тзТовар.Ед)=1 Тогда
       СпрЦены.Единица = СпрЕдиницы.ТекущийЭлемент();
     Иначе
       Сообщить("Единица измерения не найдена   " + тзТовар.Товар +" - " +тзТовар.Ед);
       Продолжить;
     КонецЕсли;
     СпрЦены.Цена = тзТовар.Цена;
     СпрЦены.Записать();
   Иначе
      Сообщить("Товар не найден" + тзТовар.Товар +"не удалось заполнить подчиненые сравочники");
      Продолжить;
   КонецЕсли;
   
   КонецЦикла;
КонецПроцедуры
1 aka AMIGO
 
29.08.11
16:55
конфы бывают разные.. ©
2 Eugeneer
 
29.08.11
16:56
Зачем изобретать лесапед? загрузок для семерки в интете преогромнейшее количество и платных и бесплатных.
3 aka AMIGO
 
29.08.11
16:58
c:\tmp\spr_tovar.txt - готовишь заранее? чем? и где?
4 bizon2008
 
29.08.11
17:02
(1)Конфа ТиС была когда-то.
(2)Такой нет.
(3)Да заранее. Это выгрузка из другой программы не 1С. На разных машинах.
5 пипец
 
29.08.11
17:04
тзТовар.НоваяКолонка("ШтрихКод");
 тзТовар.НоваяКолонка("Кф");
 тзТовар.НоваяКолонка("КодЧП");
   
 тзТовар.УстановитьПараметрыКолонки("Код", , , , ,8);
 тзТовар.УстановитьПараметрыКолонки("Товар", , , , ,50);
 тзТовар.УстановитьПараметрыКолонки("Ед", , , , ,5);
избыточно
6 bizon2008
 
29.08.11
17:05
(5)Согласен. Но так более наглядно.
7 Мимохожий Однако
 
29.08.11
17:06
(6) Наглядно для кого? ИМХО, прикалываешься.
8 bizon2008
 
29.08.11
17:06
(7)Для меня наглядно.
9 Злобный монстр
 
29.08.11
17:12
(0) Сойдет. Только поиск единицы по наименованию не нравится. Вообще поиск по наименованию не люблю....
10 Ёпрст
 
29.08.11
17:15
Список.ИзСтрокиСРазделителями(Стр); //преобразуем строку в список значений
колСтрок=0;
.........
   тзТовар.НоваяСтрока();
   колСтрок=КолСтрок+1;
//    тзТовар.Код = Список.ПолучитьЗначение(1);
//    тзТовар.Товар = Список.ПолучитьЗначение(2);
//    тзТовар.Ед = Список.ПолучитьЗначение(3);
//    тзТовар.Цена = Список.ПолучитьЗначение(4);
//    тзТовар.ШтрихКод = Список.ПолучитьЗначение(5);
//    тзТовар.Кф = Список.ПолучитьЗначение(6);
//    тзТовар.КодЧП = Список.ПолучитьЗначение(7);
    Для к = 1 По Список.РазмерСписка() Цикл
      тзТовар.УстановитьЗначение(КолСтрок,к,Список.ПолучитьЗначение(к));
    КонецЦикла;
11 Ёпрст
 
29.08.11
17:17
//  тзТовар.УстановитьПараметрыКолонки("Код", , , , ,8);
 тзТовар.НоваяКолонка("Код",,,,,8);
12 Tatitutu
 
29.08.11
17:23
+(11)
 //тзТовар.Очистить();
 //тзТовар.НоваяКолонка("Код");
 //тзТовар.НоваяКолонка("Товар");
 //тзТовар.НоваяКолонка("Ед");
 //тзТовар.НоваяКолонка("Цена");
 //тзТовар.НоваяКолонка("ШтрихКод");
 //тзТовар.НоваяКолонка("Кф");
 //тзТовар.НоваяКолонка("КодЧП");

//один раз создать правильно таблицу

тзТовар.УдалитьСтроки();
13 bizon2008
 
29.08.11
17:28
(9)Тоже стараюсь избегать. Но там зацепится больше не за что.
14 Попытка1С
 
29.08.11
17:30
В кое веки соглашусь с Маней...