Имя: Пароль:
1C
1С v8
перенос остатков
0 gr0ck
 
26.09.12
14:30
использую конвертацию. выгрузка из 7.7 в 8. Там в правиле выборки используется процедура ВыгрузитьОстаткиПиСчету(), и далее в процедуре делается запрос к регистру, указывается счет, и прочее. Затем выгружается по правилу в операцию.
в 7.7 на счете 3 субконто, в 8 2 субконто. Как отсечь лишнее субконто? И где?
1 DrShad
 
26.09.12
14:31
там же и отсекай
2 Naumov
 
26.09.12
14:33
в процедуре ВыгрузитьОстаткиПиСчету()
в запросе игнорируй лишнее субконто. либо добавь в 8-ке.
3 gr0ck
 
26.09.12
14:36
Не, надо перед выгрузкой, или при выгрузке.
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
БухИт.ИспользоватьСубконто();
БухИт.ИспользоватьСубконто();
БухИт.ИспользоватьСубконто();
БухИт.ВыполнитьЗапрос(Параметры.ДатаВводаОстатков,, Счет);

Параметры.ПараметрыАлгоритмов.Установить("БухИт", БухИт);
Параметры.ПараметрыАлгоритмов.Установить("Проводки", Проводки);

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

       КоличествоУровней = 0;
       КоличествоУровней = КоличествоУровней + ?(Счет.КоличествоСубконто() > 0, ?(Счет.ТолькоОбороты(1) = 1, 0, 1), 0);
       КоличествоУровней = КоличествоУровней + ?(Счет.КоличествоСубконто() > 1, ?(Счет.ТолькоОбороты(2) = 1, 0, 1), 0);
       КоличествоУровней = КоличествоУровней + ?(Счет.КоличествоСубконто() > 2, ?(Счет.ТолькоОбороты(3) = 1, 0, 1), 0);
       Параметры.ПараметрыАлгоритмов.Установить("КоличествоУровней", КоличествоУровней);    
       
       Если КоличествоУровней = 0 Тогда
           Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 0);
           ПолучитьИтогиПоСчету();
           ДобавитьПроводку();
               
       ИначеЕсли КоличествоУровней > 0 Тогда
           БухИт.ВыбратьСубконто(1);
           Пока БухИт.ПолучитьСубконто(1) = 1 Цикл
               Если ТипЗначенияСтр(БухИт.Субконто(1)) = "Справочник" Тогда
                   Если БухИт.Субконто(1).ЭтоГруппа() = 1 Тогда
                       Продолжить;
                   КонецЕсли;
               КонецЕсли;
                       
               Если ((СуммовойУчет1 = 1) и (СуммовойУчет2 = 0)) или (КоличествоУровней = 1) Тогда
                   Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 1);
                   ПолучитьИтогиПоСчету();
                   ДобавитьПроводку();
               КонецЕсли;
                       
               Если КоличествоУровней > 1 Тогда
                   БухИт.ВыбратьСубконто(2);
                   Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
                       Если ТипЗначенияСтр(БухИт.Субконто(2)) = "Справочник" Тогда
                           Если БухИт.Субконто(2).ЭтоГруппа() = 1 Тогда
                               Продолжить;
                           КонецЕсли;
                       КонецЕсли;
                               
                       Если ((СуммовойУчет2 = 1) и (СуммовойУчет3 = 0)) или (КоличествоУровней = 2) Тогда
                           Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 2);
                           ПолучитьИтогиПоСчету();
                           ДобавитьПроводку();
                       КонецЕсли;
                               
                       Если КоличествоУровней > 2 Тогда
                           БухИт.ВыбратьСубконто(3);
                           Пока БухИт.ПолучитьСубконто(3) = 1 Цикл
                               Если ТипЗначенияСтр(БухИт.Субконто(3)) = "Справочник" Тогда
                                   Если БухИт.Субконто(3).ЭтоГруппа() = 1 Тогда
                                       Продолжить;
                                   КонецЕсли;
                               КонецЕсли;
                                       
                               Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 3);
                               ПолучитьИтогиПоСчету();
                               ДобавитьПроводку();
                           КонецЦикла;
                       КонецЕсли;    
                   КонецЦикла;
               КонецЕсли;    
           КонецЦикла;
       КонецЕсли;    
   КонецЦикла;
4 gr0ck
 
26.09.12
14:39
Просто не знаю 7-ку, и не понимаю как там все внутри устроенно. В каком месте субконто отрубить? В плане счетов оно под 3-м номером идет. Отрубить это

Если КоличествоУровней > 2 Тогда
  БухИт.ВыбратьСубконто(3);

Или надо все же проверку на тип субконто делать?
5 gr0ck
 
26.09.12
14:40
Или тут можно проверить, и просто свернуть таблицу Проводки?

ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить(РегистрБух, Проводки);
ВходящиеДанные.Установить("Счет", Счет);
ВходящиеДанные.Установить("Дата", БухИт.НачДата-1);
ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ОперацияБух");
6 Naumov
 
26.09.12
15:29
(4) Да, в этом месте где-то, но надо проверять на счет, т.к. обработка для выгрузки итогов по разным счетам идет.

А можно взять копию базы 77 и там выкинуть нафиг лишнее субконто, потом выгружать