Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 15:47

В условиях соединения запроса не допускается обращение к табличным частям.

Автор keks_feo, 01 июл 2015, 11:33

0 Пользователей и 1 гость просматривают эту тему.

keks_feo

Добрый день!
Очередной геморрой вылез.
Сделал печатную форму, с правами администратора работает без проблем. С правами бухгалтера, ругается
ЦитироватьНе удалось сформировать внешнюю печатную форму!
Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса: Запрос невозможно исполнить В условиях соединения запроса не допускается обращение к табличным частям. (1)

Читал на форумах, что возможно дело в запросах, когда использую "левое внешнее соединение таблиц". Уже в запросах, везде подправил на Внутреннее
подскажите, куда копать в чем траблы?!

Функция Печать() экспорт
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Запрос.УстановитьПараметр("ВидЗанятости", Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы);
Запрос.УстановитьПараметр("Дата", СсылкаНаОбъект.Дата);

ВалютаПечати = Константы.ВалютаРегламентированногоУчета.Получить();

Запрос.Текст = "ВЫБРАТЬ
               | ПеремещениеОС.Дата КАК ДатаДок,
               | ПеремещениеОС.Номер КАК НомерДок,
               | ПеремещениеОС.Ответственный КАК Ответственный,
               | ПеремещениеОС.Организация КАК Организация,
               | ПеремещениеОС.Организация.КодПоОКПО КАК КодПоОКПО,
               | ПеремещениеОС.ПодразделениеОрганизации КАК ПодрПолучатель,
               | ПеремещениеОС.МОЛОрганизации КАК МОЛ,
               | ПеремещениеОС.Дата КАК ДатаПередачи
               |ИЗ
               | Документ.ПеремещениеОС КАК ПеремещениеОС
               |ГДЕ
               | ПеремещениеОС.Ссылка = &Ссылка";
ВыборкаОС = Запрос.Выполнить().Выбрать();
ВыборкаОС.Следующий();

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Запрос.УстановитьПараметр("Дата", ВыборкаОС.ДатаДок-1);
Запрос.УстановитьПараметр("ВидЗанятости", Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы);


Запрос.Текст = "ВЫБРАТЬ
               | ГдеБыло.Местонахождение КАК Сдатчик,
               | ГдеБыло.МОЛ КАК МОЛ
   |ИЗ
               | Документ.ПеремещениеОС КАК ПеремещениеОС
               | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Дата, ) КАК ГдеБыло
               | ПО ПеремещениеОС.ОС.ОсновноеСредство = ГдеБыло.ОсновноеСредство
               |ГДЕ
               | ПеремещениеОС.Ссылка = &Ссылка" ;
ВыборкаГде = Запрос.Выполнить().Выбрать();
ВыборкаГде.Следующий();



Руководители = ОбщегоНазначения.ОтветственныеЛица(ВыборкаОС.Организация,ВыборкаОС.ДатаДок);


МОЛЗапрос=(ВыборкаГде.МОЛ);

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Дата", ВыборкаОС.ДатаДок-1);
Запрос.УстановитьПараметр("МОЛ", МОЛЗапрос);

Запрос.Текст ="ВЫБРАТЬ   
    |Работники.Сотрудник КАК МОЛ,
    |Работники.Должность КАК Должность,
    |СотрудникиОрг.Код  КАК ТабельныйНомер
    |     ИЗ
|РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, Сотрудник.Физлицо = &МОЛ ) КАК Работники
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрг
            | ПО Работники.Сотрудник = СотрудникиОрг.Ссылка";


ВыборкаДолжность = Запрос.Выполнить().Выбрать();
ВыборкаДолжность.Следующий();

МОЛЗапросПринял=(ВыборкаОс.МОЛ);


Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Дата", ВыборкаОС.ДатаДок-1);
Запрос.УстановитьПараметр("МОЛ", МОЛЗапросПринял);

Запрос.Текст = "ВЫБРАТЬ   
    |Работники.Сотрудник КАК МОЛ,
    |Работники.Должность КАК Должность,
    |СотрудникиОрг.Код  КАК ТабельныйНомер
    |     ИЗ
|РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, Сотрудник.Физлицо = &МОЛ ) КАК Работники
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрг
            | ПО Работники.Сотрудник = СотрудникиОрг.Ссылка";

ВыборкаДолжностьПринял = Запрос.Выполнить().Выбрать();
ВыборкаДолжностьПринял.Следующий();

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Ссылка",    СсылкаНаОбъект);
Запрос.УстановитьПараметр("Дата", ВыборкаОС.ДатаДок);
Запрос.УстановитьПараметр("счёт01_1", ПланыСчетов.Хозрасчетный.ОСвОрганизации);
Запрос.УстановитьПараметр("счёт02_1", ПланыСчетов.Хозрасчетный.АмортизацияОС_01);

Запрос.Текст = "ВЫБРАТЬ
| ПеремещениеОСОС.НомерСтроки КАК НС,
| ПеремещениеОСОС.ОсновноеСредство КАК ОсновноеСредство,
| ПеремещениеОСОС.ОсновноеСредство.Код КАК ИнвНомерУпр,
| ПеремещениеОСОС.ОсновноеСредство.НаименованиеПолное КАК НаименованиеОС,
| ПеремещениеОСОС.ОсновноеСредство.ДатаВыпуска КАК ГодВыпуска,
| ПеремещениеОСОС.НомерСтроки КАК   СуммаПеремещения
|ИЗ
| Документ.ПеремещениеОС.ОС КАК ПеремещениеОСОС
|ГДЕ
| ПеремещениеОСОС.Ссылка = &Ссылка";


ВыборкаПоОС = Запрос.Выполнить().Выбрать();

ДокВвода  = Неопределено;
ДатаВвода = Дата('00000000');

ТабДокумент   = Новый ТабличныйДокумент();
    Макет         = ПолучитьМакет("Макет");
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДокумент.АвтоМасштаб = Истина;

ОбластьШапка1 = Макет.ПолучитьОбласть("Шапка1");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьШапка1.Параметры.Заполнить(ВыборкаОС);
ОбластьШапка1.Параметры.ПодрСдатчик = ВыборкаГде.Сдатчик;
ТабДокумент.Вывести(ОбластьШапка1);

ИтогСумма = 0;
Пока ВыборкаПоОС.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(ВыборкаПоОС);

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

Если ПустаяСтрока(ВыборкаПоОС.НаименованиеОС) Тогда
ОбластьСтрока.Параметры.НаименованиеОС = СокрЛП(ВыборкаПоОС.ОсновноеСредство.НаименованиеПолное);
КонецЕсли;

ТабДокумент.Вывести(ОбластьСтрока);
ИтогСумма = ИтогСумма + ?(ВыборкаПоОС.СуммаПеремещения<>Null,ВыборкаПоОС.СуммаПеремещения,0);
КонецЦикла;

ОбластьПодвал.Параметры.ИтогСумма = ИтогСумма;

Если СокрЛП(ВРег(ВыборкаДолжность.МОЛ)) = СокрЛП(ВРег(ВыборкаГде.МОЛ))  Тогда
Должность=ВыборкаДолжность.Должность;
Иначе
Должность = "";
                    ОбластьПодвал.Параметры.ДолжностьМОЛновое       = ВыборкаОС.Должность;
КонецЕсли;
Если СокрЛП(ВРег(ВыборкаДолжностьПринял.МОЛ)) = СокрЛП(ВРег(ВыборкаОС.МОЛ))  Тогда
ДолжностьПринял=ВыборкаДолжностьПринял.Должность;
Иначе
ДолжностьПринял = "";
                    ОбластьПодвал.Параметры.ДолжностьМОЛновое       = ВыборкаОС.Должность;
КонецЕсли;


ОбластьПодвал.Параметры.главБух = Руководители.ГлавныйБухгалтерПредставление;
    ОбластьПодвал.Параметры.МОЛновое = ВыборкаОС.МОЛ;
ОбластьПодвал.Параметры.МОЛстарое    = ВыборкаГде.МОЛ;
ОбластьПодвал.Параметры.ДолжностьМОЛстарое      = Должность;
ОбластьПодвал.Параметры.ДолжностьМОЛновое       = ДолжностьПринял;

ОбластьПодвал.Параметры.ТабельныйНомерМОЛстарое = ВыборкаДолжность.ТабельныйНомер;
ОбластьПодвал.Параметры.ТабельныйНомерМОЛновое  = ВыборкаДолжностьПринял.ТабельныйНомер;

ТабДокумент.Вывести(ОбластьПодвал);

ТабДокумент.ПолеСверху         = 0;
ТабДокумент.ПолеСлева          = 0;
ТабДокумент.ПолеСнизу          = 0;
ТабДокумент.ПолеСправа         = 0;

ТабДокумент.Показать();
Возврат Неопределено;




Rasty

В начале кода
УстановитьПривилегированныйРежим(Истина);
В конце кода
УстановитьПривилегированныйРежим(Ложь);
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

keks_feo

Цитата: Rasty от 01 июл 2015, 11:45
В начале кода
УстановитьПривилегированныйРежим(Истина);
В конце кода
УстановитьПривилегированныйРежим(Ложь);

вставил в коде, который описывал выше, не чего не изменилось... или это нужно в какую-то другую процедуру пихнуть?!

LexaK

попробуйте такое запрос

Запрос.Текст = "ВЫБРАТЬ
                   |    ГдеБыло.Местонахождение КАК Сдатчик,
                   |    ГдеБыло.МОЛ КАК МОЛ
                   |ИЗ
                   |    Документ.ПеремещениеОС.ОС КАК ПеремещениеОС
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Дата, ) КАК ГдеБыло
                   |        ПО ПеремещениеОС.ОсновноеСредство = ГдеБыло.ОсновноеСредство
                   |ГДЕ
                   |    ПеремещениеОС.Ссылка = &Ссылка" ;


табличная часть ОС перенесена из условия связи в источник данных.

п.с. а вообще у вас очень много запросов, которые возвращаю по капельке данных,
было бы правильнее, создать один запрос, который вернул бы все нужные для отчета данные!
если помогло нажмите: Спасибо!

keks_feo

Цитата: LexaK от 01 июл 2015, 12:19
попробуйте такое запрос

Запрос.Текст = "ВЫБРАТЬ
                   |    ГдеБыло.Местонахождение КАК Сдатчик,
                   |    ГдеБыло.МОЛ КАК МОЛ
                   |ИЗ
                   |    Документ.ПеремещениеОС.ОС КАК ПеремещениеОС
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Дата, ) КАК ГдеБыло
                   |        ПО ПеремещениеОС.ОсновноеСредство = ГдеБыло.ОсновноеСредство
                   |ГДЕ
                   |    ПеремещениеОС.Ссылка = &Ссылка" ;


табличная часть ОС перенесена из условия связи в источник данных.

п.с. а вообще у вас очень много запросов, которые возвращаю по капельке данных,
было бы правильнее, создать один запрос, который вернул бы все нужные для отчета данные!

О.. оно, сработало! Спсб. учту на будущее.
а по поводу куча запросов, да я понимаю, что это не есть тактично, но это по сути мой первый отчет :)
учту!

LexaK

ЦитироватьО.. оно, сработало! Спсб. учту на будущее.
Вот и отлично. :ooifh:
Кнопку - Спасибо нажимать не забываем. :btbzdb:
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск