arefaste/1C_Forums huggingface dataset:
Коллеги, доброго дня. Кто сталкивался?
Есть конфигурация БП3, актуальный релиз. Через расширение добавлена форма подбора документов реализации. В форме подбора динамический список запросом с условием ГДЕ РеализацияТоваровУслуг.Организация = &Организация
В файловом варианте всё отрабатывает нормально, заполняется параметр, выполняется запрос и форма открыватеся.
В клиент-серверном ошибка.

```1c
    по причине:
    Ошибка при выполнении запроса.
    по причине:
    Ошибка получения информации набора данных
    по причине:
    Ошибка в запросе набора данных
    по причине:
    {(26, 78)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
    неограниченной длины и поля несовместимых типов.
    И РеализацияТоваровУслуг.Организация<<?>>= &Организация
```
---
В общем помогло смена условия с равно на В

```1c
    И РеализацияТоваровУслуг.Организация В(&Организация)
```

или убрать отбор из запроса динамического списка и настроить его программно:

```1c
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = Объект.Организация;
```

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

    ГДЕ
    РеализацияТоваровУслуг.Организация ССЫЛКА Справочник.Организации"
```
---
Спасибо. Проверю так. Странно, что вообще ломается, не понимаю чем тут отличается клиент-серверный вариант.
---
В общем помогло смена условия с равно на В

```1c
    И РеализацияТоваровУслуг.Организация В(&Организация)
```

или убрать отбор из запроса динамического списка и настроить его программно:

```1c
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = Объект.Организация;
```

Причина почему ломается не понятна..
---
Причина в платформе.
Попробуйте установить платформу поновее, возможно ошибку поправили.
8.3.23.2040 или выше, например.
---
у себя на 8.3.24.1342 проверял, какая у клиента версия не знаю.
как открыть проводник по пути?
вместо выбранного каталога открывается стартовая страница проводника (быстрый доступ)

```1c
    Процедура ПросмотрФайлаНажатие(Элемент)
    Попытка
    ЗапуститьПриложение("explorer.exe", "C:\Users\***\Desktop");//открывает быстрый доступ а не рабочий стол
    Исключение
    Сообщить("Не удалось открыть проводник по указанному пути: " + Файл);
    КонецПопытки;
    КонецПроцедуры
```
---
Если через "ЗапуститьПриложение" , то получилось только через скрипт, в блокноте написать
```1c
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run "cmd.exe /c explorer C:\Users\***\Desktop", 0, false
```
 сохранить типа start.vbs и запускать
```1c
    ЗапуститьПриложение("start.vbs")
```
---
ЗапуститьПриложение("C:\Users\Бугагашеньки\Desktop");
ну и если внутри пути есть пробелы то возможно сам путь надо укзать в пробелах...? типа """C:\USERS\....""""
---
Если через "ЗапуститьПриложение" , то получилось только через скрипт, в блокноте написать
```1c
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run "cmd.exe /c explorer C:\Users\***\Desktop", 0, false
```
 сохранить типа start.vbs и запускать
```1c
    ЗапуститьПриложение("start.vbs")
```
Добрый день .Учебная задача по запросам .Программа ругается на деление на 0 при расчете процента наценки .Где и как грамотно выполнить проверку деления на 0 ?
---
тогда так:

```1c
    Выбор Сумма(Делитель) Когда 0 Тогда 0 Иначе 100 * Сумма(Делимое) / Сумма(Делитель) Конец
```
---
Сначала сгруппируй, чтобы розничная и закупочная цена были в одной строке, а потом уже дели, например, в следующем запросе.
---
Выбор Когда ЕстьNULL(Делитель) = 0 Тогда 0 Иначе Делимое / делитель Конец
---
Что не так делаю?
---
Вынести Сумма в начало.
Сумма(Выбор ЕстьNULL(...) Когда 0 Тогда 0 Иначе 100 * ... Конец)
---
Вынес .Вычисление процента наценки некорректное
---
тогда так:

```1c
    Выбор Сумма(Делитель) Когда 0 Тогда 0 Иначе 100 * Сумма(Делимое) / Сумма(Делитель) Конец
```
---
спасибо
---
запрос текстом ставьте, тогда помогут и с самим текстом
---
Грубо говоря у тебя вот такая таблица получается(ниже), и только после ее формирования ты группируешь по номенклатуре. Налл в твоем случе не поможет, он формируется только в результате соединения таблиц(Здесь только объединение, не стоит путать). Вт нужна, а после расчет процента

Товар | цена зак | цена розн. | процент
Рога | 100 | 0 | 0-100/100
Рога | 0 | 90 | 90-0/0
---
Лучше вложенный запрос не делай, более правильно сделать отдельную вт, плюс отбор по подобно в представленном случае так же такой себе, задай ее через параметр, для учебной задачи должно хватить. Да и усложнена простая задача делай через ВТ, смотри промежуточные результаты, все будет понятнее
Добрый день, коллеги.

Есть обработка, в ней я по метаданным документа (например Реализация товаров услуг) заполняю список выбора всеми реквизитами документа.

Т.е. в строке ТЧ в колонке 1 у меня доступен список выбора любого реквизита документа РТУ. Далее я хочу, чтобы при выборе какого-либо значения в колонке 1 (например, контрагент), в колонке 2 заполнялся список реквизитов контрагента.

Я по значению в колонке 1 получил ОбъектМетаданных контрагента

 Метаданные.Документы[МойДокумент]Реквизиты[РеквизитОбъектаМетаданных] - вот здесь получаю объект метаданных но в нем нет реквизитов...

как мне получить нужный объект (перечисление\справочник) с набором реквизитов?
---
Метаданные.НайтиПоТипу()
---
Дополню. С учетом того, что реквизит может быть составного типа, придется пройти по всем его типам. В теории:

```1c
    Реквизит = Метаданные.Документы[МойДокумент].Реквизиты[РеквизитОбъектаМетаданных];
    Для Каждого Тип Из Реквизит.Типы() Цикл
    МетаданныеРеквизита = Метаданные.НайтиПоТипу(Тип)
    КонецЦикла
```
---
Метаданные.НайтиПоТипу()
---
Дополню. С учетом того, что реквизит может быть составного типа, придется пройти по всем его типам. В теории:

```1c
    Реквизит = Метаданные.Документы[МойДокумент].Реквизиты[РеквизитОбъектаМетаданных];
    Для Каждого Тип Из Реквизит.Типы() Цикл
    МетаданныеРеквизита = Метаданные.НайтиПоТипу(Тип)
    КонецЦикла
```
---
Несомненно. Я решил, что с типами автор справится )))
---
Спасибо, все получилось!
А есть способ как мне понять, что за объект у меня - справочник\документ, или перечисление, или вообще число\строка?
Я вижу, что у перечисления есть поле ЗначенияПеречисления, а у справочника\документа есть поле Реквизиты. Можно каким-то образом получив объект сразу определить, что это?
---
Метаданные.Перечисления.Содержит(МойОбъектМетаданных)

Всем спасибо. Основной вопрос вы решить мне помогли.
---
А как быть, если у Объекта Метаданных нет Реквизитов? Будет ошибка!
---
https://infostart.ru/1c/tools/2391383/
Добрый день.

Хочу добавить эмодзи на кнопку в телеграм боте.

Что точно не работает:

Моя тема по эмодзи
Эмодзи в кнопках

Прошу помощи.
---
Задача решена -

Эмоджи = Символ(55357) + Символ(57005)
---
Задача решена -

Эмоджи = Символ(55357) + Символ(57005)
Добрый день. Пытаюсь отправить файл эксепь через телеграм, файл приходит, но при открытии появляется "Ошибка в части содержимого в книге тест.xlsx. Выполнить попытку восстановления?" Пробовал отправить пдф и текстовый файл - с ними ошибок нет. Пробовал разные эксель файлы отправлять - ошибка на всех. Подскажите, пожалуйста, что не так делаю?
```1c
    СтрокаСоединения = "/bot" + Ключ + "/sendDocument";

    Boundary = "----"+Строка(Новый УникальныйИдентификатор());

    МассивФайловДляОбъединения = Новый Массив;

    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("xlsx");
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);

    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("xlsx");
    ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);

    ТекстДляОтправки = ";

    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name="chat_id"" + Символы.ПС + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + ЧатID + Символы.ПС;

    ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name="document"; filename=" + ИмяФайла + Символы.ПС;

    ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлОтправкиНачало.Закрыть();
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);

    МассивФайловДляОбъединения.Добавить(СокрЛП(ПутьКФайлу));

    ТекстДляОтправки = " + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + "--";
    ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлаОтправкиКонец.Закрыть();
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);

    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("xlsx");
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);

    HTTPЗапрос = Новый HTTPЗапрос;
    Заголовки = Новый Соответствие;

    HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);

    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
    HTTPЗапрос.АдресРесурса = СтрокаСоединения;

    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
    HTTPСоединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());

    Попытка
    ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
```
---
Вот здесь есть пример формирования multipart сообщения с двоичными файлами внутри. Пример там для http ответа, для запроса переделаешь сам, всё весьма похоже.
---
Вот здесь есть пример формирования multipart сообщения с двоичными файлами внутри. Пример там для http ответа, для запроса переделаешь сам, всё весьма похоже.
---
Спасибо, получилось
---
А как вы поняли, что отправляете файл именно в формате excel?
Это как-то сам робот умеет преобразовывать текстовый файл в нужный формат?
Добрый день! Есть форма, в которой есть табличная часть со списком разных документов. Как сделать так, чтобы если два раза кликаешь на ссылке открывался документ? Осложняется тем, что документы разных видов.
---
событие при изменении переопределить? и далее через ПоказатьЗначение() открывай любое значение из Элементы.ТекущиеДанные
---
событие при изменении переопределить? и далее через ПоказатьЗначение() открывай любое значение из Элементы.ТекущиеДанные
---
Да, работает, спасибо!
Добрый день.

Отправляю http запрос на сервер, но сервер выдает ошибку: {"code":3,"message":"invalid character 'Ð' looking for beginning of value","details":[]}

Я подозреваю, что где-то проблема с кодировкой, но вроде везде проставил? В чем может быть дело, никак понять не могу... Сам апи рабочий, формировал запрос сторонним софтом, там все работает. А в 1С выдает такую ошибку.

Минимальный код

```1c
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Api-Key", Константы.ОзонКлюч.Получить());
    Заголовки.Вставить("Client-Id", Константы.ОзонКлиентАйДи.Получить());
    Заголовки.Вставить("Content-Type", "application/json; charset=utf-8 ");

    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    Соединение = Новый HTTPСоединение("api-seller.ozon.ru", 443,,,,,ЗащищенноеСоединение );

    Запрос = Новый HTTPЗапрос("/v4/product/info/prices", Заголовки);

    тест = Новый ЗаписьJSON;
    тест.УстановитьСтроку();
    тест.ЗаписатьНачалоОбъекта();
    тест.ЗаписатьКонецОбъекта();
    тест.Закрыть();

    Запрос.УстановитьТелоИзСтроки(тест,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

    Результат = Соединение.ОтправитьДляОбработки(Запрос);
    Сообщить(Результат.ПолучитьТелоКакСтроку());
```

Спасибо.
---
Ты отсылаешь на сервер строку "ЗаписьJSON" вместо json
---
Установите Fiddler и смотрите что реально отправляется.
---
Установите Fiddler и смотрите что реально отправляется.
---
Ты отсылаешь на сервер строку "ЗаписьJSON" вместо json
---
Спасибо и за Fidder и за подсказку, что отправляю левую строку. Разобрался.
на форме есть стандартный период, пользователь вводит его, допустим 01.04.2019 - 01.07.2019
как разбить его по месяцам? Чтоб было 01.04.2019 - 31.04.2019, 01.05.2019 - 31.05.2019 и тд?
---
Уточните, где именно требуется разбиение? Во встроенном языке?

```1c
    МассивПериодов = Новый Массив;
    ТекущийПериод = СтандартныйПериод.ДатаНачала;
    Пока ТекущийПериод < СтандартныйПериод.ДатаОкончания Цикл
    НовыйПериод = Новый СтандартныйПериод(НачалоМесяца(ТекущийПериод), КонецМесяца(ТекущийПериод));
    МассивПериодов.Добавить(НовыйПериод);
    ДобавитьМесяц(ТекущийПериод, 1);
    КонецЦикла;
```
---
добавить отборы на форму? добавить сортировку?
---
Уточните, где именно требуется разбиение? Во встроенном языке?

```1c
    МассивПериодов = Новый Массив;
    ТекущийПериод = СтандартныйПериод.ДатаНачала;
    Пока ТекущийПериод < СтандартныйПериод.ДатаОкончания Цикл
    НовыйПериод = Новый СтандартныйПериод(НачалоМесяца(ТекущийПериод), КонецМесяца(ТекущийПериод));
    МассивПериодов.Добавить(НовыйПериод);
    ДобавитьМесяц(ТекущийПериод, 1);
    КонецЦикла;
```
---
Да, на встроенном, спасибо!
---
Тут ошибка закралась
вместо ДобавитьМесяц(ТекущийПериод, 1) нужно ТекущийПериод = ДобавитьМесяц(ТекущийПериод, 1)

Мой вариант такой:

```1c
    МассивПериодов = Новый Массив;
    ТекущийПериод = ДатаНачалаОбщ;
    Пока ТекущийПериод <= ДатаОкончанияОбщ Цикл
    ТекДатаНачала = Макс(ДатаНачалаОбщ, НачалоМесяца(ТекущийПериод));
    ТекДатаОкончания = Мин(ДатаОкончанияОбщ, КонецМесяца(ТекущийПериод));
    НовыйПериод = Новый СтандартныйПериод(ТекДатаНачала, ТекДатаОкончания);
    МассивПериодов.Добавить(НовыйПериод);
    ТекущийПериод = ДобавитьМесяц(ТекущийПериод, 1);
    КонецЦикла;
```
---
настроить СКД или написать программу. все - этого хватит.
---
Это не скд, уф форма документа.
Приветствую!

Подскажите пжл как реализовать на управляемых формах подбор значений в список значений из справочника Партнеры с отбором [Х] Клиент? Открывается стандартная форма списка значений с кнопкой Подбор у которой нет событий на которые можно было бы повлиять..

Если на форме задать реквизит "Реквизит1" с типом Справочник.Партнеры то в свойствах можно указать ПараметрыВыбора = Отбор.Клиент(Истина) и тогда список партнеров будет с отбором по [Х] Клиент

А когда добавляешь реквизит "Реквизит2" с типом Список значений с типом значений СправочникСсылка.Партнеры
Подбор идет со справочника Партнеры, но не могу наложить отбор на [Х] Клиент
т.к. у поля списка значений в свойствах НЕТ ПараметрыВыбора.

Как-то можно такое реализовать?
---
1. На подобный вопрос уже отвечали на инфостарте (можете туда перейти и поблагодарить пользователя):
https://forum.infostart.ru/forum9/topic290282/ - ответ от YNik 21.11.22 20:55

2. Вот вам еще вариант, почти тот же самый (даже названия позаимствовал), но показывающий возможность множественного отбора:

```1c
    &НаКлиенте
    Процедура РеквизитСЗНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", получитьПользователей()));
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элемент.ПараметрыВыбора = НовыеПараметры;
    Элемент.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция получитьПользователей()
    //результат = Справочники.Пользователи.НайтиПоНаименованию("Павел");
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    | Пользователи.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Пользователи КАК Пользователи";
    результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
    Возврат результат;
    КонецФункции
```
---
1. На подобный вопрос уже отвечали на инфостарте (можете туда перейти и поблагодарить пользователя):
https://forum.infostart.ru/forum9/topic290282/ - ответ от YNik 21.11.22 20:55

2. Вот вам еще вариант, почти тот же самый (даже названия позаимствовал), но показывающий возможность множественного отбора:

```1c
    &НаКлиенте
    Процедура РеквизитСЗНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", получитьПользователей()));
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элемент.ПараметрыВыбора = НовыеПараметры;
    Элемент.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция получитьПользователей()
    //результат = Справочники.Пользователи.НайтиПоНаименованию("Павел");
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    | Пользователи.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Пользователи КАК Пользователи";
    результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
    Возврат результат;
    КонецФункции
```
---
Благодарю! То, что нужно)
написать небольшую программу, которая представляет собой три
поля, в которые вводятся целые числа – это длины сторон треугольника. После
того, как нажата кнопка «Проверить», выводится сообщение о том, какой это
треугольник: равнобедренный, равносторонний или разносторонний.

Я уже попытался написать программу, но в независимости от введенных чисел у меня выполняется блок иначе

```1c
    &НаКлиенте
    Процедура Проверить(Команда)

    Если (Элементы.Длина1 = Элементы.Длина2) И (Элементы.Длина2 = Элементы.Длина3) Тогда
    Форма = ПолучитьФорму("ОбщаяФорма.Равносторонний");
    Форма.Открыть();
    Иначе Если (Элементы.Длина1 = Элементы.Длина2) Или (Элементы.Длина2 = Элементы.Длина3) Или (Элементы.Длина1 = Элементы.Длина3) Тогда
    Форма = ПолучитьФорму("ОбщаяФорма.Равнобедренный");
    Форма.Открыть();
    Иначе
    Форма = ПолучитьФорму("ОбщаяФорма.Разносторонний");
    Форма.Открыть();
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры
```
---
А в чем у тебя разница между Если и ИначеЕсли? Простая логика нам гласит, что если А=Б а Б=В, то и А=В.
Подсказка - не надо сравнивать элементы. Надо сравнивать значения реквизитов.
Вот у меня есть три абсолютно одинаковые банки с пивом. Но ни одна из них не равна другой, потому что количество пива в них разное.

И еще в задаче сказано Сообщить. А не Получать формы для каждого треугольника.
---
Элементы.Длина1Берешь отладчик. Ставишь точку останова. Смотришь, что у тебя внутри Элементы.Длина1. Думаешь. Спрашиваешь преподавателя.
---
А в чем у тебя разница между Если и ИначеЕсли? Простая логика нам гласит, что если А=Б а Б=В, то и А=В.
Подсказка - не надо сравнивать элементы. Надо сравнивать значения реквизитов.
Вот у меня есть три абсолютно одинаковые банки с пивом. Но ни одна из них не равна другой, потому что количество пива в них разное.

И еще в задаче сказано Сообщить. А не Получать формы для каждого треугольника.
---
может надо отдельную подтему форума создать для новичков и их бредовых задач?
По теме - Тебя проверяют на логику, среда(это не день недели) здесь ни при чем.
---
Я давно предлагал. И доступ туда платный сделать для новичков.
---
ну ты элементы сравниваешь, а надо, наверное, числа, которые в этих элементах нарисованы. Элементы разные всегда, это и так понятно.
А почему не пойти на курсы? там хоть про типы значений расскажут...
В обработчике "ПриИзменении" поля УФ программно, на клиенте, изменяю другие поля, устанавливая "Объект.<Реквизит>":

```1c
    &НаКлиенте
    Процедура КартСО_ДатаВыпускаПриИзмененииПосле(Элемент)
    Перем СрокГодностиМесяцев;
    <...>
    Если СрокГодностиМесяцев = 0 Тогда
    Возврат;
    ИначеЕсли СрокГодностиМесяцев < 0 Тогда
    Объект.СрокГодности = Дата(1,1,1);
    Объект.СрокГодностиНеОграничен = Истина;
    Иначе
    Объект.СрокГодности = ДобавитьМесяц(Объект.ДатаВыпуска,СрокГодностиМесяцев);
    Объект.СрокГодностиНеОграничен = Ложь;
    КонецЕсли;
    КонецПроцедуры
```

На поле флажка, отображающем Объект.СрокГодностиНеОграничен, также стоит обработчик ПриИзменении, и он при этом не вызывается.

Как это исправить? Крайне желательно, не закладываясь на то, у каких из изменяемых полей есть какие обработчики.

(Сам уже гуглил, нашел только https://infostart.ru/1c/articles/16985/ с непонятной актуальностью и применимостью.)
---
при программном изменении реквизитов и обработчики тоже нужно вызывать программно

пример

Объект.СрокГодностиНеОграничен = Истина;
ПриИзмененииСрокГодностиНеОграничен(0); //вызов обработчика
---
К счастью, в моем случае обработчик ПриИзменении измененного поля был написан хорошо:

```1c
    &НаКлиенте
    Процедура СрокГодностиНеОграниченПриИзменении(Элемент)
    ОбновитьВидимостьДоступность();
    КонецПроцедуры
```

Так что вызвав "ОбновитьВидимостьДоступность()", я как раз могу "не закладываться на то, у каких из изменяемых полей есть какие обработчики".
---
при программном изменении реквизитов и обработчики тоже нужно вызывать программно

пример

Объект.СрокГодностиНеОграничен = Истина;
ПриИзмененииСрокГодностиНеОграничен(0); //вызов обработчика
---
К счастью, в моем случае обработчик ПриИзменении измененного поля был написан хорошо:

```1c
    &НаКлиенте
    Процедура СрокГодностиНеОграниченПриИзменении(Элемент)
    ОбновитьВидимостьДоступность();
    КонецПроцедуры
```

Так что вызвав "ОбновитьВидимостьДоступность()", я как раз могу "не закладываться на то, у каких из изменяемых полей есть какие обработчики".
---
Вроде есть способ, смотрел в другом топике, но не могу заставить работать, чтобы щтатные обработчики сработали
---
Взять любую ненужную форму, можно даже текущую. Запомнить ее владельца, установить ей владельцем нужный элемент, вызвать у выбраной формы ОповеститьОВыборе, вернуть старого владельца обратно.
Добрый день .Учусь .Помогите с запросом <пожалуйста.(через консоль запросов)

Использование оператора В

Необходимо получить все склады, на которые еще не
поступали никакие товары. Факт поступления товаров на
склад отражается документом Поступление товаров.
---
с оператором В, это у вас говно..запрос получается (не рекомендуется так запросы писать)

```1c
    Выбрать
    Спр.Ссылка как Склад
    из
    Справочник.Склады Спр
    Где
    не Спр.Ссылка В (
    выбрать различные Док.Склад
    из Документ.ПоступлениеТоваров док
    где Док.Проведен)
```
---
попробуйте такой запрос

```1c
    Выбрать
    Спр.Ссылка как Склад
    из
    Справочник.Склады Спр
    левое соединение Документ.ПоступлениеТоваров док
    по Спр.Ссылка = Док.Склад
    и Док.Проведен
    Где
    док.Склад есть Null
```
---
А оператор В тут в слове Выбрать =)))
---
Добрый день .А как грамотно вложенный запрос использовать ?Задача- применить оператор В . Выбираю справочник Склады в качестве источника ,затем в условии обращаюсь вложенным запросом к документу "Поступление товаров" .Как во вложенном запросе учесть ,что документы не проведены ,а просто записаны ?
---
Как во вложенном запросе учесть ,что документы не проведены ,а просто записаны ?

```1c
    не Документ.Ссылка.Проведен и не Документ.Ссылка.ПометкаУдаления
```
---
с оператором В, это у вас говно..запрос получается (не рекомендуется так запросы писать)

```1c
    Выбрать
    Спр.Ссылка как Склад
    из
    Справочник.Склады Спр
    Где
    не Спр.Ссылка В (
    выбрать различные Док.Склад
    из Документ.ПоступлениеТоваров док
    где Док.Проведен)
```
---
Спасибо!
---
Просто задача учебная
---
Проведенный документ не может иметь пометку удаления

```1c
    Не Документ.Ссылка.Проведен
```

будет достаточно
---
А вот НЕпроведенный - может.