Имя: Пароль:
1C
1С v8
Разбираюсь с загрузкой данных из dbf-файла
,
0 ololo9
 
15.08.13
16:31
Есть dbf-файлик след. структуры:
Дата документа
Номер документа
Дебет Счет
Дебет Код подразделения
Дебет Наименование подразделения
Дебет УНП Контрагента
Дебет Наименование Контрагента
Кредит Счет
Кредит Код подразделения
Кредит Наименование подразделения
Кредит УНП Контрагента
Кредит Наименование Контрагента
Сумма
Дата начала периода выгрузки
Дата окончания периода выгрузки
Дебет Код статьи затрат
Кредит Код статьи затрат
Дебет Наименование статьи затрат
Кредит Наименование статьи затрат
Дебет Ставка НДС
Кредит Ставка НДС
Внутренний идентификатор документа
Название типа документа
код типа документа

Необходимо выгрузить его в 1С-ку. Файл открываю, строчки перебираю и в ТЗшку записываю, все хорошо, но дальше какой-то ступор, не знаю как остатки записать в регистр бухгалтерии. Листинг кода:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    ФД = Новый XBase;
    ФД.ОткрытьФайл("D:\Задания\Зегам\ENTRYS.dbf");
    ФД.Кодировка = КодировкаXBase.OEM;
    
    Сообщение = Новый СообщениеПользователю();
    
    Если ФД.Открыта()=0 Тогда
        Сообщить("Не удалось открыть файл!");
    КонецЕсли;
    
    тзПеренос =  Новый ТаблицаЗначений;
    тзПеренос.Колонки.Добавить("ДатаДок", Новый ОписаниеТипов("Строка"),8);
    тзПеренос.Колонки.Добавить("НомерДок", Новый ОписаниеТипов("Строка"),60);
    тзПеренос.Колонки.Добавить("ДебетСчет", Новый ОписаниеТипов("Строка"),30);
    тзПеренос.Колонки.Добавить("ДебетКодПодразделения", Новый ОписаниеТипов ("Строка"),18);
    тзПеренос.Колонки.Добавить("ДебетНаименованиеПодразделения",Новый ОписаниеТипов("СТрока"),80);
    тзПеренос.Колонки.Добавить("ДебетУНПКонтрагента", Новый ОписаниеТипов("Строка"),60);
    тзПеренос.Колонки.Добавить("ДебетНаименованиеКонтрагента", Новый ОписаниеТипов("Строка"),100);
    тзПеренос.Колонки.Добавить("КредитСчет", Новый ОписаниеТипов("Строка"),30);
    тзПеренос.Колонки.Добавить("КредитКодПодразделения", Новый ОписаниеТипов("Строка"),18);
    тзПеренос.Колонки.Добавить("КредитНаименованиеПодразделения", Новый ОписаниеТипов("Строка"),80);
    тзПеренос.Колонки.Добавить("КредитУНПКонтрагента", Новый ОписаниеТипов("Строка"),60);
    тзПеренос.Колонки.Добавить("КредитНаименованиеКонтрагента", Новый ОписаниеТипов("Строка"),100);
    тзПеренос.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"),19.4);
    тзПеренос.Колонки.Добавить("ДатаНачалаПериодаВыгрузки", Новый ОписаниеТипов("Строка"),8);
    тзПеренос.Колонки.Добавить("ДатаОкончанияПериодаВыгрузки", Новый ОписаниеТипов("Строка"),8);
    тзПеренос.Колонки.Добавить("ДебетКодСтатьиЗатрат", Новый ОписаниеТипов("Строка"),40);
    тзПеренос.Колонки.Добавить("КредитКодСтатьиЗатрат", Новый ОписаниеТипов("Строка"),40);
    тзПеренос.Колонки.Добавить("ДебетНаименованиеСтатьиЗатрат", Новый ОписаниеТипов("Строка"),60);
    тзПеренос.Колонки.Добавить("КредитНаименованиеСтатьиЗатрат", Новый ОписаниеТипов("Строка"),60);
    тзПеренос.Колонки.Добавить("ДебетСтавкаНДС", Новый ОписаниеТипов("Число"),15.4);
    тзПеренос.Колонки.Добавить("КредитСтавкаНДС", Новый ОписаниеТипов("Число"),15.4);
    тзПеренос.Колонки.Добавить("ВнутреннийИдентификаторДокумента", Новый ОписаниеТипов("Число"));
    тзПеренос.Колонки.Добавить("НазваниеТипаДкумента", Новый ОписаниеТипов("Строка"),80);
    тзПеренос.Колонки.Добавить("КодТипаДокумента", Новый ОписаниеТипов("Число"));
    
    ФД.Первая();
    
    Пока НЕ ФД.ВКонце() Цикл
        
        Если ФД.ЗаписьУдалена() Тогда
            ФД.Следующая();
            Продолжить;
        КонецЕсли;
        
        НовСтрока = тзПеренос.Добавить();
        НовСтрока.ДатаДок    = СокрЛП(ФД.DOCDATE);
        НовСтрока.НомерДок   = СокрЛП(ФД.DOCNUM);
        НовСтрока.ДебетСчет  = СокрЛП(ФД.DBALIAS);
        НовСтрока.ДебетКодПодразделения = СокрЛП(ФД.DBDEPCODE);
        НовСтрока.ДебетНаименованиеПодразделения = СокрЛП(ФД.DBDEPNAME);
        НовСтрока.ДебетУНПКонтрагента = СокрЛП(ФД.DBCONTAXID);
        НовСтрока.ДебетНаименованиеКонтрагента = СокрЛП(ФД.DBCONNAME);
        НовСтрока.КредитСчет = СокрЛП(ФД.CRALIAS);
        НовСтрока.КредитКодПодразделения = СокрЛП(ФД.CRDEPCODE);
        НовСтрока.КредитНаименованиеПодразделения = СокрЛП(ФД.CRDEPNAME);
        НовСтрока.КредитУНПКонтрагента = СокрЛП(ФД.CRCONTAXID);
        НовСтрока.КредитНаименованиеКонтрагента = СокрЛП(ФД.CRCONNAME);
        НовСтрока.Сумма = СокрЛП(ФД.SUMNCU);
        НовСтрока.ДатаНачалаПериодаВыгрузки = СокрЛП(ФД.BEGDATE);
        НовСтрока.ДатаОкончанияПериодаВыгрузки = СокрЛП(ФД.ENDDATE);
        НовСтрока.ДебетКодСтатьиЗатрат = СокрЛП(ФД.DBEXPENS);
        НовСтрока.КредитКодСтатьиЗатрат = СокрЛП(ФД.CREXPENS);
        НовСтрока.ДебетНаименованиеСтатьиЗатрат = СокрЛП(ФД.DBEXPENSN);
        НовСтрока.КредитНаименованиеСтатьиЗатрат = СокрЛП(ФД.CREXPENSN);
        НовСтрока.ДебетСтавкаНДС = СокрЛП(ФД.DBVAT);
        НовСтрока.КредитСтавкаНДС = СокрЛП(ФД.CRVAT);
        НовСтрока.ВнутреннийИдентификаторДокумента = СокрЛП(ФД.DOCID);
        НовСтрока.НазваниеТипаДкумента = СокрЛП(ФД.DOCTYPE);
        НовСтрока.КодТипаДокумента = СокрЛП(ФД.DTYPEID);
        
        ФД.Следующая();
        
    КонецЦикла;
    
        Пока Истина Цикл
        Сообщение.Текст = "Выгрузка успешно завершена!";
        Сообщение.Сообщить();
        Если Не ФД.Следующая() Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    ФД.ЗакрытьФайл();
    
КонецПроцедуры


p.s. Восьмерку только осваиваю, так что сильно не бейте...
1 Maxus43
 
15.08.13
16:34
создавай набор записей РБ, ставь отборы, загружай туда свой ТЗ
2 vsozansky
 
15.08.13
16:37
Правильнее записать данные в документ, а потом при проведении документ будет записывать данные в регистр.

PS/ Смотри стандартные решения Бух., УТ, УТП.
3 Maxus43
 
15.08.13
16:38
а, ну это конечно, в док, ибо у регистров регистратор есть.
в случае с доком бух операция - тоже, что и (1), + создание доркумента сначала
4 vsozansky
 
15.08.13
16:40
Еще нужно учитывать типы значений.
В приведенном коде только простые типы (строка, число), а в базе данных (регистрах) чаще всего хранятся ссылки на объекты. Так, что нужны преобразования.
5 Odavid
 
15.08.13
16:41
(0) пишите данные в документ, который отвечает в вашей конфе за начальные остатки.
После проведете документ.
6 ololo9
 
15.08.13
16:42
т.е. записываю данные к примеру в док.ВводОстатков, а затем:

ОсновнойРегистр = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    ОсновнойРегистр.Отбор.Регистратор.Установить(док.ВводОстатков);
    ОсновнойРегистр.Прочитать();
    Для каждого Запись из ОсновнойРегистр Цикл
//заполняю реквизиты                
    КонецЦикла;
    ОсновнойРегистр.Записать();
7 Odavid
 
15.08.13
16:44
(4)>>В приведенном коде только простые типы
А что, в DBF появились и "сложные" типы данных?
>>а в базе данных (регистрах) чаще всего хранятся ссылки на объекты
при заполнении начальных остаков ссылок на документы нет, возможны только ссылки на справочники, если перегружаются позиции номенклатуры.
Но тут уже на двух пальцах не опишешь, что это такое - "преобразование к объектам".
(6)>> а затем:
ну и кто будет регистратором у этих записей?
8 Maxus43
 
15.08.13
16:45
(6) нет, документы сами делают движения как правило, исключение в типовых составляет док Корретировка записей и Операция бух.
Определись с документом конкретным, набор записей пока не трогай. в док грузи
9 Odavid
 
15.08.13
16:45
(6)документ сам сделает нужные проводки.
Если он, конечно, есть.
10 Odavid
 
15.08.13
16:47
(8)>>док Корретировка записей
нет таких документов, это чистые наборы записей из регистров.
Разве что названы "документ".
11 Maxus43
 
15.08.13
16:48
(10) как и бух операция, но это не отменяет того, что он документ в метаданных
12 Odavid
 
15.08.13
16:52
(11)>>что он документ в метаданных
многое из того, что названо в 1С "белым", является на самом деле сворованным черно-синим в крапинку.
Но чтобы этого не видеть, сейчас набегут вопить о троллизме непререкаемого 1С.
13 Maxus43
 
15.08.13
16:53
(12) як же тебя клинит от 1с то, в каждой ветке ведро помоев) меняй профессию
AdBlock убивает бесплатный контент. 1Сергей