7.7 Перенос проводок 7.7 -->8.2

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем nbIpKuH_BaH9I, 20 сен 2015.

  1. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Привет всем. Каким образом через конвертацию данных можно перенести все проводки в 8.2? По типовым не получается разобраться. С 7.7 не дружу я совсем.
    Если быть предельно точным, то каким образом перенести субконто?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Перенести можно только остатки. Движения по проводкам формируются документами.
    nbIpKuH_BaH9I нравится это.
  3. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Мне нужны именно обороты. В 8.2 они должны создаваться в виде документа Операция БУ. На данный момент проблема с субконто. Документ переносится. Переносятся проводки этого документа со счетами и суммами, но без субконто.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    На каждый вид субконто придется написать ПКО, а так же вставить в обработчик события(уж не помню какого именно) условие обработки объекта по нужному ПКО вида:

    Если ТипЗнч("СправочникСсылка.<ИмяСправочника">) тогда
    ИмяПКО = <ИМЯПКО>;
    ИначеЕсли.....
    ....
    КонецЕсли;
    nbIpKuH_BaH9I нравится это.
  5. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    хм... Попробую вечером. Спасибо за наводку. В типовых погляжу.
  6. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    В продолжении темы. Один из примеров: Переношу проводку по счету 41.1. В 7.7 у этого счета есть всего два субконто, субконто1 - Номенклатура, Субконто2 - МестаХранения. Но в 8.2 на этом же счету 41.1 другие субконто. Субконто1 - МестаХранения, Субконто2 - МОЛ, Субконто3 - Номенклатура. Как Видно, то субконто разные, а даже те, что одинаковые стоят не в том порядке. Вопрос: Каким образом выполнить преобразование такое? Как сделать так, чтобы Субконто1 из 7.7 стало субконто3 в 8.2?
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    проверять каждое значение субконто на тип значения перед загрузкой, т.к. в базе источника про порядок следования субконто в базе приемнике ничего не известно.
    nbIpKuH_BaH9I нравится это.
  8. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    А как потом выгрузить в нужном порядке? Посмотрел файл XML, что выгружается с субконто. Там никаких сведений нет, по номеру субконто. По логике загружается в последовательности.В той, в кторой стоят в файле.
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Выгружаешь как есть, а загружаешь - с проверкой, по другому не получится, т.к. порядок субконто в базе-приемнике можно менять в режиме предприятия(про последствия таких действий - отдельный разговор :))
    nbIpKuH_BaH9I нравится это.
  10. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    ХМ. В нете нашел такую же тему, чувак пишет, что решил это с помощью параметров.
    Мальца не понял как он сделал. У меня только в одном документе 26 проводок.
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Загрузка будет происходить построчно. Для каждой загруженной строки делаешь цикл от 1 до 3 и проверяешь тип субконто.
    Параметры - видимо в них последовательность субконто базы приемника, больше мне как-то ничего на ум не приходит.
    nbIpKuH_BaH9I нравится это.
  12. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    В каком событии отловить момент загрузки. Могу предположить только ПриЗагрузке. Причем всего объекта. Либо сам файл как-то разбирать. Попробую сейчас.
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ПослеЗагрузки
    --- Объединение сообщений, 12 окт 2015 ---
    ПриВыгрузке создавай коллекцию (ТаблицаЗначений) а в ПослеЗагрузки ее обрабатывай
    nbIpKuH_BaH9I нравится это.
  14. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Походу получилось. Чуть позже отпишусь как проверю.
  15. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Да, все верно. Оказывается все не так уж и сложно. Не нужно делать никакое преобразование. Нужно лишь проверить на тип и пропустить загрузку при необходимости.
    В обработчике ПослеЗагрузки прописать следующий код
    Код:
    Для каждого Корреспонденция из Объект.Движения.Хозрасчетный Цикл
        Для каждого Субконто из Корреспонденция.СубконтоДт Цикл
            Ок = Ложь;
            Для каждого ВидыСубконто из Корреспонденция.СчетДт.ВидыСубконто Цикл
                Если ВидыСубконто.ВидСубконто = Субконто.Ключ Тогда
                    Ок = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
           
            Если не Ок Тогда
                Корреспонденция.СубконтоДт.Удалить(Субконто.Ключ);
            КонецЕсли;
        КонецЦикла;
       
        Для каждого Субконто из Корреспонденция.СубконтоКт Цикл
            Ок = Ложь;
            Для каждого ВидыСубконто из Корреспонденция.СчетКт.ВидыСубконто Цикл
                Если ВидыСубконто.ВидСубконто = Субконто.Ключ Тогда
                    Ок = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
           
            Если не Ок Тогда
                Корреспонденция.СубконтоКт.Удалить(Субконто.Ключ);
            КонецЕсли;
        КонецЦикла;
       
    
        Если (Корреспонденция.СчетДт = ПланыСчетов.Хозрасчетный.ПустаяСсылка())
            или (НЕ Корреспонденция.СчетДт.Валютный) Тогда
            Корреспонденция.ВалютаДт = Справочники.Валюты.ПустаяСсылка();
            Корреспонденция.ВалютнаяСуммаДт = 0;
        КонецЕсли;
        Если (Корреспонденция.СчетКт = ПланыСчетов.Хозрасчетный.ПустаяСсылка())
            или (НЕ Корреспонденция.СчетКт.Валютный) Тогда
            Корреспонденция.ВалютаКт = Справочники.Валюты.ПустаяСсылка();
            Корреспонденция.ВалютнаяСуммаКт = 0;
        КонецЕсли;
        Если (Корреспонденция.СчетДт = ПланыСчетов.Хозрасчетный.ПустаяСсылка())
            или (НЕ Корреспонденция.СчетДт.Количественный) Тогда
            Корреспонденция.КоличествоДт = 0;
        КонецЕсли;
        Если (Корреспонденция.СчетКт = ПланыСчетов.Хозрасчетный.ПустаяСсылка())
            или (НЕ Корреспонденция.СчетКт.Количественный) Тогда
            Корреспонденция.КоличествоКт = 0;
        КонецЕсли;
    КонецЦикла;
    
    Объект.Движения.Хозрасчетный.Записывать = Истина;
    --- Объединение сообщений, 12 окт 2015 ---
    Я подумал, что нужно Субконто1 как-то преобразовать в субконто3. Оказывается не нужно. Все происходит автоматически. Далее сразу выложил код на проверку и заполнение количества, валюты и валютной суммы.
  16. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Конкретнее об этом написано в книге. Код слизал от туда.
    upload_2015-10-12_17-8-27.png
    Не понятно только почему этот пример не вынесли в конец книги, где описываются примеры работы.
    Последнее редактирование: 12 окт 2015
  17. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Ребят, привет. В продолжении темы. У меня есть код
    Код:
    //ДатаНачала    = Дата("30.07.2015");
    //ДатаОкончания = Дата("30.07.2015");
    
    Сообщить("Начало выгрузки за период с " + ДатаНачала + " по " + ДатаОкончания);
    Операция = СоздатьОбъект("Операция");
    Операция.ВыбратьОперации(ДатаНачала, ДатаОкончания);
    Пока Операция.ПолучитьОперацию() = 1 Цикл
        //Сообщить(Операция.Документ.НомерДок);
        //Если СокрЛП(Операция.Документ.НомерДок) = "000005" Тогда
        //    Сообщить("ГУД");
           
            Проводки_Основной = СоздатьОбъект("ТаблицаЗначений");
            Проводки_Основной.НоваяКолонка("Период");
            //Проводки_Основной.НоваяКолонка("ОрганизацияДт");
            //Проводки_Основной.НоваяКолонка("ОрганизацияКт");
            Проводки_Основной.НоваяКолонка("СубконтоДт");
            Проводки_Основной.НоваяКолонка("СубконтоКт");
            Проводки_Основной.НоваяКолонка("ВалютаДт");
            Проводки_Основной.НоваяКолонка("ВалютаКт");
            Проводки_Основной.НоваяКолонка("НомерЖурнала");
            Проводки_Основной.НоваяКолонка("НомерСтрокиТЧ");
            Проводки_Основной.НоваяКолонка("Содержание");
            Проводки_Основной.НоваяКолонка("ВалютнаяСуммаДт");
            Проводки_Основной.НоваяКолонка("ВалютнаяСуммаКт");
            Проводки_Основной.НоваяКолонка("КоличествоДт");
            Проводки_Основной.НоваяКолонка("КоличествоКт");
            Проводки_Основной.НоваяКолонка("Сумма");
            Проводки_Основной.НоваяКолонка("Активность");
            Проводки_Основной.НоваяКолонка("СчетДт");
            Проводки_Основной.НоваяКолонка("СчетКт");
           
            //организуем перебор проводок текущей операции
            Операция.ВыбратьПроводки();
            Пока Операция.ПолучитьПроводку()=1 Цикл
                Если ((Параметры.СписокНеПереносящихсяСчетов.НайтиЗначение(Операция.Дебет.Счет)>0) ИЛИ (ПустоеЗначение(Операция.Дебет.Счет)=1)) ИЛИ
                    ((Параметры.СписокНеПереносящихсяСчетов.НайтиЗначение(Операция.Кредит.Счет)>0) ИЛИ (ПустоеЗначение(Операция.Кредит.Счет)=1)) Тогда
                    Продолжить;
                КонецЕсли;
                Проводки_Основной.НоваяСтрока();
                Проводки_Основной.Период     = ПолучитьДатуV8(Операция.ДатаОперации, Операция.ПолучитьВремя());
                Проводки_Основной.СчетДт     = Операция.Дебет.Счет;
                Проводки_Основной.СубконтоДт = СоздатьОбъект("ТаблицаЗначений");
                Проводки_Основной.СубконтоДт.НоваяКолонка("Ключ");
                Проводки_Основной.СубконтоДт.НоваяКолонка("Значение");
                Для НомерСубконто = 1 по Проводки_Основной.СчетДт.КоличествоСубконто() Цикл
                    Проводки_Основной.СубконтоДт.НоваяСтрока();
                    Проводки_Основной.СубконтоДт.Ключ     = Проводки_Основной.СчетДт.ВидСубконто(НомерСубконто);
                    Проводки_Основной.СубконтоДт.Значение = Операция.Дебет.Субконто(НомерСубконто);
                КонецЦикла;
               
                Проводки_Основной.СчетКт = Операция.Кредит.Счет;
                Проводки_Основной.СубконтоКт = СоздатьОбъект("ТаблицаЗначений");
                Проводки_Основной.СубконтоКт.НоваяКолонка("Ключ");
                Проводки_Основной.СубконтоКт.НоваяКолонка("Значение");
                Для НомерСубконто = 1 по Проводки_Основной.СчетКт.КоличествоСубконто() Цикл
                    Проводки_Основной.СубконтоКт.НоваяСтрока();
                    Проводки_Основной.СубконтоКт.Ключ     = Проводки_Основной.СчетКт.ВидСубконто(НомерСубконто);
                    Проводки_Основной.СубконтоКт.Значение = Операция.Кредит.Субконто(НомерСубконто);
                КонецЦикла;
               
                Проводки_Основной.Сумма           = Операция.Сумма;
                Проводки_Основной.ВалютаДт        = Операция.Валюта;
                Проводки_Основной.ВалютаКт        = Операция.Валюта;
                Проводки_Основной.ВалютнаяСуммаДт = Операция.ВалСумма;
                Проводки_Основной.ВалютнаяСуммаКт = Операция.ВалСумма;
                Проводки_Основной.КоличествоДт    = Операция.Количество;
                Проводки_Основной.КоличествоКт    = Операция.Количество;
                Проводки_Основной.Активность      = 1;
                Проводки_Основной.Содержание      = Операция.СодержаниеПроводки;
            КонецЦикла;
           
            ВходящиеДанные = СоздатьОбъект("СписокЗначений");
            ВходящиеДанные.Установить("Дата"         ,  ПолучитьДатуV8(Операция.ДатаОперации, Операция.ПолучитьВремя()));
            //ВходящиеДанные.Установить("Организация"  , "");
            //ВходящиеДанные.Установить("ХозОперация"  , "");
            ВходящиеДанные.Установить("СуммаОперации", Операция.СуммаОперации);
            //ВходящиеДанные.Установить("Проверен"     , 1);
            //ВходящиеДанные.Установить("Автор"        , "");
            ВходящиеДанные.Установить("Содержание"   , "Операция №" + Операция.Документ.НомерДок + " от " + Операция.ДатаОперации + ". " + Операция.Документ);
            //ВходящиеДанные.Установить("Комментарий"  , "Выгружено: " + ТекущаяДата());
            ВходящиеДанные.Установить("Основной"     , Проводки_Основной);
            Если Проводки_Основной.КоличествоСтрок() = 0 Тогда
                Продолжить;
            КонецЕсли;
            ВыгрузитьПоПравилу(Операция.Документ, ,ВходящиеДанные, , "Операция");
        //КонецЕсли;
    КонецЦикла;
    Прошу прощения, не совсем красивый, но он в стадии доработки :).
    Этим кодом у меня выбираются все проводки. Даже с документами помеченными на удаление и не активными проводками.
    Как мне учесть такие документы и не переносить их? Судя по всему работает все не по принципу 8.
  18. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    оооой жууууть -Asshat-
  19. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Да не, это еще не жуть :)
    Никак привыкнуть не могу к тому, что в 7.7 нет булево. Короче дописал это
    Код:
      
    Если (Операция.Документ.ПометкаУдаления() = 1)
         ИЛИ (Операция.Документ.Проведен() = 0) Тогда
            Продолжить;
    КонецЕсли;
    
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ничего вообще делать не нужно. Ты выбираешь операции.. А документ помеченный на удаление не имеет проводок (операции) !
    Тоже самое можно сказать про отключенные проводки. Они не попадут в выборку.

Поделиться этой страницей