В обычных формах заполнить реквизит табличной части

1. rishat__ 13.08.22 14:51 Сейчас в теме
В УПП есть справочник Основные средства и справочник Подразделения организаций так вот я хочу сделать так чтобы при выборе определенного подразделения у меня выходили в форме выбора только те основные средства которые находятся на этом подразделении. я создал свою форму выбора в справочнике Основные средства и добавил туда реквизит Подразделения хочу заполнить его при открытии но выходит ошибка:
Итератор для значения не определен
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(58)}: Для Каждого СтрокаТЧ Из СправочникСписок Цикл
подскажите пожалуйста это можно исправить

это в форме выбора:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
      Для Каждого СтрокаТЧ Из СправочникСписок Цикл
		СтрокаТЧ.Участок = ПолучитьУчасток(СтрокаТЧ.Наименование);
      КонецЦикла;  
    
КонецПроцедуры


это в документе делаю отбор по подразделениям:
Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)
   
    ТабЧасти = ЭлементыФормы.Заказы.ТекущиеДанные;
   
    ФормаПодбора  = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора");    
    ФормаПодбора.РежимВыбора = Истина;
    ФормаПодбора.ЗакрыватьПриВыборе = Истина;
    ФормаПодбора.МножественныйВыбор = Истина;    
    ФормаПодбора.ВладелецФормы = Элемент; 
    
    //ФормаПодбора.Отбор.Код.ВидСравнения = ВидСравнения.Равно;
    //ФормаПодбора.Отбор.Участок.Значение = ТабЧасти.Участок;   
    //ФормаПодбора.Отбор.Код.Использование = Истина;
    ФормаПодбора.Открыть();
    
    СтандартнаяОбработка = Ложь
    
КонецПроцедуры
Показать


в форме выбора нет возможности сделать отбор по подразделениям это видно на 4 рисунке. поэтому и пытаюсь в свою форму добавить эту колонку чтобы потом сделать по нему отбор
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
20. nikolasx 59 13.08.22 16:57 Сейчас в теме
Попробуйте вот так
Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

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

КонецПроцедуры
Показать
В СсылкаУчасток передавайте данные текущей строки Участок. Так же определите СтандартнаяОбработка = Ложь;
rishat__; +1 Ответить
26. nikolasx 59 13.08.22 17:29 Сейчас в теме
(25) Добавить тогда вот так ещё, нужен список значений, это как пример
СписокОС = Новый СписокЗначений;
СписокОС.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство"));
нФормаВыбора.Отбор.Ссылка.Значение = СписокОС;
rishat__; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. Sashares 34 13.08.22 15:06 Сейчас в теме
(1) Это не так работает. Если вы добавили реквизит в справочник, то чтобы заполнить этот реквизит, надо получить объект справочника, заполнить в нем реквизит и записать. И так во всех элементах справочника.

Но это возможно и без добавления реквизита в справочник.
Можно в таблицу СправочникСписок на форме добавить колонку и заполнить эту колонку в событии ПриВыводеСтроки или в событии ПриПолученииДанных элемента формы СправочникСписок.
rishat__; +1 Ответить
8. rishat__ 13.08.22 15:53 Сейчас в теме
(4) использую событие ПриВыводеСтроки
Функция ПолучитьУчасток(Наименование)

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

КонецФункции 

Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
        ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);	
КонецПроцедуры 
Показать


выдает ошибку:
Поле объекта недоступно для записи (СС_Участок)
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(68)}: ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);
9. rishat__ 13.08.22 16:06 Сейчас в теме
(4)типы совпадают
Прикрепленные файлы:
2. nikolasx 59 13.08.22 14:59 Сейчас в теме
Обычные формы, вот пример
нФормаВыбора = Справочники.ТестСправочник.ПолучитьФормуВыбора(, ЭлементыФормы.тестОбъект);
нФормаВыбора.Отбор.ТестРеквизит.ВидСравнения = ВидСравнения.Равно;
нФормаВыбора.Отбор.ТестРеквизит.Значение = "Тест1";
нФормаВыбора.Отбор.ТестРеквизит.Использование = Истина;
нФормаВыбора.Открыть();
3. rishat__ 13.08.22 15:01 Сейчас в теме
(2) ну отбор то у меня работает я проверял на других реквизитах. мне нужно в своей созданной форму заполнить колонку вот что я хочу. я не могу обратиться к тч формы перед открытием
Прикрепленные файлы:
5. nikolasx 59 13.08.22 15:08 Сейчас в теме
(3) Зачем её заполнять? Я так понимаю "ФормаПодбора.Отбор.Участок.Значение" - это подразделение, если нет ".Участок" подразделения - посмотрите доступно ли значение точкой останова, например "ФормаПодбора.Отбор.Участок.Значение.Подразделение"
6. rishat__ 13.08.22 15:18 Сейчас в теме
вот
Прикрепленные файлы:
7. rishat__ 13.08.22 15:29 Сейчас в теме
(5) проблема еще в том что в справочнике основные средства реквизит Подразделения это реквизит формы элемента
Прикрепленные файлы:
10. nikolasx 59 13.08.22 16:06 Сейчас в теме
(7) Если это элемент формы так это не сработает. Нужно определить где хранится информация подразделения. Как вариант, перед открытием формы, с помощью запроса получить массив участков по условию и ФормаПодбора.Отбор.Участок.ВидСравнениния = ВидСравнения.ВСписке, а значение ФормаПодбора.Отбор.Участок.Значение = РезельтатЗапроса.Выгрузить("...")
11. nikolasx 59 13.08.22 16:15 Сейчас в теме
Давайте так
В УПП есть справочник Основные средства и справочник Подразделения организаций
как связаны между собой справочники. В основных средствах есть реквизит ссылка Подразделения? Если да, то как он называется?
12. rishat__ 13.08.22 16:17 Сейчас в теме
(11) реквизита не было я сам его добавил
Прикрепленные файлы:
13. nikolasx 59 13.08.22 16:18 Сейчас в теме
(12) Хорошо, как оно заполняется? Это реквизит объекта, он заполнен?
14. rishat__ 13.08.22 16:23 Сейчас в теме
(13) вот я его пытаюсь заполнить но выдает ошибку:
Поле объекта недоступно для записи (СС_Участок)
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(59)}: ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);


Поле объекта недоступно для записи (СС_Участок)
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(63)}: Элемент.ТекущиеДанные.СС_Участок = ПолучитьУчасток(Элемент.ТекущиеДанные.Ссылка);


Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
        ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);	
КонецПроцедуры 

Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Элемент.ТекущиеДанные.СС_Участок = ПолучитьУчасток(Элемент.ТекущиеДанные.Ссылка);
КонецПроцедуры
15. rishat__ 13.08.22 16:24 Сейчас в теме
(13) вот
Прикрепленные файлы:
16. nikolasx 59 13.08.22 16:29 Сейчас в теме
У вас перемешались "Люди - кони, кони - люди"!
Зачем при открытии вы пытаетесь заполнить и получить если у вас уже есть данные Элемент.ТекущиеДанные.Ссылка. Что у вас написано в ПолучитьУчасток(?
17. rishat__ 13.08.22 16:30 Сейчас в теме
(16) ну я это как пример кинул два события а так я использую только одно из них :
Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Элемент.ТекущиеДанные.СС_Участок = ПолучитьУчасток(Элемент.ТекущиеДанные.Ссылка);
КонецПроцедуры
19. nikolasx 59 13.08.22 16:31 Сейчас в теме
(17) Покажите тело функции ПолучитьУчасток(
18. rishat__ 13.08.22 16:31 Сейчас в теме
(16)
Функция ПолучитьУчасток(Наименование)

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

КонецФункции 
Показать
20. nikolasx 59 13.08.22 16:57 Сейчас в теме
Попробуйте вот так
Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

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

КонецПроцедуры
Показать
В СсылкаУчасток передавайте данные текущей строки Участок. Так же определите СтандартнаяОбработка = Ложь;
rishat__; +1 Ответить
21. rishat__ 13.08.22 17:17 Сейчас в теме
(20) ошибка
Ошибка при установке значения атрибута контекста (Значение)
{Документ.СС_ТабельОС.Форма.ФормаДокумента.Форма(142)}: нФормаВыбора.Отбор.Ссылка.Значение = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство");
по причине:
Неверный тип значения
22. nikolasx 59 13.08.22 17:21 Сейчас в теме
(21) Проверьте нФормаВыбора.Отбор.Ссылка.Значение - это ОсновныеСредства.Ссылка ?
24. rishat__ 13.08.22 17:24 Сейчас в теме
(22) вот
Прикрепленные файлы:
23. nikolasx 59 13.08.22 17:23 Сейчас в теме
(21) Точку останова сделайте и проверьте сразу значения с запроса РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство") - должен быть список основных средств
25. rishat__ 13.08.22 17:25 Сейчас в теме
(23) вот
Прикрепленные файлы:
26. nikolasx 59 13.08.22 17:29 Сейчас в теме
(25) Добавить тогда вот так ещё, нужен список значений, это как пример
СписокОС = Новый СписокЗначений;
СписокОС.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство"));
нФормаВыбора.Отбор.Ссылка.Значение = СписокОС;
rishat__; +1 Ответить
28. rishat__ 13.08.22 17:58 Сейчас в теме
(26) проблема появилась я когда из формы выбора с отбором выбираю основное средство то оно почему то не встает в ТЧ документа
Прикрепленные файлы:
27. rishat__ 13.08.22 17:39 Сейчас в теме
спасибо тебе большое за помощь! все заработало
29. nikolasx 59 13.08.22 18:00 Сейчас в теме
30. rishat__ 13.08.22 18:04 Сейчас в теме
(29) проблема появилась я когда из формы выбора с отбором выбираю основное средство то оно почему то не встает в ТЧ документа
31. rishat__ 13.08.22 18:06 Сейчас в теме
(30) я еще в прицедуре Процедура ЗаказыОбъектОСНачалоВыбора в конце добавил
 СтандартнаяОбработка = Ложь;

а то у меня две формы выбора открывались
32. rishat__ 13.08.22 18:08 Сейчас в теме
(31) одна форма с отбором другая без отбора причем если выбираю ОС из формы без отбора то основное средство встает в ТЧ документа а если выбираю из формы с отбором то ОС не встает. ячейка просто пустой остается
Прикрепленные файлы:
36. spacecraft 14.08.22 14:50 Сейчас в теме
(32) СтандартнаяОбработка = Ложь отключает цепочку обработчиков следующих далее. Соответственно ОбработкаВыбора не вызывается для поля.
Просто открывается форму справочника, но никак не обрабатывается.
Как вариант, можно указать владельца формы выбора.
нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора", Элемент);
33. nikolasx 59 13.08.22 20:35 Сейчас в теме
(31)
СтандартнаяОбработка = Ложь;
Это в начале нужно перед открытием, а лучше в условие, тогда будет отрабатывать условие, если запрос не пустой тогда открывать с отбором, иначе без отбора. В иначе можно ничего не писать, будет открыта форма без отбора
Если не РезультатЗапроса.Пустой() Тогда
 СтандартнаяОбработка = Ложь;
.....
34. rishat__ 13.08.22 23:14 Сейчас в теме
35. nikolasx 59 14.08.22 11:11 Сейчас в теме
(34) Код процедуры в студию!
37. rishat__ 14.08.22 20:01 Сейчас в теме
(35) извини у меня проблемы были с интернетом ща скину
38. rishat__ 14.08.22 20:03 Сейчас в теме
(35)
Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

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

        	
        	Если не РезультатЗапроса.Пустой() Тогда  
        	      СтандартнаяОбработка = Ложь;  	
        		нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("ФормаСписка");
                 нФормаВыбора.РежимВыбора = Истина;
                 нФормаВыбора.ЗакрыватьПриВыборе = Истина;
                 нФормаВыбора.МножественныйВыбор = Истина;    
                 нФормаВыбора.ВладелецФормы = Элемент;   
                 
        		нФормаВыбора.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
        		нФормаВыбора.Отбор.Ссылка.Значение = СписокОС;
        		нФормаВыбора.Отбор.Ссылка.Использование = Истина;
        		нФормаВыбора.Открыть(); 
            Иначе 
                // пока ничего
            КонецЕсли;	
      
      КонецЕсли;	

КонецПроцедуры
Показать
39. rishat__ 14.08.22 20:10 Сейчас в теме
(35) мне тут подсказали что нужно использовать форму выбора с оповещением при закрытии и в этом оповещении заполнять текущее поле
40. nikolasx 59 14.08.22 22:33 Сейчас в теме
(39)
мне тут подсказали что нужно использовать форму выбора с оповещением при закрытии и в этом оповещении заполнять текущее поле
- это для управляемых форм.

нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("ФормаСписка");
- во первых это не форма выбора, а форма списка. Можно тут не указывать имя формы, вызовется определенная
ПолучитьФормуВыбора()


СтандартнаяОбработка = Ложь; - этот флаг отключает открытие стандартной формы выбора

И ещё раз, в чем сейчас проблема?
41. rishat__ 15.08.22 07:23 Сейчас в теме
(40) проблема в том что когда я выбираю основное средство в форме списка оно не переносится в форму документа. в ТЧ документа ОбъектОС остается пустым
42. spacecraft 15.08.22 10:40 Сейчас в теме
(41) прочитайте 36 сообщение. Там все описано.
43. rishat__ 15.08.22 12:32 Сейчас в теме
(42) нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора", Элемент);
добавил но че то все равно не встает значение в табличную часть документа
44. spacecraft 15.08.22 12:49 Сейчас в теме
(43) смотреть обработчик ОбработкаВыбора назначенный для поля. Посмотреть отладчиком, что он вызывается и что приходит.
45. rishat__ 15.08.22 15:08 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот