Книга знаний

1С:Предприятие / v8 / Объекты конфигурации / Бухгалтерский учет

v8: Перенос остатков по счетам БУ из 7.7 в 8.0

Пример обработки для переноса остатков по счетам БУ из конфигурации 1С:7.7 Бухгалтерский учет в 1С.8.0 БухгалтерияПредприятия Автор статьи: asady | Редакторы:
Последняя редакция №2 от 07.02.08 | История
URL: http://kb.mista.ru/article.php?id=636

Ключевые слова: ОЛЕ, операция, перенос остатков


На форуме довольно часто появляются вопросы по проблемам переноса остатков по счета БУ из 7.7 в 8.0

Хочу поделиться кусочком кода для такого переноса:


Процедура ЗагрузитьНачальныеОстатки(РазделительУчета=Ложь,ПервичноеЗаполнение=Истина) экспорт
    Если (НЕ ПервичноеЗаполнение)И(ОперацииБУ.Количество()=0) Тогда
        возврат;
    КонецЕсли;    
    
    ИтОЛЕ = ОбъектОле.CreateObject("БухгалтерскиеИтоги");
    ИтСубкОЛЕ = ОбъектОле.CreateObject("БухгалтерскиеИтоги");
    ПланСчетовОЛЕ = ОбъектОле.ВыбранныйПланСчетов();
    ИтОЛЕ.ИспользоватьПланСчетов(ПланСчетовОЛЕ);
    ИтСубкОЛЕ.ИспользоватьПланСчетов(ПланСчетовОЛЕ);
    Если НЕ РазделительУчета Тогда
        ИтОЛЕ.ИспользоватьРазделительУчета();
        ИтСубкОЛЕ.ИспользоватьРазделительУчета();
    Иначе
        РУОЛЕ = ОбъектОле.CreateObject("Справочник.РазделителиУчета");
        текКодРУ=СокрЛП(Департамент.Префикс);
        Если РУОЛЕ.НайтиПоНаименованию(текКодРУ,0,1)=0 Тогда
            Предупреждение("Не найден разделитель учета "+текКодРУ,3,"Ошибка");
            возврат;
        КонецЕсли;    
        текРУ=РУОЛЕ.ТекущийЭлемент();
        ИтОЛЕ.ИспользоватьРазделительУчета(текРУ);
        ИтСубкОЛЕ.ИспользоватьРазделительУчета(текРУ);
    КонецЕсли;    
    ИтОЛЕ.ВключатьСубсчета(1);
    Если ИтОЛЕ.ВыполнитьЗапрос(НачПериода,КонПериода) = 0 Тогда
        Сообщить("запрос по бух.итогам не выполнен");
        Возврат;
    КонецЕсли;
    ТЗОстатков.Очистить();
    ИтОЛЕ.ВыбратьСчета();
    Пока ИтОЛЕ.ПолучитьСчет() = 1 Цикл
        Если ИтОЛЕ.Счет.ЭтоГруппа()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если ИтОЛЕ.Счет.Забалансовый=1 Тогда
            Продолжить;
        КонецЕсли;
        КолСубк=ИтОЛЕ.Счет.КоличествоСубконто();
        Если КолСубк=0 Тогда
            НовСтрока=ТЗОстатков.Добавить();
            НовСтрока.Счет=ИтОЛЕ.Счет;
            НовСтрока.КодСчет=СокрЛП(ИтОЛЕ.Счет.Код);
            НовСтрока.СНД=ИтОЛЕ.СНД();
            НовСтрока.КоличествоСНД=ИтОЛЕ.СНД(3);
            НовСтрока.СНК=ИтОЛЕ.СНК();
            НовСтрока.КоличествоСНК=ИтОЛЕ.СНК(3);
            Продолжить;
        КонецЕсли;    
        Для Сч=1 По КолСубк Цикл
            Если ИтОЛЕ.Счет.ТолькоОбороты(Сч)=1 Тогда
                Прервать;
            КонецЕсли;    
            //Сообщить("субконто"+Сч+" = "+ИтОЛЕ.Счет.ВидСубконто(Сч));
        КонецЦикла;    
        КолСубк=Сч-1;
        Если КолСубк<1 Тогда
            Продолжить;
        КонецЕсли;    
        
        Для Сч=1 По КолСубк Цикл
            ИтСубкОЛЕ.ИспользоватьСубконто();
        КонецЦикла;    
        Состояние("Запрос по итогам по счету "+ИтОЛЕ.Счет.Код);
        Если ИтСубкОЛЕ.ВыполнитьЗапрос(НачПериода,КонПериода,ИтОЛЕ.Счет.Код) = 0 Тогда
            Сообщить("запрос по бух.итогам не выполнен. Счет: "+ИтОЛЕ.Счет.Код);
            Возврат;
        КонецЕсли;
        ИтСубкОЛЕ.ВыбратьСубконто(1);
        Пока ИтСубкОЛЕ.ПолучитьСубконто(1)=1 Цикл
            тСубконто1=ИтСубкОЛЕ.Субконто(1);
            сСубконто1=ИтСубкОЛЕ.ПредставлениеСубконто(1);
            Если КолСубк>1 Тогда
                ИтСубкОЛЕ.ВыбратьСубконто(2);
                Пока ИтСубкОЛЕ.ПолучитьСубконто(2)=1 Цикл
                    тСубконто2=ИтСубкОЛЕ.Субконто(2);
                    сСубконто2=ИтСубкОЛЕ.ПредставлениеСубконто(2);
                    Если КолСубк>2 Тогда
                        ИтСубкОЛЕ.ВыбратьСубконто(3);
                        Пока ИтСубкОЛЕ.ПолучитьСубконто(3)=1 Цикл
                            НовСтрока=ТЗОстатков.Добавить();
                            НовСтрока.Счет=ИтСубкОЛЕ.Счет;
                            НовСтрока.КодСчет=СокрЛП(ИтОЛЕ.Счет.Код);
                            НовСтрока.Субконто1=тСубконто1;
                            НовСтрока.СтрСубконто1=сСубконто1;
                            НовСтрока.Субконто2=тСубконто2;
                            НовСтрока.СтрСубконто2=сСубконто2;
                            НовСтрока.Субконто3=ИтСубкОЛЕ.Субконто(3);
                            НовСтрока.СтрСубконто3=ИтСубкОЛЕ.ПредставлениеСубконто(3);
                            НовСтрока.СНД=ИтСубкОЛЕ.СНД();
                            НовСтрока.КоличествоСНД=ИтОЛЕ.СНД(3);
                            НовСтрока.СНК=ИтСубкОЛЕ.СНК();
                            НовСтрока.КоличествоСНК=ИтОЛЕ.СНК(3);
                        КонецЦикла;
                    Иначе
                        НовСтрока=ТЗОстатков.Добавить();
                        НовСтрока.Счет=ИтСубкОЛЕ.Счет;
                        НовСтрока.КодСчет=СокрЛП(ИтОЛЕ.Счет.Код);
                        НовСтрока.Субконто1=тСубконто1;
                        НовСтрока.СтрСубконто1=сСубконто1;
                        НовСтрока.Субконто2=тСубконто2;
                        НовСтрока.СтрСубконто2=сСубконто2;
                        НовСтрока.СНД=ИтСубкОЛЕ.СНД();
                        НовСтрока.КоличествоСНД=ИтОЛЕ.СНД(3);
                        НовСтрока.СНК=ИтСубкОЛЕ.СНК();
                        НовСтрока.КоличествоСНК=ИтОЛЕ.СНК(3);
                    КонецЕсли;    
                КонецЦикла;
            Иначе
                НовСтрока=ТЗОстатков.Добавить();
                НовСтрока.Счет=ИтСубкОЛЕ.Счет;
                НовСтрока.КодСчет=СокрЛП(ИтОЛЕ.Счет.Код);
                НовСтрока.Субконто1=тСубконто1;
                НовСтрока.СтрСубконто1=сСубконто1;
                НовСтрока.СНД=ИтСубкОЛЕ.СНД();
                НовСтрока.КоличествоСНД=ИтОЛЕ.СНД(3);
                НовСтрока.СНК=ИтСубкОЛЕ.СНК();
                НовСтрока.КоличествоСНК=ИтОЛЕ.СНК(3);
            КонецЕсли;    
            //Сообщить("счет "+НовСтрока.Счет+" Субконто1 "+ИтСубкОЛЕ.ПредставлениеСубконто(1));
        КонецЦикла;
        //Сообщить("счет "+НовСтрока.Счет+" СНД "+НовСтрока.СНД+" СНК "+НовСтрока.СНК);
    КонецЦикла;
КонецПроцедуры

Процедура ПолучитьСписокДокументовОЛЕ(РазделительУчета=Ложь) экспорт        
    ОперОЛЕ=ОбъектОЛЕ.CreateObject("Операция");
    ОперОЛЕ.ВыбратьОперации(НачПериода,КонПериода);
    Пока ОперОЛЕ.ПолучитьОперацию()=1 Цикл
        Если ОперОЛЕ.ПометкаУдаления()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если ОперОЛЕ.ВключитьПроводки()=0 Тогда
            Продолжить;
        КонецЕсли;
        текДокОЛЕ=ОперОЛЕ.Документ;
        текИДДок=ПолучитьГУИДОбъекта77(текДокОЛЕ);
        ОперОЛЕ.ВыбратьПроводки();
        КолПроводок=0;                       
        СуммаОперации=0;
        Пока ОперОЛЕ.ПолучитьПроводку()=1 Цикл
            Если РазделительУчета Тогда
                //Сообщить("тек разделитель проводки :"+ОперОЛЕ.РазделительУчета.Наименование+":");
                Если ВРЕГ(СокрЛП(ОперОЛЕ.РазделительУчета.Наименование))<>ВРЕГ(СокрЛП(Департамент.Префикс)) Тогда
                    Продолжить;
                КонецЕсли;    
            КонецЕсли;    
            Если (ОперОЛЕ.Сумма=0)И(ОперОЛЕ.ВалСумма=0) Тогда
                //Сообщить("сумма проводки нулевая");
                Продолжить;
            КонецЕсли;    
            Если ОперОЛЕ.Дебет.Счет.Забалансовый=1 Тогда
                //Сообщить("счет дт забалансовый");
                Продолжить;
            КонецЕсли;    
            Если ОперОЛЕ.Кредит.Счет.Забалансовый=1 Тогда
                //Сообщить("счет кт забалансовый");
                Продолжить;
            КонецЕсли;    
            //Сообщить("проводка дт "+ОперОЛЕ.Дебет.Счет.Код+" кт "+ОперОЛЕ.Кредит.Счет.Код);
            КолПроводок=КолПроводок+1;
            СуммаОперации=СуммаОперации+ОперОЛЕ.Сумма;
            текСодержаниеПроводки=СокрЛП("<"+Организация.Префикс+" "+оперОЛЕ.НомерПроводки()+"> "+ОперОЛЕ.СодержаниеПроводки);
                        новстр=ОперацииБУ.Добавить();
            новстр.Период=ОперОЛЕ.Документ.ДатаДок;
            новстр.Ключ=ОперОЛЕ.Документ.Вид()+""+ОперОЛЕ.Документ.НомерДок;;
            новстр.НомерЖурнала=ОперОЛЕ.НомерЖурнала;
            новстр.Содержание=текСодержаниеПроводки;
            новстр.Сумма=ОперОЛЕ.Сумма;
            
            Если ОперОЛЕ.Дебет.Счет.Валютный=1 Тогда
                новстр.ВалютнаяСуммаДт=ОперОЛЕ.ВалСумма;    
                новстр.ВалютаДт=ОперОЛЕ.Валюта.Наименование;    
            Иначе
                Если РазделительУчета Тогда
                    новстр.ВалютнаяСуммаДт=ОперОЛЕ.Сумма;    
                    новстр.ВалютаДт="USD";    
                Конецесли;    
            Конецесли;    
            Если ОперОЛЕ.Кредит.Счет.Валютный=1 Тогда
                новстр.ВалютнаяСуммаКт=ОперОЛЕ.ВалСумма;    
                новстр.ВалютаКт=ОперОЛЕ.Валюта.Наименование;    
            Иначе
                Если РазделительУчета Тогда
                    новстр.ВалютнаяСуммаКт=ОперОЛЕ.Сумма;    
                    новстр.ВалютаКт="USD";    
                Конецесли;        
            Конецесли;    
            новстр.СчетДт=ОперОЛЕ.Дебет.Счет.Код;
            новстр.СчетКт=ОперОЛЕ.Кредит.Счет.Код;
            новстр.ИДДок=текИДДок;
            новстр.сСубконтоДт1=ОперОЛЕ.Дебет.ПредставлениеСубконто(1);
            Если СокрЛП(новстр.сСубконтоДт1)<>"" Тогда 
                новстр.СубконтоДт1=КонвертироватьОбъектОЛЕ(ОперОЛЕ.Дебет.Субконто(1)); 
            КонецЕсли;
            новстр.сСубконтоДт2=ОперОЛЕ.Дебет.ПредставлениеСубконто(2);
            Если СокрЛП(новстр.сСубконтоДт2)<>"" Тогда 
                новстр.СубконтоДт2=КонвертироватьОбъектОЛЕ(ОперОЛЕ.Дебет.Субконто(2)); 
            КонецЕсли;
            новстр.сСубконтоДт3=ОперОЛЕ.Дебет.ПредставлениеСубконто(3);
            Если СокрЛП(новстр.сСубконтоДт3)<>"" Тогда 
                новстр.СубконтоДт3=КонвертироватьОбъектОЛЕ(ОперОЛЕ.Дебет.Субконто(3)); 
            КонецЕсли;
            новстр.сСубконтоКт1=ОперОЛЕ.Кредит.ПредставлениеСубконто(1);
            Если СокрЛП(новстр.сСубконтоКт1)<>"" Тогда 
                новстр.СубконтоКт1=КонвертироватьОбъектОЛЕ(ОперОЛЕ.Кредит.Субконто(1)); 
            КонецЕсли;
            новстр.сСубконтоКт2=ОперОЛЕ.Кредит.ПредставлениеСубконто(2);
            Если СокрЛП(новстр.сСубконтоКт2)<>"" Тогда 
                новстр.СубконтоКт2=КонвертироватьОбъектОЛЕ(ОперОЛЕ.Кредит.Субконто(2)); 
            КонецЕсли;
            новстр.сСубконтоКт3=ОперОЛЕ.Кредит.ПредставлениеСубконто(3);
            Если СокрЛП(новстр.сСубконтоКт3)<>"" Тогда 
                новстр.СубконтоКт3=КонвертироватьОбъектОЛЕ(ОперОЛЕ.Кредит.Субконто(3)); 
            КонецЕсли;
            Если ОперОЛЕ.Дебет.Счет.Количественный=1 Тогда
                новстр.КоличествоДт=ОперОЛЕ.Количество;
            ИначеЕсли ОперОЛЕ.Кредит.Счет.Количественный=1 Тогда
                новстр.КоличествоКт=ОперОЛЕ.Количество;
            КонецЕсли;    
        КонецЦикла;    
        Если КолПроводок=0 Тогда
            Продолжить;
        КонецЕсли;    
    КонецЦикла;  
    //Сообщить("загрузка завершена...");
    текДокОЛЕ=Неопределено;
    ОперОЛЕ=Неопределено;
КонецПроцедуры


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика