Всем доброго времени суток!
Недавно в связи с реструктуризацией и сменой деятельности компании пришлось организовать перенос остатков с Хозрасчетных счетов системы "Бухгалтерия предприятия КОРП" на Бюджетные счета системы "Бухгалтерия Государственного Учреждения" последнего релиза.
Список счетов по которым выполнялся перенос данных:
ВЗАИМОРАСЧЕТЫ:
Счет 60.01 в БП на счет 302.26 в БГУ;
Счет 60.02 в БП на счет 206.26 в БГУ;
Счет 62.01 в БП на счет 205.31 в БГУ;
Счет 62.02 в БП на счет 205.31 в БГУ.
МАТЕРИАЛЫ:
Счет 10.01 в БП на счет 105.36 в БГУ;
Счет 10.03 в БП на счет 105.33 в БГУ;
Счет 10.05 в БП на счет 105.36 в БГУ;
Счет 10.06 в БП на счет 105.36 в БГУ;
Счет 10.08 в БП на счет 105.34 в БГУ;
Счет 10.09 в БП на счет 105.35 в БГУ;
ОСНОВНЫЕ СРЕДСТВА
Счет ОС в БП: 01.01;
Счет амортизации ОС в БП: 02.1
Перенос производится в разрезе групп ОС:
Здания: на счет учета в 101.12; счет амортизации в БГУ 104.12;
Машины и оборудование (кроме офисного): на счет учета в 101.34; счет амортизации в БГУ 104.34;
Транспортные средства: на счет учета в 101.35; счет амортизации в БГУ 104.35;
Производственный и хозяйственный инвентарь: на счет учета в 101.36; счет амортизации в БГУ 104.36;
Другие виды основных средств: на счет учета в 101.38; счет амортизации в БГУ 104.38;
ПРОЧИЕ РАСЧЕТЫ С РАЗНЫМИ ДЕБИТОРАМИ И КРЕДИТОРАМИ
Счет 76.09 в БП на счет 302.21 в БГУ.
ПРОЧИЕ РАСХОДЫ БУДУЩИХ ПЕРИОДОВ
Счет 97.21 в БП на счет 401.50 в БГУ.
СПЕЦОДЕЖДА В ЭКСПЛУАТАЦИИ
Счет МЦ.02 в БП на счет 27 в БГУ.
ИНВЕНТАРЬ И ХОЗ. ПРИНАДЛЕЖНОСТИ В ЭКСПЛУАТАЦИИ
Счет МЦ.04 в БП на счет 27 в БГУ.
НДС ПО АВАНСАМ И ПРЕДОПЛАТАМ
Счет 76.АВ в БП на счет 210.11 в БГУ.
Краткое описание и общий алгоритм правил.
Основным ПВД является "ПроизвольныйАлгоритмВыгрузки". В нем организовано выполнение алгоритмов формирования исходящей информации.
Код ПВД:
////////////////////////////////////////////////////////////////////////////
//ВЗАИМОРАСЧЕТЫ
//+Остатки по счету 60.01 в БП во Ввод начальных остатков по счету 302.26 в БГУ
СчетБП = "60.01"; СчетБГУ = "302.26"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 60.02 в БП во Ввод начальных остатков по счету 206.26 в БГУ
СчетБП = "60.02"; СчетБГУ = "206.26"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 62.01 в БП во Ввод начальных остатков по счету 205.31 в БГУ
СчетБП = "62.01"; СчетБГУ = "205.31"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 62.02 в БП во Ввод начальных остатков по счету 205.31 в БГУ
СчетБП = "62.02"; СчетБГУ = "205.31"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//МАТЕРИАЛЫ
//+Остатки по счету 10.01 в БП во Ввод начальных остатков по счету 105.36 в БГУ
СчетБП = "10.01"; СчетБГУ = "105.36"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 10.03 в БП во Ввод начальных остатков по счету 105.33 в БГУ
СчетБП = "10.03"; СчетБГУ = "105.33"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 10.05 в БП во Ввод начальных остатков по счету 105.36 в БГУ
СчетБП = "10.05"; СчетБГУ = "105.36"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 10.06 в БП во Ввод начальных остатков по счету 105.36 в БГУ
СчетБП = "10.06"; СчетБГУ = "105.36"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//+Остатки по счету 10.08 в БП во Ввод начальных остатков по счету 105.34 в БГУ
СчетБП = "10.08"; СчетБГУ = "105.34"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//+Остатки по счету 10.09 в БП во Ввод начальных остатков по счету 105.35 в БГУ
СчетБП = "10.09"; СчетБГУ = "105.35"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//ОСНОВНЫЕ СРЕДСТВА
//+Остатки по счету 01.01 с типом ОС:
//Здания;
//Сооружения;
//Капитальные вложения в арендованное имущество;
//Прочие объекты, требующие государственной регистрации, относимые статьей 130 ГК РФ к недвижимости
//в БП во Ввод начальных остатков по счету 101.12 в БГУ
ГруппаУчетаОС = Перечисления.ГруппыОС.Здания; СчетУчетаБГУ = "101.12"; СчетАмортизацииБГУ = "104.12";
КодСчетаАмортизацииОС = "02.1"; КодСчетаОС = "01.01";
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузкуОС);
//-
//+Остатки по счету 01.01 с типом ОС "Машины и оборудование (кроме офисного)"
//в БП во Ввод начальных остатков по счету 101.12 в БГУ
ГруппаУчетаОС = Перечисления.ГруппыОС.МашиныИОборудование; СчетУчетаБГУ = "101.34"; СчетАмортизацииБГУ = "104.34";
КодСчетаАмортизацииОС = "02.1"; КодСчетаОС = "01.01";
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузкуОС);
//-
//+Остатки по счету 01.01 с типом ОС "Транспортные средства"
//в БП во Ввод начальных остатков по счету 101.35 в БГУ
ГруппаУчетаОС = Перечисления.ГруппыОС.ТранспортныеСредства; СчетУчетаБГУ = "101.35"; СчетАмортизацииБГУ = "104.35";
КодСчетаАмортизацииОС = "02.1"; КодСчетаОС = "01.01";
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузкуОС);
//-
//+Остатки по счету 01.01 с типом ОС "Производственный и хозяйственный инвентарь"
//в БП во Ввод начальных остатков по счету 101.36 в БГУ
ГруппаУчетаОС = Перечисления.ГруппыОС.ПроизводственныйИХозяйственныйИнвентарь; СчетУчетаБГУ = "101.36"; СчетАмортизацииБГУ = "104.36";
КодСчетаАмортизацииОС = "02.1"; КодСчетаОС = "01.01";
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузкуОС);
//-
//+Остатки по счету 01.01 с типом ОС "Другие виды основных средств"
//в БП во Ввод начальных остатков по счету 101.38 в БГУ
ГруппаУчетаОС = Перечисления.ГруппыОС.ДругиеВидыОсновныхСредств; СчетУчетаБГУ = "101.38"; СчетАмортизацииБГУ = "104.38";
КодСчетаАмортизацииОС = "02.1"; КодСчетаОС = "01.01";
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузкуОС);
//-
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//Прочие расчеты с разными дебиторами и кредиторами
//+Остатки по счету 76.09 в БП во Ввод начальных остатков по счету 302.21 в БГУ
СчетБП = "76.09"; СчетБГУ = "302.21"; С1 = Истина; С2 = Истина; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//Прочие расходы будущих периодов
//+Остатки по счету 97.21 в БП во Ввод начальных остатков по счету 401.50 в БГУ
СчетБП = "97.21"; СчетБГУ = "401.50"; С1 = Истина; С2 = Ложь; С3 = Ложь;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//Спецодежда в эксплуатации
//+Остатки по счету МЦ.02 в БП во Ввод начальных остатков по счету 27 в БГУ
СчетБП = "МЦ.02"; СчетБГУ = "27"; С1 = Истина; С2 = Ложь; С3 = Истина;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//Инвентарь и хозяйственные принадлежности в эксплуатации
//+Остатки по счету МЦ.04 в БП во Ввод начальных остатков по счету 27 в БГУ
СчетБП = "МЦ.04"; СчетБГУ = "27"; С1 = Истина; С2 = Ложь; С3 = Истина;
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеИВыполнитьВыгрузку);
//-
//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//НДС по авансам и предоплатам
//+Остатки по счету 76 .АВ в БП во Ввод начальных остатков НДС по счету 210.11 в БГУ
Счет = "76.АВ"; СчетБГУ = "210.11";
Выполнить(Алгоритмы.ПолучитьИсходящиеДанныеНДС);
//-
////////////////////////////////////////////////////////////////////////////
Отказ = Истина;
Так - же для демонстрации приведу код алгоритма "ПолучитьИсходящиеДанныеИВыполнитьВыгрузку":
зСубконто = "";
грСубконто = "";
Если С1 Тогда
зСубконто = зСубконто + " ХозрасчетныйОстатки.Субконто1 КАК Субконто1, ";
грСубконто = грСубконто + " ХозрасчетныйОстатки.Субконто1, ";
КонецЕсли;
Если С2 Тогда
зСубконто = зСубконто + " ХозрасчетныйОстатки.Субконто2 КАК Субконто2, ";
грСубконто = грСубконто + " ХозрасчетныйОстатки.Субконто2, ";
КонецЕсли;
Если С3 Тогда
зСубконто = зСубконто + " ХозрасчетныйОстатки.Субконто3 КАК Субконто3, ";
грСубконто = грСубконто + " ХозрасчетныйОстатки.Субконто3, ";
КонецЕсли;
Запрос = Новый Запрос("ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет КАК Счет," + зСубконто + "
| ХозрасчетныйОстатки.Организация КАК Организация,
| СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаДт,
| СУММА(ХозрасчетныйОстатки.СуммаОстатокКт) КАК СуммаКт,
| СУММА(ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт) КАК ВалютнаяСуммаДт,
| СУММА(ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт) КАК ВалютнаяСуммаКт,
| СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт) КАК КоличествоДт,
| СУММА(ХозрасчетныйОстатки.КоличествоОстатокКт) КАК КоличествоКт,
| ХозрасчетныйОстатки.Валюта КАК Валюта
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстатки
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Счет," + грСубконто + "
| ХозрасчетныйОстатки.Организация,
| ХозрасчетныйОстатки.Валюта");
Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.НайтиПоКоду(СчетБП));
Запрос.УстановитьПараметр("ДатаОстатков", Параметры.ДатаВводаОстатков);
Запрос.УстановитьПараметр("Организация", Параметры.ВыгружаемаяОрганизация);
ЖурналПроводокЕПСБУ = Неопределено;
Выполнить(Алгоритмы.СоздатьЖурналПроводокЕПСБУ);
КорСчет = "000";
Период = Параметры.ДатаВводаОстатков;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИсходящиеДанные = Новый Структура("Дата, Организация, Комментарий");
ИсходящиеДанные.Дата = Параметры.ДатаВводаОстатков;
ИсходящиеДанные.Комментарий = "Ввод остатков: " + Выборка.Организация +"/"+Выборка.Счет;
ИсходящиеДанные.Организация = Выборка.Организация;
Сторона = "";
Если Выборка.Счет.Вид = ВидСчета.Активный Тогда
Сторона = "Дт";
ИначеЕсли Выборка.Счет.Вид = ВидСчета.Пассивный Тогда
Сторона = "Кт";
Иначе
Если Выборка.СуммаДт <> 0
ИЛИ Выборка.КоличествоДт <> 0
ИЛИ Выборка.ВалютнаяСуммаДт <> 0
Тогда
Сторона = "Дт";
Иначе
Сторона = "Кт";
КонецЕсли;
КонецЕсли;
Если Сторона = "Дт" Тогда
ВспСторона = "Кт";
Иначе
ВспСторона = "Дт";
КонецЕсли;
НовПроводка = ЖурналПроводокЕПСБУ.Добавить();
НовПроводка.Период = Период;
Если НЕ Выборка.Счет.Забалансовый Тогда
//Вспомогательный счет "000"
НовПроводка["Счет"+ВспСторона] = КорСчет;
КонецЕсли;
//Счет остатков
НовПроводка["Счет"+Сторона] = СчетБГУ;
НовПроводка["Сумма"] = ?(Сторона = "Дт",Выборка.СуммаДт,Выборка.СуммаКт);
НовПроводка["Организация"] = Выборка.Организация;
Если Выборка.Счет.Валютный Тогда
НовПроводка["Валюта"+Сторона] = Выборка.Валюта;
НовПроводка["ВалютнаяСумма"+Сторона] = ?(Сторона = "Дт",Выборка.ВалютнаяСуммаДт, Выборка.ВалютнаяСуммаКт);
КонецЕсли;
Если Выборка.Счет.Количественный Тогда
НовПроводка["Количество"+Сторона] =?(Сторона = "Дт",Выборка.КоличествоДт, Выборка.КоличествоКт);
КонецЕсли;
КоличествоСубконто = Выборка.Счет.ВидыСубконто.Количество();
Для Инд = 0 По КоличествоСубконто-1 Цикл
Попытка
НовПроводка["Субконто"+Сторона].Вставить(Выборка.Счет.ВидыСубконто[Инд].ВидСубконто,Выборка["Субконто"+(Инд+1)]);
Исключение
НовПроводка["Субконто"+Сторона].Вставить(Выборка.Счет.ВидыСубконто[Инд].ВидСубконто);
КонецПопытки;
КонецЦикла;
КонецЦикла;
Если ЖурналПроводокЕПСБУ.Количество() > 0 Тогда
ИсходящиеДанные.Вставить("ЖурналПроводокЕПСБУ",ЖурналПроводокЕПСБУ);
ИсходящиеДанные.Вставить("Счет", СчетБГУ);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ВводНачальныхОстатков");
ЖурналПроводокЕПСБУ.Очистить();
КонецЕсли;
Т.о. принцип работы выгрузки заключается в поэтапном выполнении 3-х основных алгоритмов формирования исходящих данных, которые формируют информацию в зависимости от типа переносимых остатков:
- ПолучитьИсходящиеДанныеИВыполнитьВыгрузку;
- ПолучитьИсходящиеДанныеИВыполнитьВыгрузкуОС;
- ПолучитьИсходящиеДанныеНДС.
В конце каждого алгоритма после формирования исходящих данных выполняется переход на соответствующее ПКО:
- ВводНачальныхОстатков;
- ВводНачальныхОстатковВходящийНДС;
- ВводНачальныхОстатковОС.
Замечание.
Т.к. при формировании данной конвертации полагался на определенные требования своей кампании, для применения ее в Вашем конкретном случае необходим анализ данных и корректировка Вашим специалистом. Т.е. данную конвертацию рекомендуется использовать как базу для создания переноса по Вашим конкретным критериям, иначе при выполнении процедур на данных правилах "по умолчанию" могут возникнуть ошибки.
Ну и естественно перед загрузкой данных ОБЯЗАТЕЛЬНО делайте копию базы.