Принципы корректной работы электронных курсов в СДО Mirapolis

  1. В процедурах обработки событий окна unload, beforeunload, pagehide категорически нельзя вызывать методы SCORM2004/SCORM1.2: GetValue/LMSGetValue, SetValue/LMSSetValue, Commit/LMSCommit;
  2. Вызов метода SCORM2004 Terminate (SCORM1.2 LMSFinish) в указанных выше процедурах допустим, но этот способ завершения работы не должен быть основным;
  3. В качестве основного способа завершения работы рекомендуется вызывать SCORM2004 Terminate (SCORM1.2 LMSFinish) при переходе на последний слайд курса или при нажатии на кнопку на последнем слайде курса;
  4. В качестве резервного способа рекомендуется вызывать SCORM2004 Terminate (SCORM1.2 LMSFinish) в обработчиках событий unload и pagehide. Ошибки в случае двойного вызова не будет, система от этого защищена;
  5. Не следует использовать подписку на события элемента body. Последние версии браузеров некорректно обрабатывают такие подписки: например, в Google Chrome подписка вида body onunload=func() не работает совершенно;
  6. Все необходимые обращения к методам SCORM2004/SCORM1.2: GetValue/LMSGetValue, SetValue/LMSSetValue, Commit/LMSCommit, должны быть выполнены до того, как пользователю будет сообщено о завершении курса.

Печать определенного листа в десятках и сотнях документов

Столкнулся с проблемой: необходимо перепечатать первый лист в разных документах. Ладно, если этих документов 10. Но их 200!
Открывать каждый — не наш путь. Вот работающее решение на VBA и скрипт в приложении.

Печать сотен документов без их открытия
Печать заданных листов, диапазонов листов

Код:
Private Sub CommandButton1_Click()
  Dim sMyDir As String
  Dim sDocName As String
  Dim СписокФайлов As FileDialogSelectedItems
  Set СписокФайлов = GetFilenamesCollection(«Выберите файлы для печати:», ThisDocument.Path)   ‘ выводим окно выбора
  If СписокФайлов Is Nothing Then Exit Sub  ‘ выход, если пользователь отказался от выбора файлов
  strA = InputBox(«Какие страницы печатать?», «Опция печати», «1»)
  For Each File In СписокФайлов
        Application.PrintOut Range:=wdPrintRangeOfPages, Pages:=strA, FileName:=File
  Next
End Sub

Function GetFilenamesCollection(Optional ByVal Title As String = «Выберите файлы для обработки», _
                             Optional ByVal InitialPath As String = «c:») As FileDialogSelectedItems
    ‘ функция выводит диалоговое окно выбора нескольких файлов с заголовком Title,
    ‘ начиная обзор диска с папки InitialPath
    ‘ возвращает массив путей к выбранным файлам, или пустую строку в случае отказа от выбора
    With Application.FileDialog(3) ‘ msoFileDialogFilePicker
        .ButtonName = «Выбрать»: .Title = Title: .InitialFileName = InitialPath
        If .Show <> -1 Then Exit Function
        Set GetFilenamesCollection = .SelectedItems
    End With
End Function

М4

Дорога М4 — Москва – Воронеж
Начало отсчёта – пересечение МКАД и Липецкой улицы. На конец 2016 некоторые моменты уже не актуальны.
Отметки в километраже по спидометру (!):
• 0 — сразу после мкада автострада — 130
• 7 км – заправка Татнефть
• 16 км – заправка Татнефть
• 31 км – начало платного участка
• 35 км – заправка Газпром
• 50 км — заправка ТНК + магазин и закусочная
• 51 км – конец платного участка
• 54 км – ДПС
• 59 км – заправка Шелл
• 79 км – заправка ТНК +магазин и закусочная
• 88 км – река Ока
• 90 км – ДПС
• 96 км – заправка Лукойл + магазин
• 100 км – конец автострады
• 104 км – заправка Лукойл + магазин
• 107 км – Тульская область
• 136 км – заправка Газпром
• 147 км – ДПС
• 184 км – ДПС (разделение дороги, холмы и горки)
• 187 км – заправка Лукойл (туалета нет)
• 194 км – соединение встречных направлений
• 201 км – платный участок дороги (днём — 50р, ночью — 30р)
• 245 км – заправка Татнефть
• 264 км – заправка ТНК + магазин +норм. туалет
• 296 км — конец платного участка
• 296 км — пост ДПС
• 301 км — заправка Газпром
• 305 км – заправка Лукойл
• 306 км – Липецкая область
• 315 км – платный участок дороги
• 332 км – развилка на Елец
• 373 км – развилка на Липецк и Елец (снизу трассы кольцо)
• 390 км – платный участок дороги (днём — 60р, ночью — 55р)
• 391 км – заправка Лукойл
• 397 км — заправка Роснефть
• 398 км — река Дон, далее поворот на Задонск
• 403 км — заправка ЛТК
• 416 км –заправка Роснефть + норм. туалет
• 420 км – заправка Газпром
• 423 км – заправка Лукойл
• 434 км – заправка ЛТК
• 435 км – конец платного участка (будки на выезде)
• 438 км –заправка Роснефть 
• 440 км – Воронежская область
• 451 км – камера на встречке у заправки
• 452 км – заправка Газпром 
• 455 км – заправка Роснефть
• 467 км – пункт весового контроля ДПС, поворот  на окружную М4 мимо Воронежа (в город — прямо) 
• 474 км – река Воронеж
• 492 км – конец окружной
• 494 км – пост ДПС
• 497 км – заправка Лукойл
• 498 – 503 км – длинный населенный пункт Новая усмань (здесь и в Рогачёвке гайцы + камеры под мостом)
• 515 – 517 — населенный пункт Рогачёвка
• 562 км — заканчивается хорошая дорога. Осторожно, ухабы и встречка. поворот на Лиски

Удаление сотен непрочитанных писем в gmail

Столкнулся с проблемой, когда непрочитанных писем в ящике достигло тысячи. Нашел простое решение:

Выполните поиск непрочитанных писем. Для этого используйте критерий «is:unread» (без кавычек). Затем выделите все цепочки на странице с помощью флажка (галочки) выбора. Если количество имеющихся цепочек больше их отображаемого числа, сверху появится надпись «Все цепочки на этой странице (…) выбраны» со ссылкой «Выберите все цепочки, удовлетворяющие этому критерию поиска». Нажимаете на ссылку. Надпись изменяется на «Все цепочки на странице поиска выбраны». Таким образом выбраны все цепочки. Теперь над ними можно выполнить требуемые действия — пометить как прочитанные или удалить