arefaste/1C_Forums huggingface dataset:
Я искал, но так не нашёл. Есть ли возможность создания обязательной связи по условию?

Ситуация: Есть договор, внутри галочка "Договор по закупке", если галочка стоит, то при записи договор требует установить связь с проектом, если галочки нет, следовательно требования тоже.

Если такого нет в основном функционале, то есть ли у кого примеры доработки?

Документооборот 8 КОРП, редакция 2.1 (2.1.16.1)
---
Можно настроить не связь, а доп. реквизит типа "Проект". И настроить условие, что реквизит обязателен для заполнения, если стоит галочка "Договор по закупке" - типовые возможности конфигурации.
---
НАШЁЛ РЕШЕНИЕ С МИНИМАЛЬНЫМИ ЗАТРАТАМИ!

Создаём в виде документа два дополнительных реквизита силами программы не прибегая к конфигуратора, первый с типом "Внутренние документы", второе булевское "Проект не требуется", и просто ставим обязательное заполнение если Проект не требуется = нет.

Поле Проект, обязательное поэтому пользователи начнут туда подгружать проект, а если он не нужен ставят галочку. Профит. Решение буквально за 2 минуты. Да, это не связи с документами, но всё же мы можем найти нужный проект. Что решает поставленную задачу без усилий.
---
Такого функционала нет.
Надо писать код.
В модуле формы в процедуре "ПередЗаписью" надо написать что-то типа:
1. Самому добавить связь

```1c
    Если ПроверкаУсловия() Тогда
    СвязиДокументов.СоздатьСвязь(
    Объект.Ссылка,
    СвязанныйДокумент,
    ТипСвязи);
    КонецЕсли;
```

2. Сделать обязательную связь:

```1c
    НоваяСтрока = ОбязательныеСвязи.Добавить();
    НоваяСтрока.ТипСвязи = ПредопределенноеЗначение("Справочник.ТипыСвязей.СБД_СвязьПроектаДССДоговором");
    НоваяСтрока.СсылкаНа = Объект.ВидДокумента;
    НоваяСтрока.СвязанныйДокумент = Объект.СБД_ОсновнойДоговор;
    НоваяСтрока.НужноЗаписать = Истина;
```
---
Можно настроить не связь, а доп. реквизит типа "Проект". И настроить условие, что реквизит обязателен для заполнения, если стоит галочка "Договор по закупке" - типовые возможности конфигурации.
---
Я не видел это сообщение, но сам до этого вот буквально час назад догадался. Я сместил вектор внимания со связи)) и сделал также как вы описали и все отлично работает))
---
НАШЁЛ РЕШЕНИЕ С МИНИМАЛЬНЫМИ ЗАТРАТАМИ!

Создаём в виде документа два дополнительных реквизита силами программы не прибегая к конфигуратора, первый с типом "Внутренние документы", второе булевское "Проект не требуется", и просто ставим обязательное заполнение если Проект не требуется = нет.

Поле Проект, обязательное поэтому пользователи начнут туда подгружать проект, а если он не нужен ставят галочку. Профит. Решение буквально за 2 минуты. Да, это не связи с документами, но всё же мы можем найти нужный проект. Что решает поставленную задачу без усилий.
---
У нас похожая ситуация к договору нужно сделать связь с протоколом, если сумма больше 1 млн., реализовал это в маршруте через условие, если данный тип связи не будет проставлен, документ не уйдет на согласование
Как получить данные реквизита формы/сам реквизит через запрос ибо все будет через СКД
Вот никак не могу понять как получить, что делать
---
Если смысл вопроса: "Как получить дату увольнения сотрудника в БП?", то смотрите в РС ТекущиеКадровыеДанныеСотрудников.
---
Никак. Запрос работает с базой данных, а не с формой.
---
Если смысл вопроса: "Как получить дату увольнения сотрудника в БП?", то смотрите в РС ТекущиеКадровыеДанныеСотрудников.
---
Да вы очень близки, я тоже этим вариантом воспользовался, но там все уходит в общие модули, а эта база БУХ и там такие джунгли, что бы отловить, пока сложно с этим
---
Если БП – джунгли, боюсь представить, чем для вас ЗУП покажется =)
Включите отладку. Перед открытием формы сотрудника включите замер производительности. Откройте форму сотрудника. Остановите замер производительности. Сделайте поиск в результате замера по "ДатаУвольнения". Это поможет найти места заполнения реквизита.
---
буду пробовать
---
Спасибо, все нашел и получил)
Задача
Данные необходимо передавать 3-мя POST переменными
• login - ВАШ Уникальный идентификатор дистрибьютора (выдается по запросу)
• pswd - пароль (выдается по запросу)
• xml - XML, развернутый в строку (не файл, а POST переменная)

Код

```1c
    ПараметрыПодключения = Новый Структура("Сервер, Порт", "aaa.aa.com", 80);
    Соединение = Новый HTTPСоединение(ПараметрыПодключения.Сервер, ПараметрыПодключения.Порт);

    АдресРесурса = "/distributor_document/";
    СтрокаТелоЗапроса = "login=login&pswd=pswd&xml ="+Строкаxml;

    Запрос = Новый HTTPЗапрос(АдресРесурса);
    Запрос.УстановитьТелоИзСтроки(СтрокаТелоЗапроса, , ИспользованиеByteOrderMark.НеИспользовать);
    HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос);
    Сообщить("Код результата: " + HTTPОтвет.КодСостояния);
    Сообщить("Ответ: " + HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8"));
```

Код результата 200
Ответ: <?xml version="1.0" encoding="utf-8"?> <errors>Переменные должны передаваться POST-ом. Нет ни одной переменной POST.</errors>

Что не так?
Что значит POST-ом?
---
обязателен заголовок

```1c
    Запрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
```
---
```1c
    СтрокаТелоЗапроса = "login=login&pswd=pswd"+Строкаxml;
```

добавить параметр xml

```1c
    СтрокаТелоЗапроса = "login=login&pswd=pswd&xml="+Строкаxml;
```
---
добавила, вернее он там был
---
обязателен заголовок

```1c
    Запрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
```
Добрый день! Подскажите как получить путь из модуля объекта внешней обработки к справочникам.ДоговорыКонтрагенты и к элементу который на фото
---
ЭлементСправочника.ВалютаОплаты (или как там называется реквизит)
---
Пример, если нужно выбрать все рублёвые договоры и что-нибудь в них поменять:
```1c
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | ДоговорыКонтрагентов.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    | ДоговорыКонтрагентов.ВалютаВзаиморасчетов = &Рубли
    | И НЕ ДоговорыКонтрагентов.ПометкаУдаления");

    Запрос.УстановитьПараметр("Рубли", Справочники.Валюты.НайтиПоКоду("643"));

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();

    // тут меняем объект, если нужно

    СправочникОбъект.Записать();
    КонецЦикла;
```
---
Детализируйте, что именно надо. Потому что из текста и скрина не видно. Если из модуля надо получить и открыть форму, то ответ "никак". Если надо обратиться к объекту, то непонятно в чем вопрос.
---
Пример Если в справочники.ДоговорыКонтрагенты в элементах выбрана оплата в руб. в (модуле объекта внешней обработки) как написать и получить путь в модуле объекта?
---
Согласен )))
---
ЭлементСправочника.ВалютаОплаты (или как там называется реквизит)
---
Как ты догадался чего он хочет ? ))))))
---
Если (в справочники.ДоговорыКонтрагенты в элементах выбрана оплата в руб.(на фоте в синей рамочке) ) Тогда
выходит что я хочу
Иначе
 Не выходит
КонецЕсли;

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

    Запрос.УстановитьПараметр("Рубли", Справочники.Валюты.НайтиПоКоду("643"));

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();

    // тут меняем объект, если нужно

    СправочникОбъект.Записать();
    КонецЦикла;
```
---
ЭлементСправочника.ВалютаОплаты (или как там называется реквизит) да это как бы правильный вариант но у меня он не выводил, пока ты не написал запрос. и я пока не добавил реквизит в запрос и у меня начало все выводиться. Проблема была у меня простая я забыл добавить реквизит в запрос(((
Как можно отловить функцию при проведении любого документа или записи справочника.
---
Достаточно сделать 2 подписки:
- Источник: ДокументОбъект; Событие ОбработкаПроведения
- Источник: СправочникОбъект; Событие ПриЗаписи
---
Ищите там.
---
Достаточно сделать 2 подписки:
- Источник: ДокументОбъект; Событие ОбработкаПроведения
- Источник: СправочникОбъект; Событие ПриЗаписи
---
иски:
- Источник: ДокументОб

Да тоже до этого дошел, но не могу добавить в обработчик свой модуль объекта, его просто там нет.
---
Обработчик должен быть в общем модуле.
---
Я создал свой общий модуль с процедурой, уже даже нажал обновить конфигурацию но, в обработчике не отображается.
---
Процедура создается обычно автоматически. Возможно количество параметров вашей процедуры не соответствует стандартному количеству или модуль не серверный. Других предположений у меня нет.
---
Увы, этого нет. Придётся прописывать в каждом виде документа и справочника.
---
Ищите там.
Подскажите по проблеме, может она уже освещена но видимо я плохо искал.
В процедуре ПриКомпоновкеРезультата своего внешнего отчета банальная строчка
МояПеременная = Новый COMОбъект("ADODB.Connection");
заставляет вылететь отчет с ошибкой "Не установлена схема компоновки данных"

Прошерстил сайты с этой ошибкой и под эти ошибки я не подхожу, т.к. в момент вызова конектора у меня вылазит эта ошибка.
Кто-что знает?
---
Внешний отчет запускается по-умолчанию в защищенном режиме, в нем запрещены все эти COM, файловые операции, интернеты и т.д.

С другой стороны, если уж так нужны все эти внешние базы данных, то есть же внешние источники, через которые они будут доступны прям в запросе - и не надо изобретать свои велосипеды и подводные лодки...
---
видимо я плохо искал
https://www.google.ru/search?q="Не+установлена+схема+компоновки+данных"+"COMОбъект"
---
До этой строки СтандартнаяОработка = Ложь установлено?
Может быть следствием того что при ошибке в этой строке вылетает из твоей процедуры и идет по стандартной обработке и описаннная ошибка уже в ней возникает.
---
без кода сложно что-либо обсуждать.
---
видимо я плохо искал
https://www.google.ru/search?q="Не+установлена+схема+компоновки+данных"+"COMОбъект"
---
Можно теперь исправить на "я плохо искал". Спасибо
---
Вот начало кода

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

 СтандартнаяОбработка = ЛОЖЬ;

        МояПеременная = Новый COMОбъект("ADODB.Connection");
        ...

Вот если в отладке дальше МояПеременная пройти через "Шагнуть В" то вылетает ошибка
---
Внешний отчет запускается по-умолчанию в защищенном режиме, в нем запрещены все эти COM, файловые операции, интернеты и т.д.

С другой стороны, если уж так нужны все эти внешние базы данных, то есть же внешние источники, через которые они будут доступны прям в запросе - и не надо изобретать свои велосипеды и подводные лодки...
Добрейшего времени суток камрады.
Собственно вопрос, как вывести месяц в отчете в формате "07", а не "7", уже весь СКД стыкал, не могу найти.
---
уберите Выражение представления для ПериодМесяц
---
форматная строка правильная. MM это и будет отображать 07, а M будет просто 7.
Возможно не там указали формат.
---
К сожалению нет, оба варианта, вернее все представленные по дефолту варианты выводят "7". Возможность нашаманить "07" через выражения, не рассматриваю, нужна именно дата с типом дата, а не строка.
---
проблема дальше. Что и как выводите?
---
Вот:
---
уберите Выражение представления для ПериодМесяц
---
Бинго!
---
когда использовали Выражение представления Месяц(ПериодМесяц), то получали в ячейку тип Число. Соответственно на Число не действует форматная строка для Даты. В таком случае можно было использовать форматную строку для числа (ЧЦ='2'; ЧВН=''). Только в данном случае нет необходимости двойной обработки.
Есть рабочий код, который обегает табличную часть документа и наполняет Поле1.
Появилась задача реализовать аналогичное наполнение для реквизита Поле2.

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

Есть затея собрать массив с реквизитами, которые надо заполнить при обходе. Но не знаю, как ее реализовать.

МасРеквизитов = Новый Массив;
МасРеквизитов.Добавить("Поле1"); (возможно, тут не строка)
МасРеквизитов.Добавить("Поле2");

Для каждого Реквиз из МасРеквизитов Цикл

 Для каждого Стр Из Объект.ТЧ цикл

     А вот тут вопрос, как обращаться к реквизиту табличной части.

 КонецЦикла;

КонецЦикла;
---
```1c
    Стр["Поле1"] = НужноеЗначение;
```
---
```1c
    Стр["Поле1"] = НужноеЗначение;
```
---
```1c
    СвойстваРеквизитов = Новый Структура;

    МасРеквизитов = Новый Массив;
    МасРеквизитов.Добавить("Поле1"); (возможно, тут не строка)
    МасРеквизитов.Добавить("Поле2");

    Для каждого Реквиз из МасРеквизитов Цикл

    Для каждого Стр Из Объект.ТЧ цикл

    СвойстваРеквизитов.Вставить(Реквиз, Стр[Реквиз]);

    КонецЦикла;

    КонецЦикла;
```
Здравствуйте.
Нужно обойти подкаталоги, но обойти не все подряд, а так чтобы на каждом из уровней вложенности самому чтобы принимать решение обходить внутри или нет. Стандартно если делать обход через

```1c
    НайтиФайлы(КаталогГдеИскать, Маска, Истина)
```

то находятся все подкаталоги (и файлы) всех уровней вложенности, притом повлиять на это никак нельзя.
Если же запускать как

```1c
    НайтиФайлы(КаталогГдеИскать, Маска, Ложь)
```

то система насколько я понял подразумевает что ищутся только файлы, а подкаталоги, даже если они (подкаталоги) лежат в каталоге КаталогГдеИскать вообще не находит.

Посоветуйте пожалуйста варианты решения..
---
НайтиФайлы(КаталогГдеИскать , "*")

Найдет подкаталоги и файлы, а дальше в цикле обходить и заходить в подкаталоги
---
НайтиФайлы(КаталогГдеИскать , "*")

Найдет подкаталоги и файлы, а дальше в цикле обходить и заходить в подкаталоги
---
Спасибо, проверю этот вариант.
---
Спасибо, все работает! Не знал, что для поиска всех подкаталогов нужно обязательно указать маску такую, и в документации не сказано.
---
сказано там все.
Из СП:

Синтаксис:
НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)

Описание:
Осуществляет поиск файлов и каталогов по заданной маске, расположенных в заданном каталоге.
В строке маски, помимо обычных символов, допускается использование символа "*" (звездочка), обозначающего любое число произвольных символов, и "?" (знак вопроса), обозначающего один произвольный символ.
---
Ну тут не знаю.. Мне например неочевидно, что для того чтобы искать все подкаталоги нужно обязательно указать маску на это "*".
Собственно в этом и затык был, что я ее просто не указывал, надеясь что без указания ее найдется все, а оказалось что ничего не находится (по крайней мере подкаталоги не находились, насчет файлов не помню).
---
Собственно в этом и затык был, что я ее просто не указывал, надеясь что без указания ее найдется все, а оказалось что ничего не находится (по крайней мере подкаталоги не находились, насчет файлов не помню).
там же (СП) есть указание:
<Маска> (необязательный)
Тип: Строка.
Маска выбора файлов.
Если параметр задан, то первый параметр воспринимается системой как путь к каталогу, в котором требуется найти файлы, удовлетворяющие маске выбора.
Т.е. только при указанной маске ищет в каталоге. Иначе просто ищет файл/каталог указанный в первом параметре.
Добрый день.

Подскажите можно ли средствами СКД объединить ячейки?
На картинке выделено красным цветом.
---
Средствами СКД - нет. Постобработкой можно попробовать так: https://youtu.be/qWecZ-dNKD4
---
Так в колонках сделайте 2 группировки.
Сначала Категория услуги, а у нее вложенная группировка Услуга.
---
В настройках на вкладке ВыбранныеПоля создаешь группу.
Внутри этой группы вставляешь сами поля.
Вот эта группа и будет объединенной ячейкой
---
Не то пальто.
У меня количество Категорий динамическое, я не могу сделать это статическими группами.
---
1. группировке "категория" задать имя;
2. в СКД, на закладке макеты, создать макет для этой именованной группировки и заполнить его по вкусу.
---
я не знаю имя. Оно формируется динамически. Это как справочник, выбираются поля.
---
Не работает
---
Попробуй сделать иерархию в колонках.
---
Средствами СКД нет. Постобработкой можно https://wiki.programstore.ru/postobrabotka-otcheta-skd/
---
Не работает. Не происходит объединения.
---
В данном примере нет самого решения.
---
есть. видимо не всякому дано его найти там
---
Средствами СКД - нет. Постобработкой можно попробовать так: https://youtu.be/qWecZ-dNKD4
Добрый день. УТ 11.4.13.57
Беру стандартный отчёт Валовая прибыль предприятия, хочу узнать что продалось у конкретного производителя (Производители созданы как доп. реквезит) Делаю отбор Номенклатура.Производители, в этой графе выбираю, просит указать производитель программный или доп. реквизит, выбираю доп. реквезит и указываю конкретный, но отчёт ничего не вывод, почему?
---
Разобрался, нужно было по-другому назвать доп. реквезит, а то он называется как штатный, обозвал бренд и всё заработало
---
Разобрался, нужно было по-другому назвать доп. реквезит, а то он называется как штатный, обозвал бренд и всё заработало
Здравствуйте. При сохранении файлов из 1с в excel столкнулся с проблемой - файл не определяется сайтом.Также файлы с сайта не определяются 1с. Но если пересохранить файл ,то и на сайт все грузится и в 1с. Из видимых отличий - в свойствах-содержимое- "Шкала" и "ссылки испорчены?" появляются значения "нет". Возможно ли эти значения проставить из 1с при сохранении?
---
Если сохраняешь как табличный документ - сохранить, то 1С делает файлы ексель кривовато. Собственно все, кроме самого екселя, делает их кривовато. Да и ексель тоже зависит от версии.
Тут надо или екселем сохранять через ком объекты, или еще что-то придумать. Например после сохранения файла открыть его тем же екселем и сохранить, дописать пару строк после записи файла.
---
Что за проверка на сайте и на каком сайте? Может лучше выгрузить в csv, xml, json?
---
Проверка на вайлдберрисе при загрузке заказов, там вроде только xlsx нормально прогружается.
---
Если сохраняешь как табличный документ - сохранить, то 1С делает файлы ексель кривовато. Собственно все, кроме самого екселя, делает их кривовато. Да и ексель тоже зависит от версии.
Тут надо или екселем сохранять через ком объекты, или еще что-то придумать. Например после сохранения файла открыть его тем же екселем и сохранить, дописать пару строк после записи файла.
---
ксель то
да, спасибо, чуть ранее так и сделал, и тогда появились нужные свойства в файле. Иначе как я понимаю никак?
---
При сохранении "Из 1С" на выбор есть два варианта. Сохранить как xls (Старый формат), и как xlsx (новый формат) (если сохраняете через Файл, сохранить)

Технически, формат xlsx это архив с кучей xml определенной структуры, по стандарту openXML, для открытия таких файлов и их парсинга сам excel не нужен

Вы, видимо сохраняете в старом формате, который роботы парсить не умеют или не хотят
---
ненене, если грузить через xls то даже после пересохранения сайт ничего не видит, я и говорю что только xlsx воспринимает
---
Я вам и рассказал причину, парсят содержимое без всякого экселя
Бывает такое что обработка подгружает доки с одинаковыми номерами. Нужно сделать так, что если есть 2 строки в которых номер документа совпадает они выделялись. Загрузка происходит по кнопке. Значит сделать нужно в конце после того как загрузка прошла перебрать строки искать одинаковые номера. А вот как правильно реализовать не могу додумать) Может сможет кто подсказать?
---
Колонка с реквизитом "НадоКрасить" и УсловноеОформление формы спасут отца русской демократии...
---
Создал внешнюю обработку для теста где есть ТЧ с НомерСтроки, НомерДокумента, Номенклатура.

Реквизит1 - ТЧ

```1c
    Для Каждого Строка ИЗ Реквизит1 Цикл
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номер", Строка.Номер);
    НайденныеСтроки = Реквизит1.НайтиСтроки(ПараметрыОтбора);
    Если НайденныеСтроки.Количество() > 1 Тогда
    Для Каждого СтрМасс ИЗ НайденныеСтроки Цикл
    //Тут я думаю нужно как-то через Элементы найти строку в ТЧ и покрасить ячейку с номером / строку
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```
---
Показывайте
---
что показывать?
---
Проблема в покраске Строки / ячейки?
---
Да
---
Колонка с реквизитом "НадоКрасить" и УсловноеОформление формы спасут отца русской демократии...
---
Спасибо!
На управляемой форме есть группа с видом "Страницы". Страницы расположены горизонтально, их очень много, поэтому их наименования становятся нечитаемы.
Как сделать так, чтобы страницы располагались также горизонтально, но в несколько рядов, чтобы их наименования стали читаемыми.
---
Никак. Кроме как расположить их сбоку.
---
может расположить гиперссылками названия вкладок на форме?
---
Никак. Кроме как расположить их сбоку.
---
прошу прощения, $m случайно отдал другому участнику
---
Еще как вариант, спрятать отображение закладок, а навигацию по страницам сделать через тумблер.
---
, (4) тут, видимо, легче для закладок указать вариант отображения - слева. Т.к. закладки создаются программно, их количество заранее неизвестно.
Спасибо за советы, коллеги!
---
указать вариант отображения - слева Была похожая задача. Пробовал этот вариант – не понравилось, слишком много места закладки занимали на форме. В итоге выбрал поле ввода со списком выбора.