• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

формирование отчета в 1С 8.0

  • Автор темы staff
  • Дата начала
S

staff

с нуля разработал конфигуратор (1С Предприятие 8 ) суть заключается в чем, есть элеватор семян по нему надо производить движения семян, сейчас у меня стоит загвоздка по формированию отчета, у меня не суммируются и не отнимаются значения по определенной позиции, подскажите что делать (делал обыкновенный запрос все нормально выводится, а когда делаю сложный отчет выводится все по отдельности)
При необходимости могу выслать файл конфигуратор и базу.
 
S

staff

код отчета:
Процедура КнопкаСформироватьНажатие(Кнопка)
// Вставить содержимое обработчика.
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОборотнаяВедомостьОстаткиИОбороты.Транспортер КАК Транспортер,
| ОборотнаяВедомостьОстаткиИОбороты.Банки КАК Банки,
| ОборотнаяВедомостьОстаткиИОбороты.ВидСемян КАК ВидСемян,
| ОборотнаяВедомостьОстаткиИОбороты.Регистратор КАК Регистратор,
| СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаНачальныйОстаток) КАК НачОст,
| СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаПриход) КАК Приход,
| СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаРасход) КАК Расход,
| СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаКонечныйОстаток) КАК КонОст
|ИЗ
| РегистрНакопления.ОборотнаяВедомость.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ОборотнаяВедомостьОстаткиИОбороты";
Флаг1=0;
если не ВыбТранспортер.Пустая() тогда
Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Транспортер=&ПТранспортер ";
Флаг=1;
конецЕсли;
Если не ВыбБанки.Пустая() тогда
Если флаг1=0 тогда
Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Банки=&ПБанки ";
Флаг1=1;
иначе
Запрос.Текст=Запрос.Текст+"И ОборотнаяВедомость.Банки=&ПБанки ";
конецесли;
конецесли;
если ПечБанки тогда
Если флаг1=0 тогда
Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Банки.ВыводПриПечати ";
Иначе
Запрос.Текст=Запрос.Текст+"И ОборотнаяВедомость.Банки.ВыводПриПечати";
конецесли;
конецесли;
Запрос.Текст=Запрос.Текст+" СГРУППИРОВАТЬ ПО
| ОборотнаяВедомостьОстаткиИОбороты.Транспортер,
| ОборотнаяВедомостьОстаткиИОбороты.Банки,
| ОборотнаяВедомостьОстаткиИОбороты.ВидСемян,
| ОборотнаяВедомостьОстаткиИОбороты.Регистратор
|
|УПОРЯДОЧИТЬ ПО
| Транспортер,
| Банки,
| ВидСемян,
| Регистратор
|ИТОГИ
| СУММА(НачОст),
| СУММА(Приход),
| СУММА(Расход),
| СУММА(КонОст)
|ПО
| Транспортер,
| Банки,
| ВидСемян,
| Регистратор
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
Запрос.УстановитьПараметр("КонецПериода", КонПериода);
Если не ВыбТранспортер.Пустая() тогда
Запрос.УстановитьПараметр("ПТранспортер", ВыбТранспортер);
конецесли;
Если не ВыбБанки.Пустая() тогда
Запрос.УстановитьПараметр("ПБанки", ВыбБанки);
конецесли;
Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
темп = новый ТабличныйДокумент;
ТабДок=ПолучитьМакет("Макет");
ОбластьПериод=ТабДок.ПолучитьОбласть("Период");
ОбластьПериод.Параметры.Период=" Период с "+НачПериода+" по "+КонПериода;
Темп.Вывести(ОбластьПериод);
ОбластьШапка=ТабДок.ПолучитьОбласть("Шапка");
Темп.Вывести(ОбластьШапка);
Пока Выборка.Следующий() цикл
ОбластьТранспортер=ТабДок.ПолучитьОбласть("Транспортер");
ОбластьТранспортер.Параметры.Транспортер="Транспортер "+Выборка.Транспортер;
Темп.Вывести(ОбластьТранспортер);
ВыборкаБанки=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока выборкаБанки.Следующий() цикл
ФлагБанки=0;
ВыборкаВидСемян=ВыборкаБанки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока выборкаВидСемян.Следующий() цикл
если выборкаВидСемян.ВидСемян.Пустая() тогда
продолжить
конецесли;
Если ФлагБанки=0 тогда
ОбластьБанки=ТабДок.ПолучитьОбласть("Банки");
ОбластьБанки.Параметры.Банки="Банки " + ВыборкаБанки.Банки;
Темп.Вывести(ОбластьБанки);
ФлагБанки=1;
конецесли;
ОбластьВидСемян=ТабДок.ПолучитьОбласть("ВидСемян");
ОбластьВидСемян.Параметры.ВидСемян=ВыборкаВидСемян.ВидСемян;
Если ВыборкаВидСемян.НачОст>0 тогда
ОбластьВидСемян.Параметры.НачальныйОстатокПриход=ВыборкаВидСемян.НачОст;
иначе
ОбластьВидСемян.Параметры.НачальныйОстатокРасход=-ВыборкаВидСемян.НачОст
конецесли;
Темп.Вывести(ОбластьВидСемян);
ВыборкаРегистратор=ВыборкаВидСемян.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам
);
Пока ВыборкаРегистратор.Следующий() цикл
Если ВыборкаРегистратор.Регистратор<>Неопределено тогда
ОбластьРегистратор=ТабДок.ПолучитьОбласть("Регистратор");
Если ВыборкаРегистратор.Приход>0 тогда
ОбластьРегистратор.Параметры.Контрагент=ВыборкаРегистратор.Регистратор;
конецесли;
Если ВыборкаРегистратор.Расход>0 тогда
ОбластьРегистратор.Параметры.Контрагент=ВыборкаРегистратор.Регистратор;
конецесли;
ОбластьРегистратор.Параметры.Приход=ВыборкаРегистратор.Приход;
ОбластьРегистратор.Параметры.Расход=ВыборкаРегистратор.Расход;
ОбластьРегистратор.Параметры.Дата=ВыборкаРегистратор.Регистратор.дата;
Темп.Вывести(ОбластьРегистратор);
конецесли;
конеццикла;
ОбластьИтогоВидСемян=ТабДок.ПолучитьОбласть("ИтогоВидСемян");
Если ВыборкаВидСемян.КонОст>0 тогда
ОбластьИтогоВидСемян.Параметры.КонечныйОстатокПриход=ВыборкаВидСемян.КонОст;
Иначе
ОбластьИтогоВидСемян.Параметры.КонечныйОстатокРасход=-ВыборкаВидСемян.КонОст
конецесли;
Темп.Вывести(ОбластьИтогоВидСемян);
конеццикла;
конеццикла;
конеццикла;
ТабФорма=Отчеты.ОтчетПоСеменам.ПолучитьФорму("ФормаТаблицы");
ТабФорма.Открыть();
ТабФорма.ЭлементыФормы.Результат.Вывести(Темп);
конецпроцедуры

Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры

а тут сама проблема:
само дело в чем, когда составляю складской документ выбираю отдельно процедуру (загрузка или отгрузка), вид семян которую мы используем, дальше транспортер (то по чем происходит загрузка или отгрузка в банки) и сама банка где хранится семена, банка одна и таже тока изменяются транспортреры (загружаем в банку по одному транспортеру или же выгружаем из банки по другому транспортеру).
когда ставлю загрузку по транспортеру (например 12) и банку (111) и вид семян (подсолнух) делаю проводку в отчете создается позиция, когда делаю отгрузку по транспортеру (12) и банку (111) и вид семян (подсолнух) то происходит отнимание и в ИтогоВидСемян отобразается остаток, но когда ставлю отгрузку по транспортеру (14) и банку (111) и вид семян (подсолнух) то происходит создание другой позиции в отчете где из банки (111) ничего не отнимается.
пробовал убрать группировки по регистратору у меня нечего не выводит
 
T

tanat

Вам надо структуру регистра менять, так как уникальность записи в этом случае задается 3мя измерениями : банк, транспортер, вид семян. Если оставить банк и вид семян, а транспортер ввести в качестве реквизита - то регистр будет "работать" так, как вам нужно, т.е. делать приход-расход без учета транспортера.
 
S

staff

сделал как вы написали, у меня теперь в макете отчета кроме даты больше ничего не выводится
 
T

tanat

перепроведите все документы - первое, из условий уберите "ГДЕ ОборотнаяВедомость.Транспортер=&ПТранспортер " в запросе. Вы структуру поменяли, а условия отбора - нет.
 
S

staff

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

tanat

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

вот както так,я думаю
 
T

tanat

а все остальное безызмено. дело то в запросе и в кусочке его дополнения.
 
S

staff

теперь пишет кучу ошибок и инфу в отчете не выводит
 
T

tanat

флаг=0; разкоментируйте.

Ошибки какого характера? запрос выполняется? отладчиком пользоваться умеете? на каком этапе возникает ошибка?

Переменные все определены?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!