Имя: Пароль:
1C
1С v8
Использование нескольких схем в СКД
0 ChAlex
 
28.08.12
11:00
2-й день бьюсь - не найду как побороть. Нужно в форме использовать несколько схем компоновок. Менять нужно интерактивно (а не в методе "ПриКомпоновкеРезультата") - что бы можно было работать со схемой (например отключить группировки и т.п.) т.е. задать настройки до формирования отчета. Делаю серверную процедуру:

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

В результатет схема меняется, но! если открыть форму изменения варианта то список доступных полей остается от основной схемы компоновки. Как результат поля текущей схемы недоступны в отчете и отображаются с красным крестом. И как с этим бороться?
1 Cube
 
28.08.12
11:02
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
2 Web00001
 
28.08.12
11:05
У меня вот работает:

Процедура СменитьСхему(ИмяСхемы)
   СтруктураСНастройками = СохранитьПараметры("Заказ,НашСклад,СкладПоставщика");
   СхемаКомпоновкиДанных = ПолучитьМакет(ИмяСхемы);
   Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
   ЗагрузитьПараметры(СтруктураСНастройками);
КонецПроцедуры

Процедура ДействияФормыСклад(Кнопка)
   СменитьСхему("Склад");
КонецПроцедуры
3 Web00001
 
28.08.12
11:06
(1) точно )
4 ChAlex
 
28.08.12
11:08
5 Web00001
 
28.08.12
11:09
да чтож за манера скриншоты лить на файлохранилище?
6 Cube
 
28.08.12
11:10
(4) Заархивировал? А то неинтересно.
7 ChAlex
 
28.08.12
11:10
(2) -  у меня в 2-х схемах есть одинаковые названия полей, но есть и разные (в данном случае ресурсы разные, а реквизиты одинаковые). Меняю схему - схема отчета изменяется -  в данном случае отчет должен строиться по оборотам - но вот с полями так как на картинке
8 ChAlex
 
28.08.12
11:11
(5) - скажите как залить на форум? - буду лить сюда, только не вижу на экрани ну ничего, как это сделать
9 ChAlex
 
28.08.12
11:11
(6) - да она не большая
10 Cube
 
28.08.12
11:12
(7) Ты (1) читал? Пробовал? Прочитай и попробуй!
11 Cube
 
28.08.12
11:12
(8) Заливай сюда: http://itmages.ru а в посты вставляй ссылки.
12 Web00001
 
28.08.12
11:13
(6) и паролем закрыл, на всякий, который скажет когда спросят, но только когда стукнут в аську ответив на вопрос антиспам бота
13 ChAlex
 
28.08.12
11:13
(10) - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Основной.Настройки) - а это не тоже самое? Если смущает, что не настройки по умолчанию, то сначала были они, это уже попытки хоть как-то это побороть
14 Cube
 
28.08.12
11:13
(9) Я к тому, что зачем качать скрин с хостинга файлов, когда можно по-человечачьи выложить скрин на хостинг изображений?
15 ChAlex
 
28.08.12
11:13
(11) ок, буду иметь ввиду
16 ChAlex
 
28.08.12
11:14
(14) - да не проблема - просто первое что попалось, что у меня работате. Стоит проксик, в нем что-то режется, что-то нет. Времени на поиск не было
17 Cube
 
28.08.12
11:15
(13) УФ?
18 Web00001
 
28.08.12
11:16
(11) тут уместнее http://goo.gl/z27Oe
19 ChAlex
 
28.08.12
11:18
(17) - да УФ
20 Cube
 
28.08.12
11:27
(19) Тогда нужно делать так:

МойОтчет = ДанныеФормыВЗначение(Отчет, Тип("ОтчетОбъект"));
МойОтчет.СхемаКомпоновкиДанных = ...
МойОтчет.КомпоновщикНастроек = ...
...
ЗначениеВДанныеФормы(МойОтчет, Отчет);
21 ChAlex
 
28.08.12
11:31
(2) {Отчет.ОстаткиНоменклатуры.Форма.ФормаОтчета.Форма(26)}: Ошибка при вызове метода контекста (ДанныеФормыВЗначение)
   МойОтчет = ДанныеФормыВЗначение(Отчет, Тип("ОтчетОбъект"));
по причине:
Недопустимое значение параметра (параметр номер '1')
22 Cube
 
28.08.12
11:33
(21) Текст процедуры-то давай. Или угадать? :)
23 ChAlex
 
28.08.12
11:35
(22) - да тот же что и в (0) только с добавлением рекомендаций в (20):

&НаСервере
Процедура ИнициализироватьСхему()
   МойОтчет = ДанныеФормыВЗначение(Отчет,Тип("ОтчетОбъект"));
   Если Отчет.Обороты Тогда
       СхемаКомпоновкиДанных=Отчеты.ОстаткиНоменклатуры.ПолучитьМакет("СхемаКомпановкиДанныхОбороты");
   Иначе
       СхемаКомпоновкиДанных=Отчеты.ОстаткиНоменклатуры.ПолучитьМакет("СхемаКомпоновкиДанныхОстатки");
   КонецЕсли;
   МойОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
   МойОтчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
   ЗначениеВДанныеФормы(МойОтчет, Отчет);
КонецПроцедуры
24 ChAlex
 
28.08.12
11:35
ошибка по первой строку процедуры
25 Cube
 
28.08.12
11:39
(23) Это в модуле формы? Тип у переменной "Отчет" какой?
26 ChAlex
 
28.08.12
11:40
(25) - ДанныеФормыСтруктура
27 ChAlex
 
28.08.12
11:41
(+26) Управляемая форма, тонкий клиент. Етественно пока все в модуле формы
28 ChAlex
 
28.08.12
11:42
и почему ошибка - тоже вопрос :)

Глобальный контекст (Global context)
ДанныеФормыВЗначение (FormDataToValue)
Синтаксис:

ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
<Тип> (обязательный)

Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:

Тип: Произвольный.

Описание:

Преобразует данные формы в объект прикладного типа.

Доступность:

Сервер, толстый клиент.
Примечание:

Нельзя преобразовать в объект типа Табличная часть.
29 ChAlex
 
28.08.12
11:44
с ошибкой разобрался: надо - ДанныеФормыВЗначение(Отчет,Тип("ОтчетОбъект.ОстаткиНоменклатуры"))
30 ChAlex
 
28.08.12
11:45
но результат - тот же!
31 Cube
 
28.08.12
11:45
32 Cube
 
28.08.12
11:46
(30) Где ты схему-то меняешь? Ты пропустил строку:

МойОтчет.СхемаКомпоновкиДанных = ...
33 ChAlex
 
28.08.12
11:47
(31) - по-моему потому-что внешний отчет. У меня встроенны
34 ChAlex
 
28.08.12
11:49
(32) -  да пропустил. Изменил

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

Результатт тот-же.
35 Cube
 
28.08.12
12:13
(34) Блин, и у меня не получается))))
36 ChAlex
 
28.08.12
12:37
(35) - я уже упростил до минимума и хотел выложить внешний отчет. Смотрю в отладчике - и по-моему трабл в том, что получаемая СхемаКомпоновкиДанных из макета не содержит никаких доступных полей для выбора!!! Схема компоновки данных отчета - содержит, а из макета нет! Даже из макета основной схемы компоновки отчета!!
37 ChAlex
 
28.08.12
12:45
(+35) - а так же не содержат доступных полей выбора и основной вариант схемы!! Это как?!! Мега трабл или фича?
38 Cube
 
28.08.12
12:54
(37) У меня, после загрузки другой схемы, в Отчет.КомпоновщикНастроек.Настройки есть доступные поля выбора и они именно из загружаемой схемы.
39 Cube
 
28.08.12
13:00
Причем, если вместо строки

ЗначениеВДанныеФормы(МойОтчет, Отчет);

написать

МойОтчет.СкомпоноватьРезультат(Результат);

То отчет прекрасно формируется с новыми настройками, только надпись "Отчет не сформирован" не уходит и пользовательские настройки так и не подгружаются...
40 ChAlex
 
28.08.12
13:01
(38) - я имею ввиду поля не отчета (они действительно остаются теми, что при открытии основной схемы компоновки), а поля в СхемаКомпоновкиДанных=Отчеты.ОстаткиНоменклатуры.ПолучитьМакет("СхемаКомпановкиДанныхОбороты").НастройкиПоУмолчанию.ДоступныеПоляВыбора.Элементы - они пустые.
41 Cube
 
28.08.12
13:03
Уоу! Новая фишка: если в отчете не указывать схему по-умолчанию, то после (34) и нажатия на кнопку "Сформировать" получаем ошибку "Схема компоновки данных не установлена". Это зацепка!
42 ChAlex
 
28.08.12
13:04
И возникает тогда вопрос: а какими нах настройками тогда инициализируется компоновщик?
43 Cube
 
28.08.12
13:06
(42) Это я к тому, что строкой

МойОтчет.СхемаКомпоновкиДанных = ...

Схема не меняется...
44 ChAlex
 
28.08.12
13:11
(43) - отчасти она то меняется - группировки то изменяются. Но то что не полностью - так это точно
45 Cube
 
28.08.12
13:15
(44) Может баг платформы?
46 ChAlex
 
28.08.12
13:15
(+43) - Схема меняется, но вот по ЗначениеВДанныеФормы(МойОтчет, Отчет) - в форму не передается!!
47 ChAlex
 
28.08.12
13:17
(+46) Смотрю по запросу данных: МойОтчет.СхемаКомпоновкиДанных - запрос меняется, но при последующем входе опять же остается тем, что по умолчанияю!!
48 ChAlex
 
28.08.12
13:22
(45) - думаю, что до конца чего-то не продумано. Боюсь придется выкручиваться через повторное открытие формы, но так не хочется таким гемором заниматься...
49 Cube
 
28.08.12
13:25
(48) Я думаю, что это косяк платформы... Схему-то поменять получается нельзя...
50 ChAlex
 
28.08.12
13:28
(49) - я тоже согласен с этим, Получается схему поменять можно только при выполнении отчета, и естественно использовать только предопределенный вариант настройки, определенный в конфигурации. Предполагаю ответ разработчиков 1С : " а никто не обещал кормить в дороге..." :)))
51 Cube
 
28.08.12
13:33
(50) А ты всё же напиши им, пусть работают!)))
52 ChAlex
 
28.08.12
13:38
(51) - давно бросил... из-за принципа - я работаю на заказчиков, и при обращении с тем что у вас баг - первый вопрос : номер вашей лицензии : мне что каждый раз звонить к заказчику и спрашивать ее или хранить? - неадоело.

А баг вроде получается обойти! :)

   ЭтаФорма.УстановитьТекущийВариант("Основной");

Сейчас окончательно проверю
53 Cube
 
28.08.12
13:39
(52) Я пробовал. Не взлетает так...
Ладно, я сам напишу в 1С, коли так :)
54 ChAlex
 
28.08.12
13:40
Гы - попспешил. Хотя может что и выгорит. Во всяком случае восстанавливается какие-то значения
55 ChAlex
 
28.08.12
13:40
(53) - попробую еще поиграться вариантами
56 ChAlex
 
28.08.12
13:42
хотя да  не взлетит - тут ведь можно передать только ключ, а ключ относительно текущей схемы, а она неизменилась
57 Cube
 
28.08.12
13:50
Письмецо в 1С ушло)
58 ChAlex
 
28.08.12
13:52
интересно было бы узнать что ответят :) Спасибо за участие!
59 Cube
 
28.08.12
13:56
(58) Если ответят пока ветка в архив не уйдет - напишу)) Но, как показывает практика, процент быстрых ответов очень мал...
60 inspam
 
20.09.12
19:55
Апну ветку.
Та же проблема.
Может кто решил?
61 Web00001
 
21.09.12
01:28
вот здесь http://www.spec8.ru/kurs-po-skd-besplatno детально рассказано
62 Cube
 
21.09.12
05:03
(60) Ответа от 1С пока нет...
63 ChAlex
 
21.09.12
10:16
(61) - что вы говорите! И там рассказано? Ну тогда ткните меня конкретно в то место, где приведено как это сделать. (ибо пересмотрел это видео не единожды в поисках решения)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан