Добавить обработку

Вход для пользователей

Банк 1С внешних отчетов и внешних обработок ert newsletter

Будьте в курсе последних новостей нашего сайта!

RSS-материал

Раздел 1Cv8.0

Сейчас на сайте

Сейчас на сайте 0 пользователей и 0 гостей.

Загрузка остатков из 1С6

Часто при организации обмена данными с 1С6 требуется наладить перенос проводок из 1С6 за период.
Но тут же возникает вопрос и о переносе начальных остатков.
Так вот, если разработан механизм загрузки движений из 1с6 из файла проводок 1sboper.dbf, то можно просто сэмулировать файл 1sboper.dbf, но в нем оставить только проводки с нулевым счетом и загрузить этот файл на дату загрузки остатков.
Таким образом не придется делать дополнительный механизм. Единственное - нужно свернуть остатки в 1sboper.dbf. Как это сделать - эта статья.

Для получения остатков нам нужно прочитать все движения исходного файла 1sboper.dbf, а потом просто свернуть их по счету и субконто.
Единственно, что счет в 1С6 содержит еще штамп даты, который нужно удалить.
Проводки формируем в корреспонденции со счетом 00.
Каталог - это каталог, где хранится исходный файл: 1sboper.dbf
КаталогЗагр - это каталог, куда помещается файл результата с остатками: 1sboper.dbf

6 ноября 2008 года я проверил этот код, все сворачивается идеально и совпадает с обороткой в 1С6. Рекомендую.

Меня спрашивали - почему я не сконвертировал данные в 1С7, а оттуда в 1С8 или выгрузить из 1С7.
Дело в том, что баз 1С6 много (50 штук), проще считать данные из DBF, т.к. квалификации операторов не хватит конвертировать базы из 1С6 в 1С7.
Кроме того, у нас нет лицензий на 1С7, да и 1С7 я уже три года не занимался, неохота вспоминать.

Смотрим код:

БД_dbf = Новый XBase;
БД_dbf.Кодировка = КодировкаXBase.OEM;
БД_dbf.ОткрытьФайл(Каталог+"\1SBOPER.dbf");

флОтладка = ложь;

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Schet");
ТЗ.Колонки.Добавить("Subkonto");
ТЗ.Колонки.Добавить("OPERVAL");
ТЗ.Колонки.Добавить("OPERSUM");
ТЗ.Колонки.Добавить("OPERSUMV");
ТЗ.Колонки.Добавить("OPERKOL");
ТЗ.Индексы.Добавить("Schet,Subkonto");

Счетчик = 0;
флБДПервая = истина;
Пока НЕ БД_dbf.ВКонце() И (флБДПервая ИЛИ БД_dbf.Следующая()) Цикл
флБДПервая = ложь;
ОбработкаПрерыванияПользователя();

Счетчик = Счетчик + 1;

Если Счетчик % 100 = 0 Тогда
Состояние("Загрузка для свертки остатков " + Счетчик);
КонецЕсли;

Если Дата(БД_dbf.OPERDATA) > КонецДня(ДатаОстатков) Тогда
Продолжить;
КонецЕсли;

Если СтрЧислоВхождений(Строка(БД_dbf.OPERNO), "D") > 0 Тогда
Продолжить;
КонецЕсли;

// Загрузка дебета
НоваяСтрокаТЗ = ТЗ.Добавить();
НоваяСтрокаТЗ.Schet = СокрЛП(БД_dbf.OPERIND1);
//Убиваем лишние 8 символов в коде счета
НоваяСтрокаТЗ.Schet = Лев(НоваяСтрокаТЗ.Schet, СтрДлина(НоваяСтрокаТЗ.Schet)-8);
НоваяСтрокаТЗ.Subkonto = БД_dbf.SPSKNO1;
НоваяСтрокаТЗ.OPERVAL = БД_dbf.OPERVAL;
НоваяСтрокаТЗ.OPERSUM = БД_dbf.OPERSUM;
НоваяСтрокаТЗ.OPERSUMV = БД_dbf.OPERSUMV;
НоваяСтрокаТЗ.OPERKOL = БД_dbf.OPERKOL;

// Загрузка кредита
НоваяСтрокаТЗ = ТЗ.Добавить();
НоваяСтрокаТЗ.Schet = СокрЛП(БД_dbf.OPERIND2);
НоваяСтрокаТЗ.Schet = Лев(НоваяСтрокаТЗ.Schet, СтрДлина(НоваяСтрокаТЗ.Schet)-8);
НоваяСтрокаТЗ.Subkonto = БД_dbf.SPSKNO2;
НоваяСтрокаТЗ.OPERVAL = БД_dbf.OPERVAL;
НоваяСтрокаТЗ.OPERSUM = -БД_dbf.OPERSUM;
НоваяСтрокаТЗ.OPERSUMV = -БД_dbf.OPERSUMV;
НоваяСтрокаТЗ.OPERKOL = -БД_dbf.OPERKOL;

КонецЦикла;

БД_dbf.ЗакрытьФайл();
ТЗ.Свернуть("Schet,Subkonto,OPERVAL","OPERSUM,OPERSUMV,OPERKOL");
// Создание нового файла dbf
БД_dbf.Поля.Добавить("OPERSOD", "S", 50);
БД_dbf.Поля.Добавить("SPSKNO1", "S", 20);
БД_dbf.Поля.Добавить("SPSKNO2", "S", 20);
БД_dbf.Поля.Добавить("OPERSUM", "N", 14, 2);
БД_dbf.Поля.Добавить("OPERSUMV","N", 14, 2);
БД_dbf.Поля.Добавить("OPERKOL", "N", 14, 3);
БД_dbf.Поля.Добавить("OPERVAL", "S", 3);
БД_dbf.Поля.Добавить("OPERDATA","D", );
БД_dbf.Поля.Добавить("OPERWPNO","S", 2);
БД_dbf.Поля.Добавить("OPERFL", "S", 1);
БД_dbf.Поля.Добавить("OPERV", "S", 2);
БД_dbf.Поля.Добавить("OPERNO", "S", 12);
БД_dbf.Поля.Добавить("OPERS", "S", 1);
БД_dbf.Поля.Добавить("OPERSP", "S", 5);
БД_dbf.Поля.Добавить("OPERIND1","S", 15);
БД_dbf.Поля.Добавить("OPERIND2","S", 15);
БД_dbf.Поля.Добавить("OPERID", "S", 12);
БД_dbf.Поля.Добавить("OPERN", "S", 5);

БД_dbf.Кодировка = КодировкаXBase.OEM;

БД_dbf.СоздатьФайл(КаталогЗагр + "\1SBOPER.dbf",);
БД_dbf.АвтоСохранение = Истина;

Сч = 0;

Для Каждого СтрокаТЗ Из ТЗ Цикл
//Пропускаем мусор...
Если СтрокаТЗ.OPERSUM = 0 И СтрокаТЗ.OPERSUMV = 0 И СтрокаТЗ.OPERKOL = 0 Тогда
Продолжить;
КонецЕсли;

//Выделяем счет
ТекСчет = СокрЛП(СтрокаТЗ.Schet);
Поз = Найти(ТекСчет, ".");
Если Поз <> 0 Тогда
ТекСчет = СокрЛП(Лев(ТекСчет, Поз - 1));
КонецЕсли;
//Пропускаем ненужные счета остатков ...
Если не флОтладка И Найти(ПереченьПропускаемыхСчетов, СокрЛП(ТекСчет)+";") <> 0 Тогда
Продолжить;
КонецЕсли;

Если флОтладка Тогда
Если ТекСчет<>"20" ИЛИ Найти(СтрокаТЗ.Subkonto, "1006") = 0 ИЛИ Найти(СтрокаТЗ.Subkonto, "2") = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

Сч = Сч + 1;

Если Сч % 10 =0 Тогда
Состояние("Свертка остатков, формирование DBF: " + Сч);
ОбработкаПрерыванияПользователя();
КонецЕсли;

БД_dbf.Добавить();
БД_dbf.OPERSOD = "Остатки получены обработкой от "+ Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
Если СтрокаТЗ.OPERSUM >= 0 Тогда
БД_dbf.OPERIND1 = СтрокаТЗ.Schet;
БД_dbf.SPSKNO1 = СтрокаТЗ.Subkonto;
БД_dbf.OPERIND2 = "00";
БД_dbf.SPSKNO2 = "";
Знак = 1;
Иначе
БД_dbf.OPERIND1 = "00";
БД_dbf.SPSKNO1 = "";
БД_dbf.OPERIND2 = СтрокаТЗ.Schet;
БД_dbf.SPSKNO2 = СтрокаТЗ.Subkonto;
Знак = -1;
КонецЕсли;

БД_dbf.OPERVAL = СтрокаТЗ.OPERVAL;
БД_dbf.OPERDATA = КонецДня(ДатаОстатков);

БД_dbf.OPERSUM = Знак * СтрокаТЗ.OPERSUM;
БД_dbf.OPERSUMV = Знак * СтрокаТЗ.OPERSUMV;
БД_dbf.OPERKOL = Знак * СтрокаТЗ.OPERKOL;

//Для невалютных счетов просто ставим доллары
Если Найти(ПереченьВалютныхСчетов, СокрЛП(ТекСчет)+";") = 0 Тогда
БД_dbf.OPERSUMV = Знак*СтрокаТЗ.OPERSUM; //Сумма в валюте равна сумме учетной
БД_dbf.OPERVAL = 1; //Доллары
КонецЕсли;

КонецЦикла;

БД_dbf.ЗакрытьФайл();

ПереченьПропускаемыхСчетов - строка с кодами пропускаемых счетов, коды разделяются ";", заканчивается на ";"
ПереченьВалютныхСчетов - строка с кодами валютных счетов, коды разделяются ";", заканчивается на ";"

Поправил ошибку: БД_dbf.Следующая() - пропускалась первая запись, счас все нормально в коде.

 #

:-)

:-) Жжошь,Гений!Я уж думал 6-ка умерла навсегда. Еще в 2002 переносил последнее в далеком провинциальном Воронеже.

 
 #

Вопрос к

Вопрос к авторуУ меня есть аналогичный случайно с удалением неиспользуемыхьсубконто в 6-кеКак их удалить с применением 7-киЕсли не затруднит черкните по адресуskor9@yandex.ruВ долгу не останусь

 
Ресурсы сайта не предназначены для размещения нелегального материала.

При этом страницы сайта являются немодерируемыми и материал публикуется автоматически без премодерации. Если Вы нашли материал, который противоречит закону об авторском праве РФ и выложен без разрешения автора или компании-разработчика, просим Вас убедительно связаться с претензиями по почте vadim_kucherenko@mail.ru.

О пользователе fixin

Новые пользователи

Последние комментарии

баллы у

баллы видимы только тем, кто представился системе

Лучшие пользователи

Пользовательбаллы
kosmit81
irirna26
sukiiii16
Amras14
fixin13
Unit10
espero20008
panok905
Prince5
VaEr5