Имя: Пароль:
1C
1С v8
запрос все усложнняется
🠗 (Волшебник 04.05.2020 18:07)
0 103
 
04.05.20
17:10
хелп ми, плиз))

Есть Справочник Хранилища. Каждое хранилище закреплено за Ответственным.
Есть документы которые хранятся в этих хранилищах.
При создании документа указывается в каком хранилище он находится, количество подлинников и количество копий, при чем копии хранятся в другом хранилище (его тоже указываем в документе) с другим Ответственным.
Нужна, грубо говоря опись по всем хранилищам по заданному Ответственному:
Задаем Ответственного и получаем таблицу:
№пп    Хранилище    Кол-во наименований документа     Кол-во экземпляров док-та      

КАК ПРИПЛЮСОВАТЬ КОПИИ?
ВЫДАЕТ ОТДЕЛЬНОЙ СТРОКОЙ
И ВЕЗДЕ ПРОПИСЫВАЕТ ОДНО И ТО ЖЕ ХРАНИЛИЩЕ А123, ВО 2 И 4 СТРОКЕ ДОЛЖНЫ БЫТЬ ДРУГИЕ
В 3-ЕЙ СТРОКЕ КОПИЯ, ДАННЫЕ 1 И 3 СТРОК ДОЛЖНЫ СУММИРОВАТЬСЯ И БЫТЬ В ОДНОЙ СТРОКЕ

№ п/п Номер хранилища Количество наименований документов Количество экземпляров документов  Примечание

1       А123               8                                  11                            Согласно описи хранилища А123

2       А123               4                                  6                             Согласно описи хранилища А123

3       А123               1                                  2                             Согласно описи хранилища А123

4       А123               1                                  2                             Согласно описи хранилища А123

Функция СформироватьАктПередачиУход()

                ТабДок = Новый ТабличныйДокумент;

                НовОтчет = РеквизитФормыВЗначение("Объект");

                ОбъектМакет = НовОтчет.ПолучитьМакет("МакетУход");

                ОбластьШапка = ОбъектМакет.ПолучитьОбласть("Шапка");

                ОбластьШапка.Параметры.ТекущаяДата = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") + "г.";

                ОбластьШапкаТабл = ОбъектМакет.ПолучитьОбласть("ШапкаТабл");        

                ОбластьЗначениеТабл = ОбъектМакет.ПолучитьОбласть("ЗначениеТабл");

                ОбластьПункт2 = ОбъектМакет.ПолучитьОбласть("Пункт2");

                ОбластьПодвал = ОбъектМакет.ПолучитьОбласть("Подвал");

                ОбластьПодвал.Параметры.ТекущаяДата = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") + "г.";

              

                ОбластьПодвал.Параметры.Отв = Объект.ТекОтв.Сокращенно;

                ОбластьПодвал.Параметры.Приним = Объект.НовОтветственный.Сокращенно;

              

                Запрос = Новый Запрос;

                Запрос.Текст =

                                                               "ВЫБРАТЬ

                                                               |             ВЫБОР

                                                               |                             КОГДА АрхивныйДокумент.КолвоПодл > 0

                                                               |                                             ТОГДА ЕСТЬNULL(АрхивныйДокумент.КолвоПодл, 0)

                                                               |             КОНЕЦ КАК КолвоПодл,

                                                               |             ВЫБОР

                                                               |                             КОГДА АрхивныйДокумент.КолвоКопий > 0

                                                               |                                             ТОГДА ЕСТЬNULL(АрхивныйДокумент.КолвоКопий, 0)

                                                               |             КОНЕЦ КАК КолвоКопий,

                                                               |             АрхивныйДокумент.Хранилище КАК Хранилище,

                                                               |             АрхивныйДокумент.ХранилищеКоп КАК ХранилищеКоп,

                                                               |             АрхивныйДокумент.Ответственный КАК Ответственный,

                                                               |             АрхивныйДокумент.Ответственный.Должность КАК Должность,

                                                               |             АрхивныйДокумент.Ссылка КАК КолДок

                                                               |ИЗ

                                                               |             Документ.АрхивныйДокумент КАК АрхивныйДокумент

                                                               |ГДЕ

                                                               |             (АрхивныйДокумент.ХранилищеКоп = &ХранилищеКоп

                                                               |                                             ИЛИ АрхивныйДокумент.Хранилище = &Хранилище

                                                               |                                             ИЛИ АрхивныйДокумент.Ответственный = &Ответственный

                                                               |                                             )

                                                               |ИТОГИ

                                                               |             СУММА(КолвоПодл),

                                                               |             КОЛИЧЕСТВО(КолДок)

                                                               |ПО

                                                               |             Хранилище";

              

                Хран = Справочники.Хранилища.НайтиПоРеквизиту("Ответственный",Объект.ТекОтв,,);

                Запрос.УстановитьПараметр("Ответственный",Объект.ТекОтв);

                Запрос.УстановитьПараметр("ХранилищеКоп",Хран);

                Запрос.УстановитьПараметр("Хранилище",Хран);
              

                Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

                ОбластьШапка.Параметры.ДолжностьОтпускник = Объект.ТекОтв.Должность;

                ОбластьШапка.Параметры.ФИООтпускник = Объект.ТекОтв.Наименование;

                ОбластьШапка.Параметры.ДолжностьПринимающий = Объект.НовОтветственный.Должность;

                ОбластьШапка.Параметры.ФИОПринимающий = Объект.НовОтветственный.Наименование;

                ОбластьПодвал.Параметры.НомПечатиПринимающего = Объект.ПечатьНовОтветственного;

                ОбластьПодвал.Параметры.НомПечатиОтпускника = Объект.ПечатьТекОтв;

                ТабДок.Вывести(ОбластьШапка);

                ТабДок.Вывести(ОбластьШапкаТабл);

                Кол = 0;

                Пока Выборка.Следующий() Цикл
                Кол = Кол+1;

                               ОбластьЗначениеТабл.Параметры.НомХран = Хран.Наименование;

                               ОбластьЗначениеТабл.Параметры.КолЭкз = Выборка.КолвоПодл;

                               ОбластьЗначениеТабл.Параметры.КолДок = Выборка.КолДок;

                               ОбластьЗначениеТабл.Параметры.НомерПП= Кол;

                               ТабДок.Вывести(ОбластьЗначениеТабл);
              
                КонецЦикла;

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

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

                Возврат(ТабДок);
1 Волшебник
 
модератор
04.05.20
18:08
Тема не отражает суть сообщения.
Прописные буквы.
Уродский программный код через одну строку
2 103
 
04.05.20
20:30
(1) Я сюда за помощью, а не за оценкой!
3 103
 
04.05.20
20:31
(1) а вам, как модератору, можно было бы вести себя тактичнее
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший