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

Не записывается значение в ТЗ

Автор masaraksh123, 17 сен 2016, 11:48

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

masaraksh123

Добрый день!

Помогите решить задачу.

Перегружаю пользователей из АльфаАвто4 в АльфаАвто5 только по одной организации. У каждого пользователя может быть шаблон, в котором указана другая организация. В базе приемнике никакая другая организация, кроме переносимой, не должна переноситься, поэтому в выборке чищу все ссылки на дргуие организации и подразделения. Но столкнулся с тем, что в таблице значений, при присвоении другого значения, значение становится = неопределено, а не то, которое мне нужно присвоить.

Некорректное присовение происходит в строке, которую я подчеркнул


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка,
| Пользователи.ВерсияДанных,
| Пользователи.ПометкаУдаления,
| Пользователи.Предопределенный,
| Пользователи.Код,
| Пользователи.Наименование,
| Пользователи.Сотрудник,
| Пользователи.Организация,
| Пользователи.Подразделение,
| Пользователи.ШаблонПрав,
| Пользователи.РежимИспользованияОборудования,
| Пользователи.ЯвляетсяШаблоном,
| Пользователи.ГрафикРаботы,
| Пользователи.ПарольККМ,
| Пользователи.НаправлениеСервиса,
| Пользователи.Руководитель,
| Пользователи.СкладыРазрешения.(
| Ссылка,
| НомерСтроки,
| СкладПользователя,
| ИстинаСклад,
| Приход,
| Расход
| )
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Организация = &Организация";

Запрос.УстановитьПараметр("Организация", Справочники.Организации.НайтиПоКоду("00005"));

Результат = Запрос.Выполнить();

орг = Справочники.Организации.НайтиПоКоду("00005");

тз = Результат.Выгрузить();

для сч = 0 по тз.Количество() Цикл

если ЗначениеЗаполнено( тз[сч].ШаблонПрав ) тогда

если тз[сч].ШаблонПрав.Организация <> орг тогда

шаблонОбъект = тз[сч].ШаблонПрав.Ссылка.ПолучитьОбъект();


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка,
| Пользователи.ВерсияДанных,
| Пользователи.ПометкаУдаления,
| Пользователи.Предопределенный,
| Пользователи.Код,
| Пользователи.Наименование,
| Пользователи.Сотрудник,
| Пользователи.Подразделение,
| Пользователи.Организация,
| Пользователи.ШаблонПрав,
| Пользователи.РежимИспользованияОборудования,
| Пользователи.ЯвляетсяШаблоном,
| Пользователи.ГрафикРаботы,
| Пользователи.ПарольККМ,
| Пользователи.НаправлениеСервиса,
| Пользователи.Руководитель,
| Пользователи.СкладыРазрешения.(
| Ссылка,
| НомерСтроки,
| СкладПользователя,
| ИстинаСклад,
| Приход,
| Расход
| )
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", шаблонОбъект.Ссылка);

Результат = Запрос.Выполнить().Выгрузить();
 
                                ///////////////////////////////
/// ПРОБЛЕМА ЗДЕСЬ //////////////
тз[сч].ШаблонПрав = Результат[0];

                                //////////////////////////////

тз[сч].ШаблонПрав.Организация = Справочники.Организации.ПустаяСсылка();
тз[сч].ШаблонПрав.Подразделение = Справочники.ПодразделенияКомпании.ПустаяСсылка();
КонецЕсли;

КонецЕсли;

КонецЦикла;

ВыборкаДанных = тз;

ДенисЧ

тз[сч].ШаблонПрав = Результат[0];

В этом случае ты пыатешься присвоить неприсвоимое значение.
Достаточно запустить отладчик и посмотреть на тип Результат[0]. Просветление наступит такое, что принц Гаутама позавидует.

masaraksh123

Цитата: ДенисЧ от 17 сен 2016, 12:00
тз[сч].ШаблонПрав = Результат[0];

В этом случае ты пыатешься присвоить неприсвоимое значение.
Достаточно запустить отладчик и посмотреть на тип Результат[0]. Просветление наступит такое, что принц Гаутама позавидует.

Там будет тип ТаблицаЗначений. Почему он не может быть присвоен?

ДенисЧ

Там будет немного другое значение.

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

masaraksh123

Цитата: ДенисЧ от 17 сен 2016, 13:07
Там будет немного другое значение.

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

Хорошо, строка таблицы значений не может быть присвоена в поле строки ТЗ.
Но как быть со структурами? Их тоже нельзя присвоить в поле строки тз?
Добавил выгрузку строки ТЗ в структуру, и все та же проблема..


орг = Справочники.Организации.НайтиПоКоду("00005");


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка,
| Пользователи.ВерсияДанных,
| Пользователи.ПометкаУдаления,
| Пользователи.Предопределенный,
| Пользователи.Код,
| Пользователи.Наименование,
| Пользователи.Сотрудник,
| Пользователи.Организация,
| Пользователи.Подразделение,
| Пользователи.ШаблонПрав,
| Пользователи.РежимИспользованияОборудования,
| Пользователи.ЯвляетсяШаблоном,
| Пользователи.ГрафикРаботы,
| Пользователи.ПарольККМ,
| Пользователи.НаправлениеСервиса,
| Пользователи.Руководитель,
| Пользователи.СкладыРазрешения.(
| Ссылка,
| НомерСтроки,
| СкладПользователя,
| ИстинаСклад,
| Приход,
| Расход
| )
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Организация = &Организация";

Запрос.УстановитьПараметр("Организация", орг);

Результат = Запрос.Выполнить();


тз = Результат.Выгрузить();

для сч = 0 по тз.Количество() Цикл

если ЗначениеЗаполнено( тз[сч].ШаблонПрав ) тогда

если тз[сч].ШаблонПрав.Организация <> орг тогда

шаблонПрав = тз[сч].ШаблонПрав;


стр = новый Структура;
стр.Вставить( "Ссылка", шаблонПрав.Ссылка );
стр.Вставить( "ВерсияДанных", шаблонПрав.ВерсияДанных );
стр.Вставить( "ПометкаУдаления", шаблонПрав.ПометкаУдаления );
стр.Вставить( "Предопределенный", шаблонПрав.Предопределенный );
стр.Вставить( "Код", шаблонПрав.Код );
стр.Вставить( "Наименование", шаблонПрав.Наименование );
стр.Вставить( "Сотрудник", шаблонПрав.Сотрудник );
стр.Вставить( "Подразделение", Неопределено );
стр.Вставить( "Организация", Неопределено );
стр.Вставить( "РежимИспользованияОборудования", шаблонПрав.РежимИспользованияОборудования );
стр.Вставить( "ЯвляетсяШаблоном", шаблонПрав.ЯвляетсяШаблоном );
стр.Вставить( "ГрафикРаботы", шаблонПрав.ГрафикРаботы );
стр.Вставить( "ПарольККМ", шаблонПрав.ПарольККМ );
стр.Вставить( "НаправлениеСервиса", шаблонПрав.НаправлениеСервиса );
стр.Вставить( "Руководитель", шаблонПрав.Руководитель );
стр.Вставить( "СкладыРазрешения", шаблонПрав.СкладыРазрешения );


////////////////////////
/// ПРОБЛЕМА ЗДЕСЬ ////
тз[сч].ШаблонПрав = стр;
////////////////////////

тз[сч].ШаблонПрав.Организация = Справочники.Организации.ПустаяСсылка();
тз[сч].ШаблонПрав.Подразделение = Справочники.ПодразделенияКомпании.ПустаяСсылка();
КонецЕсли;

КонецЕсли;

КонецЦикла;

ВыборкаДанных = тз;


alex0402

Цитата: masaraksh123 от 18 сен 2016, 12:10тз[сч].ШаблонПрав = стр;
а какой тип данных у тз[сч].ШаблонПрав?

Спасибо за Сказать спасибо

masaraksh123

Цитата: alex0402 от 19 сен 2016, 08:22
Цитата: masaraksh123 от 18 сен 2016, 12:10тз[сч].ШаблонПрав = стр;
а какой тип данных у тз[сч].ШаблонПрав?

У него тип Пользователь. Но дело не в этом, а в том, что при выгрузке из запроса создается ТЗ со строго определёнными типами колонок. Тип после выгрузки не изменить. Пришлось делать новую ТЗ с такой же структурой и перегружать данные в неё.

Теги:
Рейтинг@Mail.ru

Поиск