1c7.7 выгрузка остатков с любого счета

Тема в разделе "1C и всё что с ней связано", создана пользователем KiR, 20 янв 2009.

  1. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Задача: сделать обработку которая бы собирала остатки с указанного пользователем счета, на указанную дату пользователем со всеми аналитиками (не выбираются юзером), потом выгружала их в файлик
    Действия: Узнаю колво аналитик на счете. далее естественно нужно сделать Использовать субконто. реализовано так:
    Код (Text):
    КолвоСубконто = Счет.КоличествоСубконто();
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
    Если КолвоСубконто = 1 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);  
    ИначеЕсли КолвоСубконто = 2 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1);
    ИначеЕсли КолвоСубконто = 3 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1);
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(3),,1);
    КонецЕсли;
    БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,);
    БухИт.ВыбратьСубконто(1);
    Проблема: далее нужно Получить субконто. Когда в счете только одно субконто - никаких проблем, но если более - не знаю как правильно построить цикл. Подскажите пожалуйста. Заранее благодарю
     
  2. Hryv

    Hryv Гость

    Код (Text):
    ...
    БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,);
    БухИт.ВыбратьСубконто(1);  
    Пока БухИт.ПолучитьСубконто(1)=1 Цикл
    Если КолвоСубконто > 1 Тогда
    БухИт.ВыбратьСубконто(2);  
    Пока БухИт.ПолучитьСубконто(2)=1 Цикл
    Если КолвоСубконто > 2 Тогда
    БухИт.ВыбратьСубконто(3);  
    Пока БухИт.ПолучитьСубконто(3)=1 Цикл
    ВыгрузитьДанные();
    КонецЦикла;
    Иначе
    ВыгрузитьДанные();
    КонецЕсли;
    КонецЦикла;
    Иначе
    ВыгрузитьДанные();
    КонецЕсли;
    КонецЦикла;
    где ВыгрузитьДанные() - это некая функция с нужными тебе действиями
     
  3. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    да выгрузку я потом напишу. я сначала думал все в ТЗ скинуть.
    Логику примерно такую же делал:
    Код (Text):
    БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,);
    БухИт.ВыбратьСубконто(1);
    Пока БухИт.ПолучитьСубконто(1) = 1 Цикл
    Если КолвоСубконто = 1 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.С1Н = БухИт.Субконто(1).Наименование;
    ТЗ.С1К = БухИт.Субконто(1).Код;  
    ТЗ.СКД = БухИт.СКД();
    ТЗ.СКК = БухИт.СКК();
    ИначеЕсли КолвоСубконто = 2 Тогда   
    БухИт.ВыбратьСубконто(2);
    Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.С1Н = БухИт.Субконто(1).Наименование;
    ТЗ.С1К = БухИт.Субконто(1).Код;
    ТЗ.С2Н = БухИт.Субконто(2).Наименование;
    ТЗ.С2К = БухИт.Субконто(2).Код;
    КонецЦикла;
    ИначеЕсли КолвоСубконто = 3 Тогда
    БухИт.ВыбратьСубконто(2);
    Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
    БухИт.ВыбратьСубконто(3);
    Пока БухИт.ПолучитьСубконто(3) = 1 Цикл   
    ТЗ.НоваяСтрока();
    ТЗ.С1Н = БухИт.Субконто(1).Наименование;
    ТЗ.С1К = БухИт.Субконто(1).Код;
    ТЗ.С2Н = БухИт.Субконто(2).Наименование;
    ТЗ.С2К = БухИт.Субконто(2).Код;
    ТЗ.С3Н = БухИт.Субконто(3).Наименование;
    ТЗ.С3К = БухИт.Субконто(3).Код;  
    ТЗ.СКД = БухИт.СКД();
    ТЗ.СКК = БухИт.СКК();
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    тока вот в результате не на каждом счете нормально отрабатывало. для примера брал 76,5 и 51 по 3 аналитики на каждом
     
  4. Hryv

    Hryv Гость

    Это по твоему желанию
    Цикл обхода итогов у тебя есть, а наполнить его можно чем угодно


    У тебя цикл по сути такой же, и должен правильно работать
    А в чем конкретно выражается "не на каждом счете нормально отрабатывало"
     
  5. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    в том что БухИт.ВыбратьСубконто(2) = 0; на 51 счете
    ща оборотку посмотрел - там такая ситуация что остатки живут только у первой аналитики, у остальных их нет. И как же быть в такой ситуации? подозреваю что и по другим счетам может такая же ерунда быть
     
  6. Hryv

    Hryv Гость

    У тебя на втором субконто случайно не установлен флажок "Только обороты"?
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    возможно. как быть при такой ситуации? ведь счет пользователь сможет выбрать абсолютно любой и не учитывать такой возможности нельзя
     
  8. Hryv

    Hryv Гость

    Честно говоря я не совсем понимаю зачем надо делать субконто с флажком "только обороты"
    Но если такой флаг стоит, то СКД() и СКК() по нему ты все равно не получишь

    Получается, что такие субконто не надо учитывать
    Что несложно сделать

    Интересно, что тебе стандартный анализ счета по субконто показывает?
    Если вдруг с остатками, то посмотри как там сделано
     
  9. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    анализ счета показывает тока первое субконто) зачем стоят только обороты - не в курсе. вначале конфа была типовой, кто дорабатывал - не знаю
    как сделать чтобы не учитывать субконто? я имею ввиду мне нужно получить Счет.ТолькоОбороты, а потом условие куда ставить - перед использовать субконто или перед получинием субконто?
     
  10. Hryv

    Hryv Гость

    Если ты выгружаешь только остатки, то пропускай такикие субконто смело
    Ведь даже при внесении начальных остатков их по субконто разнести нельзя будет
     
  11. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    это я понял. я не понял где мне поставить проверку нужно - когда я делаю использовать субконто:
    Код (Text):
    Если КолвоСубконто = 1 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);  
    ИначеЕсли КолвоСубконто = 2 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1);
    ИначеЕсли КолвоСубконто = 3 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1);
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(3),,1);
    КонецЕсли;
    или же или же когда я далее делаю получить субконто?
     
  12. Hryv

    Hryv Гость

    Я бы так сделал (пример для 2-х )
    Код (Text):
    Если КолвоСубконто = 1 Тогда
    ...
    ИначеЕсли КолвоСубконто = 2 Тогда
    Если Счет.ТолькоОбороты(1)=1 Тогда
    КолвоСубконто = КолвоСубконто -1;
    Иначе
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);
    КонецЕсли;
    Если Счет.ТолькоОбороты(2)=1 Тогда
    КолвоСубконто = КолвоСубконто -1;
    Иначе
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1);
    КонецЕсли;
    ИначеЕсли КолвоСубконто = 3 Тогда
    ...
    КонецЕсли;
    Дальше надо только учесть, что субконто вообще может не быть (хотя это и так бывает и надо было сразу делать для КолвоСубконто от 0 до 3)

    Только не знаю (не сталкивался и не проверял) может ли быть, например, на втором субконто только обороты, а на третьем как обычно
     
  13. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Могут конечно. вот у мя такая же шняга на 51м) офигивал когда с обороткой эксперементировал. в любом случае спасибо большое! буду ваять
     
  14. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Я таки вам расскажу на примере!
    51-й счет (расчетный счет)
    Субконто 1 - Банковский счет
    Субконто 2 (об) - Вид движения денежных средств.
    Если по второму субконто убрать "только обороты", имеем следующую картину:
    Поступления:
    Поступление от клиентов,
    Поступление за конвертацию,
    Обязательная продажа валюты...
    Списания:
    Хознужды,
    Оплата поставщикам...

    Сальдо закрываться не будет. А налитика по приходам и расходам крайне необходима, т.е. важно видеть, в разрезе каких статей были движения денежных средств.
     
  15. Hryv

    Hryv Гость

    vitfil, спасибо за наглядный пример - полезно будет знать


    Незачто
    Усеха :(
     
Загрузка...

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