Имя: Пароль:
1C
1С v8
Конвертация 2.0. Перенос нетипового субконто
0 Other
 
03.09.11
22:22
Доброго всем.
Переношу остатки из нетиповой ББУ 7 в ББУ 8. В семерке добавлен справочник и вид субконто РасчетныеДокументы для счета 206. Правила использую типовые с обновленными метаданными. В ББУ 8 добавил соответствующий справочник, настроил для него ПКО, добавил в план видов характеристик "субконто бюджет" еще один предопределенный. Выборка производится "произвольным алгоритмом" в бух. операцию. При загрузке данных возникает ошибка:
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4761)}: Ошибка записи объекта
   ТипОбъекта             =  Операция (бухгалтерская)
   Объект                 =  Операция (бухгалтерская) МЦ000001 от 31.12.2010 0:00:00
   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Запись не верна! Вид субконто "<>" не доступен для данной записи! (Регистр бухгалтерии: Журнал проводок; Номер строки: 1)
   ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4754)
   КодСообщения           =  26

В какую сторону копать?
1 Other
 
03.09.11
22:24
В догонку, сам справочник по ссылкам переносится как надо, а вот в оперцию не подставляется.

сам алгоритм выборки:

// Заполняет выборку данных для правила ОперацияБух движениями переноса остатков со счета 206
//
// Входящие данные:
//  ВыборкаДанных - СписокЗначений
//


ВыборкаДанных = ВходящиеДанные.Получить("ВыборкаДанных");


СтрокаСчетаСодержание = "206";
Содержание = Параметры.СодержаниеВводОстатков + СтрокаСчетаСодержание;

СтрокаСчета =
   "206.04.1, 206.04.2, 206.04.3, " +
   "206.05.1, 206.05.2, 206.05.3, " +
   "206.06.1, 206.06.2, 206.06.3, " +
   "206.07.1, 206.07.2, 206.07.3, " +
   "206.08.1, 206.08.2, 206.08.3, " +
   "206.09.1, 206.09.2, 206.09.3, " +
   "206.18.1, 206.18.2, 206.18.3, " +
   "206.19.1, 206.19.2, 206.19.3, " +
   "206.20.1, 206.20.2, 206.20.3, " +
   "206.21.1, 206.21.2, 206.21.3";
       

Ит = СоздатьОбъект("БухгалтерскиеИтоги");


// Выполнять для каждого разделителя учета по отдельности, т. е. по одному документу на фирму

ФирмаВыборка = СоздатьОбъект("Справочник.Фирмы");
ФирмаВыборка.ВыбратьЭлементы(0);


Пока (ФирмаВыборка.ПолучитьЭлемент() > 0) Цикл // Фирма
   
   Фирма = ФирмаВыборка.ТекущийЭлемент();
   
   
   
   
   
   Ит.ИспользоватьРазделительУчета(Фирма);
   
   Ит.ИспользоватьПланСчетов(ОсновнойПланСчетов());
   Ит.ИспользоватьСубконто(ВидыСубконто.ФКР,, 1);
   Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,, 1);
   Ит.ИспользоватьСубконто(ВидыСубконто.РасчетныеДокументы,, 1);
   Ит.ИспользоватьСубконто(,, 1);
   Ит.ИспользоватьСубконто(,, 1);
   
   Ит.ВключатьСубсчета(1);
   
   Ит.ВыполнитьЗапрос(, Параметры.ДатаПереносаОстатков, СтрокаСчета,,, 1,, "С");
   Ит.ВыбратьСчета();
   
   
   Пока (Ит.ПолучитьСчет() = 1) Цикл // Счет
       СуммаДокумента = 0;
       
       Счет = Ит.Счет;
       Если Счет.ЭтоГруппа() = 1 Тогда продолжить; КонецЕсли;
       КВДЧисло = Число(Сред(Счет.Код, 8, 1));
       СчетНовыйКод = Лев(Счет.Код, 6);
       
       Содержание = "Со счета " + Счет.Код;
       
       КодСубсчет = Сред(Счет.Код, 5, 2);

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

       Если ((КодСубсчет = "04") Или (КодСубсчет = "05") Или
           (КодСубсчет = "06") Или (КодСубсчет = "07") Или
           (КодСубсчет = "08") Или (КодСубсчет = "09") Или
           (КодСубсчет = "18") Или (КодСубсчет = "19") Или
           (КодСубсчет = "20") Или (КодСубсчет = "21") Или
           (КодСубсчет = "22") Или (КодСубсчет = "23") Или
           (КодСубсчет = "24")) Тогда
           
           ЕстьДоговор = 1;                
       Иначе        
           ЕстьДоговор = 0;            
       КонецЕсли;
       
           
       СуммаДокумента = СуммаДокумента + Ит.СКД("С");
       Ит.ВыбратьСубконто(ВидыСубконто.ФКР);
       
       Пока (Ит.ПолучитьСубконто(ВидыСубконто.ФКР) = 1) Цикл // ФКР
           
           ФКР = Ит.Субконто(ВидыСубконто.ФКР);
           Ит.ВыбратьСубконто(ВидыСубконто.Контрагенты);
           
           Пока Ит.ПолучитьСубконто(ВидыСубконто.Контрагенты) = 1 Цикл // Контрагенты
               
               Контрагенты = Ит.Субконто(ВидыСубконто.Контрагенты);
               
               
               Если (ЕстьДоговор = 1) Тогда
                   
                   Ит.ВыбратьСубконто(4);

                   Пока Ит.ПолучитьСубконто(4) = 1 Цикл // Договоры
                       
                       Договоры = Ит.Субконто(4);
                       
                       Ит.ВыбратьСубконто(5);
                       Пока Ит.ПолучитьСубконто(5) = 1 Цикл //Расчетные документы
                           
                       РасчетныеДокументы = Ит.Субконто(5);    
                           
                       Сумма = Ит.СКД("С");                
                   
                       Если (Сумма = 0) Тогда
                           Продолжить;    
                       КонецЕсли;
                       
                       
                       ТаблицаДвижения.НоваяСтрока();
                               
                               
                       // СубконтоДт
                       СубконтоДт = СоздатьОбъект("ТаблицаЗначений");
                       СубконтоДт.НоваяКолонка("Ключ");
                       СубконтоДт.НоваяКолонка("Значение");
                       
                       // Контрагенты
                       СубконтоДт.НоваяСтрока();
                       СубконтоДт.Ключ = ВидыСубконто.Контрагенты;
                       СубконтоДт.Значение = Контрагенты;
                       
                       // Договоры
                       СубконтоДт.НоваяСтрока();
                       СубконтоДт.Ключ = ВидыСубконто.Договоры;
                       СубконтоДт.Значение = Договоры;
                       
                       
                       // Расчетные документы
                       СубконтоДт.НоваяСтрока();
                       СубконтоДт.Ключ = ВидыСубконто.РасчетныеДокументы;
                       СубконтоДт.Значение = РасчетныеДокументы;

                       ТаблицаДвижения.СубконтоДт = СубконтоДт;
                       
                       
                       
                       
                       // СубконтоКт (пустое)
                       СубконтоКт = СоздатьОбъект("ТаблицаЗначений");
                       СубконтоКт.НоваяКолонка("Ключ");
                       СубконтоКт.НоваяКолонка("Значение");    
                       
                       ТаблицаДвижения.СубконтоКт = СубконтоКт;
                       
                       
                       ТаблицаДвижения.Баланс = Фирма;
                       ТаблицаДвижения.КБКДт = ФКР;
                       ТаблицаДвижения.КВД = КВДЧисло;
                       ТаблицаДвижения.Учреждение = Фирма;
                       ТаблицаДвижения.Содержание = Содержание;
                       ТаблицаДвижения.Сумма = Сумма;
                       ТаблицаДвижения.СчетДт = СчетНовыйКод;
                       ТаблицаДвижения.СчетКт = "000";
                       ТаблицаДвижения.ХарактеристикаДвиженияДт = Перечисление.ВидыДвиженийНФА.ВводОстатков;
                       КонецЦикла; //Расчетные документы;
                   КонецЦикла;    // Договоры
                   
               Иначе // (ЕстьДоговор = 0)
                   
                   Сумма = Ит.СКД("С");                
                   
                   Если (Сумма = 0) Тогда
                       Продолжить;    
                   КонецЕсли;
                       
                   
                   ТаблицаДвижения.НоваяСтрока();
                               
                               
                   // СубконтоДт
                   СубконтоДт = СоздатьОбъект("ТаблицаЗначений");
                   СубконтоДт.НоваяКолонка("Ключ");
                   СубконтоДт.НоваяКолонка("Значение");
                   
                   // Контрагенты
                   СубконтоДт.НоваяСтрока();
                   СубконтоДт.Ключ = ВидыСубконто.Контрагенты;
                   СубконтоДт.Значение = Контрагенты;
                                       
                   ТаблицаДвижения.СубконтоДт = СубконтоДт;
                   
                   
                   // СубконтоКт (пустое)
                   СубконтоКт = СоздатьОбъект("ТаблицаЗначений");
                   СубконтоКт.НоваяКолонка("Ключ");
                   СубконтоКт.НоваяКолонка("Значение");    
                   
                   ТаблицаДвижения.СубконтоКт = СубконтоКт;
                   
                   
                   ТаблицаДвижения.Баланс = Фирма;
                   ТаблицаДвижения.КБКДт = ФКР;
                   ТаблицаДвижения.КВД = КВДЧисло;
                   ТаблицаДвижения.Учреждение = Фирма;
                   ТаблицаДвижения.Содержание = Содержание;
                   ТаблицаДвижения.Сумма = Сумма;
                   ТаблицаДвижения.СчетДт = СчетНовыйКод;
                   ТаблицаДвижения.СчетКт = "000";
                   ТаблицаДвижения.ХарактеристикаДвиженияДт = Перечисление.ВидыДвиженийНФА.ВводОстатков;
                   
               КонецЕсли; // Если (ЕстьДоговор = 1)
                   
           КонецЦикла; // Контрагенты        
       КонецЦикла; // ФКР
   
   
   Если (ТаблицаДвижения.КоличествоСтрок() > 0) Тогда
       
       ТекСтрока.ДобавитьЗначение(СуммаДокумента, "СуммаОперации");
       ТекСтрока.ДобавитьЗначение(ТаблицаДвижения, "ЕПСБУ");
       
       ВыборкаДанных.ДобавитьЗначение(ТекСтрока);
       
   КонецЕсли;
   
   КонецЦикла; // Счет    

КонецЦикла; // Фирма
2 Other
 
04.09.11
10:36
кто-нибудь знает где почитать про то, как конвертация ищет данные при загрузке?
3 Other
 
04.09.11
11:14
Разобрался. Просто в метаданных продублировались ВидыСубконто.