fixin (fixin) wrote,
fixin
fixin

Хитрый двухуровневый кэш

Как вам такой хитрый двухуровневый кэш?

Первый уровень – ДатаПотребности, второй – Номенклатура, на третьем – массив Заказов.

Искать можно без учета заказов, тогда будут возвращены все заказы и по конкретному заказу, тогда заказ ищется перебором в массиве на втором уровне кэша. Массивы маленькие, перебор работает быстро.

Перебираем все строки и заносим их в кэш: 


//Кэш строк документа
 
КэшСтрокДокумента = Новый Соответствие();
 Для Каждого
Строка ИЗ Объект.ОбеспечениеПотребности Цикл
 
ДобавитьВКэшСтрокДокумента(КэшСтрокДокумента, Строка);
 КонецЦикла;
Сама процедура занесения в кэш:
Процедура
ДобавитьВКэшСтрокДокумента(Кэш, Строка) Экспорт
 
Кэш2 = Кэш[Строка.ДатаПотребности];
 Если
Кэш2 = Неопределено Тогда
 
Кэш2 = Новый Соответствие();
 
Кэш.Вставить(Строка.ДатаПотребности, Кэш2);
 КонецЕсли;
 
Кэш3 = Кэш2[Строка.Номенклатура];
 Если
Кэш3 = Неопределено Тогда
 
Кэш3 = Новый Массив();
 
Кэш2.Вставить(Строка.Номенклатура, Кэш3);
 КонецЕсли;
 
Кэш3.Добавить(Строка);
КонецПроцедуры
Функция
поиска в кэше:
Функция
НайтиВКэшеСтрокиДокумента(Кэш, ДатаПотребности, Номенклатура, Заказ = Неопределено, Подразделение = Неопределено) Экспорт
 
М = Новый Массив();

 
Кэш2 = Кэш[ДатаПотребности];
 Если
Кэш2 = Неопределено Тогда
  Возврат
М;
 КонецЕсли;

 
Кэш3 = Кэш2[Номенклатура];
 Если
Кэш3 = Неопределено Тогда
  Возврат
М;
 КонецЕсли;

 Если
Заказ = Неопределено Тогда
  Возврат
Кэш3;
 КонецЕсли;

 Для Каждого
Эл ИЗ Кэш3 Цикл
  Если
Эл.Заказ = Заказ
   И (Подразделение = Неопределено ИЛИ Эл.Подразделение = Подразделение)
   Тогда
  
М.Добавить(Эл);
  КонецЕсли;
 КонецЦикла;

 Возврат
М;

КонецФункции

Каково, а?! Летает!

Tags:
Subscribe

Posts from This Journal “1С” Tag

  • Ловкость рук и обработка результата запроса

    Как то я пообещал заказчику, что обработаю определенный список документов, но забыл, что эти документы были в базе с управляемыми формами. Как быть?…

  • 1С и искусственные серверные барьеры

    Заметил, что в управляемых формах 1С принуждает программистов к плохой архитектуре решений. Вкратце упомяну, что теперь большинство внешних…

  • Особенности белорусского Налогоплательщика

    Взял подработку у одного знакомого чувака из Беларуси. Платил мало (я то беру 1500 в час, а там по 800), но знакомый хороший, грех было отказывать,…

  • 1С отрицает очевидное

    Работаю с флагманом 1С, конфигурацией ERP. Вижу, что 1С прошило всю конфигурацию обращениями к модулям, где разработчик, внедряющий 1С может…

  • Как обмануть макет 1с?

    В 1С можно менять макеты в режиме 1с Предприятия. Но 1с-овцы не подумали, что пользователи не захотят видеть некоторые поля. Если просто удалить…

  • Корректировка регистра на 80 документов

    Мне прислали список из 80 документов, суммы которых нужно было внести в УПП в документ корректировки записей регистров для того, чтобы закрыть…

  • Ручной способ получить список реквизитов справочников

    Была поставлена задача расписать реквизиты справочника договоров и контрагентов в двух базах, написать соответствия между ними. Для начала нужно…

  • Открытие файла с нужным именем

    Небольшой гуру-тест. При сохранении файла в базу 1С сохраняется его первоначальное имя, например «Договор ННН.PDF». Задача – при открытии файла из…

  • Перемещение по строкам документа

    Перемещение на предыдущую-следующую строку в 1С УФ. Казалось бы, реализация таких простых кнопок, как переход к предыщей/следующей строке в списке…

promo fixin december 28, 2020 16:57 1381
Buy for 30 tokens
Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект " Секс за Ваши". Если вы хотите написать пост обо мне или почитать, что пишут…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 63 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →