Делаю форму подбора для документа. Почему-то при вытаскивании данных из тч в эту форму отбора кол-во номенклатуры передается, а сама номенклатура - нет. Обратно из формы в ТЧ документа так же передается кол-во, а номенклатура пустое поле. В чем может быть проблема? Связи у полей одинаковые СправочникСсылка.Номенклатура
---
Подозреваю, что не совпадают наименования полей номенклатуры в Объект.Комплектующие и в формах...
---
Вы еще раз посмотрите что я прислал...
Ты не точно написал функцию
---
мы должны фантазировать о ваших методах?
---
Это в форме накладной

```1c
    &НаКлиенте
    Процедура ОткрытьПодбор(Команда)
    Парам = Новый Структура;
    Парам.Вставить("АдресВХ", ПоместитьТЧВВХ());
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора", Парам, ЭтаФорма);
    КонецПроцедуры

    &НаСервере
    Функция ПоместитьТЧВВХ()
    Возврат ПоместитьВоВременноеХранилище(Объект.Комплектующие.Выгрузить());
    КонецФункции

    &НаКлиенте
    Процедура ОбработатьПодбор(АдресВХ) Экспорт
    ОбработатьПодборНаСервере(АдресВХ);
    КонецПроцедуры

    &НаСервере
    Процедура ОбработатьПодборНаСервере(АдресВХ)
    Объект.Комплектующие.Загрузить(ПолучитьИзВременногоХранилища(АдресВХ));
    КонецПроцедуры
```

Это в форме подбора

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ВыбранныеТовары.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресВХ));
    КонецПроцедуры

    &НаСервере
    Функция ЗавершитьПодборНаСервере()
    Возврат ПоместитьВоВременноеХранилище(ВыбранныеТовары.Выгрузить());
    КонецФункции

    &НаКлиенте
    Процедура ЗавершитьПодбор(Команда)
    АдресВХ = ЗавершитьПодборНаСервере();

    ВладелецФормы.ОбработатьПодбор(АдресВХ);
    Закрыть();
    КонецПроцедуры
```
---
Подозреваю, что не совпадают наименования полей номенклатуры в Объект.Комплектующие и в формах...
---
А ты хорош :D Спасибо)
---
так я же почти из Ростова ;-)))
---
Я тоже почти из Ростова :))

А как при выборе сделать проверку? Я делал

```1c
    Если ЭтоГруппа Тогда... Ошибка
    Если ВыбранноеПоле.ЭтоГруппа Тогда... Ошибка
    Если Элемент.ЭтоГруппа Тогда... Ошибка
```

Не работает(
---
Если Номенклатура.ЭтоГруппа Тогда

Потому что ЭтоГруппа - это реквизит справочника Номенклатура
Если я правильно понял вопрос...
---
Это не реквезит, это папка в справочнике
---
Это РЕКВИЗИТ справочника Номенклатура - открой конфигуратор и посмотри!
Когда он равен Истина, ты видишь папку и ничего больше, когда он ЛОЖЬ - ты видишь свой товар и все его свойства...
---
Но его там даже в списке реквизитов нет))
---
может тогда хотя бы напишешь конфигурацию , в которой нет Реквизита ЭтоГруппа у Номенклатуры?

А вообще - это стандартный реквизит и его ясно нужно смотреть именно в стандартных, если через конфигуратор.
Но в конструкторе запросов его прекрасно видно кстати...
---
А, ну да, там есть
---
Можно в лс с тобой поговорить? Я просто написать тебе там почему-то не могу)
---
Переменная не определена Номенклатура
---
Что значит неопределена, это не переменная, это ссылка должна быть при выборе...

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

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

Переменная не определена (ЭтоГруппа)
---
Что сказать - спроить с 1С невозможно в данном случае - ты ее на самом деле ну никак не определил!
Сам посмотри - ну ЧТО ТАКОЕ в твоем тексте ЭтоГруппа и чему она равна?
Повнимательнее.....
---
Оно равно переменная не определена
---
Вот 1С тебе и пишет об этом в сообщении!
зачем же сравнивать изначально то что Неопределено с Истиной?
Ты мог бы с таким же успехом написать -

```1c
    Если ЯТакХочу Тогда
    КонецЕсли;
```

Суть бы ошибки не поменялся... Откуда 1С знает чего ты там хочешь в этом месте?
---
Справочники.Номенклатура.ЭтоГруппа Тоже не работает
---
А при чем тут СПРАВОЧНИКИ?
Ты что-то совсем отказываешься хоть немного думать самостоятельно....
Что получишь , если напишешь

```1c
    Если Справочники.Номенклатура.Наименовние="Утюг" Тогда
    Сообщить("Утюг");
    Конецесли;
```
---
Получу надпись Утюг
---
Не получишь!
Получишь совершенно ту же ошибку , что и сейчас...
---
Вообще на слово Справочники ругается
---
Ты понимаешь, что можно использовать в сравнениях только Конкретный ЭКЗЕМПЛЯР Справочника, а не все записи сразу?
---
ААААААААААААААААА То есть, нужно сделать запрос и из него проверять группа это или нет?
---
```1c
    Выборка = Справочники.Номенклатура.ВыбратьИерархически();
    Если Выборка.ЭтоГруппа Тогда
    Сообщить("Работает",);
    КонецЕсли;
```

Так тоже не катит, на справочники ругается
---
Ты умеешь запросами пользоваться?
Уж если про выборку заговорили....
Или чем дальше в лес, тем толще партизаны ? В смысле - провалы все больше...
---
Конечно умею, задать группу как параметр просто?
---
При чем тут группа? Ты выбирай не по группе, а по другим своим потребностям!
А вот ЭтоГруппа - проверяй уже потом, когда получишь ОДНУ конкретную номенклатуру
---
Где я согрешил?
Тип не определен (Запрос)
---
Конечно умею согрешил вот тут... ;-)))

Начни с изучения запросов - ВПЛОТНУЮ!
Пока не научишься ими пользоваться как таблицей умножения в любых вычислениях - можешь даже не дергаться дальше...
От простого к сложному никто не отменял....
Если не умеешь простого, никак не выполнишь ничего...

Почитай книжку сначала хоть какую, потренируйся просто получать любые данные из справочников сначала , потом уж трогай дальше...
---
Я делал запросы там... С регистров брал сведения, партийный учет да еще и по складам, но такое первый раз
---
Может он тут не работает потому что тонкий клиент, как тогда быть?
---
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Это еще больший бред, чем все предыдущее...
Сделай запрос, получи ОДИН экземпляр номенклатуры, выведи сообщение про его наименование (проверка чисто для тебя), и если выведет верно - проверяй на ЭтоГруппа
---
У меня форма подбора, мне нужно чтобы просто не перекидывалось наименование группы
---
"Никогда такого не было ! И вот опять..." ? )))))
Поверь - тонкость клиента тут совершенно ни при чем - Тонкий клиент полнофункционален!

Что у тебя в первый раз? Покажи свой запрос к справочнику Номенклатура, в котором ты пытаешься получить какую-нибудь номенклатуру, которую хочешь проверить а не группа ли она.
Но чтобы ее проверить , ее сначала получи , ну чтоб хоть для себя, что у тебя все получилось...
(хотя и в самом заппросе вполне можно проверки ставить...)
---
У меня элементарный запрос не работает
Выбрать Номенклатуру Из Номенклатуры....
---
Пишет тип не определен (запрос)
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
```

Вот что тут не так?
---
тут все совершенно правильно!
давай двигаться дальше...
На каком-то этапе ты же делаешь что-то не так...
Где твои проверки на Группу в приведенном тексте?
---
Если тут правильно, почему ошибка?
---
А потому что нету у тебя ТУТ никакой проверки!
И ты в принципе не понимаешь КАК она должна быть устроена...
Тот чувак пусть тебе и объяснит почему у тебя ошибка....

Одно и то же можно решать различными способами - это раз.
Во вторых с помощью запроса - решение всегда более прозрачно.
И в третьих я не вижу всего твоего кода БЕЗ запроса, а в запрос ты не хочешь внести проверку, то ли не можешь....

Внеси проверку с запросом и сделаешь шаг к пониманию почему у тебя ТАМ ошибка...
---
```1c
    &НаКлиенте
    Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    Стр = ВыбранныеТовары.Добавить();

    Если ЭтоГруппа Тогда
    Сообщить("Ошибка",);
    КонецЕсли;

    Стр.Наименование = ВыбраннаяСтрока;
    Стр.Количество =Стр.Количество + 1;

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

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

И соответственно проверка ВыбраннаяСтрока.Номенклатура.ЭтоГруппа
Но это если только ВыбраннаяСтрока - это строка табличной части , к в которой есть Номенклатура
---
Вот - сделай подсчет в твоем тексте с запросом, а сколько у тебя вообще Групп в Справочнике номенклатура .
Если сделаешь за 1 минуту - считай что можешь двигаться дальше.
Реально - это очень просто....
---
```1c
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.ЭтоГруппа) КАК ЭтоГруппа
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
```

Правильно?
---
Тю, оно не работает потому что на клиенте, может и этогруппа не проверяет потому что оно на клиенте?
---
Чувак который задание дал, сказал шо запрос тут лишнее мне просто надо обратиться в нужное место, чтобы сделать проверку на группу
---
чувак то безусловно прав скорее всего, но это если б ты понимал ГДЕ это нужное место....
И вот для твоего понимания я прошу сделать проверку с запросом...
---
Вот видишь ты уже начинаешь хоть что-то анализировать...
Про клиента - верно то что ЗАПРОСЫ НЕВОЗМОЖНЫ на Клиенте, но это совершенно не значит что они Невозможны при работе с Тонким Клиентом.
Запрос при этом должен выполняться в процедуре &НаСервере...
И именно потому что у тебя не хватает БАЗОВЫХ знаний ты никак не вникнешь в суть всей задачи.
Я тебя и прошу выполнить подсчет Групп запросом...
Когда у тебя ЭТО получится - все остальное само собой поймется....
---
весь экран с ТОЧКОЙ ОСТАНОВА где-то на
ВыбраннаяСтрока
---
Без текста программы - результат отладки - бессмыслен
---
Покажи именно Точку останова
---
Не вижу , что произошла остановка...
Где находится курсор?
Кружок видно , но курсора в нем нету...
---
Остановка на ЕСЛИ
---
Ясно...
Перенеси свою проверку на сервер.
Все подобные проверки делать нужно на сервере на мой взгляд, ибо данные там.
На клиенте трудно бывает замутить какую- либо аналдитику...
---
А как я ВыбраннуюСтроку перенесу на серв?
---
Создай

```1c
    &НаСервере
    Функция ГруппаЭто(СсылкаНоменклатуры)
    Если СсылкаНоменклатуры.ЭтоГруппа Тогда
    Возврат ИСТИНА;
    ИНАЧЕ Возврат ЛОЖЬ;
    КонецФункции;
```

И обращайся к ней с клиента... то есть из своей процедуры...
---
я же говорил, шо не все так просто :D
---
Вот тут прикрепляй
---
Я сейчас попробую смоделировать твою ситуацию у себя
---
Мне пишет что переменная там не определена, короче, жесть
---
Где там?
---
так ссылку то нужно передать вот в ту функцию на сервере , которую я написал.
---
потом на клиенте Если ГруппаЭто = Истина Тогда ошибка?
---
На клиенте можно просто ЕСЛИ ГруппаЭто(ВыбраннуюСтроку ) Тогда..... Сообщить(
---
Работает, выдает ошибку при выборе группы, но теперь когда выбираю Номенклатуру пишет что Невозможно преобразование к типу Булево
---
Покажите ваши тексты
И давайте все же понимать, что БЕЗ текстов отсюда ничего не видно
---
```1c
    &НаКлиенте
    Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    Стр = ВыбранныеТовары.Добавить();

    Если ГруппаЭто(ВыбраннаяСтрока) Тогда
    Сообщить("Ошибка",);
    Иначе
    Стр.Наименование = ВыбраннаяСтрока;
    Стр.Количество =Стр.Количество + 1;
    КонецЕсли;

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

    &НаСервере
    Функция ГруппаЭто(СсылкаНоменклатуры)
    Если СсылкаНоменклатуры.ЭтоГруппа Тогда
    Возврат ИСТИНА;
    КонецЕсли;
    КонецФункции
```
---
Если ГруппаЭто(ВыбраннаяСтрока) Тогда
в этой строке ошибка
---
сравните с тем что я прислал - у вас нет варианта, чему равна функция , когда ЭТоГруппа=Ложь в процедуре на сервере
---
```1c
    &НаСервере
    Функция ГруппаЭто(СсылкаНоменклатуры)
    Если СсылкаНоменклатуры.ЭтоГруппа = Ложь Тогда
    Возврат ИСТИНА;
    КонецЕсли;
    КонецФункции
```
---
Оно же так не проверяет правильно
---
Вы еще раз посмотрите что я прислал...
Ты не точно написал функцию
---
Постарайся увидеть все что делает каждая строчка твоей программы...
Тогда даже если ошибешься - сразу увидишь где ошибка...
---
Спасибо, дай Бог тебе здоровья! Сам бы я хрен когда решил это. НО должен признать были мысли делать через функцию с возвратом истины или ложь.
---
Не за что...
---
Преобразование к значению тип Булево не может быть выполнено