В ходе работы мне понадобилось формировать печатные формы по заданному макету поставщика. Решил делать с использованием СКД, но столкнулся с тем, что нужно выводить произвольный заголовок, но непонятно как. Немного поискав и посмотрев примеры нашел способ сделать это быстро и просто. Внимание – написанное ниже предполагает, что вы знаете, что такое СКД и как примерно работают в СКД макеты.
По шагам рассмотрю как вывести шапку для счет-фактуры:
1. Создаем в схеме новую группировку без указания поля (детальные записи)
2. Установим имя группировке
3. Удалим у данной группировки из выбранных полей автополе
4. В других настройках выберем макет оформления «Без оформления» (иначе на наш макет будет накладываться стандартный макет и вокруг всех ячеек будет рамка)
5. На вкладке макеты добавляем наши данные
6. Добавляем макет группировки и указываем наше имя группировки из п.2 и указываем область с нашими данными
Надоели просить меня запостить рабочие модули работы с AD, вот запостил, в качестве бонуса убийца любого процесса в памяти любого компа. p.s. для работы нужны определенные права.
Автор: vde69
Если требуется, например, при проведении документов сохранить в файл сообщения из табло служебных сообщений, можно выполнить запуск с командной строки:
Данная задача может быть решена как с использованием вложенных запросов, так и с помощью. временных таблиц. Попробуем решить задачу, используя временные таблицы. Сначала приведем весь текст запроса, а потом кратко разберем по частям принцип его работы.
Текст запроса:
Данный пакетный запрос содержит три подзапроса. Рассмотрим их подробнее.
Первый запрос пакета группирует данные по периоду, контрагенту и номенклатуре и помещает их во временную таблицу втБезЦены. Далее мы будем соединять эту таблицу с таблицей цен номенклатуры и получим небольшой выигрыш в том, что соединять будем уже сгруппированные данные.
Во втором подзапросе мы соединяем временную таблицу с регистром сведений «ЦеныНоменклатуры» при этом из регистра сведений мы выбираем МАКСИМАЛЬНУЮ дату из меньших или равных дат. Результат этого подзапроса также помещаем во временную таблицу (втМаксПериод). Посмотрим, какие данные попадают в эту таблицу:
Рис. 8 Временная таблица втМаксПериод
В последнем запросе пакета, мы еще раз соединяем временную таблицу с таблицей цен номенклатуры. На этот мы соединяем таблице по номенклатуре и периоду.
В 1С 8.х
В процессе длительной эксплуатации системы в журнале регистрации может накапливаться значительное число записей. Поэтому поддерживается возможность сокращения журнала регистрации и удаления записей, ставших неактуальными. При сокращении журнала регистрации можно записать удаляемые события в файл, если предвидится необходимость их анализа в будущем. В конфигураторе, в меню «Администрирование – Настройка журнала регистрации…» кнопкой «Сократить» – установив текущую дату. Там же можно сохранить журнал в файл.
В поле Текущий диапазон событий, указывается диапазон времени за который есть данные. Удалить события до – здесь указываем до какой даты можно удалить данные.
Удаляемые данные можно сохранить, для этого установим свойство “Записать удаляемые события в файл” и укажем папку в которую сохраним.
Если требуется периодически сокращать журнал и при этом иметь возможность просматривать уже удаленные события журнала, то установите флажок “Сохранять разделение хранения журнала по периодам и объединять с сохраненным ранее журналом“.
Используя средства работы со списками, разработчик имеет возможность выгрузить журнал регистрации в текстовый или табличный документ, который в дальнейшем может быть сохранен в собственном формате или, например, формате листа Excel или документа HTML.
Кроме этого поддерживается выгрузка журнала регистрации в формате XML, что может использоваться для последующего анализа выгруженных записей средствами встроенного языка.
Особенности функционирования журнала регистрации
При создании новой информационной базы для журнала устанавливается режим регистрации событий всех уровней важности; включение и выключение журнала регистрации. При загрузке информационной базы из файла журнал регистрации не очищается.
С задачей получения среза последних на каждую дату рано или поздно сталкиваются все. Безусловно, это задача достаточно просто решается запросом с соединением по максимальной дате из меньших или равных дат. Но эту же задачу можно решить и с помощью компоновки данных. Не будем рассуждать о том, какой из способов более производителен, все может зависеть от конкретной задачи.
Первый набор данных:
В качестве примера, создадим отчет по продажам, в котором отдельной колонкой будем выводить цену из прайса на дату продажи.
Создадим набор данных-запрос «ПродажиОбороты»:
Рис. 1 Вкладка ресурсы набора данных ПродажиОбороты
Рис. 2 Настройки отчета
Сейчас наш отчет будет иметь следующий вид:
Рис. 3 Формирование отчета с одним набором данных
Теперь необходимо добавить в отчет колонку «Цена по прайсу», которая будет подтягиваться из регистра сведений «Цены номенклатуры» на дату продажи.
Второй набор данных:
Добавим второй набор данных-запрос «Цены», цены будем брать для фиксированного типа цен:
В данном наборе данных три параметра: Дата, Номенклатура и тип цен. Из низ самые интересные Дата и Номенклатура. Они будут использованы при соединении наборов данных, причем параметр данных присутствует как в параметрах виртуальной таблицы, так и в выбранных полях.
Соединения наборов:
Приступим к основной «фишке» данного метода – соединениям наборов:
Рис. 4 Соединение наборов данных
Здесь самое основное правильно настроить параметры. Если указан параметр,то СКД передает в приемник связи параметры, указанные в соединении. Значениями этих параметров будут значения соответствующих полей источника связи.
Далее добавим поле цена в ресурсы и в выбранные поля.
Рис. 5 Вкладка ресурсы
Рис. 6 Выбранные поля
Результат:
Теперь можно формировать отчет. Проверим правильность работы отчета на примере «Дивана для отдыха».
Индикатор в строке состояния с помощью СКД
Иногда хочется видеть подобие индикатора, но в строке состояния. Это можно сделать только с помощью СКД, и то есть небольшой минус: невозможно убрать или изменить надпись «Вывод отчета». Сделать это можно примерно следующим образом:
В Конфигураторе, нажимаем правой кнопкой на конфигурацию:
Модуль управляемого приложения
Модуль управляемого приложения является аналогом модуля приложения, но используется для управляемого приложения. 1С:Предприятие 8 исполняется в режиме управляемого приложения, если запущен тонкий клиент, Веб-клиент или толстый клиент и при этом установлен режим управляемого приложения либо на всю конфигурацию, либо у конкретного пользователя. В модуле управляемого приложения могут располагаться объявления переменных, процедуры, функции и тело модуля.
Кроме того, в модуле управляемого приложения могут располагаться предопределенные процедуры ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы, ПередЗавершениемРаботыСистемы, ПриЗавершенииРаботыСистемы, ОбработкаВнешнегоСобытия. Все процедуры и функции отрабатывают на клиенте. В процедурах и функциях модуля управляемого приложения доступны экспортные процедуры и функции общих модулей управляемого клиента, а также общих неглобальных серверных модулей. Процедуры, функции и переменные модуля управляемого приложения доступны из клиентской части модулей форм и команд.
Возникла задача отправлять счета почтой. PDFcreator не подошёл поскольку не удалось вместить счёт на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашёл быстро, а вот как уместить счёт на одну страницу вширь искал долго.
В версии 1С 8.2.232 появилась возможность сохранять табличный документ в xls файл на сервера под линуксом. А вот работать с Опеном офисом из-под линукса пока не получается. Собственно комментари ненужны. Вот весь код. Самое интересное это бодание со стилями страниц в Опене Офисе. Жаль что этот фрагмент работает только на клиенте. На сервере вопрос не решается *08
Автор: Трактор
Функция позволяющая выполнить выгрузку табличного документа в PDF средствами OpenOffice
Нужно создать ярлыки(в любой папке щелкните правой клавишей мыши - Создать - Ярлык) с командами:
Отключение или Завершение работы пользователей:
Для Файлового варианта:
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F <путь к базе> /N <имя> /P <пароль> /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
При этом произойдет запуск программы под админскими правами пользователя <имя>, а на экране других выйдет сообщение, оповещающее об отключении. Сам пользователь <имя> отключится тоже через 60 сек. Рабочий пример: "C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /FD:\FileBases\myDB\ /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /CЗавершитьРаботуПользователей
Пожалуй, начнем сразу с практического примера.
В справочник Контрагенты нам необходимо заносить информацию о поставщиках, покупателях, банках, налоговых органах, различных фондах и пр. Для каждого вида контрагента нас интересует разная информация.
Создадим функцию, возвращающую список «важных» реквизитов в зависимости от вида контрагента:
Где же ее правильнее разместить?
Напрашивается вариант - в процедуре Модуля объекта «ПередЗаписью()». Тем самым мы на этапе записи будем контролировать правильность заполнения нужных нам реквизитов. С точки зрения создания, изменения элемента справочника, нас все устраивает. Но если нам необходимо, чтобы некоторые менеджеры заносились контрагентов в ИБ без контроля, а спустя какое-то время мы будем выполнять проверку на корректность заполнения данных в справочнике. Тогда нужно будет написать обработку. И в этой обработке, перебирая элементы, проверять заполнение реквизитов. Т.о. эту функцию придется разместить в коде обработки. А это получается дублирование кода, со всеми вытекающими проблемами. Можно получать объект каждого элемента, обращаться к функции, расположенной в его Модуле объекта. Но это будет дополнительные обращения к БД, тогда как в обработке нам достаточно только ссылок.
Можно выйти из этой ситуации создав Общий модуль «РаботаСКонтрагентами» и разместить в нем функцию возвращающую список реквизитов для проверки. В этом случае будем обращаться так «РаботаСКонтрагентами.ПолучитьСписокВажныхРеквизитов(ВидКонтрагента)».
Но! На платформе 8.2 как раз для решения подобной задачи и был создан Модуль менежера. Там и разместим нашу функцию. А обращаться мы будем: «Справочники.Контрагенты.ПолучитьСписокВажныхРеквизитов(ВидКонтрагента)».
Т.о. на ряду с предопределенными методами, мы можем самостоятельно разработать свои процедуры и обращаться к ним как методам Менеджера объекта, через точку. У нас отпадает необходимость создавать «тематические» внешние модули такие как «Работа с Контрагентами», «Процедуры Номенклатуры»...
Обратимся теперь к теории, чтобы «разложить все по полочкам».
Руководство разработчика дает нам следующее описание: «Модуль менеджера существует у всех прикладных объектов и предназначен для управления этим объектом как объектом конфигурации. Модуль менеджера позволяет расширить функциональность менеджеров за счет введения процедур и функций на встроенном языке. Фактически это позволяет описать методы для объекта конфигурации, которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации». Именно это мы и разобрали в нашем практическом примере.
Отобразим иерархию классов прикладных объектов на примере Справочников:
Т.е. мы видим, что появление «Модуля менеджера объекта» логично расширяет свойства класса СправочникМенеджер, так же как экспортные процедуры «Модуля объекта» расширяют методы класса СправочникОбъект. Нужно ли было создавать «Модуль прикладного объекта Справочники (Документы, Перечисления)». Наверное нет. Достаточно трудно придумать какие-либо задачи для единой обработки всех видов справочников.
Кроме возможности расширения методов класса, в модуле менеджера существует предопределенная процедура События . Она возникает на сервере перед стандартным формированием списка при вводе по строке, автоподборе текста и быстром выборе, а также при выполнении метода «ПолучитьДанныеВыбора()».
Так же хочу обратить внимание. При использовании конструктора печати прикладного объекта, платформа расположит процедуру формирования табличного документа непосредственно в Модуле менеджера. И это логично. Теперь, чтобы получить табличный документ элемента справочника нет необходимости получать объект. Достаточно кода: .
Периодически сталкиваюсь с проблемой обновления платформы на клиентских машинах, + периодически пользователи удаляют, изменяют или добавляют какие-то новые информационные БД.
В случае 8.2 новые релизы платформы стали штамповать чуть ли не каждый месяц, что меня повергло в уныние, разбираясь в этом вопросе понял: у кого есть домен могут легко реализовать с помощью доменных политик..Те же кто лишен домена и работает в рабочих группах, может прибегнуть к помощи кривоватого скрипта от 1С (текст скрипта приведен в руководстве администратора 8.2 стр. 185 Но как быть, если нужно одновременно снести старую платформу и поставить новую + что б еще у всех пользователей был одинаковый список информационных БД, Да и лучше, что б по ссылке вообще автоматом выбиралась нужна ИБ!
Для решения нам нужно какое-нибудь общедоступное сетевое пространство, куда мы кладем дистрибутивы платформ и нужный нам список баз (отредактированный файлик ibases.v8i)
Итак, пишем скрипт от меня с любовью и комментариями
Напоминаю, что создать исполняющий скрипт не сложно, берем обычный текстовый файл, вставляем туда текст скрипта, сохраняем файл, меняем ему расширение с txt на vbs и можно скрипт исполнять Источник
Столкнулся с вопросом печати счета на оплату сразу в pdf.
Решение: установка виртуального принтера bioPDF скачать можно тут. И прописывание в 1с следующего кода:
Как выяснилось во время печати в pdf есть проблема с передачей прозрачности картинки. Если вставлять прозрачную печать в счет поверх подписи, то в pdf-документе печать будет непрозрачной и затрет все собой. У меня был частный случай, когда печать находилась на одном и том же месте документа и за ней постоянно было одно и то же. Решением в данном случае стала генерация картинки печати с фоном, на котором она должна быть и вставка её в макет.
Для включения отладки на сервере 1С 8.1 Вам придется перезапускать сервер приложений и лезть в реестр. А именно [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.1 Server Agent]
"ImagePath"=
по умолчанию: "C:\Program Files\1cv81\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv81\server"
а надо: "C:\Program Files\1cv81\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv81\server"
Последовательность действий 1С 8.2:
1. Остановить службу 1C:Enterprise 8.2 Server Agent
2. В реестре в ветке HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\1C:Enterprise 8.2 Server Agent\ для параметра ImagePath добавляем -debug и сохраняем. Получается что-то вроде такого: «C:\Program Files\1cv82\8.2.10.82\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:\Program Files\1cv82\srvinfo» -debug
3. Записываем и запускаем службу.
Сначала пропустил пробел перед -debug. Что я могу сказать: результат был прекрасным – ни одна база не найдена, предприятие никак не запускалось