Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перенос данных с 1с Бухгалтерия 7.7 в Комплексный учет 8.2
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Страницы: 1, 2
meverikxp
Здравствуйте, есть задание: перенести базу с 1С бухгалтерия для Украины 7.7 реализ (7.7.016) в Комплексный учет для бюджетных организаций Украины (1.0.15). Нужно перетянуть не только справочники, но и документы. В папке с реализом для 8.2 есть обработка для переносу данных но она для версии 2.0.
Подскажите как лучше реализовать обмен?. Спасибо!!!
Ardi
Руками.
meverikxp
Цитата(Ardi @ 26.12.11, 13:03) необходимо зарегистрироваться для просмотра ссылки
Руками.

А более развернутой форме можно??? Где найти пример обработки с описанием для связи с базой 7.7 как это делается и т.д. Спасибо!!!
Batchir
Мама моя дорогая, это ж что за бухгалтерия то такая ???
Тут руками конвертацию данных нужно использовать
meverikxp
Цитата(Batchir @ 26.12.11, 14:51) необходимо зарегистрироваться для просмотра ссылки
Мама моя дорогая, это ж что за бухгалтерия то такая ???
Тут руками конвертацию данных нужно использовать

Да я понимаю что это древняя бухгалтерия, но надо сделать. Просто направьте куда копать и что и где прочитать. Если можно дайте ссылки. Заранее ОГРОМНОЕ СПАСИБО!!!
Batchir
Копайте в сторону конфигурации "Конвертация данных"
Ссылка на литературу: необходимо зарегистрироваться для просмотра ссылки
meverikxp
Цитата(Batchir @ 26.12.11, 16:07) необходимо зарегистрироваться для просмотра ссылки
Копайте в сторону конфигурации "Конвертация данных"
Ссылка на литературу: необходимо зарегистрироваться для просмотра ссылки

Спасибо, посмотрю.
MATEVI
необходимо зарегистрироваться для просмотра ссылки
meverikxp
Цитата(MATEVI @ 27.12.11, 0:13) необходимо зарегистрироваться для просмотра ссылки
необходимо зарегистрироваться для просмотра ссылки

Спс. буду пробовать. Потом отпишусь что получилось
WKBAPKA
Цитата(meverikxp @ 27.12.11, 14:15) необходимо зарегистрироваться для просмотра ссылки
Спс. буду пробовать. Потом отпишусь что получилось

дауж опишитесь!
alex040269
КД 2.0 доступна для всех зарегистрированных на users.v8.1c.ru
meverikxp
Список сотрудников перенесся без проблем, но должность, прием на работу и т.д нет это возможно перенести или нет?
Ardi
Цитата(meverikxp @ 28.12.11, 13:34) необходимо зарегистрироваться для просмотра ссылки
Список сотрудников перенесся без проблем, но должность, прием на работу и т.д нет это возможно перенести или нет?

К конвертации данных идут ряд брошурок. От 20 до 700 страниц.
mister-x
Мeverikxp і в нас на форумі є книга до цієї конфіги, шукайте через необходимо зарегистрироваться для просмотра ссылки Бояркин В.Э., Филатов А.И.
meverikxp
Цитата(mister-x @ 28.12.11, 13:27) необходимо зарегистрироваться для просмотра ссылки
Мeverikxp і в нас на форумі є книга до цієї конфіги, шукайте через необходимо зарегистрироваться для просмотра ссылки Бояркин В.Э., Филатов А.И.

Долблюсь уже с этой переноской несколько дней, список справочников перенес без проблем, но возникают сложности при переносе тех реквизитов которых нет в 7-ке, но обязательны в 8-ке, может подскажете как реализовать заполнение реквизитов, отсутствующих в 7-ке, при загрузке данных в 8-ку?

ЗЫ: Просматривал книги который вы порекомендовали, но там нет четкого описания решения проблемы.
Ardi
Неправильный, но простой способ - это написать отдельную обработку которая потом дозаполнит эти реквизиты.

А правильный - это генерировать значения реквизитов при выгрузке из 7.7.
meverikxp
Цитата(Ardi @ 04.01.12, 10:54) необходимо зарегистрироваться для просмотра ссылки
Неправильный, но простой способ - это написать отдельную обработку которая потом дозаполнит эти реквизиты.

А правильный - это генерировать значения реквизитов при выгрузке из 7.7.

Ну в принципе я знаю что нужно генерировать, но какие правили создания реквизитов при выгрузке?
pablo
Посмотрите демо-версию своей 8 конфигурации и определитесь, какие значения будут в тех или иных случаях. Ваш вопрос сильно контекстно-зависим.
meverikxp
Цитата
Цитата(pablo @ 04.01.12, 11:17) необходимо зарегистрироваться для просмотра ссылки

Посмотрите демо-версию своей 8 конфигурации и определитесь, какие значения будут в тех или иных случаях. Ваш вопрос сильно контекстно-зависим.

В принципе с значениями я определился. Ну например в справочнике сотрудники 8.2 есть реквизит Организация, но в 7-ке его нету, Как сделать так что бы при загрузке заполнять значение из справочника Организации
НайтиПоНаименованию("Наша Организация")
, как это реализовать?
5_kopeek
Цитата(meverikxp @ 04.01.12, 11:34) необходимо зарегистрироваться для просмотра ссылки
Ну например в справочнике сотрудники 8.2 есть реквизит Организация, но в 7-ке его нету, Как сделать так что бы при загрузке заполнять значение из справочника Организации
НайтиПоНаименованию("Наша Организация")
, как это реализовать?

Создать при загрузке новый элемент справочника Организации по данным из аналогичного элемента справочника Фирмы выгружаемой базы.
meverikxp
Цитата(5_kopeek @ 04.01.12, 13:21) необходимо зарегистрироваться для просмотра ссылки
Создать при загрузке новый элемент справочника Организации по данным из аналогичного элемента справочника Фирмы выгружаемой базы.

Зачем? Он и так создан. Просто нужно присвоить ему значение, Но как это сделать в конвертации данных?
MATEVI
Цитата(meverikxp @ 04.01.12, 13:39) необходимо зарегистрироваться для просмотра ссылки
Зачем? Он и так создан. Просто нужно присвоить ему значение, Но как это сделать в конвертации данных?

Перед выгрузкой - Значение = Параметры.Организация;
meverikxp
Цитата(MATEVI @ 04.01.12, 14:15) необходимо зарегистрироваться для просмотра ссылки
Перед выгрузкой - Значение = Параметры.Организация;

Сделал так, но 7-ка при выгрузке пишет:
Цитата
Ошибка получения значения свойств объекта.
Объект."Сотрудник", свойство: Организация

И что с этим делать
MATEVI
Цитата(meverikxp @ 04.01.12, 14:35) необходимо зарегистрироваться для просмотра ссылки
Сделал так, но 7-ка при выгрузке пишет:

И что с этим делать

Добавить параметр Организация. Взять типовые правила посмотреть что у чему.
meverikxp
Цитата(MATEVI @ 04.01.12, 15:24) необходимо зарегистрироваться для просмотра ссылки
Добавить параметр Организация. Взять типовые правила посмотреть что у чему.

При выгрузке список параметров пуст и нет возможности добавить
meverikxp
Пробую сделать обработку сам. создал соединение с базой 7.7 следующим кодом

Перем База,ЕстьПодключение;
Процедура КнопкаВыполнитьНажатие(Кнопка)
    База="";
    База=Новый COMОбъект("V77.Application");
    
    Попытка  
        СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(Пользователь)+""" /P"""+СокрЛП(Пароль)+"""";
        Открыта=База.Initialize(База.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW");
        
        Если Открыта Тогда
            ЕстьПодключение = Истина;
        Иначе
            Предупреждение("Ошибка при подключении!");
            ЕстьПодключение = Ложь;
        КонецЕсли;    
    Исключение
        Предупреждение("Ошибка при подключении!");
        ЕстьПодключение = Ложь;
    КонецПопытки;
    
    УправлениеДоступностью();
    
    
    
КонецПроцедуры

Процедура ПутьКБазеНачалоВыбора(Элемент, СтандартнаяОбработка)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    Диалог.Заголовок = "Укажите путь к базе ...";

    Если Не Диалог.Выбрать() Тогда
        Возврат;
    КонецЕсли;          
    
    ПутьКБазе = Диалог.Каталог;
КонецПроцедуры
Процедура УправлениеДоступностью()
    
    Если ЕстьПодключение Тогда
        ЭлементыФормы.НадписьПодключения.Заголовок = "База успешно подключена";
        ЭлементыФормы.НадписьПодключения.ЦветТекста = WebЦвета.Зеленый;
    Иначе
        ЭлементыФормы.НадписьПодключения.Заголовок = "База не подключена";
        ЭлементыФормы.НадписьПодключения.ЦветТекста = WebЦвета.Красный;
        
    КонецЕсли;
КонецПроцедуры;

Но теперь возник следующий вопрос: как из этого соединения взять данные, как к ним обращаться?
Ardi
Функция ОткрытьФирму(Путь,Пользователь,Пароль="")  
    Бух=0;
    Бух = новый COMОбъект("v77.application"); //СоздатьОбъект("V77.Application");
    Открыта = Бух.Initialize(Бух.RMTrade, "/d"+Путь+" /N"+Пользователь+?(Пароль="",""," /P"+Пароль),"NO_SPLASH_SHOW");
    //Открыта = Бух.Initialize(Бух.RMTrade, "","NO_SPLASH_SHOW");
    
    Если Открыта = 0 Тогда
        Предупреждение("Ошибка открытия информационной базы "+Путь);
        Возврат 0;
    КонецЕсли;
    Возврат 1;
КонецФункции


Процедура КнопкаВыполнитьНажатие(Кнопка)
    ВидНоменклатурыТовар=Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001");
    едИзмеренияШтука=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
    Если ОткрытьФирму(ПутьКБазе,"Админов","")=0 Тогда
        Возврат;
    КонецЕсли;
    спр=Бух.CreateObject("Справочник.Номенклатура");  
    спр.ВыбратьЭлементы();
    Пока спр.ПолучитьЭлемент()=1 цикл
        НайденнаяСсылка=Справочники.Номенклатура.НайтиПоКоду(спр.код);
        если НайденнаяСсылка = Справочники.Номенклатура.ПустаяСсылка() Тогда
            Если спр.ЭтоГруппа()=1 Тогда
                нов= Справочники.Номенклатура.СоздатьГруппу();    
            Иначе
                нов= Справочники.Номенклатура.СоздатьЭлемент();
            КонецЕсли;            
        иначе
            нов=НайденнаяСсылка.ПолучитьОбъект();
        КонецЕсли;
        
        
        Если спр.ЭтоГруппа()=1 Тогда
            нов.Код=спр.код;
            нов.Наименование=спр.Наименование;
            нов.ВидНоменклатуры = ВидНоменклатурыТовар;
        Иначе
            нов.Код=спр.код;
            нов.Наименование=спр.Наименование;
            нов.НаименованиеПолное=спр.Наименование;
            нов.ВидНоменклатуры = ВидНоменклатурыТовар;
            нов.БазоваяЕдиницаИзмерения =едИзмеренияШтука;
            нов.СтавкаНДС=СтавкаНДС(спр);
        КонецЕсли;
        нов.Родитель=Родитель(спр.Родитель.Код);
        
        нов.записать();
        если спр.пометкаУдаления()=1 Тогда
            нов.УстановитьПометкуУдаления();
        КонецЕсли;
        тп=ТабличноеПоле1.Добавить();
        тп.ссылка=нов.Ссылка;
        сообщить(спр.ЭтоГруппа());
        Если спр.ЭтоГруппа()=0 Тогда
            нов.ЕдиницаХраненияОстатков=ДопЕдИзм(нов.Ссылка);
            нов.ЕдиницаДляОтчетов=нов.ЕдиницаХраненияОстатков;
            нов.Записать();
        КонецЕсли;
        //сообщить(спр.Наименование);
        //сообщить(спр.Код);
        //сообщить(спр.БазоваяЕдиница.наименование);
    Конеццикла;
    //Док=СоздатьОбъект("Документ.БанковскаяВыписка");
    //Док.ВыбратьДокументы(НачДата,КонДата);
    //Пока Док.ПолучитьДокумент()=1 Цикл      
    //    Состояние(""+Док.ТекущийДокумент());
    //    Если Док.ТекущийДокумент().КоличествоСтрок()=0 Тогда
    //        Продолжить;
    //    КонецЕсли;
    //    ОбработатьБВ(Док);
    //    //Возврат;
    //КонецЦикла;
    
    
    Бух=0;
    //Предупреждение("Обработка завершена!");
    
КонецПроцедуры
meverikxp
Цитата(Ardi @ 05.01.12, 1:38) необходимо зарегистрироваться для просмотра ссылки
Функция ОткрытьФирму(Путь,Пользователь,Пароль="")  
    ....
    
КонецПроцедуры


Сделал так вроде получилось, но есть проблема с перенесением оклада, в базе 7.7 он есть, а на 8.2 значение "COMОбъект. Почему???
Ardi
В отладчике писать склад.Код, склад.наименование а не склад

Тогда отладчик отобразит.
shurik_shurik
Цитата(meverikxp @ 10.01.12, 12:04) необходимо зарегистрироваться для просмотра ссылки
Сделал так вроде получилось, но есть проблема с перенесением оклада, в базе 7.7 он есть, а на 8.2 значение "COMОбъект. Почему???

Потому, что в базе 7.7 это периодический реквизит.
meverikxp
Цитата(shurik_shurik @ 10.01.12, 12:01) необходимо зарегистрироваться для просмотра ссылки
Потому, что в базе 7.7 это периодический реквизит.

Это ссылочный реквизит который ссылается на справочник Должности.Оклад, подскажите как его оттуда достать, пробовал Должности.Оклад не получается?
shurik_shurik
Цитата(meverikxp @ 10.01.12, 13:10) необходимо зарегистрироваться для просмотра ссылки
Это ссылочный реквизит который ссылается на справочник Должности.Оклад, подскажите как его оттуда достать, пробовал Должности.Оклад не получается?

нужно создать новый COM объект для справочника Должности, и использовать НайтиЭлемент по значению реквизита первого справочника
meverikxp
Цитата(shurik_shurik @ 10.01.12, 12:31) необходимо зарегистрироваться для просмотра ссылки
нужно создать новый COM объект для справочника Должности, и использовать НайтиЭлемент по значению реквизита первого справочника


Делаю так:

Спр77=База.CreateObject("Справочник.Сотрудники");
    Спр77.ВыбратьЭлементы();
    
    
Пока спр77.ПолучитьЭлемент()=1 Цикл
...
Оклад77= База.CreateObject("Справочник.Должности");
        Должность = Оклад77.НайтиЭлемент(Спр77.Должность);
        Оклад = Должность.Оклад;
...
КонецЦикла

Пишет: Значение не является значением объектного типа (Оклад)
?????
shurik_shurik
Цитата(meverikxp @ 10.01.12, 13:41) необходимо зарегистрироваться для просмотра ссылки
Пишет: Значение не является значением объектного типа (Оклад)

В этом случае, оклад уже явно периодический реквизит. Можно попробовать дописать метод Получить(Дата).
Или лучше добавить строку Оклад77.ИспользоватьДату(<дата>).
И вынесете создание комобъекта на уровень выше относительно цикла обхода справочника сотрудники.
Кстати, строку тоже можно вписать до цикла.
meverikxp
Цитата(shurik_shurik @ 10.01.12, 13:08) необходимо зарегистрироваться для просмотра ссылки
В этом случае, оклад уже явно периодический реквизит. Можно попробовать дописать метод Получить(Дата).
Или лучше добавить строку Оклад77.ИспользоватьДату(<дата>).
И вынесете создание комобъекта на уровень выше относительно цикла обхода справочника сотрудники.
Кстати, строку тоже можно вписать до цикла.

Сделал так:
Спр77=База.CreateObject("Справочник.Сотрудники");
    Спр77.ВыбратьЭлементы();
    Оклад77= База.CreateObject("Справочник.Должности");
    Оклад77.ИспользоватьДату('20111231');    
    
Пока спр77.ПолучитьЭлемент()=1 Цикл
        
Если Спр77.ЭтоГруппа()=0 Тогда    
        
        Наименование = Спр77.Наименование;
        Должность = Спр77.Должность;
        Должность = Оклад77.НайтиЭлемент(Спр77.Должность);
        Оклад = Должность.Оклад;
КонецЕсли;

    КонецЦикла;

Но ошибка та же
shurik_shurik
Цитата(meverikxp @ 10.01.12, 14:34) необходимо зарегистрироваться для просмотра ссылки
Но ошибка та же

Если Вас не затруднит, полный текст ошибки, предварительно переименовав переменную Оклад на Оклад8, например.
Кстати, в методе ИспользоватьДату(), дату лучше указать в виде '31.12.11'
mister-x
попробуйте всі методи і системні властивості бази до якої звертаєтесь (7.7) замінити на англ. відповідники - можливо, тут собака зарита
ЗІ. мені помогло коли я із бази 7.7 підключався до іншої бази 7.7 для переносу даних по OLE
meverikxp
Цитата(mister-x @ 10.01.12, 13:47) необходимо зарегистрироваться для просмотра ссылки
попробуйте всі методи і системні властивості бази до якої звертаєтесь (7.7) замінити на англ. відповідники - можливо, тут собака зарита
ЗІ. мені помогло коли я із бази 7.7 підключався до іншої бази 7.7 для переносу даних по OLE

Я точно не знаю как они будут по англ.

Цитата(shurik_shurik @ 10.01.12, 13:45) необходимо зарегистрироваться для просмотра ссылки
Если Вас не затруднит, полный текст ошибки, предварительно переименовав переменную Оклад на Оклад8, например.
Кстати, в методе ИспользоватьДату(), дату лучше указать в виде '31.12.11'

Теперь ошибка выглядит так:
Значение не является значением объектного типа (Оклад)
        Оклад8 = Должность.Оклад;

И как по другому написать дату формат в виде '31.12.11' - не определяет пишет " Неправильная константа типа Дата"
mister-x
Цитата
Я точно не знаю как они будут по англ.
тут необходимо зарегистрироваться для просмотра ссылки все є
meverikxp
Цитата(mister-x @ 10.01.12, 14:19) необходимо зарегистрироваться для просмотра ссылки
тут необходимо зарегистрироваться для просмотра ссылки все є

А пароль к архиву какой?
mister-x
в правилах необходимо зарегистрироваться для просмотра ссылки вказано
Vofka
Цитата
А пароль к архиву какой?

А правила читать дядя Петя будет?

mister-x, ну и зачем вы пароль указываете здесь? Пусть правила читает! angry.gif
mister-x
Цитата
mister-x, ну и зачем вы пароль указываете здесь? Пусть правила читает!
ок
meverikxp
Цитата(Vofka @ 10.01.12, 14:24) необходимо зарегистрироваться для просмотра ссылки
А правила читать дядя Петя будет?

mister-x, ну и зачем вы пароль указываете здесь? Пусть правила читает! angry.gif

Никогда не сталкивался с этой проблемой. Извините

Цитата(mister-x @ 10.01.12, 13:47) необходимо зарегистрироваться для просмотра ссылки
попробуйте всі методи і системні властивості бази до якої звертаєтесь (7.7) замінити на англ. відповідники - можливо, тут собака зарита
ЗІ. мені помогло коли я із бази 7.7 підключався до іншої бази 7.7 для переносу даних по OLE

Сделал так:
Спр77=База.CreateObject("Справочник.Сотрудники");
    Спр77.SelectItems();
    Оклад77= База.CreateObject("Справочник.ШтатнийРозклад");
    Оклад77.UseDate('20111231');    
    
Пока спр77.GetItem()=1 Цикл
        
Если Спр77.ЭтоГруппа()=0 Тогда    
        Наименование = Спр77.Наименование;
        Должность = Оклад77.FindItem(Спр77.Должность);
        Оклад8 = Должность.Оклад;
        Сообщить (Оклад8);
КонецЕсли;

    КонецЦикла;

Ошибка та же
shurik_shurik
Отладчиком пробовали?
И какая точно конфигурация базы 7.7. В стандартной бухгалтерии Оклад, это периодический реквизит справочника сотрудники, в бюджетной комплексной бухгалтерии тоже так.
Попробуйте строки Оклад8 = Должность.Оклад; Сообщить (Оклад8); заменить на Сообщить(Должность.Оклад), и еще перед этим напишите Сообщить(Должность.ТекущийЭлемент).
meverikxp
Цитата(shurik_shurik @ 10.01.12, 15:33) необходимо зарегистрироваться для просмотра ссылки
Отладчиком пробовали?
И какая точно конфигурация базы 7.7. В стандартной бухгалтерии Оклад, это периодический реквизит справочника сотрудники, в бюджетной комплексной бухгалтерии тоже так.
Попробуйте строки Оклад8 = Должность.Оклад; Сообщить (Оклад8); заменить на Сообщить(Должность.Оклад), и еще перед этим напишите Сообщить(Должность.ТекущийЭлемент).

Да, я всегда запускаю приложение в режиме отладки.
Насколько я понял это не стандартная конфигурация, а измененная, Справочник на самом деле называется не Должности, а ШтатнийРозклад, которого в стандартной конфе нету.
Попробовал сделать
Сообщить (Должность.Оклад)

та же ошибка, оклад не объективного типа
shurik_shurik
А если так:
Если Спр77.ЭтоГруппа()=0 Тогда    
        Наименование = Спр77.Наименование;
        Оклад77.FindItem(Спр77.Должность);
        Оклад8 = Оклад77.Оклад;
        Сообщить (Оклад8);
КонецЕсли;
meverikxp
Цитата(shurik_shurik @ 10.01.12, 16:34) необходимо зарегистрироваться для просмотра ссылки
А если так:
Если Спр77.ЭтоГруппа()=0 Тогда    
        Наименование = Спр77.Наименование;
        Оклад77.FindItem(Спр77.Должность);
        Оклад8 = Оклад77.Оклад;
        Сообщить (Оклад8);
КонецЕсли;

Так сообщает для всех элементов "0".
Делал точку останова, так получается - Спр77.Должность - равняется например "Окулист" , а значение Оклад77.FindItem(Спр77.Должность) = 0, и тип число, судя по этому обработка не находит нужный элемент
Обнаружил некий интересный момент, на самом деле в справочнике сотрудники есть два реквизита Должность и посада, и именно посада имеет ссылочный тип на справочник ШтатныийРозклад и он тоже переодический, так если я правильно понял нужно искать именно от этого реквизита, но как, его значение сейчас равен COMОбъект
shurik_shurik
Цитата(meverikxp @ 10.01.12, 17:45) необходимо зарегистрироваться для просмотра ссылки

но как, его значение сейчас равен COMОбъект

Для начала попробовать скормить его методу FindItem, только желательно предварительно для переменной справочника СПР77 использовать UseDate.
Так-же можно попытаться использовать метод НайтиПоКоду(); Код получить через спр77.Посада.Код или ПолныйКод() в зависимости от настройки кодов в справочнике ШтатнийРозклад
meverikxp
Цитата(shurik_shurik @ 10.01.12, 17:50) необходимо зарегистрироваться для просмотра ссылки
Для начала попробовать скормить его методу FindItem, только желательно предварительно для переменной справочника СПР77 использовать UseDate.
Так-же можно попытаться использовать метод НайтиПоКоду(); Код получить через спр77.Посада.Код или ПолныйКод() в зависимости от настройки кодов в справочнике ШтатнийРозклад

Да, действительно получилось. УРА!!!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.