Вход | Регистрация

1С:Предприятие ::

Метки:

1C " Торговля и склад" 7.7 Импорт и експорт DBF

Я
   dimaskytu
 
23.02.04 - 17:11
Добрый день!

Помогите создать обработку для импорта и експорта DBF в 1С "Торговля и склад" 7.7.
Импорт и експорт нужно осуществлять с БД касового сервера CashDrive (www.txo.com.ua).
Разработчик дал мне свою обработку, но сам я несмог разобраться :-(
 
  Перем КартАртикул, ИмяИндекса, Карточка, Ит,ПППодр;
Перем Фирма;

// ===============================



Функция РознЦена(спрЦен,СклРоз,Товар,ПарЦен,Дат)
   
    ЦенаРозн = 0;
    спрЦен.ИспользоватьВладельца(Товар);
    спрЦен.НайтиПоРеквизиту("Склад",СклРоз,0); 
    Если ПарЦен=1 Тогда
         ЦенаРозн = спрЦен.ЦенаРозн.Получить(Дат);
         спрЦен.ЦенаАрт1= ЦенаРозн;
    КонецЕсли;    
   //ЦенаРозн = спрЦен.ЦенаРозн.Получить(Дат);

    Если ПарЦен=2 Тогда
         ЦенаРозн = спрЦен.ЦенаАрт2;
    КонецЕсли;    
    Если ПарЦен=3 Тогда
         ЦенаРозн = спрЦен.ЦенаАрт3;
    КонецЕсли;    

    
Возврат ЦенаРозн;
КонецФункции

Функция ДобСимв(ИсхСтр,ДобСимв,ДлСтр,СторД)
    ЛенИсх=СтрДлина(СокрЛП(ИсхСтр));
    ДобЛен=ДлСтр-ЛенИсх;
    Если ДобЛен<=0 Тогда
        Возврат ИсхСтр;
    КонецЕсли;
    РезСтр="";
    СчетЦ=1;  
    ИсхСтр=СокрЛП(ИсхСтр);
    Пока  СчетЦ<=ДобЛен Цикл
        РезСтр=РезСтр+ДобСимв;
        СчетЦ=СчетЦ+1;
    КонецЦикла;
    Если СторД=0 Тогда
        РезСтр=РезСтр+ИсхСтр;
    Иначе
        РезСтр=ИсхСтр+РезСтр;
    КонецЕсли;
    Возврат   РезСтр;
КонецФункции

Процедура Выполнить()
    Нач=ТекущееВремя(,,);
   //Создание объекта CashDrv

    CashDrv = СоздатьОбъект("OleCd.CashDrive");
    CashDrv.OpenArticles();
    
   //Проверка корректности открытия

    Если CashDrv.ErrorCode <> 0 Тогда
        Предупреждение(CashDrv.ErrorName);
        Возврат;
    КонецЕсли;
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ПериодМ(ТекущаяДата());
    
    
    ОчиститьОкноСообщений();   
    СпПодр = СоздатьОбъект("Справочник.Склады");
    СписПодр = СоздатьОбъект("СписокЗначений");
    СписАрт = СоздатьОбъект("СписокЗначений");
    СписТаб = СоздатьОбъект("ТаблицаЗначений");
    спрЦены=СоздатьОбъект("Справочник.ЦеныРозничные");
    
   // удаление ранее выгруженных артикулов по подразделению 

    СпПодр.ВыбратьЭлементы();
    Пока (СпПодр.ПолучитьЭлемент()=1) Цикл
        Если (СпПодр.ЭтоГруппа()=0) Тогда
            Если СпПодр.КодCashDrive=КодМагП Тогда
                Если (ПустоеЗначение(СпПодр.КодОтдела)=0) Тогда 
                    СклК=СпПодр.КодОтдела;
                    ЕррДел=CashDrv.DelArticles(СклК.Код);
                    Если ЕррДел<>0 Тогда
                        Предупреждение("Ошибка удаления по подразделению")
                    Иначе 
                        СписПодр.ДобавитьЗначение(СпПодр.ТекущийЭлемент());
                    КонецЕсли; 
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если (СписПодр.РазмерСписка()=0) Тогда
        Предупреждение("Нет подразделений для выгрузки!");
        Возврат;
    КонецЕсли;
    СчетТорг=СчетПоКоду("28.2");
    СпрТМЦ=СоздатьОбъект("Справочник.ТМЦ");
    СпрНДС=СоздатьОбъект("Справочник.ВидыНалогов");
   //Переч=СоздатьОбъект("Перечисление.");

    
    СпрТМЦ.ВыбратьЭлементы();
    СчТМЦ=1;
    Пока (СпрТМЦ.ПолучитьЭлемент()=1) Цикл
        Если ((СпрТМЦ.ЭтоГруппа()=0) ) Тогда
            Состояние(Строка(СчТМЦ)+" "+СпрТМЦ.ТекущийЭлемент().Наименование);
            СчТМЦ=СчТМЦ+1;
            СчСпис=1;    
            ПППодр="ППП"; 
            ППодр="№№№";
            РазСпис=СписПодр.РазмерСписка();
            Пока СчСпис<=РазСпис Цикл 
                ПППодр=СписПодр.ПолучитьЗначение(СчСпис,"ППодр");
                СчПолей=1; 
                СчСпис=СчСпис+1;
                СклК=ПППодр.КодОтдела;
                            
                КолВыгр=0;
               // получение кол-ва  

                Если СпрТмц.ЗапрОтр=1  Тогда 
                  КолВыгр=Ит.СКД(СчетТорг,"К",,ПППодр,СпрТмц.ТекущийЭлемент());
                 КонецЕсли;
                // без контроля кол- ва

                 Если (1=1) Тогда // (КолВыгр<>0)

                    Леночка= 0;
                     Пока Леночка< 1 Цикл
                        ПАрт="Артикул"+СокрЛП(Строка(СчПолей));
                        ПЦен="ЦенаАрт"+СокрЛП(Строка(СчПолей));
                        Попытка
                            КАрт=СпрТМЦ.ПолучитьАтрибут(ПАрт);
                            
                            ЦАрт=РознЦена(спрЦены,ПППодр,СпрТмц.ТекущийЭлемент(),СчПолей,ТекущаяДата());
                            СчПолей=СчПолей+1;   
                        Исключение
                            Прервать
                        КонецПопытки;    
                                                                           
                        Если ((СтрДлина(СокрЛП(КАрт))<>0) и (ЦАрт<>0) и (Число(КАрт)<>0) ) Тогда
                            СпрАртикул=ДобСимв(КАрт,"0",6,0);
                            СписАрт.ДобавитьЗначение(ПППодр,"Подр");
                            СписАрт.УдалитьВсе();      
                            СклК=ПППодр.КодОтдела;
                            СписАрт.ДобавитьЗначение(СклК.Код,"Подр");
                            СписАрт.ДобавитьЗначение(СпрАртикул,"Карт");
                            Если  ПустаяСтрока(СпрТМЦ.Наименование)=1 Тогда
                                СписАрт.ДобавитьЗначение(СпрТМЦ.ПолнНаименование,"КрНаим");
                            Иначе   
                                СписАрт.ДобавитьЗначение(СпрТМЦ.Наименование,"КрНаим");
                            КонецЕсли;                   
                            СписАрт.ДобавитьЗначение(ЦАрт,"Цена");    
                            Если   КолВыгр<0 Тогда  
                                КолВыгр=0;
                            КонецЕсли;    
                             СписАрт.ДобавитьЗначение(КолВыгр,"Колво");
                                               
                            Если  СпрТмц.ЗапрПрод=1 Тогда
                                СписАрт.ДобавитьЗначение(0,"РазПрод");
                            Иначе
                                СписАрт.ДобавитьЗначение(1,"РазПрод");
                            КонецЕсли;                   
                            Если  СпрТмц.ЗапрОтр=1 Тогда
                                СписАрт.ДобавитьЗначение(1,"РазОтр");
                            Иначе
                                СписАрт.ДобавитьЗначение(0,"РазОтр");
                            КонецЕсли;                   
                            Если  СпрТмц.ШтучВес=1 Тогда
                                СписАрт.ДобавитьЗначение(0,"РазВес");
                            Иначе
                                СписАрт.ДобавитьЗначение(1,"РазВес");
                            КонецЕсли;                   
                            ПГрп=СпрТмц.КодГрп; 
                            Если ПустаяСтрока(ПГрп.Код)=1 Тогда
                                СписАрт.ДобавитьЗначение("01","КодГрп");;
                            Иначе
                            СписАрт.ДобавитьЗначение(ПГрп.Код,"КодГрп");
                            КонецЕсли;
                            СписАрт.ДобавитьЗначение("1","КодОтд");;
                            СписАрт.ДобавитьЗначение(0,"РазЦен");
                            СпрНДС.НайтиПоКоду(СпрТМЦ.СтавкаНдс);
                            КоефНДС=СпрНДС.Ставка;
                            Если КоефНДС = 0 Тогда
                                СписАрт.ДобавитьЗначение("2","Налог");
                            Иначе
                                СписАрт.ДобавитьЗначение("1","Налог");
                            КонецЕсли;                  
                                    
                           // выгрузка артикула в справочник артикулов CashDrive

                            Доб=CashDrv.AddArticles(СписАрт.Получить("Подр"),
                            СписАрт.Получить("Карт"),
                            "",               
                            Лев(СписАрт.Получить("КрНаим"),14),
                            СписАрт.Получить("Цена"),
                            СписАрт.Получить("Колво"),
                            СписАрт.Получить("КодОтд"), 
                            СписАрт.Получить("КодГрп"),
                            СписАрт.Получить("Налог"),
                            СписАрт.Получить("РазЦен"),
                            СписАрт.Получить("РазОтр"),
                            СписАрт.Получить("РазВес"),
                            СписАрт.Получить("РазПрод"));    
                            
                           // проверка корректности выгрузки

                            Если CashDrv.ErrorCode <> 0 Тогда
                                    Предупреждение(CashDrv.ErrorName);
                                     Форма.Закрыть(0);
                                    Возврат;
                                КонецЕсли;
                        КонецЕсли;
                        Леночка= 1;    
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
            
        КонецЕсли;  
    КонецЦикла;           
    Кон=ТекущееВремя(,,);
    Сообщить(Нач+"  "+Кон);   
    Предупреждение("Выгрузка окончена!");  
   Форма.Закрыть(0);
КонецПроцедуры     

// ===============================
 
 
   Львенок
 
1 - 23.02.04 - 19:16
Експорт, это сила...
___
Искренне Ваш, Львенок.
   WhiteCat
 
2 - 23.02.04 - 20:24
(1) Страшная. Примерно как атомная бомба
___
Держи хвост пистолетом
   kos
 
3 - 23.02.04 - 20:44
душевно
   __345__
4 - 23.02.04 - 20:48
Интересно, а если я запощу сюда обработку тысячи на 2 строк - будет кто либо с ней разбираться ......
   kos
 
5 - 23.02.04 - 21:00
(4) будет, но вот загрузится ли она?...
   Святогор
 
6 - 23.02.04 - 21:01
я б на твоем месте даже не пробовал
хотя такие энтузиасты попадались


Список тем форума
  Рекламное место пустует
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует