Имя: Пароль:
1C
1С v8
Проверка данных ТЗ и их запись в РС
, , ,
0 MIF_HELM
 
18.06.18
10:04
Здравствуйте, написал код:

Процедура РесурсыИзделияПризнакОсновногоРесурсаПриИзменении(Элемент)

ТекущиеДанные = Элементы.ТаблицаРесурсыИзделия.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;

ПризнакОсновногоРесурса = ТекущиеДанные.ПризнакОсновногоРесурса;

Для Каждого СтрокаТЧ Из ТаблицаРесурсыИзделия Цикл
СтрокаТЧ.ПризнакОсновногоРесурса = Ложь;

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

РесурсыИзделияПризнакОсновногоРесурсаПриИзмененииНаСервере(СтруктураЗаписи);

КонецЦикла;
ТекущиеДанные.ПризнакОсновногоРесурса = ПризнакОсновногоРесурса;
КонецПроцедуры


&НаСервереБезКонтекста
Процедура РесурсыИзделияПризнакОсновногоРесурсаПриИзмененииНаСервере(СтруктураЗаписи);

РС = РегистрыСведений.Ресурсы.СоздатьНаборЗаписей();
РС.Отбор.Изделие.Установить(СтруктураЗаписи.Изделие);
РС.Отбор.РесурсыИзделия.Установить(СтруктураЗаписи.РесурсыИзделия);
РС.Прочитать();
РС.Очистить();

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



РС.Записать();


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

В идеале при выставлении пользователем в колонке типа Булево "флажка" (ПризнакОсновногоРесурса) все остальные значения колонки снимаются, после чего всё записываются в специально отведенный РС. Но столкнулся с проблемами:
1) Программа пытается, но не может записать строку которую изменяет пользователь (выдает ошибку на тему того что запись с такими полями уже существует)
2) Так и не записывает данные в РС.
Помогите решить как это исправить.
1 formista2000
 
18.06.18
10:07
(0) Проверить состав данных и измерения РС для начала - дубликаты попадаются вестимо!
2 MIF_HELM
 
18.06.18
10:10
Да, я тоже это понял, но не могу понять как мне добавить его в исключения, хотел через НайтиПоИдентификатору(ТекущаяСтрока);
Но процедура не может понять значение ТекущаяСтрока и тут я встрял.
3 hhhh
 
18.06.18
10:27
(2) вроде тут нигде нет ТекущаяСтрока ??
4 formista2000
 
18.06.18
10:29
НЕ
Для Каждого Строка Из СтруктураЗаписи Цикл
СтрокаРС = РС.Добавить();
СтрокаРС.Изделие = СтруктураЗаписи.Изделие;
А
Для Каждого Строка Из СтруктураЗаписи Цикл
СтрокаРС = РС.Добавить();
СтрокаРС.Изделие = Строка.Изделие;
!!!
5 MIF_HELM
 
18.06.18
10:30
Вот так пытался добавить:

Если ТаблицаРесурсыИзделия.НайтиПоИдентификатору(ТекущаяСтрока) Тогда
    РесурсыИзделияПризнакОсновногоРесурсаПриИзмененииНаСервере(СтруктураЗаписи);
КонецЕсли;

Но тогда выдает ошибку:
{Справочник.ЭФО.Форма.ФормаЭлемента.Форма(588)}: Значение не является значением объектного типа (ТекущаяСтрока)
    ТекущаяСтрока = ДополнительныеПараметры.ТекущаяСтрока;
6 MIF_HELM
 
18.06.18
10:31
formista2000, если писать так, то 1С не может определить переменную.
7 formista2000
 
18.06.18
10:35
(6) Ты в цикле по полям структуры ходишь, твоя переменная Строка - поле структуры. А надо передавать таблицу, чтобы Строка содержала поля таблицы и брать данные из её реквизитов.
8 MIF_HELM
 
18.06.18
10:38
formista2000, а как это сделать? Просто я в 1С еще новенький.
9 hhhh
 
18.06.18
10:41
(8) что такое ТекущаяСтрока у тебя? Откуда она вылезла?
10 MIF_HELM
 
18.06.18
11:36
hhhh, с помощью нее хотел сделать проверку и если это текущая строка то не перезаписывать её значение (не получилось)
11 hhhh
 
18.06.18
12:11
(10) вообще вот тут непонятно

Для Каждого Строка Из СтруктураЗаписи Цикл

СтруктураЗаписи это же структура, откуда у нее строки вдруг появились?
12 MIF_HELM
 
18.06.18
12:25
hhhh, если честно еще не настолько хорошо знаю 1С чтобы понимать откуда, но так понимаю что после вот этого кода:
СтруктураЗаписи = Новый Структура("Изделие,РесурсыИзделия,ЕдиницыИзмерения,СпособыХранения,СрокСлужбы,СрокХранения,УстановленныйРесурс,ПризнакОсновногоРесурса,Примечание");
СтруктураЗаписи.Вставить("Изделие", Объект.Ссылка);
ЗаполнитьЗначенияСвойств(СтруктураЗаписи, ТекущиеДанные);

В структуре есть все нужные строки ТЗ.
13 hhhh
 
18.06.18
12:45
(12) там вообще нет строк. От слова совсем. Ничего с неба не появляется по воле господа. В вашей программе нет добавления строк. Значит их нет.
14 hhhh
 
18.06.18
12:47
(12) вы вообще программист?
15 MIF_HELM
 
18.06.18
13:52
hhhh, спасибо за помощь, разабрался сам, извините за потраченное время.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший