Имя: Пароль:
1C
1С v8
Конвертация данных: перенос остатков взаиморасчетов, документ расчётов
0 OnePrg
 
04.03.22
12:01
Переносим конвертацией данных остатки взаиморасчётов. В базе приёмнике создаём документ "Операция бух". Первые два субконто (контрагенты и договора) переносим как есть, а вот третье субконто "Документ расчётов" переносить как есть не хотим. Создаём в базе приёмнике для каждого документа расчётов документ "Документ расчётов ручной учёт" и пытаемся его засунуть как третье субконто, но он не переносится.


ТаблицаНаФорме = Запрос.Выполнить().Выгрузить();                  
ТаблицаНаФорме.Колонки.Добавить("СубконтоДт");
Для каждого строка из ТаблицаНаФорме Цикл
    СубконтоДт = Новый Соответствие;
    СубконтоДт.Вставить(Новый Структура("Код", "00004"), строка.Субконто1);
    СубконтоДт.Вставить(Новый Структура("Код", "00011"), строка.Субконто2);
    
    //получаем документ расчетов
    ДокументРасчетов = Неопределено;
    СтрукПоиска = Новый Структура;
    СтрукПоиска.Вставить("Организация", строка.Организация);
    СтрукПоиска.Вставить("Контрагент",     строка.Субконто1);
    СтрукПоиска.Вставить("ДоговорКонтрагента", строка.Субконто2);
    СтрукПоиска.Вставить("Комментарий", СокрЛП(строка.Субконто3));
    
    Поиск = ТаблицаДокументыРасчетов.НайтиСтроки(СтрукПоиска);
    
    Если Поиск.Количество() = 1 Тогда
        ДокументРасчетов = Поиск[0].Ссылка;
    ИначеЕсли Поиск.Количество() = 0 Тогда
        
        //создать документ
        ДокРасчетов = Документы.ДокументРасчетовСКонтрагентом.СоздатьДокумент();
        ДокРасчетов.Дата                 = '20211231235959';
        ДокРасчетов.ДоговорКонтрагента     = строка.Субконто2;
        ДокРасчетов.Контрагент            = строка.Субконто1;
        ДокРасчетов.Комментарий            = СокрЛП(строка.Субконто3);
        ДокРасчетов.Организация            = строка.Организация;
        
        Если ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ВозвратТоваровПоставщику")    
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ДокументРасчетовСКонтрагентом")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ОтчетКомиссионераОПродажах")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ПлатежноеПоручениеВходящее")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ПлатежныйОрдерПоступлениеДенежныхСредств")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ПоступлениеДопРасходов")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ПоступлениеНМА")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг")
        ИЛИ ТипЗнч(строка.Субконто3) = Тип("ДокументСсылка.РегистрацияВходящегоНалоговогоДокумента")
        Тогда
            ДокРасчетов.ДатаВходящегоДокумента    = строка.Субконто3.ДатаВходящегоДокумента;
            ДокРасчетов.НомерВходящегоДокумента    = строка.Субконто3.НомерВходящегоДокумента;
        КонецЕсли;
        ДокРасчетов.Записать(РежимЗаписиДокумента.Запись);
        //добавить его в таблицу
        СтрДок = ТаблицаДокументыРасчетов.Добавить();    
        СтрДок.Ссылка                 = ДокРасчетов.Ссылка;
        СтрДок.Комментарий            = ДокРасчетов.Комментарий;
        СтрДок.Организация            = ДокРасчетов.Организация;
        СтрДок.Контрагент            = ДокРасчетов.Контрагент;
        СтрДок.ДоговорКонтрагента    = ДокРасчетов.ДоговорКонтрагента;
        
        ДокументРасчетов = ДокРасчетов.Ссылка;
    Иначе
        Сообщить("Страшная ошибка");
    КонецЕсли;
    
    Если ДокументРасчетов <> Неопределено Тогда
        СубконтоДт.Вставить(Новый Структура("Код", "00028"), ДокументРасчетов);
        Сообщить(ДокументРасчетов);
    КонецЕсли;
    строка.СубконтоДт = СубконтоДт;
    Организация = строка.Организация;
КонецЦикла;

ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Дата",                     '20211231235959');
ИсходящиеДанные.Вставить("Организация",             Организация);
ИсходящиеДанные.Вставить("Комментарий",             "Перенос взаиморасчетов");
ИсходящиеДанные.Вставить("Хозрасчетный",             ТаблицаНаФорме);

ВыгрузитьПоПравилу(,,ИсходящиеДанные, ,"ОперацияБух");
1 OnePrg
 
04.03.22
12:04
>Создаём в базе приёмнике для каждого документа расчётов документ "Документ расчётов ручной учёт"

* в базе источнике
2 OldCondom
 
04.03.22
12:08
Это месиво даже читать больно. Что конкретно не работает?
3 OnePrg
 
04.03.22
12:13
СубконтоДт = Новый Соответствие;
СубконтоДт.Вставить(Новый Структура("Код", "00004"), строка.Субконто1);
СубконтоДт.Вставить(Новый Структура("Код", "00011"), строка.Субконто2);
СубконтоДт.Вставить(Новый Структура("Код", "00028"), ДокументРасчетов);


первые два субконто переносятся, третье нет
4 OldCondom
 
04.03.22
12:25
Ага! Так все сразу понятнее стало!
А теперь, если абстрагироваться от ужаса, который у вас в ПКО и обратить внимание на задачу, то лучше уж перенести документы отдельно , хоть в комментарий записать дату и номер документа источника и в обработчике "ПослеЗагрузкиДанных" (или как то так), запихнуть их третьим субконто.
5 OnePrg
 
04.03.22
13:09
Передал номер документа расчётов в поле "Содержание", а "ПослеЗагрузки" операции прошёлся по проводкам и заполнил расчётный документ.
6 OldCondom
 
04.03.22
13:26
А сколько сил было потрачено на код сверху)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn