1с ошибка не сохранено ни одного отчета

Для контроля за исполнительской дисциплиной сотрудников полезно регулярно анализировать статистику текущих, выполненных и просроченных задач по каждому сотруднику. Для этих целей в 1С:Документооборот создадим рассылку отчета «Справка об исполнительской дисциплине» еженедельно (каждый понедельник утром в 9:00) или ежемесячно (в 23:00 за этот месяц) для каждого руководителя по своему отделу.

В 1С:Документооборот открываем раздел «Настройка и администрирование», «Рассылки отчетов».

Создаем новую рассылку. Будем отправлять для каждого руководителя свой отчет об исполнительской дисциплине. Вариант называется «По исполнителям».

Предварительно посмотрим, как в 1С:Документооборот называется вариант отчета «Справка об исполнительской дисциплине».

Нажимаем в рассылке отчетов кнопку «Подобрать» и ищем вариант отчета «По исполнителям». Выбираем его.

Указываем период прошлая неделя для еженедельных отправлений или этот месяц для ежемесячных.

Настраиваем расписание рассылки отчетов 1С:Документооборотом. Для еженедельных отчетов будем отправлять отчет по понедельникам в 9:00.

Указываем получателей отчета на закладке «Доставка» группу пользователей «Руководители подразделений». Предварительно надо в 1С:Документообороте всех руководителей добавить в группу пользователей «Руководители подразделений». Отправку целесообразно осуществлять с системной учетной записи.

На закладке «Дополнительно» указываем форматы отправляемых отчетов и необходимость отправки пустых отчетов.

Настройка рассылки в 1С:Документооборот завершена. Запишем данную рассылку и нажмем кнопку «Выполнить сейчас».

В почтовых ящиках сотрудников Генерального директора и Руководителя отдела мы увидим, что им пришли абсолютно одинаковые отчеты. Так как отчет формируется без учета прав доступа каждого пользователя в рассылке. Будьте внимательны!!!

Чтобы каждый руководитель получил отчет только по своему подразделению нам нужно модернизировать отчет «Справка об исполнительской дисциплине» в 1С:Документооборот — добавить туда поле-фильтр по Руководителю подразделения, чтобы в рассылке можно было использовать этот параметр.
В 1С:Документооборот открываем отчет «Справка об исполнительской дисциплине». Изменяем вариант.

На закладке «Отбор» добавляем поле отбора «Подразделение.Руководитель».

Завершаем редактирование. Сохраняем вариант отчета под названием «По исполнителям — с отбором по руководителю».

Проверим как работает отчет «Справка об исполнительской дисциплине» в 1С:Документооборот. Поставим фильтр по руководителю отдела.

Возвращаемся в настройку рассылки. Удалим вариант отчета «по исполнителям» и добавим вариант отчета «По исполнителям — с отбором по руководителю». В настройках отчета укажем в качестве получателя отчета руководителя подразделения.

Теперь каждый руководитель будет видеть отчет только по своему подразделению. Сохраним настройку рассылки. И проверим отправку данной рассылки в 1С:Документооборот.

Подробнее узнать про исполнительскую дисциплину и контроль можно в статье «Процедура контроля исполнительской дисциплины».

Не сохраняются настройки отчета( ☑ 0

Miss1C

13.09.12

10:45

Создала отчет сохранила настройку, загружаю а она пустая, при чем если сохранить настройку из внешнего отчета она отрабатывает нормально, если с внутреннего, сохраняет с пустыми данными в чем может быть ошибка?

1

Miss1C

13.09.12

10:52

Ап

2

чувак

13.09.12

10:54

Скриншот покажи

3

Kashemir

13.09.12

10:55

Слабовата вводная — есть тысяча и один способ хранить настройку.

4

Miss1C

13.09.12

10:57

(3)Типовая

5

Kashemir

13.09.12

10:59

(4) Через СохранитьНастройки() ? — там для каждого реквизита отчета проставляется признак возможности сохранять настройки.

6

Miss1C

13.09.12

11:00

Процедура ДействияФормыВосстановитьЗначения(Кнопка)

   
   СохранениеНастроек.ВыбратьНастройкуФормы(СохраненнаяНастройка, ЭтаФорма, «ОтчетОбъект.» + ОтчетОбъект.Метаданные().Имя, Ложь);

   ТиповыеОтчеты.ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ОтчетОбъект, ЭтаФорма);

   ТиповыеОтчеты.ОбновитьЗаголовокТиповогоОтчета(ОтчетОбъект, ЭтаФорма);

   
КонецПроцедуры

Процедура ДействияФормыСохранитьЗначения(Кнопка)

   
   СохранениеНастроек.ВыбратьНастройкуФормы(СохраненнаяНастройка, ЭтаФорма, «ОтчетОбъект.» + ОтчетОбъект.Метаданные().Имя, Истина);

   ТиповыеОтчеты.ОбновитьЗаголовокТиповогоОтчета(ОтчетОбъект, ЭтаФорма);

   
КонецПроцедуры

7

Kashemir

13.09.12

11:14

Чего сохраняет функционал типового:

// Возвращает структуру параметров отчета для сохранения

Функция ПолучитьСтруктуруПараметровТиповогоОтчета(ОтчетОбъект) Экспорт

   
   СтруктураПараметров = Новый Структура;

   Для каждого Реквизит Из ОтчетОбъект.Метаданные().Реквизиты Цикл

       Если Реквизит.Имя = «СхемаКомпоновкиДанных»

           ИЛИ Реквизит.Имя = «ДатаВерсииИсточникаДанных»

           ИЛИ Реквизит.Имя = «ИсточникДанныхОтчета»

           ИЛИ Реквизит.Имя = «Описание»

           ИЛИ Реквизит.Имя = «ПодлежитПередачеВПодчиненныеУзлыПриОбменеПоОрганизации» Тогда

           Продолжить;

       КонецЕсли;

       СтруктураПараметров.Вставить(Реквизит.Имя, ОтчетОбъект[Реквизит.Имя])

   КонецЦикла;

   
   СтруктураПараметров.Вставить(«НастройкиКомпоновщика», ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки());

   
   Если СтруктураПараметров.Свойство(«Версия») тогда

       СтруктураПараметров.Версия = РабочаяВерсияНастройкиОтчетов();

   Иначе

       СтруктураПараметров.Вставить(«Версия», РабочаяВерсияНастройкиОтчетов());

   КонецЕсли;

   
   Возврат СтруктураПараметров;

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

Процедура СохранитьНастройку() Экспорт

   
   СтруктураНастроек = ТиповыеОтчеты.ПолучитьСтруктуруПараметровТиповогоОтчета(ЭтотОбъект);

   СохранениеНастроек.СохранитьНастройкуОбъекта(СохраненнаяНастройка, СтруктураНастроек);

   
КонецПроцедуры

8

Kashemir

13.09.12

11:17

(6) Ты бы хоть отладчиком глянула, не сохраняются или не восстанавливаются настройки.

9

sanja26

13.09.12

11:18

Может сначала надо одну настройку создать..

10

Miss1C

13.09.12

11:18

(8) Не сохраняются

11

Miss1C

13.09.12

11:27

12

Miss1C

13.09.12

11:39

Не хочет сохранять новую настройку, если на старую сохранить, сохраняет нормально

13

sanja26

13.09.12

11:50

(12) настройка — это элемент справочника Сохраненные настройки

14

sanja26

13.09.12

11:51

Процедура СохранитьНастройкуОбъекта(СохраненнаяНастройка, СохраняемыеНастройки) Экспорт

   ОбъектСохраненнаяНастройка = СохраненнаяНастройка.ПолучитьОбъект();

   
   Если СохраненнаяНастройка.Предопределенный тогда

       СохраняемыеНастройки.Вставить(«Изменялась», истина);

   КонецЕсли;

   
   ОбъектСохраненнаяНастройка.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемыеНастройки);

   
   Попытка

       ОбъектСохраненнаяНастройка.Записать();

   Исключение

       ОбщегоНазначения.СообщитьОбОшибке(«Настройка формы не записана:» + Символы.ПС + «- » + ОписаниеОшибки());

   КонецПопытки;

   
КонецПроцедуры

Т.е. передать надо уже ссылку

15

sanja26

13.09.12

11:54

из БП

Процедура ДействияФормыСохранитьНастройку(Кнопка)

   
   ТиповыеОтчеты.СохранитьТекущуюНастройку(ЭтотОбъект, ЭтаФорма);

   
КонецПроцедуры

Процедура ДействияФормыСохранитьНастройкуКак(Кнопка)

   
   ТиповыеОтчеты.СохранитьТекущуюНастройкуКак(ЭтотОбъект, ЭтаФорма);

   
КонецПроцедуры

Процедура КнопкаСписокВариантовНажатие(Кнопка)

   
   СохранениеНастроек.ВыбратьНастройкуФормы(СохраненнаяНастройка, ЭтаФорма, ТиповыеОтчеты.ПолучитьИдентификаторОбъекта(ОтчетОбъект), Ложь);

   
   Если Не РежимРедактированияНастройки Тогда

       ТиповыеОтчеты.ОбновитьТаблицуДоступныхНастроекПользователю(ЭтотОбъект);

       ТиповыеОтчеты.ОбновитьКнопкиВыбораНастроек(ЭтаФорма, ЭтотОбъект, ПредставлениеНастройки, РежимРедактированияНастройки);

   КонецЕсли;

   
   Модифицированность = Ложь;

   
КонецПроцедуры

16

sanja26

13.09.12

11:54

Процедура ДействияФормыСохранитьНастройку(Кнопка)

   
   ТиповыеОтчеты.СохранитьТекущуюНастройку(ЭтотОбъект, ЭтаФорма);

   
КонецПроцедуры

17

sanja26

13.09.12

11:56

Процедура ДействияФормыВосстановитьЗначения(Кнопка)

   
   СохранениеНастроек.ВыбратьНастройкуФормы(СохраненнаяНастройка, ЭтаФорма, ТиповыеОтчеты.ПолучитьИдентификаторОбъекта(ОтчетОбъект), Ложь);

   ТиповыеОтчеты.ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ОтчетОбъект, ЭтаФорма);

   ТиповыеОтчеты.ОбновитьЗаголовокТиповогоОтчета(ОтчетОбъект, ЭтаФорма);

   
КонецПроцедуры

18

Miss1C

13.09.12

12:04

Мой отчет проверяли?

19

Miss1C

13.09.12

12:05

(16)Нет такой процедуры, у меня УПП 8.1

20

sanja26

13.09.12

12:14

(19) в КА есть..

21

sanja26

13.09.12

12:18

Если СохраненнаяНастройка = Неопределено Тогда

   СохраненнаяНастройка =  Справочники.СохраненныеНастройки.ПустаяСсылка();

КонецЕсли;

в конце модуля объекта добавь

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

Свойство отчета "Хранилище вариантов" не заполнено.
Сохранение (выбор) вариантов отчета будет работать в ограниченном режиме.
Обратитесь к разработчику дополнительного (внешнего) отчета.

Ошибка Свойство отчета "Хранилище вариантов" не заполнено 1С

Ошибка при подключении внешнего отчета 1С

Для чего нужно хранилище вариантов отчета

Между тем, типовые конфигурации 1С (далее рассмотрим на примере 1С: Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.15.40)) имеют удобный механизм хранилища вариантов отчетов. Он позволяет сохранять варианты отчетов, а также сделать их доступными другим пользователям. Доступные варианты отчета будут видны как в самой форме отчета, так и в типовой разделе «Отчеты». Ниже пример вывода в форме «Кадровые отчеты» различных настроек для отчета «Личные данные сотрудников». Теперь каждый пользователь имеющий право использования данного отчета сможет открыть нужную настройку отчета и сформировать его.

Пример настроек вариантов отчета из типового хранилища настроек 1С

Пример сохраненных вариантов отчетов 1С

Настраиваем свойство «Хранилище вариантов» для внешних отчетов

1С позаботилась о разработчиках и предоставила им возможность без лишних доработок использовать данный механизм в своих внешних отчетах.

1. Открываем палитру свойств нашего внешнего отчета как показано на картинке ниже:

Свойства внешнего отчета

2. В свойстве «Хранилище вариантов» выбираем хранилище настроек с именем «ХранилищеВариантовОтчетов»

Заполнение свойства внешнего отчета "Хранилище вариантов"

Выбираем хранилище вариантов

Сохраняем вариант отчета для других пользователей

После подключения нашего внешнего отчета в конфигурацию, открываем его. Например, вы внесли какие-то изменения в структуру отчета в пользовательском режиме и хотим поделиться этим вариантом с другими пользователями.

1. Для этого, выбираем типовую команду «Сохранить вариант отчета»:

Сохранение варианта внешнего отчета в 1С

Сохранение варианта отчета для других пользователей

2. Указываем наименование нашей настройки отчета «Отчет о передаче мероприятий СЗВ-ТД — без уволенных». Ставим переключатель «Доступен» в положение «Всем пользователям». Нажимаем кнопку «Далее».

Настройки варианта отчета 1С

3. Указываем раздел, в который хотим поместить нашу настройку отчета, например, «Кадры». Пишем описание для варианта отчета, если надо и сохраняем.

Раздел для варианта отчета 1С

4. Теперь наш вариант отчета доступен другим пользователям как в самом отчете:

Выбр варианта отчета 1С из хранилища

Пример выбора настройки внешнего отчета 1С

Так и в разделе «Отчеты» в ветке «Кадры»

Расположение настройки внешнего отчета из хранилища вариантов в разделе отчеты

Вариант внешнего отчета 1С в разделе Отчеты

Итоги

После нехитрых настроек наш внешний отчет теперь может работать с типовым хранилищем вариантов отчетов. Это позволит сохранять различные настройки внешнего отчета в хранилище и давать доступ к ним для других пользователей 1С.

 

Денис Мусин

Заглянувший

Сообщений: 3
Авторитет:

0

Регистрация: 11.09.2013

Альфа-авто 8.2 Редакция 4.1 (4.1.01.20)
После завершения работы, настройки заказов, таблиц, отчеты не сохраняются.
Отчеты сохраняю при помощи функции «действия-сохранить значения». После этого выхожу и захожу снова в 1С и отчеты пропадают.
Кроме того не сохраняются настройки журналов (выбранные столбцы, ширина)
И как настроить например в журнале — заказ поставщика, чтобы подразделение всегда была выбрано определенное, чтобы при каждом заходе в 1С не приходилось выбирать вручную подразделение?

Как я уже писал ранее, сделал клиенту в УТ отчет, где подменил схему компоновки данных. Все работало хорошо, но не сохранялись настройки в варианте.

Проявлялось это так — если в настройках добавить поле «Остаток», то отчет формировался. Если сохранить вариант, потом переключиться на другой, потом вернуться на сохраненный, поле тоже показывалось.

Но если закрыть отчет и открыть сохраненный вариант, поля не было.

Я предполагал, что разбирательства будут долгими, так оно и оказалось. Работы были гарантийными, но мне было интересно, в чем проблема. Так можно было просто подменить макет через расширение макета, но хотелось докопаться до истины.

Вообще, был интересен вопрос — вариант сохраняется криво, без моего поля или же при восстановлении варианта происходит сбой.

Сейчас я понимаю, что надо было просто проверить, есть ли поле в настройках компоновщика при компоновке отчета из сохраненного варианта.

Но я пошел другим путем, не самым быстрым.

Я сделал замер производительности при сохранении варианта и нашел, где создается схема компоновки данных:

И вот тут я увидел, что в тексте запроса компоновки нет поля «Остаток», который я добавил (смотрите табло внизу):

Я отладил и нашел, где создается объект отчета:

В итоге я решил добавить событие, чтобы при создании отчета обновлялась компоновка данных.

В модуле ВариантыОтчетов:

&Вместо("ПодключитьОтчетОбъект")
Функция дор_ПодключитьОтчетОбъект(СсылкаОтчета, ПолучатьМетаданные)
    Результат = ПродолжитьВызов(СсылкаОтчета, ПолучатьМетаданные);
    //Осипов - вызываем при создании, если возможно
    Попытка
        Результат.Объект.дор_ПриСозданииОтчета();
    Исключение
    КонецПопытки;
    Возврат Результат;
КонецФункции

В модуле отчета ВыручкаИСебестоимостьПродаж:

&Перед("ПередЗагрузкойНастроекВКомпоновщик")
Процедура дор_ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД)
    //Меняем на доработанную схему компановки
    дор_ПодменитьСхему();
КонецПроцедуры

Процедура дор_ПодменитьСхему()
    СхемаКомпоновкиДанных = ПолучитьМакет("дор_ОсновнаяСхемаКомпоновкиДанных");
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); //важно
КонецПроцедуры

Процедура дор_ПриСозданииОтчета() Экспорт
    дор_ПодменитьСхему();
КонецПроцедуры

После этого в компоновке появилось мое поле остаток:

Дальше я решил проверить, как загружаются настройки при открытии отчета, нашел вот эту функцию, где опять же создавался объект отчета, похоже со стандартной схемой компоновки (не измененной):

По стеку сложно было привязаться к каким либо событиям:

Поэтому я решил привязаться к событию ЗагрузитьНастройкиВКомпоновщик:

Код выглядел примерно так:

&НаСервере
 &Перед("ЗагрузитьНастройкиВКомпоновщик")
 Процедура дорЗагрузитьНастройкиВКомпоновщик(ПараметрыЗагрузки)     //Перед вызываем     ОтчетОбъект = РеквизитФормыВЗначение("Отчет");     Попытка         ОтчетОбъект.дорПриСозданииОтчета();
     Исключение
     КонецПопытки;
      //ЗначениеВРеквизитФормы(ОтчетОбъект, "Отчет");
      ЗначениеВДанныеФормы(ОтчетОбъект, Отчет);
 КонецПроцедуры

Однако почему-то ЗначениеВРеквизитФормы выдавало ошибку, ругаясь на второй параметр. В общем, отладка показала, что ничего в запросе схемы компоновки не меняется, он остается без поля остаток.

Но тут я все же отладил загрузку варианта. Чтобы отлаживать не в фоновом режиме, я использовал запуск 1С с параметром РежимОтладки.

Я обнаружил, что настройка варианта загружается нормально, т.е. в списке полей настройки есть поле Остаток. Т.е. все предыдущие доработки были зря, потому что и без них вариант сохранялся и загружался нормально.

Настройки пропадают где-то при формировании отчета в коде самого отчета:

Дальнейшая проверка показала, где пропадает настройка:

Вот в этом коде настройки корректные:

КомпоновщикНастроек.Настройки.Выбор.Элементы

А вот в этом коде поля Остаток уже нет:

КомпоновщикНастроек.ПолучитьНастройки().Выбор.Элементы

Я добавил строчку для подмены настроек и отчет сформировался корректно:

Но мне не нравилось, что приходится менять код отчета. Поэтому я немножко поэкспериментировал и обнаружил, как можно привести настройки в адекватное состояние.

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

&Перед("ПриКомпоновкеРезультата")
 Процедура дор_ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
     КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки); 
 КонецПроцедуры

Почему сбоят настройки, т.е. почему ПолучитьНастройки и Настройки одного и того же объекта выдают разные значения, я так и не понял. Я пробовал и метод ВосстановитьНастройки и добавлял инициализацию настроек в компоновщике настроек после подмены схемы компоновки, ничего не помогло. Видимо, это фича 1С.

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

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

UPD 2021-08-15: Обратились пользователи, решение не работало — поле остаток сохранялось, но нельзя было поменять период отчета.

Разборки показали, что проблема в пользовательских настройках, именно они при старте отчета не содержат поля остаток.

Я попробовал так, но не помогло:

Поле ДоступныеНастройки.ПользовательскиеНастройки.Элементы[3].Элементы не содержит поле Остаток:

Похоже, что пользовательские настройки отчета были модифицированы ранее.

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

Поэтому нужно при создании формы отчета подменить схему компоновки.

Вот так заработало:

Но так не годится — это вмешательство в код.

Поэтому переношу код в расширение, таким образом, в расширении формы отчета достаточно такого кода (достаточно вызвать только при создании):

&НаСервере
&Перед("ПриСозданииНаСервере")
Процедура дор_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//Перед вызываем
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	Попытка
		ОтчетОбъект.дор_ПриСозданииОтчета();
	Исключение
	КонецПопытки;
	ЗначениеВДанныеФормы(ОтчетОбъект, Отчет);
КонецПроцедуры

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

&Перед("ПередЗагрузкойНастроекВКомпоновщик")
Процедура дор_ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД)
	//Меняем на доработанную схему компановки
	дор_ПодменитьСхему();
КонецПроцедуры

Процедура дор_ПодменитьСхему() Экспорт
	СхемаКомпоновкиДанных = ПолучитьМакет("дор_ОсновнаяСхемаКомпоновкиДанных");
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); //важно
КонецПроцедуры

Процедура дор_ПриСозданииОтчета() Экспорт
	дор_ПодменитьСхему();
КонецПроцедуры

Перед загрузкой настроек в компоновщик тоже надо обрабатывать, иначе не срабатывает.

Время факт: 3 час. Среда: УТ 11.4.13.46

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с ошибка не обнаружена установленная версия 1с предприятия
  • 1с ошибка при установке значения атрибута контекста картинка
  • 1с ошибка при установке значения атрибута контекста имякоманды
  • 1с ошибка нарушение целостности системы что делать
  • 1с ошибка при установке значения атрибута контекста значение

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: