v8: Перенос остатков по счетам БУ из 7.7 в 8.0 Ключевые слова: ОЛЕ, операция, перенос остатков
На форуме довольно часто появляются вопросы по проблемам переноса остатков по счета БУ из 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 Тогда
Продолжить;
КонецЕсли;
КонецЦикла;
//Сообщить("загрузка завершена...");
текДокОЛЕ=Неопределено;
ОперОЛЕ=Неопределено;
КонецПроцедуры
|