Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как оптимально выбрать остатки на указанные дни?          
Vofka Подменю пользователя
сообщение 29.11.21, 18:53
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Привет!

Есть регистр остатков с измерением Договор, ресурс Сумма.

Есть некоторые данные, допустим, в таблице значений:

Дата - Договор
01.11 - Договор1
02.11 - Договор2
05.11 - Договор3
10.11 - Договор4
29.11 - Договор5

Мне надо к этой таблице значений добавить Сумму из регистра. В таблице значений могут быть любые даты и договора.

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

Как бы вы это сделали?

sava1 Подменю пользователя
сообщение 29.11.21, 20:43
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

типо так [необходимо зарегистрироваться для просмотра ссылки]

Vofka Подменю пользователя
сообщение 30.11.21, 7:49
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

sava1 @ Вчера, 20:43 * ,
Та это ж не то. Мне не на каждый день остатки надо, а остатки на разные даты по разным измерениям.

sava1 Подменю пользователя
сообщение 30.11.21, 8:03
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

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

Спасибо сказали: Vofka,

daveal Подменю пользователя
сообщение 30.11.21, 8:51
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 70
Из: Киев
Спасибо сказали: 25 раз
Рейтинг: 0

Получить остатки на минимальную дату + обороты (развернутые до дня) до максимальной. Дальше соединится по дате меньше или меньше или равно в зависимости от того, нужен остаток на начало или конец дня

Спасибо сказали: Vofka,

Batchir Подменю пользователя
сообщение 30.11.21, 14:44
Сообщение #6

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Если на входе таблица значений и на выходе тоже должна быть таблица значений и не принципиально использовать именно запрос, тогда можно и с помощью СКД сделать

        
        // создаем схему
    СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;

        // Добавляем Источник данных.
    ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных";
    ИсточникДанных.ТипИсточникаДанных = "Local";
    
    // Добавляем наборы данных.
    // тз - это наша таблица значений с колонками ДатаОстатков и Договоры, используем в качестве внешнего набора данных
    НаборДанныхОбъектСхемыКомпоновкиДанных1 = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
    НаборДанныхОбъектСхемыКомпоновкиДанных1.Имя = "НаборДанных1";
    НаборДанныхОбъектСхемыКомпоновкиДанных1.ИмяОбъекта = "тз";
    НаборДанныхОбъектСхемыКомпоновкиДанных1.ИсточникДанных = "ИсточникДанных";

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

    // добавляем связи наборов с передачей параметров
    СвязьНабораДанных = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
    СвязьНабораДанных.НаборДанныхИсточник = "НаборДанных1";
    СвязьНабораДанных.НаборДанныхПриемник = "НаборДанных2";
    СвязьНабораДанных.ВыражениеИсточник = "Договор";
    СвязьНабораДанных.ВыражениеПриемник = "Договор";
    
    СвязьНабораДанных = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
    СвязьНабораДанных.НаборДанныхИсточник = "НаборДанных1";
    СвязьНабораДанных.НаборДанныхПриемник = "НаборДанных2";
    СвязьНабораДанных.ВыражениеИсточник = "ДатаОстатков";
    СвязьНабораДанных.ВыражениеПриемник = "ДатаОстатков";
    СвязьНабораДанных.Параметр = "ДатаОстатков";

    
    // Добавляем поля набора данных
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле             = "Договор";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным     = "Договор";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок     = "Договор";
    
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле             = "ДатаОстатков";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным     = "ДатаОстатков";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок     = "ДатаОстатков";
    
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле             = "СуммаОстаток";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным     = "СуммаОстаток";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок     = "СуммаОстаток";
    
    // добавляем ресурс
    Ресурс = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
    Ресурс.ПутьКДанным = "СуммаОстаток";
    Ресурс.Выражение = "Сумма(СуммаОстаток)";
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    
    // формируем структуру выходящих данных
    НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
    
    ГруппировкаКомпоновкиДанных = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ГруппировкаКомпоновкиДанных.Использование = Истина;
    
    ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
    ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Договор");
    
    ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
    ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ДатаОстатков");
    
    АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
    
    ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
    ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("СуммаОстаток");
    
    // инициализируем макет, выполнем в коллекцию
    ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки,,,ТипГенератора);
    ВнешниеНаборы = Новый Структура("тз", тз);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
    ОбъектДляЗагрузки = Новый ТаблицаЗначений;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);


Сообщение отредактировал Batchir - 30.11.21, 14:51

Спасибо сказали: Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 2:48
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!