Имя: Пароль:
1C
 
Загрузка дублей номенклатуры
0 falselight
 
21.03.19
13:06
При загрузке номенклатуры, выявил что грузятся дубли.
Каким образом вот этот код может допускать загрузку дублей?
Подскажите пожалуйста.

        //
        // 2. НАИМЕНОВАНИЕ
        Если НомерНаименование <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерНаименование + ":R" + НомерСтроки_Стр + "C" + НомерНаименование;
            Наименование                 = ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст;
        КонецЕсли;
        //
        ИмеющеесяНаименование        = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, 1);
        Если ИмеющеесяНаименование = Справочники.Номенклатура.ПустаяСсылка() Тогда
            СпрНоменклатура                      = Справочники.Номенклатура.СоздатьЭлемент();
            СпрНоменклатура.Наименование         = СокрЛП(Наименование);
            //СпрНоменклатура.НаименованиеПолное = СокрЛП(Наименование);
        Иначе
            Сообщить("Номенклатура с наименованием " + СокрЛП(Наименование) + " уже существует!", СтатусСообщения.Информация);
            Возврат;
        КонецЕсли;
        //
1 falselight
 
21.03.19
13:31
Никто не подскажет?
2 Гипервизор
 
21.03.19
13:34
Отладка точно подскажет.
3 falselight
 
21.03.19
13:36
Загрузка происходит в процедуре

Процедура ДанныеЛистаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
4 kuzyara
 
21.03.19
13:37
СокрЛП перед поиском?
5 falselight
 
21.03.19
13:49
(4) наименования в справочнике стоят одинаковые
6 Гипервизор
 
21.03.19
13:53
(5) А при чем тут справочник, Наименование из ТабДок же. В ТабДоке тоже одинаковые?
7 falselight
 
21.03.19
14:00
Сейчас почему то зависает при открытии файла, и установке курсора на файле, висит и все.
8 falselight
 
21.03.19
14:11
Сделал СокрЛП(), но все равно не находит (

        // 2. НАИМЕНОВАНИЕ
        Если НомерНаименование <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерНаименование + ":R" + НомерСтроки_Стр + "C" + НомерНаименование;
            Наименование                 = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
        КонецЕсли;
        //
        ИмеющеесяНаименование = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, 1);
        Если ИмеющеесяНаименование = Справочники.Номенклатура.ПустаяСсылка() Тогда
9 hhhh
 
21.03.19
14:12
(5) вот тут склеротики какие- то

            Наименование                 = ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст;


а надо

            Наименование                 = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
10 falselight
 
21.03.19
14:14
(9) Я поправил в (8), проверил, дубли грузятся.
Смотрел отладчиком по коду. Не находит элемент (((( А он уже есть!!!
11 falselight
 
21.03.19
14:15
Что то не понятно ((((( Как быть то!?!
12 1Сергей
 
21.03.19
14:15
(10) значит не совпадает Наименование
13 sqr4
 
21.03.19
14:16
и какое наименование пропускает?
14 falselight
 
21.03.19
14:17
(12) Я смотрю в справочнике, они идентичны!!!!!
(13) Сортирую в справочнике по наименованию, дубли идут один за одним.
Номера разные. Например первые, с номером 2 и 38, и так далее.
Они в разноброс грузятся. Но если отсортировать по наименованию видно.
15 falselight
 
21.03.19
14:18
(13) Их много задваивается.
16 sqr4
 
21.03.19
14:18
(14) Наименование какое бл*ть пример дай сложно чтоли
17 Гипервизор
 
21.03.19
14:19
В чем проблема посмотреть отладчиком пошагово процесс дублирования конкретного наименования, которое дублироваться не должно?
18 falselight
 
21.03.19
14:21
Положил наименования в разные файлы. Сравнил файлы, пишет файлы идентичны.

(17) Первое наименование проходит. Создается элемент справочника.
Потом смотрю по артикулу, доходил до второго. Так вот эта строка не находит его, и дубль создается (((

ИмеющеесяНаименование = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, 1);
        Если ИмеющеесяНаименование = Справочники.Номенклатура.ПустаяСсылка() Тогда


Может запросом выбирать а не функцией?
19 frost_x
 
21.03.19
14:24
Возвращаемое значение:
Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Ссылка на найденный элемент справочника.
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
Если для справочника наименование не задано (длина = 0) и поиск выполняется по полному соответствию, то будет возвращено Неопределено.

Т.е. вашем случае указано Точное соответствие и проверка должна быть не "Если ИмеющеесяНаименование = Справочники.Номенклатура.ПустаяСсылка() Тогда"
а "Если ИмеющеесяНаименование = Неопределено Тогда"
20 sqr4
 
21.03.19
14:28
(19) отладчик пустую ссылку возвращает
21 falselight
 
21.03.19
14:29
(19) Возвращается пустая ссылка!!!
22 sqr4
 
21.03.19
14:31
(19) Если бы было неопределено дублей бы не блыо
23 Гипервизор
 
21.03.19
14:36
(18) Так артикул или наименование? Сравнить Наименование в первой строке и во второй. Внимательно. Или даже программно.
24 1Сергей
 
21.03.19
14:37
НомерНаименование чему равно?
25 falselight
 
21.03.19
14:43
(24) Столбец 4, там наименование номенклатуры
26 1Сергей
 
21.03.19
14:43
Выполняется ли условие?

Если НомерНаименование <> 0 Тогда
27 falselight
 
21.03.19
14:44
(23) Там артикул отдельно и он же есть в наименовании
Сравнил же говорю в разные файлы поместил и сравнил, пишет файлы идентичны.
28 falselight
 
21.03.19
14:44
(26) Да, дам 4 в НомерНоменклатуры, 4-й столбец
29 falselight
 
21.03.19
14:48
(22) Оно не будет равно неопределено
30 skafandr
 
21.03.19
14:54
(29) а не лениво столько писать здесь чем один раз написать как люди советуют и тупо проверить?
31 skafandr
 
21.03.19
14:57
или напиши
  Если ИмеющеесяНаименование.Пустая() Тогда
32 falselight
 
21.03.19
15:06
(31) Видимо какие то заморочки что загрузка происходит вот в этой функции
ДанныеЛистаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

возможно. Я тестирую. Ищу причину.
33 skafandr
 
21.03.19
15:07
(32)какая разница из какой функции ищет ... справочник один на всех
34 falselight
 
21.03.19
15:30
всего строк нужно обработать 43, но почему то после 30, ДанныеСтроки.НомерСтроки становится снова 4
То есть та строка с которой началось считывание! Это пока не понятно!
35 Злопчинский
 
21.03.19
15:57
(34) да хрен тебя знает почему. ты же секретный физик. код с циклом привести страшно, посадят...
36 falselight
 
21.03.19
16:13
(35)

Процедура ДанныеЛистаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    //
    Если ФлагЗагрузки = Ложь Тогда
        Возврат;
    КонецЕсли;
    //
    Если ОбрЗавершена = 1 Тогда
        Возврат;
    КонецЕсли;
    //
    Если НомерПервойСтроки > ДанныеСтроки.НомерСтроки Тогда
        Возврат;
    КонецЕсли;
    //
    // - Загружаемые данные -
    // 1.  Артикул
    // 2.  Наименование
    // 3.  Цена
    // 4.  Картинка
    // 5.  Проба
    // 6.  Ед. Изм.
    // 7.  Группа номенклатуры
    // 8.  Ставка НДС
    // 9.  Тип изделия
    // 10. ПолноеНаименование
    // 11. Размер
    //
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ЭтотОбъект.ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);    
    Если ЭлементыФормы.ДанныеЛиста.Значение.Количество() > КолВоСтрокТЗ Тогда
        //
        // 2. НАИМЕНОВАНИЕ
        Если НомерНаименование <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерНаименование + ":R" + НомерСтроки_Стр + "C" + НомерНаименование;
            Наименование                 = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
        КонецЕсли;
        //
        ИмеющеесяНаименование = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, 1);
        ИмеющеесяНаименование2 = НайтиНоменклатуру(Наименование);        
        Если ИмеющеесяНаименование = Справочники.Номенклатура.ПустаяСсылка() Тогда
            СпрНоменклатура                      = Справочники.Номенклатура.СоздатьЭлемент();
            СпрНоменклатура.Наименование         = СокрЛП(Наименование);
            //СпрНоменклатура.НаименованиеПолное = СокрЛП(Наименование);
        Иначе
            Сообщить("Номенклатура с наименованием " + СокрЛП(Наименование) + " уже существует!", СтатусСообщения.Информация);
            Возврат;
        КонецЕсли;
        //
        // 1. АРТИКУЛ
        Если НомерАртикул <> 0 Тогда
            НомерСтроки_Стр         = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиАртикула    = "R" + НомерСтроки_Стр + "C" + НомерАртикул + ":R" + НомерСтроки_Стр + "C" + НомерАртикул;
            Артикул                 = ТабДок.ПолучитьОбласть(АдресОбластиАртикула).ТекущаяОбласть.Текст;
            СпрНоменклатура.Артикул = СокрЛП(Артикул);
        КонецЕсли;
        //
        // 3. ЦЕНА
        Если НомерЦены <> 0 Тогда
            НомерСтроки_Стр  = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиЦены = "R" + НомерСтроки_Стр + "C" + НомерЦены + ":R" + НомерСтроки_Стр + "C" + НомерЦены;
            Цена             = ТабДок.ПолучитьОбласть(АдресОбластиЦены).ТекущаяОбласть.Текст;
        КонецЕсли;
        //
        // 4. КАРТИНКА
        Если НомерКартинка <> 0 Тогда
            НужныеДанныеКартинки = "<Pic>";
            НомерСтроки_Стр      = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиРисунка  = "R" + НомерСтроки_Стр + "C" + НомерКартинка + ":R" + НомерСтроки_Стр + "C" + НомерКартинка;
            Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
                НужныеДанныеКартинки                          = РисунокТД.Картинка;
                //
                ДанныеЛиста[ДанныеСтроки.НомерСтроки-1][3]    = НужныеДанныеКартинки;
                //
                ОформлениеСтроки.Ячейки.К3.Картинка           = НужныеДанныеКартинки;
                // ----
                //ХранилищеДополнительнойИнформацииСервер.ПолучитьСетевойКаталог(СетевойКаталог);
                //ВыбранноеИзображение    = Новый Картинка(НужныеДанныеКартинки, Ложь);
                //
                НовыйОбъект              = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
                НовыйОбъект.Наименование = Наименование;
                НовыйОбъект.Хранилище    = Новый ХранилищеЗначения(НужныеДанныеКартинки, Новый СжатиеДанных);
                НовыйОбъект.ВидДанных      = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
                НовыйОбъект.Объект          = СпрНоменклатура.Ссылка;
                //НовыйОбъект.ИмяФайла      = ПроцедурыОбменаДанными.ПолучитьИмяФайлаИзПолногоПути(ДиалогОткрытияФайла.ПолноеИмяФайла);
                //Если НЕ ЗначениеЗаполнено(СетевойКаталог) Тогда
                    //НовыйОбъект.Хранилище = Новый ХранилищеЗначения(НужныеДанныеКартинки, Новый СжатиеДанных);
                //КонецЕсли;
                НовыйОбъект.Записать();
                СпрНоменклатура.ОсновноеИзображение           = НовыйОбъект.Ссылка;
                // ----
                ОформлениеСтроки.Ячейки.К3.АвтовысотаЯчейки   = Истина;
                ОформлениеСтроки.Ячейки.К3.ВысотаЯчейки       = 10;
                ОформлениеСтроки.Ячейки.К3.ОтображатьКартинку = Истина;
                //
                Прервать;
            КонецЦикла;
        КонецЕсли;
        //
        // 5. ПРОБА
        Если НомерПробы <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерПробы + ":R" + НомерСтроки_Стр + "C" + НомерПробы;
            Проба                        = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
            НайденнаяПроба               = Справочники.Пробы.НайтиПоНаименованию(Проба, 1);
            Если НайденнаяПроба <> Справочники.Пробы.ПустаяСсылка() Тогда
                СпрНоменклатура.Проба = НайденнаяПроба;
            Иначе
                Сообщить("Проба " + Проба + " не найдена в справочнике пробы!", СтатусСообщения.Важное);
            КонецЕсли;
        КонецЕсли;
        // 6. ЕД. ИЗМ.
        //НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
        //АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C4:R" + НомерСтроки_Стр + "C" + 4;
        //Наименование                 = ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст;
        //СпрНоменклатура.Наименование = Наименование;
        // БАЗОВАЯ ЕДИНИЦА ИЗМЕРЕНИЯ ПО УМОЛЧАНИЮ
        Если НомерЕдИзм <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерЕдИзм + ":R" + НомерСтроки_Стр + "C" + НомерЕдИзм;
            ЕдИзм                        = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
            НайденнаяЕдИзм               = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдИзм, 1);
            Если НайденнаяЕдИзм <> Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка() Тогда
                СпрНоменклатура.БазоваяЕдиницаИзмерения = НайденнаяЕдИзм;
            Иначе
                Сообщить("Единица измерения " + ЕдИзм + " не найдена в справочнике классификатор единиц измерения!", СтатусСообщения.Важное);
                СпрНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
                Сообщить("Установлена единица измерения по умолчанию " + ЕдИзм + " шт!", СтатусСообщения.Информация);
            КонецЕсли;
        Иначе
            СпрНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
            Сообщить("Установлена единица измерения по умолчанию " + ЕдИзм + " шт", СтатусСообщения.Информация);
        КонецЕсли;
        //
        // 7. ГРУППА НОМЕНКЛАТУРЫ
        Если НомерГруппыНоменклатуры <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерГруппыНоменклатуры + ":R" + НомерСтроки_Стр + "C" + НомерГруппыНоменклатуры;
            ГруппаНоменклатуры             = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
            НайденнаяГруппаНоменклатуры  = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию(ГруппаНоменклатуры, 1);
            Если НайденнаяГруппаНоменклатуры <> Справочники.НоменклатурныеГруппы.ПустаяСсылка() Тогда
                СпрНоменклатура.НоменклатурнаяГруппа = НайденнаяГруппаНоменклатуры;
            Иначе
                Сообщить("Группа номенклатуры " + ГруппаНоменклатуры + " не найдена в справочнике номенклатурные группы!", СтатусСообщения.Важное);
            КонецЕсли;
        КонецЕсли;
        // 8. СТАВКА НДС
        Если НомерСтавкиНДС <> 0 Тогда
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерСтавкиНДС + ":R" + НомерСтроки_Стр + "C" + НомерСтавкиНДС;
            СтавкаНДС                    = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
            Если СтавкаНДС = "Без НДС" Тогда
                СпрНоменклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;                
            ИначеЕсли СтавкаНДС = "НДС 18" Тогда
                СпрНоменклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;    
            ИначеЕсли СтавкаНДС = "НДС 10" Тогда
                СпрНоменклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС10;
            КонецЕсли;
        КонецЕсли;
        // 9. ТИП ИЗДЕЛИЯ
        Если НомерТипаИзделия <> 0 Тогда  
            НомерСтроки_Стр              = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования     = "R" + НомерСтроки_Стр + "C" + НомерТипаИзделия + ":R" + НомерСтроки_Стр + "C" + НомерТипаИзделия;
            ТипИзделия                   = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
            НайденныйТипИзделия          = Справочники.ТипыИзделий.НайтиПоНаименованию(ТипИзделия, 1);
            Если НайденныйТипИзделия <> Справочники.ТипыИзделий.ПустаяСсылка() Тогда
                СпрНоменклатура.ТипИзделия = НайденныйТипИзделия;
            Иначе
                Сообщить("Тип изделия " + ТипИзделия + " не найден в справочнике типы изделий!", СтатусСообщения.Важное);
            КонецЕсли;
        КонецЕсли;
        //
        // 10. ПОЛНОЕ НАИМЕНОВАНИЕ
        Если НомерПолноеНаименование <> 0 Тогда  
            НомерСтроки_Стр                    = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования           = "R" + НомерСтроки_Стр + "C" + НомерПолноеНаименование + ":R" + НомерСтроки_Стр + "C" + НомерПолноеНаименование;
            ПолноеНаименование                 = СокрЛП(ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст);
            СпрНоменклатура.НаименованиеПолное = СокрЛП(ПолноеНаименование);
        КонецЕсли;
        //
        // 11. РАЗМЕР
        Если НомерРазмер <> 0 Тогда  
            НомерСтроки_Стр          = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиНаименования = "R" + НомерСтроки_Стр + "C" + НомерРазмер + ":R" + НомерСтроки_Стр + "C" + НомерРазмер;
            Размер                   = ТабДок.ПолучитьОбласть(АдресОбластиНаименования).ТекущаяОбласть.Текст;
            СпрНоменклатура.Размер1  = ЧИСЛО(СокрЛП(Размер));
        КонецЕсли;
        //
        ГруппаЭксель = Справочники.Номенклатура.НайтиПоНаименованию("EXCEL2", 1);
        Если ГруппаЭксель <> Справочники.Номенклатура.ПустаяСсылка() Тогда
            СпрНоменклатура.Родитель = ГруппаЭксель;
        Иначе
            ГруппаЭксель = Справочники.Номенклатура.СоздатьГруппу();
            ГруппаЭксель.Наименование = "EXCEL2";
            ГруппаЭксель.Записать();
            СпрНоменклатура.Родитель = ГруппаЭксель.Ссылка;
            Сообщить("Созданна группа " + "EXCEL2", СтатусСообщения.Информация);
        КонецЕсли;
        СпрНоменклатура.Записать();        
        Сообщить(СТРОКА(ДобавленнаяСтрока) + ". Загружен элемент номенклатуры " + СпрНоменклатура.Код + ", "+ СпрНоменклатура.Наименование);
        КолВоСтрокТз      = КолВоСтрокТЗ + 1;
        ДобавленнаяСтрока = ДобавленнаяСтрока + 1;
    Иначе
        Сообщить("Загрузка позиций номенклатуры с выбранного листа excel произведена в каталог <<EXCEL2>>", СтатусСообщения.Информация);
        ОбрЗавершена = 1;
    КонецЕсли;
    //
    ТабДок = "";
КонецПроцедуры
//
37 sqr4
 
21.03.19
16:17
ДанныеЛистаПриВыводеСтроки а сколько строк в данныеЛИста?
38 Гипервизор
 
21.03.19
16:19
(36) Это к делу не относится, конечно, но забыли ставку НДС 20%.
39 sqr4
 
21.03.19
16:19
ХОтя по сути как это влияет.
40 СтарПом
 
21.03.19
16:24
НайтиПоНаименованию(Наименование, 1)?
не НайтиПоНаименованию(Наименование, Истина)?
41 skafandr
 
21.03.19
16:24
(36)Вы вообще читаете что Вам пишут?

Если в (0) написано про дубли в справочнике Номенклатуры, то они могут возникать ровно в одном месте где создается элемент

напишите вместо

        Если ИмеющеесяНаименование = Справочники.Номенклатура.ПустаяСсылка() Тогда

строчку
      
       Если ИмеющеесяНаименование.Пустая() Тогда


и результат сообщи
42 falselight
 
21.03.19
16:26
(40) (41) Ок, сейчас попробую.
Пока вижу такую коллизию. Загрузить нужно 43 строки.
Но после загруженной 28 строки, данные строки становятся снова 4.
Это от куда начинается загрузка. Это как понять?
43 sqr4
 
21.03.19
16:27
(40) я пробовал одинаково у меня (41) и тут тоже одинаково, но ТС проверь
44 falselight
 
21.03.19
16:28
(42+) То есть проблема такая. В тз для загрузке куда прочитаны данные дублей нет.
Но после 28 строки, начинается снова читать данные с 4-й строки, от куда пошла загрузка. И они двоятся, хотя уже загружены (((((
Почему так отрабатывает процедура не понятно!
45 falselight
 
21.03.19
16:37
Проблема в том что почему то в процедуре ДанныеЛистаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

ДанныеСтроки.НомерСтроки, прыгает хаотично, и сваливается на начало в процессе, и то что читается снова идет дублями это не понятно совсем (
46 sqr4
 
21.03.19
16:38
(45) я всегда думал что номенклатура создается по кнопке, а не при выводе строки)
47 falselight
 
21.03.19
16:39
Что получается в список заносить обработанные строки?
И в нем искать, если уже были пропускать.
Но почему так прыгает ДанныеСтроки.НомерСтроки?
48 falselight
 
21.03.19
16:39
(46) Там нужно грузить картинки с листа, по этому сделано при выводе строки.
Так как такой метод.
49 falselight
 
21.03.19
16:40
(40) 1 это же и есть Истина
50 falselight
 
21.03.19
16:41
Может нужно как то свойства табличного поля поправить?
Из за этого прыгают может данные строки?????
51 sqr4
 
21.03.19
16:49
ДанныеЛиста - это что?
52 sqr4
 
21.03.19
16:50
(48) с какого листа?
53 falselight
 
21.03.19
16:53
54 falselight
 
21.03.19
16:54
(52) Загрузка идет с листов эксель файла.
Там есть картинки, я делал их загрузку в номенклатуру.
55 sqr4
 
21.03.19
16:55
а почему циклом не перебрать значения ТЧ?
56 falselight
 
21.03.19
16:58
(55) Наверное из за картинки, -

        // 4. КАРТИНКА
        Если НомерКартинка <> 0 Тогда
            НужныеДанныеКартинки = "<Pic>";
            НомерСтроки_Стр      = Формат(ДанныеСтроки.НомерСтроки, "ЧН=0; ЧГ=0");
            АдресОбластиРисунка  = "R" + НомерСтроки_Стр + "C" + НомерКартинка + ":R" + НомерСтроки_Стр + "C" + НомерКартинка;
            Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
                НужныеДанныеКартинки                          = РисунокТД.Картинка;
                //
                ДанныеЛиста[ДанныеСтроки.НомерСтроки-1][3]    = НужныеДанныеКартинки;
                //
                ОформлениеСтроки.Ячейки.К3.Картинка           = НужныеДанныеКартинки;
                // ----
                //ХранилищеДополнительнойИнформацииСервер.ПолучитьСетевойКаталог(СетевойКаталог);
                //ВыбранноеИзображение    = Новый Картинка(НужныеДанныеКартинки, Ложь);
                //
                НовыйОбъект              = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
                НовыйОбъект.Наименование = Наименование;
                НовыйОбъект.Хранилище    = Новый ХранилищеЗначения(НужныеДанныеКартинки, Новый СжатиеДанных);
                НовыйОбъект.ВидДанных      = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
                НовыйОбъект.Объект          = СпрНоменклатура.Ссылка;
                //НовыйОбъект.ИмяФайла      = ПроцедурыОбменаДанными.ПолучитьИмяФайлаИзПолногоПути(ДиалогОткрытияФайла.ПолноеИмяФайла);
                //Если НЕ ЗначениеЗаполнено(СетевойКаталог) Тогда
                    //НовыйОбъект.Хранилище = Новый ХранилищеЗначения(НужныеДанныеКартинки, Новый СжатиеДанных);
                //КонецЕсли;
                НовыйОбъект.Записать();
                СпрНоменклатура.ОсновноеИзображение           = НовыйОбъект.Ссылка;
                // ----
                ОформлениеСтроки.Ячейки.К3.АвтовысотаЯчейки   = Истина;
                ОформлениеСтроки.Ячейки.К3.ВысотаЯчейки       = 10;
                ОформлениеСтроки.Ячейки.К3.ОтображатьКартинку = Истина;
                //
                Прервать;
            КонецЦикла;
        КонецЕсли;
        //
57 falselight
 
21.03.19
17:00
Свойства табличного поля нужно править что бы не скакало????
ДанныеСтроки?
58 falselight
 
21.03.19
17:12
Проблема следующая, данные строки при обработке, дойди до номера 40 ДанныеСтроки.НомерСтроки = 40
становятся ДанныеСтроки.Номер = 1 ПОЧЕМУ? Они должны идти до 46
59 hhhh
 
21.03.19
17:13
(57) ПриВыводеСтроки нельзя делать, потому что она запускается при каждом перечитывании строки. То есть строка 4 может у вас 500 раз выводиться. А может и 600 раз. Ну или 700. Строка 5 тоже 600 раз.
60 falselight
 
21.03.19
17:19
(59) Нужно было считать картинку!!!!!

Я это обрабатываю!!!!!

    Если ОбрЗавершена = 1 Тогда
        Возврат;
    КонецЕсли;
    //

Я хотел обработать это табличное поле. И поставить флаг ОбрЗавершена = 1. Что бы более не выполнялся код.
Так же можно?
Почему ПриВыводеСтроки ДанныеСтроки.НомерСтроки, после 40 перелетают на 4, а не на 41?
61 falselight
 
21.03.19
17:19
И почему не находятся уже созданные элементы справочника номенклатура, тоже не понятно!!!!!
62 falselight
 
21.03.19
17:28
Вот что я засек!!!!!
После 40 строки, отрабатывает вот эта процедура. Обновляя список.
И строка снова переносится в начало. Но почему она отрабатывает?

//
Процедура ЗагрузитьВ1С(Элемент)
    ФлагЗагрузки = Истина;
    //
    ЭлементыФормы.ДанныеЛиста.ОбновитьСтроки();
    //
КонецПроцедуры
//
63 falselight
 
21.03.19
17:29
(62+)  Это же процедура нажатия на кнопку и загрузки табличного документа.
Почему она запустилась второй раз? Она же запускается при нажатии на кнопку??!!!!!
64 sqr4
 
21.03.19
17:31
(62) это ты в оформление строк сохраняешь картинку, а потом грузишь в номенклатуру?
65 falselight
 
21.03.19
18:01
(64) видимо.
66 falselight
 
21.03.19
18:15
Почему после 40 строки вылетает в (62) Где это задано?
67 falselight
 
21.03.19
18:19
После 40-й строки, через точку останова установленной в этой процедуре (62)
вылетает сразу на строку

  ЭлементыФормы.ДанныеЛиста.ОбновитьСтроки();

Как это происходит?
68 hhhh
 
21.03.19
19:12
(67) наверно на экране 40 строк помещаются. Перечитывает экран. Попробуй изменить разрешение экрана.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший