Имя: Пароль:
1C
1С v8
Загрузка товаров в документ Инвентаризация
0 lyapkoandy13
 
05.12.15
13:30
Здравствуйте. Стоит конфигурация "УТП для Украины" редакция 1.2
Есть текстовый файл с товарами в формате "Наименование;ШтрихКод;ЧислоТоваров;Код". Нужно сделать обработку по загрузке товаров по Группам в документ ИнвентаризацияТоваровНаСкладе и что бы учетные остатки заполнялись по базе 1С. Вот часть обработки которую я сделал, теперь стал вопрос как заполнить остатки по базе.
Ругания приветствуются :)

В модуле объекта обработки :

// переменная создание документа        
Перем Док Экспорт;
//переменная таблицы товаров в документе
Перем ДокТовары Экспорт;

// создание документа
Док = Документы.ИнвентаризацияТоваровНаСкладе.СоздатьДокумент();
// табличная часть документа
ДокТовары = Док.Товары;    

Кусок кода из формы обработки:

// перебор строк текстового документа
    Для НомерСтроки=1 по Текст.КоличествоСтрок() Цикл
        // получить строку файла с указанным номером
        Стр = Текст.ПолучитьСтроку(НомерСтроки);
        // «распарсивание» строки
        // ищем позицию символа-разделителя
         Позиция = Найти(Стр, ";");
        МассивГрупп = ПолеНоменклатуры.ВыгрузитьЗначения();
        // если нужно выгрузить всю номенклатуру
        Если МассивГрупп.Количество()=1 И МассивГрупп[0]="Вся Номенклатура" Тогда
            Если Не Справочники.Номенклатура.НайтиПоНаименованию(Сред(Стр,1,Позиция-1)).Пустая() Тогда
                 // в таблицу добавляется товар
                НовыйТовар = ДокТовары.Добавить();    
                // записывается подстрока от первого символа до позиции
                // символа-разделителя
                НовыйТовар.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Сред(Стр,1,Позиция-1));  
                // обрезается после первого ;
                Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                // ищется второй ;
                Позиция = Найти(Стр, ";");
                // обрезатся после второй ;
                Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                // третья ;
                Позиция = Найти(Стр, ";");
                НовыйТовар.Количество = Число(Сред(Стр,1,Позиция-1));
            // запись неизвестных товаров в таблицу
            Иначе
                НовыйНеизвестныйТовар = ТабличноеПолеНеизвестныхТоваров.Добавить();
                НовыйНеизвестныйТовар.КолонкаТовар = Сред(Стр,1,Позиция-1);
                Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                // ищется второй ;
                Позиция = Найти(Стр, ";");
                НовыйНеизвестныйТовар.КолонкаШтрихКод = Сред(Стр,1,Позиция-1);
                // обрезатся после второй ;
                Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                // третья ;
                Позиция = Найти(Стр, ";");
                НовыйНеизвестныйТовар.КолонкаКоличество = Сред(Стр,1,Позиция-1);
            КонецЕсли;
        // если выбраны какие то группы номенклатуры
        Иначе
            Если Не Справочники.Номенклатура.НайтиПоНаименованию(Сред(Стр,1,Позиция-1)).Пустая() Тогда
                Для Каждого ЭлементМассива из МассивГрупп Цикл
                    Принадлежит = Справочники.Номенклатура.НайтиПоНаименованию(Сред(Стр,1,Позиция-1)).ПринадлежитЭлементу(ЭлементМассива);    
                    Если Принадлежит Тогда
                        Прервать;
                    КонецЕсли;
                КонецЦикла;
                Если Принадлежит Тогда
                    // в таблицу добавляется товар
                    НовыйТовар = ДокТовары.Добавить();    
                    // записывается подстрока от первого символа до позиции
                    // символа-разделителя
                    НовыйТовар.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Сред(Стр,1,Позиция-1));  
                    // обрезается после первого ;
                    Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                    // ищется второй ;
                    Позиция = Найти(Стр, ";");
                    // обрезатся после второй ;
                    Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                    // третья ;
                    Позиция = Найти(Стр, ";");
                    НовыйТовар.Количество = Число(Сред(Стр,1,Позиция-1));
                КонецЕсли;    
            Иначе
                НовыйНеизвестныйТовар = ТабличноеПолеНеизвестныхТоваров.Добавить();
                НовыйНеизвестныйТовар.КолонкаТовар = Сред(Стр,1,Позиция-1);
                Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                // ищется второй ;
                Позиция = Найти(Стр, ";");
                НовыйНеизвестныйТовар.КолонкаШтрихКод = Сред(Стр,1,Позиция-1);
                // обрезатся после второй ;
                Стр = Сред(Стр,Позиция+1,СтрДлина(Стр));
                // третья ;
                Позиция = Найти(Стр, ";");
                НовыйНеизвестныйТовар.КолонкаКоличество = Сред(Стр,1,Позиция-1);

            КонецЕсли;
        КонецЕсли;
    КонецЦикла;  
    
    // Увеличивается число загрузок
    ЧислоЗагрузок = ЧислоЗагрузок + 1;
1 lyapkoandy13
 
05.12.15
14:06
Можете не смотреть на код и предложить как бы вы это сделали
2 nordbox
 
05.12.15
14:47
А поискать в инете готовую обработку загрузки не судьба? или религия не позволяет?
3 tixis
 
05.12.15
14:53
Сотри как заполняются остатки при типовом заполнении документа
4 lyapkoandy13
 
05.12.15
14:55
(2) Ничего подходящего не нашел
5 hhhh
 
05.12.15
15:18
(4) этот формат он везде. Не может быть, чтобы в УТП его не было. И в интернете.
6 lyapkoandy13
 
05.12.15
15:27
(5) Самому странно, плохой я искатель, наверное
7 kotletka
 
05.12.15
15:29
(6) в доке инвентаризации есть что то типа кнопки заполнить учетные количества и суммы?
8 lyapkoandy13
 
05.12.15
15:42
(7) Есть, я как раз сейчас просматриваю код процедуры ПерезаполнитьУчетныеКоличестваУпр, попробую оттуда взять нужное
9 lyapkoandy13
 
05.12.15
15:45
(7) Может можно как то вызвать ту процедуру прямо в документе?
10 kotletka
 
05.12.15
15:45
(8) а чего ее просматривать, вызови эту процедуру в своей обработке после своего кода
11 tixis
 
05.12.15
16:02
(9) я это и имел ввиду
12 lyapkoandy13
 
05.12.15
16:07
В процедуре как параметр берется ПостроительОтчета, как бы это глупо не звучало, я не знаю откуда берется это значение и вообще что это...

Процедура ПерезаполнитьУчетныеКоличестваУпр(ПостроительОтчета)
...
13 lyapkoandy13
 
05.12.15
16:28
В принципе не важно, эта процедура и так не заполняет остатки, а только суммы, почему то.