Тема для тех, кому лень создавать новую тему :)

В данном разделе можно задавать вопросы по программированию на платформе 1С:Предприятие 8.
(Раздел предназначен для тех, кто уже прошел обучение в нашем учебном центре)

p.s. Просьба задавать вопросы только по программированию. На вопросы по типовым конфигурациям обычно не отвечаю по двум причинам
1. В последнее время редко с ними работаю.
2. Чтобы ответить на вопрос требуется: установить соответствующую базу нужного релиза, смоделировать ситуацию, и только после этого возможно залезть в конфигуратор и разобраться что не так (к сожалению, у меня нет столько времени).

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение admin » 22 янв 2017, 15:11

Добрый день!

Забыли записать, и лучше без контекста:
Код: выделить все
&НаСервереБезКонтекста
Процедура СоставПередУдалениемНаСервере(СтрокаВСоставе)
Номенкл = СтрокаВСоставе.ПолучитьОбъект();
Номенкл.ВСоставе = СправочникСсылка.Номенклатура.ПустаяСсылка();
Номенкл.Записать();
КонецПроцедуры
admin
Администратор
 
Сообщений: 241
Зарегистрирован: 14 дек 2011, 11:11

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение Sveta » 23 янв 2017, 19:00

Большое СПАСИБО! все заработало.
Sveta
 
Сообщений: 36
Зарегистрирован: 03 май 2012, 16:38

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение Sveta » 09 фев 2017, 16:22

Здравствуйте! Помогите, пожалуйста разобраться с выбором из списка.
В зависимости от документа в реквизите "Раздел" должны отображаться разделы и выбираться один из них. У меня список формируется, но при выборе ничего не выбирается.
При таком варианте вообще список не формируется
Функция ПолучитьСписокРазделов()
СписокРазделов = Новый СписокЗначений;
Если Объект.Форма = "Документ1" Тогда
СписокРазделов.Добавить("Раздел1", "Раздел I");
СписокРазделов.Добавить("Раздел2", "Раздел II");
СписокРазделов.Добавить("Раздел3", "Раздел III");
СписокРазделов.Добавить("Раздел3к", "Раздел IIIк");
СписокРазделов.Добавить("Раздел3н", "Раздел IIIн");
СписокРазделов.Добавить("Раздел4", "Раздел IV");
СписокРазделов.Добавить("Раздел5", "Раздел V");
КонецЕсли;
Возврат СписокРазделов;
КонецФункции
&НаКлиенте
Процедура РазделНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Объект.Раздел = ВыбратьИзСписка(ПолучитьСписокРазделов(), Элементы.Раздел);
КонецПроцедуры

В чем ошибка?
Sveta
 
Сообщений: 36
Зарегистрирован: 03 май 2012, 16:38

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение admin » 10 фев 2017, 09:19

Нужно уточнить задачу.
В какой форме должен осуществляться выбор и почему документ может быть разным?
Какого типа "Объект"?
Какого типа реквизит "Объект.Раздел"?
Какого типа реквизит "Объект.Форма" и как в него попадает значение?
admin
Администратор
 
Сообщений: 241
Зарегистрирован: 14 дек 2011, 11:11

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение Sveta » 11 фев 2017, 21:55

Спасибо, что не оставили вопрос без внимания! Еще немного подумала и сделала. Немного другим способом.
Sveta
 
Сообщений: 36
Зарегистрирован: 03 май 2012, 16:38

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение Sveta » 11 фев 2017, 22:10

Здравствуйте! Подскажите, пожалуйста, как лучше организовать очищение одного из реквизитов справочника, находясь в другом справочнике. Я ранее тут спрашивала уже(буквально пару вопросов назад). Само очищение работает теперь, но вопрос у меня возник, а правильно ли я делаю?.. В данный момент при изменении табличной части одного справочника1(удалении или изменение реквизита-ссылка на справочник2), очищаю один из реквизитов в справочнике2, а если пользователь передумает сохранять изменения, а у меня уже удалены значения?.. Как все таки правильно организовать такое? Заранее спасибо за ответ!
Sveta
 
Сообщений: 36
Зарегистрирован: 03 май 2012, 16:38

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение admin » 14 фев 2017, 10:58

Как у вас сделано, так не делают. У вас изначально неверно спроектирована задача. Как правильно? Сказать не могу, так как понятия не имею что и зачем вы делаете.
admin
Администратор
 
Сообщений: 241
Зарегистрирован: 14 дек 2011, 11:11

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение Sveta » 21 мар 2017, 15:43

Здравствуйте!
Помогите, пожалуйста. Не получается На форме разместить элементы, которые мы получаем из ВладелецФормы.На ВладелецФормы есть ГруппаФормы с именем ПанельОР, которая содержит страницы(ПодчиненныеЭлементы). Мне необходимо, чтобы в моей форме создавались Флаги с именем равным имени ПодчиненныеЭлементы ВладелецФормы. Надеюсь понятно объяснила. При моем коде выдает ошибку "Ошибка отображения типов. Отсутствует отображение для типа УправляемаяФорма". Подскажите, пожалуйста, в чем моя ошибка?
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Владелец = ВладелецФормы.Элементы.ПанельОР.ПодчиненныеЭлементы;
Для каждого Реквизит Из Владелец Цикл
Если Реквизит.Видимость = Истина Тогда
ИмяРеквизита = Реквизит.Имя;
ПутьКДанным = "Объект." + Строка(ИмяРеквизита);
ДобавитьФлажок(ЭтаФорма,ИмяРеквизита,ПутьКДанным,Элементы.ГруппаФлаги);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти

#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура УстановитьФлажки(Команда)
Для Каждого Флаг Из Элементы.ГруппаФлаги.ПодчиненныеЭлементы Цикл
ЭтотОбъект[Флаг.Имя] = Истина;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура СнятьФлажки(Команда)
Для Каждого Флаг Из Элементы.ГруппаФлаги.ПодчиненныеЭлементы Цикл
ЭтотОбъект[Флаг.Имя] = Ложь;
КонецЦикла;
КонецПроцедуры

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

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
Закрыть();
КонецПроцедуры
#КонецОбласти

Функция ДобавитьФлажок(ЭтаФорма,ИмяПоля,ПутьКДанным,Родитель)
ПолеФлажок = ЭтаФорма.Элементы.Добавить(ИмяПоля,Тип("ПолеФормы"),Родитель);
ПолеФлажок.Вид = ВидПоляФормы.ПолеФлажка;
ПолеФлажок.ПутьКДанным = ПутьКДанным;
Возврат ПолеФлажок;
КонецФункции
Sveta
 
Сообщений: 36
Зарегистрирован: 03 май 2012, 16:38

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение admin » 22 мар 2017, 09:23

Добрый день!
Причина ошибки в том, что вы забыли ключ &НаКлиенте для функции ДобавитьФлажок.
admin
Администратор
 
Сообщений: 241
Зарегистрирован: 14 дек 2011, 11:11

Re: Тема для тех, кому лень создавать новую тему :)

Сообщение Sveta » 22 мар 2017, 12:20

Спасибо за ответ!
В итоге сделала так:
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Владелец = ВладелецФормы.Элементы.ПанельОР.ПодчиненныеЭлементы;
Для каждого Реквизит Из Владелец Цикл
Если Реквизит.Видимость = Истина Тогда
ИмяРеквизита = "вс_" + Строка(Реквизит.Имя);
ЗаголовокРеквизита = Реквизит.Заголовок;
СоздатьПолеФлажокНаСервере(ИмяРеквизита, ЗаголовокРеквизита);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти

#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура УстановитьФлажки(Команда)
Для Каждого Флаг Из Элементы.ГруппаФлаги.ПодчиненныеЭлементы Цикл
ЭтотОбъект[Флаг.Имя] = Истина;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура СнятьФлажки(Команда)
Для Каждого Флаг Из Элементы.ГруппаФлаги.ПодчиненныеЭлементы Цикл
ЭтотОбъект[Флаг.Имя] = Ложь;
КонецЦикла;
КонецПроцедуры

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

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
Закрыть();
КонецПроцедуры
#КонецОбласти

&НаСервере
Процедура СоздатьПолеФлажокНаСервере(ИмяРеквизита, ЗаголовокРеквизита)
//Добавляем реквизит
нРеквизиты = Новый Массив;
Реквизит = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Булево"), , ЗаголовокРеквизита, Истина);
нРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(нРеквизиты);

//Добавляем поле ввода
Элемент = ЭтаФорма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаФлаги);
Элемент.Вид = ВидПоляФормы.ПолеФлажка;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
Элемент.ПутьКДанным = ИмяРеквизита;
КонецПроцедуры
Sveta
 
Сообщений: 36
Зарегистрирован: 03 май 2012, 16:38

Пред.След.

Вернуться в Вопросы по программированию

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron