v8: Перенос остатков по счетам БУ из 7.7 в 8.0Пример обработки для переноса остатков по счетам БУ из конфигурации 1С:7.7 Бухгалтерский учет в 1С.8.0 БухгалтерияПредприятия
| | Автор статьи: Последняя редакция №1 от 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));
КонецЦикла;
//Сообщить("счет "+НовСтрока.Счет+" СНД "+НовСтрока.СНД+" СНК "+НовСтрока.СНК);
КонецЦикла;
КонецПроцедуры
|