Перенос бухгалтерских остатков 7.7 -> 8.2

Методика переноса справочников и бухгалтерских остатков из конфигураций 1С 7.7, использующих компоненту бухгалтерский учет, в 1С Бухгалтерия предприятия 8.2.

Используется OLE подключение к базе 7.7.

Это не конечное решение, а набор процедур и функций, упрощающих перенос данных из базы 7.7 в базу 8.2.

Примеры обработок использовались для переноса данных из реальных баз 1С бухгалтерия 7.7. (Общий режим и УСН). Обработки настроены на перенос счетов по которым были остатки в базах. Использовался релиз 1С Бухгалтерия предприятия 1.6.21.6

 

======================================================

При переносе остатков в базу на PostgreSQL выяснилось, что платформа вылетает с ошибкой при выполнении поиска в справочнике по наименованию.

В обработках, приложенных к публикации, поиск по наименованию используется в процедурах ИмпортДанныхОрганизации, УстановитьРеквизитыВнеоборотныхАктивов, ПолучитьОсновнойСклад и в обработке УСН в процедуре ПолучитьПодразделение.

Пока 1С не исправила эту ошибку следует вместо строки

Эл82 = Справочники.Организации.НайтиПоНаименованию( Наименование );

использовать что то типа

Эл82 = Справочники.Организации.ПустаяСсылка(); 
Выборка = Справочники.Организации.Выбрать();
Пока Выборка.Следующий() Цикл
    Если СокрЛП(Выборка.Наименование) = Наименование Тогда
         Эл82 = Выборка.Ссылка;
    КонецЕсли;   
КонецЦикла;  

Хотя это все равно не поможет. Платформа вылетает при попытке интерактивного поиска в справочнике по наименованию.

======================================================

Служебный справочник.

В конфигурации необходимо создать справочник «СоответствиеСправочников».
Длина кода 40, Строка
Длина наименования 80.
Реквизит — Справочник82. СправочникСсылка.
Автонумерация – Ложь. (Нет)

Импорт справочников.

При импорте справочников копируется структура групп, как она задана в базе 7.7. При повторной загрузке данных структура групп не анализируется, проверяется только наличие загружаемого элемента справочника.


Перед тем как импортировать данные следует определить соответствие справочников конфигураций.
Для этого определены две процедуры:

Процедура ДобавитьСоответствиеСправочников( п_ВидСпр77, п_СсылкаСпр82 )

п_ВидСпр77 – вид справочника 7.7 так, как он определен в конфигураторе.
П_ссылкаСпр82 — СправочникМенеджер..

Например:

ДобавитьСоответствиеСправочников( "Сотрудники", Справочники.ФизическиеЛица );

В результате будет создано соответствие с ключем  «Сотрудники&ФизическиеЛица». Этот ключ в дальнейшем должен использоваться для импорта данных из справочника Сотрудники 7.7 в справочник ФизическиеЛица 8.2.

Процедура ДобавитьСоответствиеРеквизитов( п_Ключ, п_ИмяРек77, п_ТипРек, п_ИмяРек82, п_КлючФунк = неопределено )

п_Ключ – ключ соответствия справочников.
п_ИмяРек77 – название реквизита (атрибута) справочника 7.7.
п_ТипРек – тип реквизита (см. ниже ).
п_ИмяРек82 — название реквизита справочника 8.2.
п_КлючФунк – ключ соответствия справочника или имя функции.

Параметр функции п_ТипРек может принимать следующие значения:
0 — типы полей число, строка или дата. Значение будет скопировано.
1 — ссылка на элемент справочника. Элемент справочника будет создан, если его нет.
10 — вызывается процедура обработки. Для типов отличных от типов для значения 0 или если типы не совпадают.
11 — вызывается процедура установки владельца справочника.
12 — вызывается процедура установки реквизитов содержащих перекрестные ссылки. Например Контрагенты являются владельцем справочника Договоры, и содержат реквизит ОсновнойДоговор.

Для п_ТипРек = 0 параметр КлючФункция не используется.
Для значения 1 КлючФункция содержит ключ соответствия для справочника.
Для значений 10 и 11 и 12 КлючФункция содержит имя функции обработки. Значения параметров п_ИмяРек77 и п_ИмяРек82 не анализируются и могут быть произвольными.

Например:

Поля имеют тип строка:

ДобавитьСоответствиеРеквизитов( "Сотрудники&ФизическиеЛица", "ИНН", 0, "ИНН" );

Поля имеют тип справочник:

ДобавитьСоответствиеРеквизитов( "Номенклатура&Номенклатура", "ЕдиницаИзмерения", 1, "БазоваяЕдиницаИзмерения", "ЕдиницыИзмерений&КлассификаторЕдиницИзмерения" );

Установка прочих реквизитов справочника:

ДобавитьСоответствиеРеквизитов( "Сотрудники&ФизическиеЛица", "ПрочиеРеквизиты", 10, "", "УстановитьРеквизитыФизЛица" );

Установка владельца справочника:

ДобавитьСоответствиеРеквизитов( "Договоры&ДоговорыКонтрагентов", "УстановкаВладельца", 11, "", "УстановитьВладельцаДоговора" );

Установки реквизитов содержащих перекрестные ссылки:

ДобавитьСоответствиеРеквизитов( "Контрагенты&Контрагенты", "ПрочиеРеквизиты", 12, "", "УстановитьДоговорИСчетКонтрагента" );

При импорте справочников программа анализирует установленное соответствие справочников и реквизитов и выполняет требуемое действие – копирует значение элемента, устанавливает ссылку на элемент справочника ( и создает его, если необходимо ) или вызывает процедуру обработки.

Для процедур типа 10 прототип процедуры имеет следующий вид:
Процедура ИмяПроцедуры( п_Спр77,  п_Эл82,  п_ИмяРек77,  п_ИмяРек82 )

Для процедур типа 11 и 12 прототип процедуры имеет следующий вид:
Процедура ИмяПроцедуры( п_Спр77,  п_Эл82 )

где
п_Спр77 – COM ссылка на элемент справочника 7.7.
п_Эл82 – справочник.объект 8.2.
п_ИмяРек77 – название реквизита справочника 7.7 так как оно определено в конфигураторе
п_ИмяРек82 – название реквизита справочника 8.2 так как оно определено в конфигураторе

Например:

Процедура УстановитьРеквизитыФизЛица( п_Спр77, п_Эл82, ИмяРек77, ИмяРек82 )

    Если п_Спр77.Пол.Идентификатор() = "Мужской" Тогда
        п_Эл82.Пол = Перечисления.ПолФизическихЛиц.Мужской;
    Иначе
        п_Эл82.Пол = Перечисления.ПолФизическихЛиц.Женский;
    КонецЕсли;   

КонецПроцедуры

Процедура УстановитьВладельцаДоговора( п_Спр77, п_Эл82 )>

       п_Эл82.Владелец = ПолучитьЭлементСправочника82( п_Спр77.Владелец, "Контрагенты", Истина );
   
КонецПроцедуры   

Процедура УстановитьДоговорИСчетКонтрагента( п_Спр77, п_Эл82 )
   
       п_Эл82.ОсновнойДоговорКонтрагента = ПолучитьЭлементСправочника82(          п_Спр77.ОсновнойДоговор, "ДоговорыКонтрагентов", Истина );
         п_Эл82.ОсновнойБанковскийСчет = ПолучитьЭлементСправочника82(     п_Спр77.ОсновнойСчет, "БанковскиеСчета", Истина );
   
КонецПроцедуры   

Для импорта всего справочника определены две процедуры

Процедура ИмпортироватьСправочник( п_Ключ )
и
Процедура ИмпортироватьПодчиненныйСправочник( п_Ключ, п_ВидСпрВладелец77, п_Функ = «» )

где
п_Ключ — ключ соответствия справочников.
п_ВидСпрВладелец77 – вид справочника владельца 7.7 так как он определен в конфигураторе.
п_Функ – имя функции определения необходимости импортировать элемент справочника. Эта функция должна возвращать Истина, если элемент необходимо импортировать или Ложь, в противном случае.

Прототип функции:
Функция ИмяФункции( п_Спр77, п_СпрВладелец77 )

Например:

ИмпортироватьСправочник( "Сотрудники&ФизическиеЛица" );

ИмпортироватьСправочник( "МестаХранения&Склады" );
 
ИмпортироватьПодчиненныйСправочник( "РасчетныеСчета&БанковскиеСчета", "Контрагенты" );

ИмпортироватьПодчиненныйСправочник( "Договоры&ДоговорыКонтрагентов", "Контрагенты", "ПроверитьНеобходимостьИмпортаДоговора" );

Пример функции определения необходимости импортировать элемент справочника:

Функция ПроверитьНеобходимостьИмпортаДоговора( п_Спр77, п_СпрВладелец77 )
   
    Если п_Спр77.Наименование = "Без договора (служебный; для платежей без указания договора)" Тогда
        Возврат Ложь;
    КонецЕсли;
   
    Если ПолучитьКодЭлемента77(п_СпрВладелец77.ОсновнойДоговор) <> ПолучитьКодЭлемента77(п_Спр77.ТекущийЭлемент()) Тогда
        Возврат Ложь;
    КонецЕсли;
   
    Возврат Истина;
   
КонецФункции   

Функция импорта элемента справочника это
Функция ПолучитьЭлементСправочника82( п_Спр77, п_ВидСпр82, п_ИзбежатьЗацикливания = ложь )

Где
п_Спр77 – СОМ ссылка на элемент справочника 7.7.
п_ВидСпр82 – вид справочника 8.2. так как он определен в конфигураторе.
ИзбежатьЗацикливания – установленный в Истина используется при получении перекрестных ссылок, для случаев когда элемент справочника еще не записан, и возможен взаимный вызов данной функции при попытке создания элементов справочников, ссылающихся друг на друга.

Например:

п_Эл82.Владелец = ПолучитьЭлементСправочника82( п_Спр77.Владелец, "Контрагенты", Истина );

Эта функция создаст элемент справочника, если на найдет его в базе, используя данные по соответствию реквизитов . Поиск наличия элементов осуществляется по вспомогательному справочнику «СоответствиеСправочников».

Импорт остатков по счетам.

Для импорта остатков по счетам определена процедура ИмпортироватьОстаткиПоСчету. Процедура выбирает остатки, согласно переданным параметрам и формирует документ «ВводНачальныхОстатков». Функция автоматически импортирует субконто вида справочник, для которых установлено соответствие. Для субконто других видов следует использовать процедуры обработки.

Прототип функции:
Процедура ИмпортироватьОстаткиПоСчету(  п_РазделУчета, п_ФункФО, п_Счет82, п_КодСчета77, п_Суб82_1, п_Суб82_2, п_Суб82_3, п_НомерСуб77_1 = Неопределено, п_НомерСуб77_2 = Неопределено, п_НомерСуб77_3 = Неопределено )

где
п_РазделУчета – ПеречислениеСсылка.РазделыУчетаДляВводаОстатков. (значение реквизита документа )
п_ФункФО – имя процедуры импортирования остатков.
п_Счет82 — ПланСчетовСсылка.Хозрасчетный. (Остатки п счету 8.2 ).
п_КодСчета77 – код счета 7.7.
п_Суб82_1, п_Суб82_2, п_Суб82_3 — Характеристика.ВидыСубконтоХозрасчетные (Субконто 8.2.)
п_НомерСуб77_1, п_НомерСуб77_2, п_НомерСуб77_3 – номер субконто 7.7, соответствующий субконто 8.2
или описатель функции обработки значения субконто.

Например:

Импортировать остатки по счету  60.1 (7.7.) -> 60.01 (8.2). Субконто счета 7.7 соответствуют субконто счета 8.2
для импорта используется процедура «СформироватьОстаткиПоПоставщикам»:

ИмпортироватьОстаткиПоСчету( Перечисления.РазделыУчетаДляВводаОстатков.РасчетыСПоставщикамиИПодрядчиками, "СформироватьОстаткиПоПоставщикам", 
                              ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками, "60.1", Справочники.Контрагенты, Справочники.ДоговорыКонтрагентов, Неопределено, 1, 2 );

Импортировать остатки по счету  50.1 (7.7.) -> 50.01 (8.2). Субконто не используются (или отсутствуют) 

ИмпортироватьОстаткиПоСчету( Перечисления.РазделыУчетаДляВводаОстатков.ДенежныеСредства, "СформироватьОстаткиПоКассе", 
                              ПланыСчетов.Хозрасчетный.КассаОрганизации, "50.1", Неопределено, Неопределено, Неопределено )

Импортировать остатки по счету  68.1 (7.7.) ->68.01 (8.2). Для получения субконто 7.7 используется функция «Субконто1_68», субконто соответствует первому субконто 8.2.

ИмпортироватьОстаткиПоСчету( Перечисления.РазделыУчетаДляВводаОстатков.РасчетыПоНалогамИСборам, "СформироватьОстаткиПоНалогам",      
                              ПланыСчетов.Хозрасчетный.НДФЛ, "68.1", Неопределено, Неопределено, Неопределено, "1&Субконто1_68" );

Прототип процедуры импортирования остатков:
Процедура ИмяПроцедуры( п_Док, п_Счет82, п_Суб1, п_Суб2, п_Суб3, п_БухИтоги77, п_КолДт, п_СуммаДт, п_КолКт, п_СуммаКт )

где
п_Док — ДокументОбъект. ВводНачальныхОстатков.
п_Счет82 — ПланСчетовСсылка.Хозрасчетный.
п_Суб1, п_Суб2, п_Суб3 – ссылки на субконто 8.2., в зависимости от типа
п_БухИтоги77 – СОМ ссылка на бухгалтерские итоги. Итоги выбираются по субконто.
п_КолДт, п_СуммаДт, п_КолКт, п_СуммаКт – итоги верхнего уровня субконто. Необходимы для вычисления стоимости по счетам без суммового учета, например по складам.

Например:

Процедура СформироватьОстаткиПоПоставщикам( п_Док, п_Счет82, п_Суб1, п_Суб2, п_Суб3, п_БухИтоги77, п_КолДт, п_СуммаДт, п_КолКт, п_СуммаКт )
   
    п_Док.ОтражатьПоСпециальнымРегистрам = ложь;
   
    ТабСтр = п_Док.РасчетыСКонтрагентами.Добавить();
    ТабСтр.СчетУчета = п_Счет82;
    ТабСтр.Контрагент = п_Суб1;
    ТабСтр.ДоговорКонтрагента = п_Суб2;
    Если п_Счет82.Код = "60.01" или п_Счет82.Код = "62.02" Тогда
        ТабСтр.Сумма = п_БухИтоги77.СНК("С");
    Иначе
        ТабСтр.Сумма = п_БухИтоги77.СНД("С");
    КонецЕсли;   
    ТабСтр.Документ = ПолучитьДокРасчета();
   
КонецПроцедуры

Описатель функции обработки значения субконто выглядит так: «НомерСубконт&ИмяФункции».
Прототип функции:
Функция ИмяФункции(  п_Суб77, п_БухИтоги77 )

где
п_Суб77 – СОМ ссылка на субконто 7.7 в зависимости от типа субконто 7.7.
п_БухИтоги77 – СОМ ссылка на бухгалтерские итоги. Итоги будут на том уровне на котором находится субконто.

Например:

Функция Субконто1_68( п_Суб77, п_БухИтоги77 )
    Возврат ПолучитьВидПлатежаВБюджет( п_Суб77 );        
КонецФункции

27 Comments

  1. TIG-PROGRAMMIST

    Все это хорошо за труды + но я сделал тоже самое только связи формируются по ключам хранящимся в дбф файле тем самым не требуется доработка конфигураций…

    Reply
  2. scape

    И где? Разработку в студию!!! Такую же…. 😮

    Reply
  3. scape

    Обновил обработку для загрузки из бухгалтерии ОСНО. Исправил мелкие косячки. Реализована загрузка остатков по большинству

    счетов стандартного плана счетов. Тестировалось на реальной базе, с ужасно кривым ведением учета.

    Так как ни каких комментариев не воспоследовало, то думаю за сим все, обновлений больше не будет.

    Потребительское отношение весьма свойственно человеческому виду…

    Reply
  4. al3ko

    Интересная разработка. Единственное что нашел из альтернативы стандартной обработке переноса остатков из 7.7 в 8.2.

    Попробую использовать для переноса остатков в БП 2.0

    Reply
  5. Ichigo

    Спасибо за разработку. Приходиться переносить из УСН в БП 2.0 а стандратный перенос почему то не получается.

    Reply
  6. jack_kkm

    Для УСН есть правила от 1с-ников, обновляешься до последнего релиза, правила ищешь в каталоге Extforms, файл USN_Acc8.xml. У меня получилось вполне успешно. Но требует доработки перенос контрагентов, конкретнее поиск контрагентов в базе приемнике. Если перенос из одной базы, то всё нормально, если из нескольких баз семерки в одну восьмерку, то будут плодиться двойники контрагентов.

    Для общей системы налогообложения сейчас есть правила, позволяющие выгрузить не только остатки, но и документы за период — очень удобно, спасибо 1с. Так же требует небольших доработок, но в целом всё хорошо.

    Reply
  7. Murik_1984

    Большое спасибо за обработку. Стандартные нифига не работают, если разные релизы. А тут в принципе можно дописать под себя, если что не получается.

    Reply
  8. tavro

    использовал, то что надо

    Reply
  9. evg300183

    Большое спасибо за обработку. Стандартные нифига не работают, если разные релизы. А тут нужно дописывать?

    Reply
  10. ASoft

    Спасибо. Использовал как шаблон.

    Reply
  11. PeaceDOS

    Спасибо. Помогло! Стандартные ваще не айс!

    Reply
  12. baralgin1003

    выдает сообщение что Код не уникален… вроде делал все как написано, не знаю уже куда и копать, то ли в бухе 77 глядеть, толи в код.. но в общем ничего, бодро)))

    Reply
  13. scape

    (28) baralgin1003,

    Отключи контроль уникальности номера справочника «СоответствиеСправочников». Упустил в инструкции этот момент.

    Reply
  14. kurvik

    Большое спасибо за обработку. Стандартной обработкой не получилось обработать. В принципе дописал немного подсебя несколько процедур.Помогло при переносе.

    Reply
  15. dn3d

    Спасибо! Помогло очень!

    Reply
  16. scape

    (30) kurvik,

    Оно и подразумивалось что под себя надо дорабатывать…

    Reply
  17. MegatronX

    Для Тис работать не будет?

    Reply
  18. scape

    (33) MegatronX,

    Только справочники перенести можно, и то надо настраивать перенос.

    Reply
  19. realmrak

    Возможно ли использование этой вещицы для переноса из 7.7 ПУБ в 8.2 Бухгалтерию? И имеет ли значение релиз конфы (у меня последние конфигурации для Украины — ПУБ 7.70.041 и Бух 1.2.5.3)?

    Reply
  20. scape

    Релиз значения не имеет. В любом случае нужно дорабатывать.

    Reply
  21. mishkaaa

    Спасибо! Долго искал подобную обработку, буду пробовать.

    Reply
  22. NataZ

    А из Предпринимателя 7.7 в Бух 8.2 перенесет?

    Reply
  23. scape

    Смотри пункт 34.

    Разработка работает с компонентой Бухгалтерский учет, т.е. остатки по бухгалтерским счетам. Предприниматель и ТиС работают на регистрах.

    Reply
  24. sergant500

    Классная обработка! Шаблоны переделал под себя. Легко дорабатывать, рекомендую.

    Reply
  25. p1l1gr1m

    Хорошая вещь, рекомендую.

    Важное замечание — у создаваемого служебного справочника «СоответствиеСправочников», помимо отключения Автонумерации, следует отключить Контроль уникальности кодов (т.к., например, могут быть два элемента из разных справочников из 7.7 с одинаковым кодом, а код из 7.7 записывается в данной обработке как код элемента соответствия в данном служебном справочнике).

    Но лучше всего сделать отдельное поле для хранения кода элементов справочников 7.7 для элемента соответствия в данном служебном справочнике 8.2, т.к. полный код (с вышестоящей иерархией) элемента 7.7 может не поместиться в максимальные 50 символов длины кода служебного справочника в 8.2. Плюс, сделать проверку на повторяющие коды в справочниках 7.7, т.к. они могут быть не уникальны, соответственно могут быть установлены неверные соответствия из служебного справочника соответствий в 8.2.

    Reply
  26. JLaikova

    (41) p1l1gr1m, Отключила Автонумерацию и контроль уникальности в созданном справочнике СоответствиеСправчников, а код не уникален все равно выдает на загрузке 10,3 счета . Что не так делаю?

    Reply
  27. Invodev

    Вот спасибо! Мощный инструмент. Сама хотела написать что нибудь в этом роде, да всё некогда.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *