Версия для печати темы (https://pro1c.org.ua/index.php?s=e5200aab5556141569a105a20bacbb43&showtopic=5778)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Перенос данных с 1с Бухгалтерия 7.7 в Комплексный учет 8.2

Автор: meverikxp 26.12.11, 12:36

Здравствуйте, есть задание: перенести базу с 1С бухгалтерия для Украины 7.7 реализ (7.7.016) в Комплексный учет для бюджетных организаций Украины (1.0.15). Нужно перетянуть не только справочники, но и документы. В папке с реализом для 8.2 есть обработка для переносу данных но она для версии 2.0.
Подскажите как лучше реализовать обмен?. Спасибо!!!

Автор: Ardi 26.12.11, 13:03

Руками.

Автор: meverikxp 26.12.11, 14:08

Цитата(Ardi @ 26.12.11, 13:03) *
Руками.

А более развернутой форме можно??? Где найти пример обработки с описанием для связи с базой 7.7 как это делается и т.д. Спасибо!!!

Автор: Batchir 26.12.11, 14:51

Мама моя дорогая, это ж что за бухгалтерия то такая ???
Тут руками конвертацию данных нужно использовать

Автор: meverikxp 26.12.11, 14:59

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

Да я понимаю что это древняя бухгалтерия, но надо сделать. Просто направьте куда копать и что и где прочитать. Если можно дайте ссылки. Заранее ОГРОМНОЕ СПАСИБО!!!

Автор: Batchir 26.12.11, 16:07

Копайте в сторону конфигурации "Конвертация данных"
Ссылка на литературу: http://pro1c.org.ua/redirect.php?http://ifolder.ru/27615105

Автор: meverikxp 26.12.11, 16:11

Цитата(Batchir @ 26.12.11, 16:07) http://pro1c.org.ua/index.php?act=findpost&pid=39663

Спасибо, посмотрю.

Автор: MATEVI 27.12.11, 0:13

http://pro1c.org.ua/index.php?s=&showtopic=2251&view=findpost&p=14225

Автор: meverikxp 27.12.11, 14:15

Цитата(MATEVI @ 27.12.11, 0:13) http://pro1c.org.ua/index.php?act=findpost&pid=39700

Спс. буду пробовать. Потом отпишусь что получилось

Автор: WKBAPKA 27.12.11, 18:58

Цитата(meverikxp @ 27.12.11, 14:15) *
Спс. буду пробовать. Потом отпишусь что получилось

дауж опишитесь!

Автор: alex040269 27.12.11, 19:45

КД 2.0 доступна для всех зарегистрированных на users.v8.1c.ru

Автор: meverikxp 28.12.11, 12:34

Список сотрудников перенесся без проблем, но должность, прием на работу и т.д нет это возможно перенести или нет?

Автор: Ardi 28.12.11, 12:38

Цитата(meverikxp @ 28.12.11, 13:34) *
Список сотрудников перенесся без проблем, но должность, прием на работу и т.д нет это возможно перенести или нет?

К конвертации данных идут ряд брошурок. От 20 до 700 страниц.

Автор: mister-x 28.12.11, 13:27

Мeverikxp і в нас на форумі є книга до цієї конфіги, шукайте через http://pro1c.org.ua/index.php?s=&act=Search&mode=adv&f=256 Бояркин В.Э., Филатов А.И.

Автор: meverikxp 04.01.12, 10:38

Цитата(mister-x @ 28.12.11, 13:27) http://pro1c.org.ua/index.php?act=findpost&pid=39842 Бояркин В.Э., Филатов А.И.

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

ЗЫ: Просматривал книги который вы порекомендовали, но там нет четкого описания решения проблемы.

Автор: Ardi 04.01.12, 10:54

Неправильный, но простой способ - это написать отдельную обработку которая потом дозаполнит эти реквизиты.

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

Автор: meverikxp 04.01.12, 11:02

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

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

Ну в принципе я знаю что нужно генерировать, но какие правили создания реквизитов при выгрузке?

Автор: pablo 04.01.12, 11:17

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

Автор: meverikxp 04.01.12, 11:34

Цитата
Цитата(pablo @ 04.01.12, 11:17) *

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

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

Автор: 5_kopeek 04.01.12, 13:21

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

Создать при загрузке новый элемент справочника Организации по данным из аналогичного элемента справочника Фирмы выгружаемой базы.

Автор: meverikxp 04.01.12, 13:39

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

Зачем? Он и так создан. Просто нужно присвоить ему значение, Но как это сделать в конвертации данных?

Автор: MATEVI 04.01.12, 14:15

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

Перед выгрузкой - Значение = Параметры.Организация;

Автор: meverikxp 04.01.12, 14:35

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

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

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

Автор: MATEVI 04.01.12, 15:24

Цитата(meverikxp @ 04.01.12, 14:35) *
Сделал так, но 7-ка при выгрузке пишет:

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

Добавить параметр Организация. Взять типовые правила посмотреть что у чему.

Автор: meverikxp 04.01.12, 15:40

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

При выгрузке список параметров пуст и нет возможности добавить

Автор: meverikxp 04.01.12, 17:33

Пробую сделать обработку сам. создал соединение с базой 7.7 следующим кодом

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

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

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

Но теперь возник следующий вопрос: как из этого соединения взять данные, как к ним обращаться?

Автор: Ardi 05.01.12, 1:38

Функция ОткрытьФирму(Путь,Пользователь,Пароль="")  
    Бух=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 10.01.12, 11:04

Цитата(Ardi @ 05.01.12, 1:38) *
Функция ОткрытьФирму(Путь,Пользователь,Пароль="")  
    ....
    
КонецПроцедуры


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

Автор: Ardi 10.01.12, 11:36

В отладчике писать склад.Код, склад.наименование а не склад

Тогда отладчик отобразит.

Автор: shurik_shurik 10.01.12, 12:01

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

Потому, что в базе 7.7 это периодический реквизит.

Автор: meverikxp 10.01.12, 12:10

Цитата(shurik_shurik @ 10.01.12, 12:01) *
Потому, что в базе 7.7 это периодический реквизит.

Это ссылочный реквизит который ссылается на справочник Должности.Оклад, подскажите как его оттуда достать, пробовал Должности.Оклад не получается?

Автор: shurik_shurik 10.01.12, 12:31

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

нужно создать новый COM объект для справочника Должности, и использовать НайтиЭлемент по значению реквизита первого справочника

Автор: meverikxp 10.01.12, 12:41

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


Делаю так:

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

Пишет: Значение не является значением объектного типа (Оклад)
?????

Автор: shurik_shurik 10.01.12, 13:08

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

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

Автор: meverikxp 10.01.12, 13:34

Цитата(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 10.01.12, 13:45

Цитата(meverikxp @ 10.01.12, 14:34) *
Но ошибка та же

Если Вас не затруднит, полный текст ошибки, предварительно переименовав переменную Оклад на Оклад8, например.
Кстати, в методе ИспользоватьДату(), дату лучше указать в виде '31.12.11'

Автор: mister-x 10.01.12, 13:47

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

Автор: meverikxp 10.01.12, 13:56

Цитата(mister-x @ 10.01.12, 13:47) http://pro1c.org.ua/index.php?act=findpost&pid=40817
Если Вас не затруднит, полный текст ошибки, предварительно переименовав переменную Оклад на Оклад8, например.
Кстати, в методе ИспользоватьДату(), дату лучше указать в виде '31.12.11'

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

И как по другому написать дату формат в виде '31.12.11' - не определяет пишет " Неправильная константа типа Дата"

Автор: mister-x 10.01.12, 14:19

Цитата
Я точно не знаю как они будут по англ.
тут http://pro1c.org.ua/index.php?showtopic=5893 все є

Автор: meverikxp 10.01.12, 14:21

Цитата(mister-x @ 10.01.12, 14:19) http://pro1c.org.ua/index.php?act=findpost&pid=40823 все є

А пароль к архиву какой?

Автор: mister-x 10.01.12, 14:22

в правилах http://pro1c.org.ua/index.php?act=announce&f=265&id=6 вказано

Автор: Vofka 10.01.12, 14:24

Цитата
А пароль к архиву какой?

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

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

Автор: mister-x 10.01.12, 14:25

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

Автор: meverikxp 10.01.12, 14:48

Цитата(Vofka @ 10.01.12, 14:24) http://pro1c.org.ua/index.php?act=findpost&pid=40827
попробуйте всі методи і системні властивості бази до якої звертаєтесь (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 10.01.12, 15:33

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

Автор: meverikxp 10.01.12, 16:19

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

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

та же ошибка, оклад не объективного типа

Автор: shurik_shurik 10.01.12, 16:34

А если так:

Если Спр77.ЭтоГруппа()=0 Тогда    
        Наименование = Спр77.Наименование;
        Оклад77.FindItem(Спр77.Должность);
        Оклад8 = Оклад77.Оклад;
        Сообщить (Оклад8);
КонецЕсли;

Автор: meverikxp 10.01.12, 16:45

Цитата(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 10.01.12, 17:50

Цитата(meverikxp @ 10.01.12, 17:45) *

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

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

Автор: meverikxp 10.01.12, 18:06

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

Да, действительно получилось. УРА!!!!!

Автор: shurik_shurik 10.01.12, 21:53

Цитата(meverikxp @ 10.01.12, 19:06) *
Да, действительно получилось. УРА!!!!!

Я очень рад за Вас 10000000.gif

Автор: meverikxp 13.01.12, 15:10

Продолжая тему, как теперь загрузить остатки с чего начать? Ума не приложу!!!

Автор: Vofka 13.01.12, 15:48

Цитата
Продолжая тему

Я так не думаю. Или давайте тогда всё на форуме снесём и создадим 1 тему: "Автоматизация учета" и будем все всё в ней спрашивать. Тема закрыта. Создавайте новую тему и описывайте в ней КОНКРЕТНУЮ проблему.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua