Скрипты
Как известно, основная функция обновлятора - это обновление баз. Но многие, наверное, уже обратили внимание на дополнительную закладку "Скрипты", которая появилась в программе с начала 2016 года.
И если вы владеете навыками написания скриптов (2 варианта - пакетные cmd скрипты и onescript, он же 1C), то сможете на этой закладке творить чудеса, не связанные напрямую с обновлением.
Задача
В этой статье рассмотрим как можно вытаскивать данные сразу из группы баз, например, для аудита.
Для применения материала нужен хотя бы минимальный уровень владения языком 1с и знакомство с начальной статьей по скриптам в обновлятора.
Поставим себе простую цель - нужно проанализировать движения по 51 счёту (банковские счета) за 2013 год во всех базах. Так сказать - собираем статистику.
Пишем простейший скрипт
Для этого переходим на закладку "Скрипты" и выбираем тип скрипта OneScript:
Пользуясь возможностью, ещё раз передаю слова благодарности Андрею Овсянкину за его замечательный OneScript.
При этом у нас появляется возможность писать код скрипта на языке 1С.
Нам нужно подключиться к базе (обновлятор сделает это за нас и вернёт подключение через параметр v8) и выполнить запрос. И так для каждой из выбранных баз. Мы напишем скрипт для одной базы, а обновлятор уже сам будет запускать его для всех выбранных.
В начале мы вставим из шаблонов пример "Привет, база":
А затем заменим текст процедуры Главная на свой:
Процедура Главная() Запрос = v8.NewObject("Запрос"); Запрос.Текст = " |ВЫБРАТЬ | ХозрасчетныйОбороты.СуммаОборотДт КАК Приход, | ХозрасчетныйОбороты.СуммаОборотКт КАК Расход |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты( | ДАТАВРЕМЯ(2013, 01, 01), ДАТАВРЕМЯ(2013, 12, 31), | Год, Счет.Код = ""51"", , , , | ) КАК ХозрасчетныйОбороты"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда Сообщить("По банковским счетам за 2013 год "); Сообщить("Пришло " + Строка(Выборка.Приход) + " рублей"); Сообщить("Ушло " + Строка(Выборка.Расход) + " рублей"); КонецЕсли; КонецПроцедуры |
Если вы программируете на 1С - вы видите, что скрипт очень простой. Делаем запрос по оборотам 51 счёта за 2013 год. И выводим результат.
Скрипт готов - нажмём кнопку "Запустить" предварительно выбрав базы для запуска:
Я запустил на одной базе и вот результат:
Дополняем скрипт выводом в файл
Я собрал эти данные по одной базе, а можно это делать хоть по 100 базам. Более того, ничего не мешает нам записывать полученную информацию во внешний файл, вот пример такого скрипта:
Процедура Главная() Запрос = v8.NewObject("Запрос"); Запрос.Текст = " |ВЫБРАТЬ | ХозрасчетныйОбороты.СуммаОборотДт КАК Приход, | ХозрасчетныйОбороты.СуммаОборотКт КАК Расход |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты( | ДАТАВРЕМЯ(2013, 01, 01), ДАТАВРЕМЯ(2013, 12, 31), | Год, Счет.Код = ""51"", , , , | ) КАК ХозрасчетныйОбороты"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); ПутьКФайлу = "X:\Work\Аудит.txt"; Если Выборка.Следующий() Тогда Документ = Новый ТекстовыйДокумент; Если Новый Файл(ПутьКФайлу).Существует() Тогда Документ.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8); КонецЕсли; Сообщение = "пришло " + Строка(Выборка.Приход) + " рублей"; Сообщение = Сообщение + ", ушло " + Строка(Выборка.Расход) + " рублей"; Документ.ДобавитьСтроку("Обороты по 51 счёту в " + updater.BaseName + " за 2013 год: " + Сообщение); Документ.Записать(ПутьКФайлу, КодировкаТекста.UTF8); КонецЕсли; КонецПроцедуры |
В данном скрипте результаты пишутся в файл "X:\Work\Аудит.txt".