|
Расширение реквизит таб. части | ☑ | ||
---|---|---|---|---|
0
Масянька
21.12.21
✎
11:10
|
День добрый!
Имеем: Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.19.48), 1С:Предприятие 8.3 (8.3.19.1264). Расширение (дополнение) - добавлен документ (реквизиты, ТЧ, форма). В ТЧ добавлен новый реквизит. Как связать? &НаСервере Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) Элемент = ЭтаФорма.Элементы.Добавить("ПричиныОбоснования", Тип("ПолеФормы"), ЭтаФорма.Элементы.Сотрудники); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = Объект.Сотрудники.ПричиныОбоснования; КонецПроцедуры Выдает ошибку: Поле объекта не обнаружено (ПричиныОбоснования) {_ЗУП Документ.РаботаВВыходныеИПраздничныеДни.Форма.ФормаДокумента.Форма(241)}:Элемент.ПутьКДанным = Объект.Сотрудники.ПричиныОбоснования; Спасибо. |
|||
1
Фрэнки
21.12.21
✎
11:16
|
Добавление новых реквизитов в ТЧ типового документа Расширение разрешает, но вот таким образом "расширять" - моветон
|
|||
2
Масянька
21.12.21
✎
11:18
|
(1) А как не моветон?
|
|||
3
Фрэнки
21.12.21
✎
11:21
|
(2) либо в доп-сведения, что есть в типовом (это не всегда удобно, но застрянет в основной базе практически навсегда)
либо дописать в своем расширение регистр сведений и связать его множеством разных способов с основной ТЧ. В ЗУП для этих связок даже готовый реквзит в большинстве документов предусмотрен. |
|||
4
Фрэнки
21.12.21
✎
11:22
|
типа, идентификатор строки ТЧ - через него можно
|
|||
5
Масянька
21.12.21
✎
11:24
|
(3) Спасибо.
Готовый - это ТЧ ДополнительныеРеквизиты? |
|||
6
Кулибин
21.12.21
✎
11:25
|
(0)
Если Элементы.Найти("ОСМЦ01") = Неопределено Тогда ТЧ = Элементы.Найти("ОС"); ЭлементФормы = Элементы.Добавить("ОСМЦ01", Тип("ПолеФормы"), ТЧ); ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка; ЭлементФормы.ПутьКДанным = "Объект.ОС.МЦ01"; ЭлементФормы.ТолькоПросмотр = Истина; Элементы.Переместить(ЭлементФормы,Элементы.Найти("ОС"),Элементы.Найти("ОСОсновноеСредство")); КонецЕсли; Вот так работает |
|||
7
Масянька
21.12.21
✎
11:29
|
(6) Элемент.ПутьКДанным = "Объект.Сотрудники.ПричиныОбоснования";
выдает: Недопустимое значение {_ЗУП Документ.РаботаВВыходныеИПраздничныеДни.Форма.ФормаДокумента.Форма(241)}:Элемент.ПутьКДанным = "Объект.Сотрудники._ПричиныОбоснования"; |
|||
8
Кулибин
21.12.21
✎
11:34
|
(7) Не знаю, кусок из "вчерашнего" кода, было проще скопировать, всё работает чётко.
Процедура: &НаСервере Процедура Адапт1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) Почему в нулевом и седьмом постах разные названия реквизита? Посмотри в отладчике, есть ли такой вообще)) |
|||
9
Масянька
21.12.21
✎
11:36
|
(8) Реквизит один и тот же - кусок названия убираю (могу косякнуть).
|
|||
10
Масянька
21.12.21
✎
11:47
|
Заработало так: ЭлементФормы.ПутьКДанным = "Сотрудники._ПричиныОбоснования";
|
|||
11
Фрэнки
21.12.21
✎
11:50
|
(5) // Готовый - это ТЧ ДополнительныеРеквизиты?
эти тч есть только у справочников |
|||
12
Масянька
21.12.21
✎
11:55
|
||||
13
Кулибин
21.12.21
✎
11:59
|
(10) странно всё это, какая платформа? Но всё равно "пожалуйста")))
|
|||
14
Масянька
21.12.21
✎
12:00
|
(13) 8.3.19.1264
|
|||
15
Масянька
21.12.21
✎
12:00
|
(13) Странно - это очень мягко сказано...
|
|||
16
Кулибин
21.12.21
✎
12:03
|
У меня четвертая восьмерка и две крайние другие, скоро придется переписывать, видимо)
|
|||
17
Кулибин
21.12.21
✎
12:05
|
Проверил, без "Объект." валится.
|
|||
18
Масянька
21.12.21
✎
12:06
|
(17) У меня с объектом валится, а без объекта не пишет в реквизит. Один хрен - фигня полная...
|
|||
19
Фрэнки
21.12.21
✎
12:09
|
(12) в таких ТЧ Допреквизитов для документов все равно не хватает привязки к строкам из основной ТЧ, если там окажется много строк.
|
|||
20
Мультук
гуру
21.12.21
✎
12:13
|
(18)
Масянька, а вас не смущает, что "таблица" которую вы видите на форме вовсе не привязана к Объект.Сотрудники а привязан к таблице значений "Сотрудники" (реквизит формы) ? |
|||
21
Масянька
21.12.21
✎
12:15
|
(20) А Вы все не читаете? Принципиально?
Уже метод тыка пошел. Ошибка на "Объект.Сотрудники..." |
|||
22
Мультук
гуру
21.12.21
✎
12:23
|
(21)
Еще раз для танкистов >>> У меня с объектом валится, а без объекта не пишет в реквизит. Один хрен - фигня полная... "таблица" которую вы видите на форме вовсе не привязана к Объект.Сотрудники, а привязана к таблице значений "Сотрудники" (реквизит формы) Напишите уже код, который "При создании" будет совать ваш данные вашего реквизита в т.з. "Сотрудники", а при записи наоборот. P.S. ну или тыкайтесь, ага P.P.S Процедура ЗаполнитьФормуПоДаннымОбъекта(ТекущийОбъект) Процедура ЗаполнитьОбъектПоДаннымФормы(ТекущийОбъект) |
|||
23
Масянька
21.12.21
✎
12:26
|
(22) Спасибо, буду пробовать.
|
|||
24
Кулибин
21.12.21
✎
12:35
|
(20) Ну, это в корне меняет дело)))
|
|||
25
Масянька
22.12.21
✎
10:22
|
(22) Вот:
&НаСервере &После("ЗаполнитьФормуПоДаннымОбъекта") Процедура _ЗаполнитьФормуПоДаннымОбъекта(ТекущийОбъект) // Массив для новых реквизитов ДобавляемыеРеквизиты = Новый Массив; // Опишем ревизиты формы Реквизит_Причины = Новый РеквизитФормы("ПричиныОбоснования", Новый ОписаниеТипов("ПеречислениеСсылка._ПричиныРаботыВыходнойПраздничныйДень"), "Объект.Сотрудники", "_ПричиныОбосновани"); // Для наглядности заполним массив после описания реквизитов формы ДобавляемыеРеквизиты.Добавить(Реквизит_Причины); // Добавим новые реквизиты в форму ИзменитьРеквизиты(ДобавляемыеРеквизиты); НовыйЭлемент = Элементы.Добавить("СотьрудникиПричиныОбоснования", Тип("ПолеФормы"), Элементы.Сотрудники); НовыйЭлемент.ПутьКДанным = "Объект.Сотрудники._ПричиныОбоснования"; НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; КонецПроцедуры Выдает: Недопустимое значение {_ЗУП Документ.РаботаВВыходныеИПраздничныеДни.Форма.ФормаДокумента.Форма(268)}: НовыйЭлемент.ПутьКДанным = "Объект.Сотрудники._ПричиныОбоснования"; {Документ.РаботаВВыходныеИПраздничныеДни.Форма.ФормаДокумента.Форма(598)}: ЗаполнитьФормуПоДаннымОбъекта(ТекущийОбъект); {Документ.РаботаВВыходныеИПраздничныеДни.Форма.ФормаДокумента.Форма(70)}: ПриПолученииДанныхНаСервере(ТекущийОбъект); по причине: Недопустимое значение |
|||
26
Мультук
гуру
22.12.21
✎
10:52
|
(25)
1) Вас не смущает, что вы пытаетесь добавлять реквизиты в процедуре, которая при жизни формы будет вызываться более одного раза ? 2) Я написал про перенос данных, а НЕ про создание реквизитов Наводящие вопросы. 1) Вы понимаете что фактически должны добавить новую колонку в реквизит формы "Сотрудники" (тип "ТаблицаЗначений") 2) Далее нужно где-то (например в "ПриСоздании") отобразить эту добавленную колонку на форме 3) Далее нужно модифицировать процедуры Процедура ЗаполнитьФормуПоДаннымОбъекта(ТекущийОбъект) Процедура ЗаполнитьОбъектПоДаннымФормы(ТекущийОбъект) чтобы значение из табличной части попадало в таблицу значений Сотрудники а затем обратно |
|||
27
Масянька
22.12.21
✎
10:57
|
(26) 1. Да
2. Да. 3. Непонятно что и как модифицировать. Встречный вопрос: а почему нельзя вывести колонку (как обычно, в конфигураторе, в расширении) и просто установить связь? |
|||
28
Мультук
гуру
22.12.21
✎
12:05
|
(27)
Будет три картинки https://pastenow.ru/FF3J2 https://pastenow.ru/FF3ID https://pastenow.ru/FF3KK 1) Добавляем в расширение нужные объекты 2) Перетаскиваем мышкой в расширении колонку "НекаяХерня" в табличную часть 3) Дописываем код 4) Смотрим, что получилось, проверяем что сохраняется и открывается 5) Пишем пост на мисту 6) Осторожнее с "ЗаполнитьФормуПоДаннымОбъекта" -- это чистой пример. Особо головой я не думал. &НаСервере &Вместо("ЗаполнитьОбъектПоДаннымФормы") Процедура Расш1_ЗаполнитьОбъектПоДаннымФормы(ТекущийОбъект) УстановитьПривилегированныйРежим(Истина); ТекущийОбъект.ВремяВЧасах = ВремяВЧасах = 1; ТекущийОбъект.Сотрудники.Очистить(); ПоляБухучета = ""; Если ТекущийОбъект.БухучетЗаданВСтрокахДокумента Тогда ПоляБухучета = "СтатьяФинансирования,СтатьяРасходов,СпособОтраженияЗарплатыВБухучете,ОтношениеКЕНВД"; КонецЕсли; Для Каждого СтрокаТаблицы Из Сотрудники Цикл Для Каждого ДеньРаботы Из СписокДат Цикл НоваяСтрока = ТекущийОбъект.Сотрудники.Добавить(); НоваяСтрока.Сотрудник = СтрокаТаблицы.Сотрудник; НоваяСтрока.СпособКомпенсацииПереработки = СтрокаТаблицы.СпособКомпенсацииПереработки; НоваяСтрока.Дата = ДеньРаботы.Значение; Если ТекущийОбъект.ВремяВЧасах Тогда НоваяСтрока.ОтработаноЧасов = СтрокаТаблицы[ИмяКолонкиДатаСтрока(ДеньРаботы.Значение)]; Иначе НоваяСтрока.НеРаботал = НЕ СтрокаТаблицы[ИмяКолонкиРаботалСтрока(ДеньРаботы.Значение)]; КонецЕсли; ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы, ПоляБухучета); КонецЦикла; Если СписокДат.Количество() = 0 Тогда НоваяСтрока = ТекущийОбъект.Сотрудники.Добавить(); НоваяСтрока.Сотрудник = СтрокаТаблицы.Сотрудник; ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы, ПоляБухучета); КонецЕсли; ///-------------------------------- НоваяСтрока.НекаяХерня = СтрокаТаблицы.НекаяХерня; //--------------------------------- КонецЦикла; Если Сотрудники.Количество() = 0 Тогда Для Каждого ДеньРаботы Из СписокДат Цикл НоваяСтрока = ТекущийОбъект.Сотрудники.Добавить(); НоваяСтрока.Дата = ДеньРаботы.Значение; КонецЦикла; КонецЕсли; ТекущийОбъект.ДатаНачалаСобытия = ?(СписокДат.Количество() > 0, СписокДат[0].Значение, Объект.ПериодРегистрации); КонецПроцедуры &НаСервере &Вместо("ЗаполнитьФормуПоДаннымОбъекта") Процедура Расш1_ЗаполнитьФормуПоДаннымОбъекта(ТекущийОбъект) СписокДат.Очистить(); Сотрудники.Очистить(); ПраздничныеДни = ОбщегоНазначения.ВыгрузитьКолонку(ТекущийОбъект.Сотрудники, "Дата", Истина); Для каждого ПраздничныйДень Из ПраздничныеДни Цикл СписокДат.Добавить(ПраздничныйДень, Формат(ПраздничныйДень, "ДЛФ=Д")); КонецЦикла; ДобавитьКолонкиТаблицыСотрудники(СписокДат.ВыгрузитьЗначения()); СтрокиСотрудников = Новый Соответствие; СотрудникиДокумента = Новый Массив; Для каждого СтрокаТЧ Из ТекущийОбъект.Сотрудники Цикл Если СотрудникиДокумента.Найти(СтрокаТЧ.Сотрудник) = Неопределено Тогда СотрудникиДокумента.Добавить(СтрокаТЧ.Сотрудник); КонецЕсли; СтрокиСотрудника = СтрокиСотрудников[СтрокаТЧ.Сотрудник]; Если СтрокиСотрудника = Неопределено Тогда СтрокиСотрудникаПоСпособуКомпенсации = Новый Массив; СтрокиСотрудника = Новый Соответствие; СтрокиСотрудника.Вставить(СтрокаТЧ.СпособКомпенсацииПереработки, СтрокиСотрудникаПоСпособуКомпенсации); СтрокиСотрудников.Вставить(СтрокаТЧ.Сотрудник, СтрокиСотрудника); Иначе СтрокиСотрудникаПоСпособуКомпенсации = СтрокиСотрудника[СтрокаТЧ.СпособКомпенсацииПереработки]; Если СтрокиСотрудникаПоСпособуКомпенсации = Неопределено Тогда СтрокиСотрудникаПоСпособуКомпенсации = Новый Массив; СтрокиСотрудника.Вставить(СтрокаТЧ.СпособКомпенсацииПереработки, СтрокиСотрудникаПоСпособуКомпенсации); КонецЕсли; КонецЕсли; СтрокиСотрудникаПоСпособуКомпенсации.Добавить(СтрокаТЧ); КонецЦикла; Для каждого СотрудникДокумента Из СотрудникиДокумента Цикл СтрокиСотрудника = СтрокиСотрудников[СотрудникДокумента]; Для каждого СтрокиПоСпособуКомпенсации Из СтрокиСотрудника Цикл НоваяСтрока = Сотрудники.Добавить(); НоваяСтрока.Сотрудник = СотрудникДокумента; ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокиПоСпособуКомпенсации.Значение[0]); Для каждого СтрокаТЧ Из СтрокиПоСпособуКомпенсации.Значение Цикл Если ЗначениеЗаполнено(СтрокаТЧ.Дата) Тогда НоваяСтрока[ИмяКолонкиДатаСтрока(СтрокаТЧ.Дата)] = СтрокаТЧ.ОтработаноЧасов; НоваяСтрока[ИмяКолонкиРаботалСтрока(СтрокаТЧ.Дата)] = НЕ СтрокаТЧ.НеРаботал; //------------------------------ НоваяСтрока.НекаяХерня = СтрокаТЧ.НекаяХерня; //------------------------------ КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; УстановитьДоступностьЭлементов(); КонецПроцедуры |
|||
29
Масянька
22.12.21
✎
12:24
|
(28) 2-ой скрин: после того, как я добавила реквизит в табличную часть - этот реквизит не появляется в ТЗ -
https://ibb.co/RhjKr6f |
|||
30
Мультук
гуру
22.12.21
✎
12:32
|
(29)
А он сам и не появится. Добавляем его ручками в унаследованной форме в таблицу значений (см мой скриншот). Саму таблицу значений тоже придется унаследовать. |
|||
31
osa1C
22.12.21
✎
12:34
|
(29) мат в два хода
|
|||
32
Масянька
22.12.21
✎
12:37
|
(30) В инструкции нету :)
(31) Я так и делала. |
|||
33
Масянька
22.12.21
✎
13:31
|
(30) ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
😘😘😘😘😘😘 |
|||
34
Масянька
22.12.21
✎
13:37
|
Блин... А связь?
|
|||
35
Масянька
22.12.21
✎
13:43
|
(34) Мой косяк.
Еще раз СПАСИБО! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |