7.7 Запрос к бух. операциям.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем X-Man, 16 ноя 2014.

  1. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Здравствуйте. Столкнулся со следующей проблемой: не могу придумать, как получить дебетовый оборот по счету 20 в корреспонденции с 10, 41 С ОГРАНИЧЕНИЕМ ПО ВИДУ ДОКУМЕНТОВ(только тот оборот, который сформирован документом "ВыпускПродукции"). Пишу такой код:

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;

    |Счет = Операция.Счет;
    |КорСчет = Операция.КорСчет;
    |
    |Продукция = Операция.Субконто.Номенклатура;
    |Сырье = Операция.КорСубконто.Материалы; //Операция.КорСубконто.Номенклатура;

    |ВыпускПродукции = Операция.ТекущийДокумент;

    |Подразделение = Операция.Субконто.Подразделения;
    |СкладПроизводства = Операция.Субконто.МестаХранения;

    |СуммаФ = Операция.Сумма;
    |КоличествоФ = Операция.Количество;

    |Функция СуммаФакт = ДО(СуммаФ) КОГДА (ВыпускПродукции.Вид() = ""ВыпускПродукции"");
    //|Функция КоличествоФакт = КорКО(КоличествоФ) КОГДА (ВыпускПродукции.Вид() = ""ВыпускПродукции"");

    |Условие(Счет в СчетЗатрат);
    |Условие(КорСчет в СчетСписания);
    |";//}}ЗАПРОС

    СчетЗатрат = СоздатьОбъект("Счет.Производство");
    СчетЗатрат.НайтиПоКоду("20");

    СчетСписания = СоздатьОбъект("СписокЗначений");
    СтрокаСчетовСписания = "10.1,10.2,10.3,10.4,10.5,10.6,10.7,10.8,10.9,10.10,21,41";

    СчетПроизводство = СоздатьОбъект("Счет.Производство");
    СчетПроизводство.ВыбратьСчета();
    Пока СчетПроизводство.ПолучитьСчет() = 1 Цикл

    Если СчетПроизводство.ЭтоГруппа() = 1 Тогда
    Продолжить;
    КонецЕсли;

    Если Найти(СтрокаСчетовСписания, СчетПроизводство.Код) > 0 Тогда
    СчетСписания.ДобавитьЗначение(СчетПроизводство.ТекущийСчет());
    КонецЕсли;

    КонецЦикла;



    Дальше добавляю группировки. Не пашет:((( Что не так?
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ВыполнитьЗапрос(<НачалоПериода>,<КонецПериода>,<Счет>,<КоррСчет>,<Валюта>,<ТипИтогов>,<Периодичность>,<ТипСуммы>)
    Назначение:
    Выполнить отбор и расчет итогов по параметрам.
    Возвращает число 1 - запрос выполнен; 0 - запрос не выполнен.
  3. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Я в курсе. Мне нужен ОТБОР ПО ВИДУ ДОКУМЕНТА.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В БИ... только условие по виду внутри цикла.. Или выборка по виду документа с получением проводок (так медленнее)
  5. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Это долго и нудно. Тем более, что группировки по субконто будут произвольными, как выберет пользователь. И нужен готовый оборот по дебету, отобранный по виду документа.
    --- Объединение сообщений, 16 ноя 2014 ---
    На каждом уровне вложенности группировок.
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Только через запрос к БИ с доп. условием по виду в цикле..........
  7. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Да быть такого не может.
    --- Объединение сообщений, 16 ноя 2014 ---
    Если убрать условие отбора по виду-все равно не работает. Не в этом дело, здесь что-то другое.
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вы понимаете разницу между бухгалтеским и обычным запросом?
    --- Объединение сообщений, 16 ноя 2014 ---
    Может
  9. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Конечно понимаю. Пример анализа счета из документации если посмотрите-там свободно используется запрос к операциям, а не бух. запрос. И всё работает. Единственное отличие-нет группировок по объектам аналитики, только по счетам.
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вы путаете обращение к операции как к документу. ОБЫЧНЫЙ ЗАПРОС РАБОТАТЬ НЕ БУДЕТ
  11. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Объясните неграмотному, Зачем тогда придуманы функции запроса СНД()и т.д именно для обычного запроса?
  12. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    |Счет = Операция.Дебет.Счет;
    |КорСчет = Операция.Кредит.Счет;
    Попробуйте так. Но гемороя с обычным запросом получится намного больше чем с бухгалтеским.
  13. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Вот я уже тоже к такому варианту склоняюсь(через дебет и кредит). И субконто тоже оттуда тянуть. Тогда вместо ДО надо использовать СУММА(СуммаФ), я правильно понимаю?
  14. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
  15. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Спасибо, все работает прекрасно:)
    --- Объединение сообщений, 16 ноя 2014 ---
    Не работает только, когда в переменной запроса справочники разных типов:(
    --- Объединение сообщений, 16 ноя 2014 ---
    А, нет, работает через ТекущийЭлемент
    Последнее редактирование: 16 ноя 2014
  16. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Нет, не работает, берет только из того справочника, который указан первым:(((
  17. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    покажите текст запроса
  18. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;

    |Счет = Операция.Дебет.Счет;
    |КорСчет = Операция.Кредит.Счет;
    |
    |Продукция = Операция.Дебет.Номенклатура.ТекущийЭлемент;
    |Сырье = Операция.Кредит.Материалы.ТекущийЭлемент,
    | Операция.Кредит.Номенклатура.ТекущийЭлемент;

    |ВыпускПродукции = Операция.ТекущийДокумент;

    |Подразделение = Операция.Кредит.Подразделения;
    |СкладПроизводства = Операция.Кредит.МестаХранения;

    |СуммаФ = Операция.Сумма;
    |КоличествоФ = Операция.Количество;

    |Функция СуммаФакт = СУММА(СуммаФ) КОГДА (ВыпускПродукции.Вид() = ""ВыпускПродукции"");
    //|Функция КоличествоФакт = КорКО(КоличествоФ) КОГДА (ВыпускПродукции.Вид() = ""ВыпускПродукции"");

    |Условие(Счет в СчетЗатрат);
    |Условие(КорСчет в СчетСписания);

    |Группировка Продукция Без Групп;
    |Группировка Сырье Без Групп;
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нужно не так Нужно выстраивать текст запроса в зависимости от выбранного счета.
    Код:
    Если ВыбСчетДебет=СчетПоКоду("10.1") Тогда
    ТекстЗапроса=ТекстЗапроса+"ТМЦ=Операция.Дебет.Материалы.ТекущийЭлемент"
    Иначе
    ...
  20. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    430
    Симпатии:
    3
    Баллы:
    29
    Да это понятно. Только проблема в том, что у меня выборка по списку счетов, в котором присутствует и 10(Вид субконто "Материалы"), и 21,41(субконто Номенклатура). Нужно получить консолидированный оборот, сгруппированный по сырью(Материалы и Номенклатура).
    --- Объединение сообщений, 17 ноя 2014 ---
    Далее по тексту

    СчетЗатрат = СоздатьОбъект("Счет.Производство");
    СчетЗатрат.НайтиПоКоду("20");

    СчетСписания = СоздатьОбъект("СписокЗначений");
    СтрокаСчетовСписания = "10.1,10.2,10.3,10.4,10.5,10.6,10.7,10.8,10.9,10.10,21,41";

    СчетПроизводство = СоздатьОбъект("Счет.Производство");
    СчетПроизводство.ВыбратьСчета();
    Пока СчетПроизводство.ПолучитьСчет() = 1 Цикл

    Если СчетПроизводство.ЭтоГруппа() = 1 Тогда
    Продолжить;
    КонецЕсли;

    Если Найти(СтрокаСчетовСписания, СчетПроизводство.Код) > 0 Тогда
    СчетСписания.ДобавитьЗначение(СчетПроизводство.ТекущийСчет());
    КонецЕсли;

    КонецЦикла;

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