Имя: Пароль:
1C
1С v8
Извлечь данные из счетов
, ,
0 Slypower
 
02.05.16
15:00
Добрый день. Работаю я с 1с7.7 Предприятие. Попросили изменить отчет в 8.2. Суть отчета, чтобы к строке прибавить данные из дебета счета 91,4 и   кредита счета 57,2. Помогите эти данные достать запросом. Дальше я сам разберусь
1 zenik
 
02.05.16
15:30
ТекстЗапроса =
        "ВЫБРАТЬ
        |    ДТ94.Сумма КАК ДТ94_Сумма,
        |    КТ57.Сумма КАК КТ57_Сумма
        |ИЗ
        |    (ВЫБРАТЬ
        |        СУММА(Хозрасчетный.Сумма) КАК Сумма
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |    ГДЕ
        |        Хозрасчетный.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |        И Хозрасчетный.СчетДт = &ДТ91) КАК ДТ91,
        |    (ВЫБРАТЬ
        |        СУММА(Хозрасчетный.Сумма) КАК Сумма
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |    ГДЕ
        |        Хозрасчетный.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |        И Хозрасчетный.СчетКт = &КТ57) КАК КТ57"
        
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос.УстановитьПараметр("ДТ94", ПланыСчетов.Хозрасчетный.НайтиПоКоду("91.4"));
    Запрос.УстановитьПараметр("КТ57", ПланыСчетов.Хозрасчетный.НайтиПоКоду("57.2"));
    
    Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
2 Slypower
 
03.05.16
15:21
Делаю по аналогии отчета. Вначале добавляю строки:

Новаястрока=таблица.Добавить();
новаястрока.счет=планысчетов.Хозрасчетный.НайтиПоКоду("57.2");

Затем:

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("57.2") тогда    
счета=Новый СписокЗначений;
счета.Добавить(планысчетов.Хозрасчетный.НайтиПоКоду("91.4"));
счета.Добавить(планысчетов.Хозрасчетный.НайтиПоКоду("57.2"));
Запрос.УстановитьПараметр("Счет", Счета);
Иначе
Запрос.УстановитьПараметр("Счет", Счет);
конецЕсли;

потом вставляю из вашего кода:

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("57.2") тогда
    Текст=текст___plus___"
        |    ДТ94.Сумма КАК ДТ94_Сумма,
        |    КТ57.Сумма КАК КТ57_Сумма
        |ИЗ
        |    (ВЫБРАТЬ
        |        СУММА(Хозрасчетный.Сумма) КАК Сумма
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |    ГДЕ
        |        Хозрасчетный.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |        И Хозрасчетный.СчетДт = &ДТ91) КАК ДТ91,
        |    (ВЫБРАТЬ
        |        СУММА(Хозрасчетный.Сумма) КАК Сумма
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |    ГДЕ
        |        Хозрасчетный.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |        И Хозрасчетный.СчетКт = &КТ57) КАК КТ57";
КонецЕсли;


Вываливается с ошибкой:

{ВнешнийОтчет.АХД_1.МодульОбъекта(550)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = Запрос.Выполнить();
по причине:
{(10, 5)}: Синтаксическая ошибка "ДТ94.Сумма"
<<?>>ДТ94.Сумма КАК ДТ94_Сумма

Не могу вкурить((
3 zak555
 
03.05.16
15:56
(1) что это ?
4 zenik
 
03.05.16
15:58
(2) Сорь, по запарке не тот счет вписал:
И Хозрасчетный.СчетДт = &ДТ91) КАК ДТ91,
заменить на
И Хозрасчетный.СчетДт = &ДТ91) КАК ДТ94,
5 zenik
 
03.05.16
15:59
(3) Учебное пособие :)
6 hhhh
 
03.05.16
16:01
(5) быдлокод нереальный, уничтожь как можно быстрее.
7 Slypower
 
03.05.16
16:02
вы знаете, не помогло(((
{(10, 5)}: Синтаксическая ошибка "ДТ94.Сумма"
<<?>>ДТ94.Сумма КАК ДТ94_Сумма,
есть какой мануал по ошибкам? в 7.7 хоть писало подробнее, а тут ошибка и все. В чем?
Может ошибка в другом каком месте кода?
8 zenik
 
03.05.16
16:04
(7) Запрос начинается с "ВЫБРАТЬ"...
9 Slypower
 
03.05.16
16:06
(8) он начинается с выбрать. Это одно из условий запроса. Там их несколько.
10 zenik
 
03.05.16
16:07
(9) и что там перед этим?
11 Slypower
 
03.05.16
16:09
(10) вот перед этим.
"ВЫБРАТЬ";


Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("44.2.1") тогда
    текст=текст___plus___"    
    |    ОстаткиИОбороты.Субконто1 КАК Субконто1,";
КонецЕсли;
    
Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("51") тогда    
    Текст=текст___plus___"
    |   Обороты.СуммаОборотДт КАК СуммаОборотДт,
    |   Обороты.СуммаОборотКт КАК СуммаОборотКт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон,,Счет=&Счет,,Организация = &Организация ,корсчет=&корсчет,) КАК Обороты";
ИначеЕсли (счет=планысчетов.Хозрасчетный.НайтиПоКоду("91.4")) ИЛИ (счет=планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1")) тогда
    Текст=текст___plus___"
    |Сумма(Обороты.Сумма)  КАК Сумма
    |ИЗ
    |РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач, &ДатаКон, (Счет В ИЕРАРХИИ (&Счет)) И (Организация = &Организация)) КАК Обороты";    
Иначе
    Текст=текст___plus___"
    |   ОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
    |   ОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт,
    |   ОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
    |   ОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,    
    |    ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
    |    ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ОстаткиИОбороты";    
КонецЕсли;

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("91.4") тогда
    Текст=текст___plus___"
    |ГДЕ
    |СубконтоКт1 В (&СписокКонтров) И
    |СубконтоДт1=&СубконтоДт1";
КонецЕсли;

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1") тогда
    Текст=текст___plus___"
    |ГДЕ
    |СубконтоКт1 В (&СписокКонтров)";
КонецЕсли;

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("44.2.1") тогда
    текст=текст___plus___"
    |ИТОГИ
    |    СУММА(СуммаОборотДт)
    |ПО
    |    ОБЩИЕ";
КонецЕсли;
12 zenik
 
03.05.16
16:13
В вашем запросе уже есть 91.4... зачем еще?
13 Slypower
 
03.05.16
16:16
мне нужно вылудить курсовую разницу, которая берется из счетов 91.4 Дт и 57.2 Кт. Я хотел запросом достать и присвоить переменной. Потом просто отнять/прибавить эту переменную в нужном месте
14 Slypower
 
03.05.16
16:29
Если есть возможность это внести в уже существующий запрос, то помогите, пожалуйста
15 hhhh
 
03.05.16
17:09
(13) в восьмерке вообще нет таких счетов 57.2. Есть счет 57.02
16 hhhh
 
03.05.16
17:20
(14) вот так пробуйте

ВЫБРАТЬ
   ХозрасчетныйОбороты.ОборотДт КАК Сумма
ИЗ
   Регистр.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет = &Счет91, , , КорСчет = &Счет57, ) КАК ХозрасчетныйОбороты
17 hhhh
 
03.05.16
17:25
РегистрБухгалтерии
18 Slypower
 
03.05.16
17:55
(16)     
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(10, 1)}: Синтаксическая ошибка "ХозрасчетныйОбороты.ОборотДт"
<<?>>ХозрасчетныйОбороты.ОборотДт КАК Сумма

Тут какое-то колдовство)))  Опишите, пожалуйста, суть ошибки. Он не видит такой регистр или еще что?
19 hhhh
 
03.05.16
18:11
(18) текст запроса скопируйте сюда
20 Slypower
 
11.05.16
11:07
(19)

Запрос = Новый Запрос;
    
    Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1") тогда
        счета=Новый СписокЗначений;
        счета.Добавить(планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1"));
        счета.Добавить(планысчетов.Хозрасчетный.НайтиПоКоду("60.1"));
        
        Запрос.УстановитьПараметр("Счет", Счета);
    Иначе
        Запрос.УстановитьПараметр("Счет", Счет);
    КонецЕсли;

    Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("51") тогда
        Запрос.УстановитьПараметр("корСчет", планысчетов.Хозрасчетный.НайтиПоКоду("91.1"));
    конецЕсли;
    
    Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("91.4") тогда
        СписокКонтров=Новый СписокЗначений;
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("МТС, СООО",истина));
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("Велком ИП",истина));
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("Белтелеком РУП",истина));
        Запрос.УстановитьПараметр("СписокКонтров",СписокКонтров);
        Запрос.УстановитьПараметр("СубконтоДт1", справочники.ПрочиеДоходыИРасходы.НайтиПоНаименованию("Услуги сторонних организаций",истина));
    конецЕсли;
    
    Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1") тогда
        СписокКонтров=Новый СписокЗначений;
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("БайПринт Сервис ООО",истина));
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("ДИЛАРинтерпрайз ООО",истина));
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("Белпочта РУП",истина));
        СписокКонтров.Добавить(справочники.Контрагенты.НайтиПоНаименованию("Лазерпринт ООО",истина));
        Запрос.УстановитьПараметр("СписокКонтров",СписокКонтров);
    конецЕсли;
    
    Запрос.УстановитьПараметр("ДатаНач", начдата);
    Запрос.УстановитьПараметр("ДатаКон", кондата);

    Запрос.УстановитьПараметр("Организация", Организация);

текст=
"ВЫБРАТЬ";


Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("44.2.1") тогда
    текст=текст+"    
    |    ОстаткиИОбороты.Субконто1 КАК Субконто1,";
КонецЕсли;
    
Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("51") тогда    
    Текст=текст+"
    |   Обороты.СуммаОборотДт КАК СуммаОборотДт,
    |   Обороты.СуммаОборотКт КАК СуммаОборотКт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон,,Счет=&Счет,,Организация = &Организация ,корсчет=&корсчет,) КАК Обороты";
ИначеЕсли (счет=планысчетов.Хозрасчетный.НайтиПоКоду("91.4")) ИЛИ (счет=планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1")) тогда
    Текст=текст+"
    |Сумма(Обороты.Сумма)  КАК Сумма
    |ИЗ
    |РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач, &ДатаКон, (Счет В ИЕРАРХИИ (&Счет)) И (Организация = &Организация)) КАК Обороты";    
Иначе
    Текст=текст+"
    |   ОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
    |   ОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт,
    |   ОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
    |   ОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,    
    |    ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
    |    ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ОстаткиИОбороты";    
КонецЕсли;

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("91.4") тогда
    Текст=текст+"
    |ГДЕ
    |СубконтоКт1 В (&СписокКонтров) И
    |СубконтоДт1=&СубконтоДт1";
КонецЕсли;

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("10.9.1") тогда
    Текст=текст+"
    |ГДЕ
    |СубконтоКт1 В (&СписокКонтров)";
КонецЕсли;

Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("44.2.1") тогда
    текст=текст+"
    |ИТОГИ
    |    СУММА(СуммаОборотДт)
    |ПО
    |    ОБЩИЕ";
КонецЕсли;

//добавка из (16)
Если счет=планысчетов.Хозрасчетный.НайтиПоКоду("91.4") тогда
    Текст=текст+"
    |ХозрасчетныйОбороты.ОборотДт КАК Сумма
    |ИЗ
    |РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет = &Счет91, , , КорСчет = &Счет57, ) КАК ХозрасчетныйОбороты ";


Запрос.Текст = Текст;
    
Возврат Запрос;
21 zenik
 
11.05.16
23:43
Кто будет ваши ИначеЕсли разбирать :)
Запрос.Текст = Текст; - вот этот "текст" сюдой давай.
22 Slypower
 
12.05.16
09:26
Он написан выше - "черный текст" моего предыдущего поста. Текст = ....
А в конце уже этот текст мы и присваиваем запросу
23 catena
 
12.05.16
09:41
(22)Даже в 77 есть жесткие правила порядка в запросе. Почему вы считаете, что можно в 82 прилепить произвольный кусок текста к основному тексту запроса и все будет работать?
24 hhhh
 
12.05.16
09:51
(22) ну получается вы к

   |ИЗ
    |РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач, &ДатаКон, (Счет В ИЕРАРХИИ (&Счет)) И (Организация = &Организация)) КАК Обороты"

прям снизу присобачиваете

|ХозрасчетныйОбороты.ОборотДт КАК Сумма
    |ИЗ
    |РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет = &Счет91, , , КорСчет = &Счет57, ) КАК ХозрасчетныйОбороты ";

как это так?
25 Slypower
 
13.05.16
12:52
(24) не понял ваш вопрос. А куда нужно присобачить?
(23) отчет сделан и работает, значит можно. Сделан не мной, мне же нужно только изменить немножко и все
26 hhhh
 
13.05.16
13:06
(25) просто отдельно написать запрос. Зачем в этот?
27 catena
 
13.05.16
13:33
(25)После ваших правок - не работает. Потому что вы взяли из темы кусок запроса и "приклеили" к тексту своего запроса.
Независимо от того, куда вы едете — это в гору и против ветра!