Имя: Пароль:
1C
1С v8
v8: Загрузка поступления товаров и услуг ШТРИХ_М из xls -вопрос по работе с ТЗ
, ,
0 anisa8310
 
11.12.13
09:32
Загрузка в Поступление товаров конфа 1с ШТРИХ-М.1С:Предприятие 8.2 (8.2.18.104)
До того работала другая загрузка (массив ) но сейчас поставщик перешел на другой формат-поэтому нужно писать новую...
с ТаблицейЗначений ни разу не работала..помогите пожалуйста с синтаксисом разобраться!!!! как мне поискать среди элементов справочника по наименованию по ТЗ колонке его значению и если нет тогда создать новые элементы справочника по таблице значений...
Задача срочная-прошу помощи !Заранее всех благодарю!!!!

Процедура КнопкаВыполнитьНажатие(Кнопка)
    //Создаю таблицу Значений
тзТовары = Новый ТаблицаЗначений;
тзТовары.Колонки.Добавить("Код");
тзТовары.Колонки.Добавить("Наименование");
тзТовары.Колонки.Добавить("Артикул");
тзТовары.Колонки.Добавить("Комментарий");
тзТовары.Колонки.Добавить("Проба");
тзТовары.Колонки.Добавить("Размер");
тзТовары.Колонки.Добавить("Коллекция");
тзТовары.Колонки.Добавить("ВесМеталла");
тзТовары.Колонки.Добавить("Количество");
тзТовары.Колонки.Добавить("Единица");
тзТовары.Колонки.Добавить("Коэфициент");
тзТовары.Колонки.Добавить("Вес");
тзТовары.Колонки.Добавить("Цена");
тзТовары.Колонки.Добавить("Сумма");
тзТовары.Колонки.Добавить("Город");
тзТовары.Колонки.Добавить("Код1");
тзТовары.Колонки.Добавить("шк");
тзТовары.Колонки.Добавить("Код2");
/////////////открытие xls-документа    
    Док = ПолучитьCOMОбъект(Путь);
    //счСтроки = 1;
    
    ///////////Создаем новый документ
        НовыйДокумент= Документы.ПриходнаяНакладная.СоздатьДокумент();
        НовыйДокумент.Фирма = Справочники.Фирмы.НайтиПоКоду("0000001") ;
        НовыйДокумент.Дата = ДатаДокумента;
        НовыйДокумент.Контрагент =Контрагент;
        НовыйДокумент.Договор = Договор;
        НовыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию("Основной");
        НовыйДокумент.Валюта = Справочники.Валюты.НайтиПоКоду("643");
        НовыйДокумент.ТипЦен = Справочники.ТипыЦен.НайтиПоКоду("2");
        НовыйДокумент.Курс = "1";
        НовыйДокумент.Кратность = "1";
        НовыйДокумент.КурсВзаиморасчетов = "1";
        НовыйДокумент.КратностьВзаиморасчетов = "1";
        НовыйДокумент.ВходящаяДатаДокумента = ДатаВходДока;
        НовыйДокумент.ВходящийНомерДокумента = НомерВходДока;
        НовыйДокумент.ТорговыйОбъект = Справочники.ТорговыеОбъекты.НайтиПоКоду("00001");
        НовыйДокумент.ВариантРасчетаНДС=Перечисления.ВариантыРасчетаНДС.БезНДС;
        НовыйДокумент.Комментарий = "Загрузка#";
        

    /////////////////////////Перебор строк    

Excel = Новый COMОбъект("Excel.Application");
    ДокументExcel = Excel.WorkBooks.Open(Док);
    
    Лист = ДокументExcel.Sheets(1);
    
    ВсегоСтрок = Лист.Cells.SpecialCells(11).Row;
    //ВсегоКолонок = Лист.Cells.SpecialCells(11).Column;
    
    Данные = Лист.Range(Лист.Cells(2,1),Лист.Cells(ВсегоСтрок,18)).Value.Выгрузить();
    
    Excel.Quit();

    Для А=2 По ВсегоСтрок Цикл
        тзТовары.Добавить();    
    КонецЦикла;
    
    тзТовары.ЗагрузитьКолонку(Данные[0],"Код");
    тзТовары.ЗагрузитьКолонку(Данные[1],"Наименование");
    тзТовары.ЗагрузитьКолонку(Данные[2],"Артикул");
    тзТовары.ЗагрузитьКолонку(Данные[3],"Комментарий");
    тзТовары.ЗагрузитьКолонку(Данные[4],"Проба");
    тзТовары.ЗагрузитьКолонку(Данные[5],"Размер");
    тзТовары.ЗагрузитьКолонку(Данные[6],"Коллекция");
    тзТовары.ЗагрузитьКолонку(Данные[7],"ВесМеталла");
    тзТовары.ЗагрузитьКолонку(Данные[8],"Количество");
    тзТовары.ЗагрузитьКолонку(Данные[9],"Единица");
    тзТовары.ЗагрузитьКолонку(Данные[10],"Коэфициент");
    тзТовары.ЗагрузитьКолонку(Данные[11],"Вес");
    тзТовары.ЗагрузитьКолонку(Данные[12],"Цена");
    тзТовары.ЗагрузитьКолонку(Данные[13],"Сумма");
    тзТовары.ЗагрузитьКолонку(Данные[14],"Город");
    тзТовары.ЗагрузитьКолонку(Данные[15],"Код1");
    тзТовары.ЗагрузитьКолонку(Данные[16],"ШК");
    тзТовары.ЗагрузитьКолонку(Данные[17],"код2");


    
    /////////Создаем строку табличной части услуги
    Товары = НовыйДокумент.Товары.Добавить();        
     ///////////////Выбираем/Создаем номенклатуру
    
    
     ЗагружаемаяНоменклатура=Справочники.ШтрихКоды.НайтиПоНаименованию(тзСотрудники]); // Здесь надо как то поискать есть ли такая номенклатру по штрих коду!!! незнаю как обратиться к значению в ТЗТОВАРЫ 17 элемент "ШК"
     Если ЗагружаемаяНоменклатура.Пустая()= Истина Тогда
        
               НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();    //если нет такого тогда создать номенклатуру а данные для создания загрузки брать из ТЗТОВАРЫ
              НоваяНоменклатура.Наименование =
              НоваяНоменклатура.код1 =
              НоваяНоменклатура.Артикул =
              НоваяНоменклатура.Размер =      //как это написать обратиться в тзТовары..5колонка "Размер"
              НоваяНоменклатура.Коллекция =
              НоваяНоменклатура.вес =
              НоваяНоменклатура.ГородСтрана =
              НоваяНоменклатура.ДлиныйНомер =
              НоваяНоменклатура.код2 =
              НоваяНоменклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар;
              НоваяНоменклатура.БазоваяЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
              НоваяНоменклатура.Комментарий = "Загруженая";
              НоваяНоменклатура.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоКоду("50");
              НоваяНоменклатура.ОсновнойШтрихКод =  Строка(Массив[17]);
              НоваяНоменклатура.Записать();


                          
               НовыйШитрихКод = Справочники.ШтрихКоды.СоздатьЭлемент();  //и элемент штрих кода создаю из "ШК"
                     
               НовыйШитрихКод.Владелец=НоваяНоменклатура.Ссылка;
               Сообщить(НовыйШитрихКод.Владелец);
               НовыйШитрихКод.Наименование =                Сообщить(НовыйШитрихКод.Наименование);          
              
               НовыйШитрихКод.Единица=НоваяНоменклатура.БазоваяЕдиница;
                   
                
              
                 Сообщить (НовыйШитрихКод.Единица);
               НовыйШитрихКод.Записать();
              
               НоваяНоменклатура.ОсновнойШтрихКод=НовыйШитрихКод;
              
               //КоманднаяПанельШтрихКодовСделатьОсновным();
                НоваяНоменклатура.Записать();        
              
               НоваяНоменклатура.ОсновнойШтрихКод = НовыйШитрихКод.Ссылка;
              //
              НоваяНоменклатура.Записать();
               //ВвестиНовуюХарактеристику();

//Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("ОсновнойШтрихКод",СтрЗаменить(Массив[5],Символ(17),""));        
    Товары.Номенклатура=НоваяНоменклатура.Ссылка;
    Товары.ПриходнаяЦена=
    Товары.Количество=      //сюда тоже из тзтовары
    Товары.ПриходнаяСумма =
    Товары.Всего=Товары.ПриходнаяСумма;
    Товары.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
    Товары.Единица = НоваяНоменклатура.БазоваяЕдиница;

    
    //Товары.Единица = Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("Владелец",НоваяНоменклатура.Ссылка);

    НовыйДокумент.Записать();
Иначеесли ЗагружаемаяНоменклатура.Пустая()= ложь Тогда
     Номенклатура = ЗагружаемаяНоменклатура.Владелец;
              
        
    Товары.Номенклатура=Номенклатура.Ссылка;
    //Товары.
    Товары.ПриходнаяЦена=
    Товары.Количество=
    Товары.ПриходнаяСумма =
    Товары.Всего =
    Товары.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
    Товары.Единица = Номенклатура.БазоваяЕдиница;
    НовыйДокумент.Записать();
КонецЕсли;     
счСтроки = счСтроки + 1;
    
КонецЦикла;

//////////закрываем документ
Док.Application.Quit();
    
КонецПроцедуры
1 ProProg
 
11.12.13
09:35
8000 рублей
2 Любопытная
 
11.12.13
09:35
Штрихкоды в справочнике? Оригинально...
Во-первых, обходить тзТовары в цикле. Во-вторых, посмотреть в СП про работу с ТаблицаЗначений. В-третьих, может подумать про запрос?
3 anisa8310
 
11.12.13
09:39
(2) не запрос не хочу..
4 Любопытная
 
11.12.13
09:40
(3) ну и зря. сложила бы все в тз и тз загрузила уже в тч. Быстрее бы получилось, пожалуй
5 anisa8310
 
11.12.13
09:40
(1) спасибо! я штатный айтишник-мне задачу поставили (писать мало приходится  да так мелочи вот отсюда и вопросы)
6 anisa8310
 
11.12.13
09:41
(4) у меня нет времени совсем...
7 anisa8310
 
11.12.13
09:42
(4) как к ним обращаться комментарии указала-где не знаю как писать
8 anisa8310
 
11.12.13
09:44
ой  ЗагружаемаяНоменклатура=Справочники.ШтрихКоды.НайтиПоНаименованию(тзСотрудники])ТЗТОВАРЫ конечно же
9 Любопытная
 
11.12.13
09:49
(8) ну почитай СП уже про таблицу значений. Методы посмотри. Все быстрее будет, чем тут ждать, когда помогут :)
Обходи ТЗ циклом и пиши строки в таб часть
10 anisa8310
 
11.12.13
09:51
(9) ага читаю судорожно)) не могу понять как обратить к значению которое вТЗТовары загрузила
НоваяНоменклатура.Размер =      //как это написать обратиться в тзТовары..5колонка "Размер"
11 Пенза58
 
11.12.13
09:52
Что то типа:

Только надо учитывать, что к штрихкоду может быть характеристика привязана.

Процедура ЗаполнитьНоменклатураШтрихКоды() Экспорт
    ЗапросНоменклатураШтрих = Новый Запрос;
    ЗапросНоменклатураШтрих.Текст = "ВЫБРАТЬ
                                  |    Штрихкоды.ТипШтрихкода,
                                  |    Штрихкоды.Штрихкод КАК Штрихкод0,
                                  |    Штрихкоды.Владелец,
                                  |    Штрихкоды.ЕдиницаИзмерения
                                  |ИЗ
                                  |    РегистрСведений.Штрихкоды КАК Штрихкоды
                                  |ГДЕ
                                  |    Штрихкоды.ТипШтрихкода = &ЕАН13";
                                  
    ЗапросНоменклатураШтрих.УстановитьПараметр("ЕАН13",ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
                                  
    ТЗНоменклатураШтрих = ЗапросНоменклатураШтрих.Выполнить().Выгрузить();
    
    ТЗНоменклатураШтрих.Колонки.Добавить("Штрихкод");
    Для каждого СтрТЗ из ТЗНоменклатураШтрих Цикл
        СтрТЗ.Штрихкод=СокрЛп(СтрТЗ.Штрихкод0);
    КонецЦикла;
КонецПроцедуры    



Функция ПолучитьНоменклатуруПоШтрихКодуЭДИ(ШтрихКод) Экспорт
    
    Номенклатура=Справочники.Номенклатура.ПустаяСсылка();
    ЕдИз=Справочники.ЕдиницыИзмерения.ПустаяСсылка();
    
    Отбор = Новый Структура();
    Отбор.Вставить("Штрихкод",ШтрихКод);
    Строки = ТЗНоменклатураШтрих.НайтиСтроки(Отбор);
    Если Строки.Количество() = 1 Тогда
        Номенклатура=Строки[0].Владелец.Ссылка;
        ЕдИз=Строки[0].ЕдиницаИзмерения;
    ИначеЕсли Строки.Количество() > 1 Тогда
        //Сообщить("У контрагента:"+Номенклатура+" для единицы измерения: "+ЕдИзШтрихКода+" - несколько штрихкодов.");
    Иначе
        //Сообщить("У контрагента:"+Номенклатура+" для единицы измерения: "+ЕдИзШтрихКода+" - отсутсвует штрихкод.");    
    КонецЕсли;
    
    спНомен=Новый списокЗначений;
    спНомен.Добавить(Номенклатура);
    спНомен.Добавить(ЕдИз);
    
    Возврат спНомен;
КонецФункции
12 anisa8310
 
11.12.13
09:54
(11) так уже проясненияе пошло как к ним обращаться элементам ТЗ
13 Пенза58
 
11.12.13
09:54
+                        Если ЗначениеЗаполнено(СтрокаТоваров.ШтрихКод) Тогда
                            спШтрихНоменклатура=ПолучитьНоменклатуруПоШтрихКодуЭДИ(СтрокаТоваров.ШтрихКод);
                            СтрокаТоваров.элНоменклатура=спШтрихНоменклатура[0].Значение;
                            СтрокаТоваров.элЕдИз=спШтрихНоменклатура[1].Значение;
14 anisa8310
 
11.12.13
09:54
нет я ранее писала такую с массивом правда-все отлично работало...сейчас необходимо с ТЗ формат поменялся у поставщика...массив никак не прокатывает
15 Любопытная
 
11.12.13
09:55
(10) про обход в цикле прочитай.
Для каждого ТекСтрока из тзТовары Цикл
...
КонецЦикла
16 Любопытная
 
11.12.13
09:56
Уже 10 раз можно было написать и отладить.
17 anisa8310
 
11.12.13
09:57
(16) да вставила цикл
18 anisa8310
 
11.12.13
09:59
Для каждого СтрТЗ из тзТовары Цикл
      
    
    
    /////////Создаем строку табличной части услуги
    Товары = НовыйДокумент.Товары.Добавить();        
     ///////////////Выбираем/Создаем номенклатуру
    
    
     ЗагружаемаяНоменклатура=Справочники.ШтрихКоды.НайтиПоНаименованию(тзТовары.]); // Здесь надо как то поискать есть ли такая номенклатру по штрих коду!!! незнаю как обратиться к значению в ТЗТОВАРЫ 17 элемент "ШК"
     Если ЗагружаемаяНоменклатура.Пустая()= Истина Тогда
19 Любопытная
 
11.12.13
10:00
(18) ну и? в цикле обращаешься не к тзТовары, а к СтрТЗ. И по имени колонки так же как к реквизитам таб части. Что непонятно?
20 anisa8310
 
11.12.13
10:03
а тогда понятно...спасибо-я сейчас допишу и о результате сообщу..просто первый раз с ТЗ ..очень стыдно за тупость
21 anisa8310
 
11.12.13
10:05
тзТовары.ЗагрузитьКолонку(Данные[16],"ШК");
    тзТовары.ЗагрузитьКолонку(Данные[17],"код2");

    Для каждого СтрТЗ из тзТовары Цикл
      
    
    
    /////////Создаем строку табличной части услуги
    Товары = НовыйДокумент.Товары.Добавить();        
     ///////////////Выбираем/Создаем номенклатуру
    
    
     ЗагружаемаяНоменклатура=Справочники.ШтрихКоды.НайтиПоНаименованию(СтрТЗ.шк);
22 anisa8310
 
11.12.13
10:05
разве так можно? НайтиПоНаименованию(СтрТЗ.шк)
23 Любопытная
 
11.12.13
10:54
(22)Находит?
24 anisa8310
 
11.12.13
10:57
нет возможности проверить..сейчас.
25 anisa8310
 
11.12.13
10:58
так в слепую пишу без конфигурации. посто есть старая загрузка аналог пишу только с ТЗ. поверить не могу пока. ключ недоспуен-не хватает их на всех...
26 anisa8310
 
11.12.13
10:59
на другой конфигурации в конфигураторе пишу(интерграция учебная-ну так для среды развернула)))
27 anisa8310
 
11.12.13
11:00
поэтому и пытаюсь выяснить как к нему обращатьк ся к ТЗ ЭЛЕМЕНТУ
28 Любопытная
 
11.12.13
11:02
(25) короче, так можно. Ты же позволяешь себе Товары.Номенклатура=НоваяНоменклатура.Ссылка.
29 Любопытная
 
11.12.13
11:02
(27) Ты со строкой табличной части документа работала когда-нибудь?
30 anisa8310
 
11.12.13
11:11
(29) да работала вот с массивом например-очень много загружала-красиво было все:
фрагментик с моей работающей загрузки с массивом:
Иначеесли ЗагружаемаяНоменклатура.Пустая()= ложь Тогда
     Номенклатура = ЗагружаемаяНоменклатура.Владелец;
              
    //Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("ОсновнойШтрихКод",Массив[17]);        
    Товары.Номенклатура=Номенклатура.Ссылка;
    //Товары.
    Товары.ПриходнаяЦена= Массив[14]/Массив[9];
    Товары.Количество= Массив[9];
    Товары.ПриходнаяСумма = Массив[14];
    Товары.Всего = Массив[14];
    Товары.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
    Товары.Единица = Номенклатура.БазоваяЕдиница;
    НовыйДокумент.Записать();
КонецЕсли;     
счСтроки = счСтроки + 1;
    
КонецЦикла;
31 anisa8310
 
11.12.13
11:11
к массиву обращалась и как к ТЗТОВАРЫ моему не пойму что писать и прооверить пока не могу( уже в отчании.. спасибо что помогаете!
32 Любопытная
 
11.12.13
11:16
(31) Да при чем тут массив? У тебя есть таблица значений. У таблицы значений есть колонки, они именованы. Ты обходишь таблицу значений построчно и в строке таблицы значений можешь получить значение в пересечении строка/колонка через точку. Так же как и в строке табличной части.
33 anisa8310
 
11.12.13
11:45
(32) не причем-массив использовала для прошлой своей загрузке которая работала. )
34 anisa8310
 
11.12.13
11:45
получила доступ к программе буду эксперименты ставить
35 anisa8310
 
11.12.13
12:03
{Форма.Форма.Форма(98)}: Ошибка при вызове метода контекста (Получить)
              НоваяНоменклатура.Наименование = СтрТЗ.Получить("Наименование");
по причине:
Несоответствие типов (параметр номер '1')
36 Любопытная
 
11.12.13
12:41
СтрТЗ.Получить("Наименование") Что это?
37 Любопытная
 
11.12.13
12:42
Синтаксис:

Получить(<Индекс>)
Параметры:

<Индекс> (обязательный)

Тип: Число.
Индекс колонки.

Аниса, золотоко, напиши просто СтрТЗ.Наименование. И прекрати тупить
38 anisa8310
 
11.12.13
14:11
(37) хорошо) спасибо