Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 авг 2021, 13:52

Параметр СКД

Автор ef0din, 13 июл 2021, 15:28

0 Пользователей и 1 гость просматривают эту тему.

ef0din

Добрый день! Розница, редакция 2.3 (2.3.7.19), 1С:Предприятие 8.3 (8.3.17.1989).
Есть отчет самописный, который добавлен в рассылку по почте. В отчете данные о продажах, себестомости, прибыли за тек. день и тек. месяц.
Есть файл Excel в сети, в нем плановые показатели. По сути интересует лишь один показатель: плановая выручка за тек. месяц.
Необходимо этот плановый показатель добавить в отчет.

План такой:

1. Добавляю в запрос строку:  "2" КАК План, добавляю с ресурсы Сумма("План"), добавляю в нужное место в выбранные поля.
2. Заменяю "2" Как План на "&План" КАК План. Заполняю параметр через отборы - проверяю.
3. Добавляю программную компановку. В ней перебираю Настройка.ПараметрыДанных.Элементы, ищу элемент "План", заполняю произвольным числом - проверяю.
4. Добавляю при компановке считывание показателя с файла, заполняю этим значением вместо произвольного, как в п.3. - готово.


П.1 - проблем нет.
П.2 - выдает ошибку:"Не задано значение параметра "План" <<?>> План КАК План".
Попробовал перейти к п.3. думаю мб через прогр. заполнение прокатит - тоже самое.


В чем может быть проблема? Спасибо!


P.S. Кстате, что заметил: идентификатор пользователя в списке элементов "Настроки.ПараметрыДанных.Элементы" почему-то не заполнен. Мб это как-то связано ?

ef0din

В настройке вариант отчета поставил галочку "использования" напротив параметра "План". При этом само значение оставил пустым. Программно заполняю при компановке элемент "План" ПараметровДанных произвольным значением "2222222"(число). Таким образом отчет формируется и выводится табличный документ два раза: первый раз со значением плана, которое присваиваю программно, второй - с пустым.

ef0din

Пробую так: "СхемаКомпоновкиДанных.Параметры.План.Значение = 22222;"
При этом убрал галочку "включать в доступные поля" в строке с параметром "План" во вкладке СКД "Параметры" и поставил галочку "Ограничение доступности".

Все замечательно, только 2 раза таблица выводится условный "ТабДок". Хотя теперь оба раза значение "План" - 22222.

antoneus

Отчет программно формируется? Если программно - как именно?

ef0din

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;


Для Каждого Стр Из Настройки.ПараметрыДанных.Элементы Цикл
Если Стр.Параметр = Новый ПараметрКомпоновкиДанных("Дата") Тогда
ЗначДаты = Стр.Значение;
ЗначДаты = Формат(ЗначДаты, "ДФ=dd.MM.yyyy");
ЗначДаты = Сред(ЗначДаты, 4, 7);
Прервать;
Иначе
КонецЕсли;
КонецЦикла;



ЗначениеПлановойВыручки = ПолучитьЗначениеПлановойВыручкиИзФайла(ЗначДаты);
СхемаКомпоновкиДанных.Параметры.План.Значение = ЗначениеПлановойВыручки;


//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
ДанныеРасшифровки);


//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);


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



&НаСервере
Функция ПолучитьЗначениеПлановойВыручкиИзФайла(Период)

ТабД = Новый ТабличныйДокумент;
ТабД.Прочитать("xxx", СпособЧтенияЗначенийТабличногоДокумента.Значение);
Обл = ТабД.ПолучитьОбласть("yyyy");
НомерСтрокиПериода = 10;
НомерСтрокиВыручки = 83;
НомерТекКолонки = 5;
ЗначВыручкиПлан  = 0;

Пока НомерТекКолонки < 15 Цикл

ТекПериодВФайле = Обл.ПолучитьОбласть("R" + Строка(НомерСтрокиПериода) + "C" + Строка(НомерТекКолонки)).ТекущаяОбласть.Текст;
Если СокрЛП(ТекПериодВФайле) =  СокрЛП(Период) Тогда
Попытка
ЗначВыручкиПлан = Обл.ПолучитьОбласть("R" + Строка(НомерСтрокиВыручки) + "C" + Строка(НомерТекКолонки)).ТекущаяОбласть.Текст;
ЗначВыручкиПлан = Число(ЗначВыручкиПлан);
Исключение;
КонецПопытки;

Прервать;
Иначе
КонецЕсли;
НомерТекКолонки = НомерТекКолонки + 1;
КонецЦикла;

Возврат ЗначВыручкиПлан;

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


Таким образом. Разобрался почему задваивалось - забыл поставить "Стандартная обработка = Ложь". Теперь вот какой нюанс: я в файле ищу плановую выручку за месяц, а месяц, как видно из кода, получаю из параметра "Дата". Так вот, допустим открываю отчет, формирую за один из дней мая - данные за май ищу. Меняю в отчете значение параметра "Дата" на 14.07.21 например, формирую отчет: а программно в параметре "Дата" все то же число, что было. Будто бы какое-то значение по-умолчанию там хранится, а мне надо "Дату" брать откуда-то с другого места.
Так-то отчет формируется исключительно в рассылке, и дата всегда: текущий день. Т.е. можно период для поиска данных в файле брать путем преобразования в нужный формат даты = ТекущаяДата(). Но хотелось бы разобраться, да и всплывет в будущем - как-то стыдно даже перед коллегами будет...

ef0din

Вот еще у меня тут ситуация непонятная какая есть: я файл сейчас, пока разработкой занимаюсь, считываю из "своей" папки. А нужно будет считывать из другой, в которой он изначально хранился и хранится. Вот если прописываю путь к тому файлу, который изначально(откуда я его скопировал и где он будет лежать/редактироваться) - 1с пишет, что нет доступа к нему. Это я руками нажимаю "сформировать", а формироваться будет рег. заданием. И вот сейчас мне нужно админам задачу ставить, что б доступ открыли, но как бы сформулировать верно....  Я правильно понимаю, что необходим доступ с того сервера, где 1с крутится, для пользователя, под которым службы запущена? Сориентируйте пож.: как бы сформулировать верно?


Сейчас вот подумал: каким-либо образом перенести функция считывания файла на клиент, но, если рег. заданием выполнение будет: клиентом же будет тот же сервер. Т.е. смысла в этом будет 0 и все равно права нужны с сервера 1с пользаку, под которым сервер крутится, верно понимаю?

antoneus

Не проще под хранение плановой выручки регистр сведений запилить?

ef0din

@antoneus, быть может придем к этому, но пока задача стоит так, как стоит.

ef0din


Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск