Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перенос плана счетов из 1с7.7 в 1с8.1
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Lefer
Доброго времени суток. Столкнулся с проблемой при переносе счетов из семёрки в восьмерку. Написано две обработки. Первая для выгрузки счетов из семёрки, вторая для загрузки их в восьмерку. При загрузке успешно записываются все счета, значения субконто. Только выдается ошибка "Повторение субконто. Вызвана она тем, что при загрузке счета не указывается его родитель. В dbf файле указывается, что такой-то счет является группой, а такой элементом группы. Вот кусок кода, посвященный определению родителя счета.

    Файл1 = Новый XBase;
    Файл1.Кодировка = КодировкаXBase.OEM;
    Файл1.ОткрытьФайл(СокрЛП(ЭлементыФормы.ПутьШапкаСчета.Значение), , Истина); //только для чтения
    Файл1.Первая();
    
    Пока НЕ Файл1.ВКонце() Цикл
        //Поиск счета в ПланеСчетов по коду из dbf файла    
        КодСчета                  = СокрЛП(Файл1.ID);
        КодСчета                  = СтрЗаменить(КодСчета,".","");
        ПоискКодаСчета            = ПланыСчетов.Основной.НайтиПоКоду(СокрЛП(КодСчета));
        //Если счет найден, тогда определяем его родителя
        Если НЕ ПоискКодаСчета.Пустая() Тогда
            //    Файл1.NAME9 - идентификатор группы. Файл1.NAME8 - код родителя.
            Если Файл1.NAME9 = 0 Тогда    
                ПоискРодителя        = ПланыСчетов.Основной.НайтиПоКоду(СокрЛП(Файл1.NAME8));    
                СамРодитель          = ПоискРодителя.ПолучитьОбъект();
                ОбъектСчета          = ПоискКодаСчета.ПолучитьОбъект();
                ОбъектСчета.Родитель = СамРодитель;
                ОбъектСчета.Записать();
            КонецЕсли;
        КонецЕсли;
        Файл1.Следующая();    
    КонецЦикла;
    Файл1.ЗакрытьФайл();


Выдает ошибку, что Объект не выбран для строки ОбъектСчета.Родитель = СамРодитель; В отладчике проверял - до этой строчки все значения выбираются абсолютно правильно. Если кто сталкивался с подобным, подскажите пожалуйста, как программно перенести счета. Заранее спасибо.
Creaturka
как минимум из неточностей: реквизит Родитель имеет ссылочный тип, а не объектный, т.е. в Вашем случае ОбъектСчета.Родитель = ПоискРодителя
Lefer
Цитата(Creaturka @ 17.06.10, 14:41) необходимо зарегистрироваться для просмотра ссылки
как минимум из неточностей: реквизит Родитель имеет ссылочный тип, а не объектный, т.е. в Вашем случае ОбъектСчета.Родитель = ПоискРодителя


Нет, не в этом дело. Да, ошибка исчезла, но дальше, когда обрабатываются СубКонто счета выдается ошибка повторения субконто, так как родитель не записался. Если смотреть отладчиком, то родитель находится, но не устанавливается и не записывается.
Creaturka
а точно ли проблема в родителе? дублирование субконто имеет другие причины, и похоже, ошибку нужно искать в обработке субконто
Lefer
Цитата(Creaturka @ 17.06.10, 16:16) необходимо зарегистрироваться для просмотра ссылки
а точно ли проблема в родителе? дублирование субконто имеет другие причины, и похоже, ошибку нужно искать в обработке субконто


Задумывался над этим. Дело в том, что если в Конфигураторе начать создавать предопределенный счет, то при попытке добавления одинакового субконто счета результат при записи счета будет тот же..дублирование субконто. Даже если дело не в родителе, почему он не записывается?
Creaturka
для проверки советую оставить в процедуре только код по определению родителя (из примера и с корректировкой), и еще раз промониторить значения:
а. ОбъектСчета.Родитель до выполнения ОбъектСчета.Родитель = ПоискРодителя;
б. ОбъектСчета.Родитель, только после;
в. Тип значения переменной ПоискРодителя
Lefer
Вот за идею с тем, чтобы проследить тип значения ПоискРодителя спс. Может там и кроются грабли. Результат уже завтра скажу.
Zaval
biggrin.gif А не дает ли Родитель своему дитю свои субконто в наследство? А тут еще прогаммер что-то вписать пытается... вот и задвоение.
Lefer
Цитата(Zaval @ 17.06.10, 17:36) необходимо зарегистрироваться для просмотра ссылки
biggrin.gif А не дает ли Родитель своему дитю свои субконто в наследство? А тут еще прогаммер что-то вписать пытается... вот и задвоение.


Нет, не дает. Работа обработки разбита на 3 этапа. Первый - запись самого счета. Второй поиск по плану счетов на основании dbf файла - этот кусок кода я выложил. Третий этап запись субконто. Исключая 3 этап получаем - у нас должны быть счета с родителями. Их нет....
Lefer
С родителями вопрос решен. Дело было в том, что сначала необходимо указывать так сказать прадедушку всех счетов - это Счет. То есть, допустим у нас есть забалансовый счет Д. У него есть подчиненные счета ДД, ДД.1, ДД.2. Для Д родителем будет Счет, для ДД схема родительства будет соответственно Родитель Д -> Счет. И так далее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.