Реклама на этом месте
Форум 1С
Форум 1С
Programmers. Accountants. Administrators
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
06 Mar 2021, 17:22
Login with username, password and session length
МультиВход
Welcome, Guest. Please login or register.
Did you miss your activation email?
 
collapse

Author Topic: Помогите разобраться, неправильное копирование строк табличной части!!  (Read 470 times)

0 Members and 1 Guest are viewing this topic.

Offline Remmm

  • *
  • Posts: 1
  • РЕПУТАЦИЯ: 0
  • Register: 2019-10-09
  • Website: 
  • Профессия: Ученик 1С
У документа есть 2 табличные части - кафедры и дисциплины, связанные по ключу. Нужно чтобы при копировании кафедры добавлялись подчиненные строки дисциплин. Копирование работает, но работает неправильно. Копируются дисциплины всегда кафедры1, хотя когда я копирую кафедру 3,4 и т.д. Также при добавлении новой кафедры, сразу добавляются дисциплины кафедры1, а должно быть в дисциплинах пусто. Подскажите пожалуйста, где у меня ошибка!

Code: [Select]
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Ответственный.Доступность = БИТ_ОбщегоНазначенияПовтИсп.РазрешеноИзменятьОтветственногоВДокументах();
ЭтотОбъект.ТолькоПросмотр = ЭтотОбъект.ТолькоПросмотр ИЛИ БИТ_ОбщегоНазначенияПовтИсп.ПолучитьЗначениеТолькоПросмотр(ТолькоПросмотр, Объект.Проведен, Объект.Ответственный);

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


Функция ПолучитьНовыйКлючКафедрыСервер(ИдентификаторСтроки = Неопределено)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Кафедры.КлючКафедры КАК КлючКафедры,
| ВЫБОР
| КОГДА Кафедры.КлючКафедры = &ИдентификаторСтроки
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК КлючНеУникален
|ПОМЕСТИТЬ Кафедры
|ИЗ
| &Кафедры КАК Кафедры
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(Кафедры.КлючКафедры) КАК КлючКафедры,
| МАКСИМУМ(Кафедры.КлючНеУникален) КАК КлючНеУникален
|ИЗ
| Кафедры КАК Кафедры";
Запрос.УстановитьПараметр("Кафедры", Объект.Кафедры.Выгрузить());
Запрос.УстановитьПараметр("ИдентификаторСтроки", ИдентификаторСтроки);
Результат = Запрос.Выполнить();
ВДЗ = Результат.Выбрать();
НовыйКлюч = ИдентификаторСтроки;
Если ВДЗ.Следующий() Тогда
Если ВДЗ.КлючНеУникален Тогда
НовыйКлюч = ВДЗ.КлючКафедры + 1;
Иначе
НовыйКлюч = ?(ИдентификаторСтроки = Неопределено, 1, ИдентификаторСтроки);
КонецЕсли;
Иначе
НовыйКлюч = ?(ИдентификаторСтроки = Неопределено, 1, ИдентификаторСтроки);
КонецЕсли;
    Возврат НовыйКлюч;
КонецФункции

&НаКлиенте
Процедура КафедрыПриАктивизацииСтроки(Элемент)
ТекДанные = Элементы.Кафедры.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат;
КонецЕсли;

ТекКлючКафедры = ТекДанные.КлючКафедры;
ФиксСтруктураОтбора = Новый ФиксированнаяСтруктура("КлючКафедры", ТекКлючКафедры);
Элементы.Дисциплины.ОтборСтрок = ФиксСтруктураОтбора;

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


&НаСервере
Процедура СкопироватьПодчиненныеДисциплиныСервер(АйдиПриемник, АйдиИсточник, УдалятьПодчиненныеСтрокиПриемника = Ложь,
СоздаватьНовыйКлючПрименика = Истина)
СтруктураПоиска = Новый Структура("КлючКафедры", Объект.Кафедры.НайтиПоИдентификатору(АйдиИсточник).КлючКафедры);
СтрокиИсточника = Объект.Дисциплины.НайтиСтроки(СтруктураПоиска);
Если СоздаватьНовыйКлючПрименика Тогда
КлючСтрокиПриемника = ПолучитьНовыйКлючКафедрыСервер(АйдиПриемник);
Объект.Кафедры.НайтиПоИдентификатору(АйдиПриемник).КлючКафедры = КлючСтрокиПриемника;
Иначе
КлючСтрокиПриемника = Объект.Кафедры.НайтиПоИдентификатору(АйдиПриемник).КлючКафедры
КонецЕсли;

Если УдалятьПодчиненныеСтрокиПриемника Тогда
СтруктураПоиска.КлючКафедры = КлючСтрокиПриемника;
СтрокиПриемника = Объект.ВидыНагрузки.НайтиСтроки(СтруктураПоиска);
Для Каждого Строка из СтрокиПриемника Цикл
Объект.ВидыНагрузки.Удалить(Строка);
КонецЦикла;
КонецЕсли;

Для Каждого СтрокаИсточник из СтрокиИсточника Цикл
СтрокаПриемник = Объект.Дисциплины.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник);
СтрокаПриемник.КлючКафедры = КлючСтрокиПриемника;
КонецЦикла;
КонецПроцедуры



&НаСервере
Процедура КафедрыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
ИсточникКопированияАйдиСтрокиКафедр = -1;
ТекСтрока = Элементы.Кафедры.ТекущиеДанные;
Если Копирование Тогда
Если ТекСтрока = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ИсточникКопированияАйдиСтрокиКафедр = ТекСтрока.ПолучитьИдентификатор();

Иначе

Отказ = Истина;
КонецЕсли;

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



&НаКлиенте
Процедура КафедрыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока  Тогда
Элемент.ТекущиеДанные.КлючКафедры = ПолучитьНовыйКлючКафедрыСервер();
КонецЕсли;

Если Копирование Тогда

СкопироватьПодчиненныеДисциплиныСервер(Элементы.Кафедры.ТекущаяСтрока, ИсточникКопированияАйдиСтрокиКафедр);

Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры



&НаКлиенте
Процедура ДисциплиныПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока ИЛИ Копирование Тогда
ТекКлюч = Элементы.Кафедры.ТекущиеДанные.КлючКафедры;
Элемент.ТекущиеДанные.КлючКафедры = ТекКлюч;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ДисциплиныДисциплинаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекДан = Элементы.Дисциплины.ТекущиеДанные;

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

ФормаВыбора = ПолучитьФорму("Справочник.Дисциплины.Форма.ФормаВыбораУправляемая", СтруктураПараметров, ЭтотОбъект, Истина);
ФормаВыбора.Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный;
ФормаВыбора.Элементы.Список.МножественныйВыбор = Истина;
ФормаВыбора.Открыть();

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

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

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


Tags:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

* Статьи

* Кто онлайн

  • Dot Guests: 55
  • Dot Hidden: 0
  • Dot Users: 0

There aren't any users online.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Search

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal