arefaste/1C_Forums huggingface dataset:
Добрый день.
Есть макет отчета для типовой конфигурации Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК, сделанный по заданному шаблону

Как сделать в отчете статичную колонку с номерами лицевых счетов, которые будут повторяться №-ное количество раз (в зависимости от количества услуг, за которые были произведены начисления в заданном периоде)
Например если услуг было в этом месяце 5, а всего в справочнике разных лицевых счетов 10, то итого записей должно быть ВСЕГДА в этом отчете 50, вне зависимости от того были ли по ним обороты.

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

Форму отчета делал через макет.
---
так наверное не колонку надо статичную делать, а в самом запросе собрать все лицевые счета и уже к ним присоединить услуги с суммой 0 - это и будут ваши "статичные колонки". А вторым запросом выдернуть начисления. Группируем по лицевому счету и насчилению - и все суммы сложатся. Т.е. там где 0 так и будет 0, а где были начисления к 0 они прибавятся.
---
так наверное не колонку надо статичную делать, а в самом запросе собрать все лицевые счета и уже к ним присоединить услуги с суммой 0 - это и будут ваши "статичные колонки". А вторым запросом выдернуть начисления. Группируем по лицевому счету и насчилению - и все суммы сложатся. Т.е. там где 0 так и будет 0, а где были начисления к 0 они прибавятся.
---
спасибо что откликнулись. просто я стажер и тут моё дилетантство сыграло ключевую роль. два дня не понимал в чем дело, ИТС по СКД перечитал, а там просто в детальных записях был добавлен лишний отбор, который скрывал незаполненные поля по тарифу. стыдно.
Добрый день. Помогите пожалуйста решить.
В подписке на событие при записи справочников

```1c
    Узел = ПланыОбмена.прОбмен.НайтиПоКоду("001");
    ПланыОбмена.ЗарегистрироватьИзменения(Узел, Источник);
```

При записи типовых справочников все норм, когда записываю добавленный справочник то ошибка
Ошибка при вызове метода контекста (ЗарегистрироватьИзменения)
Недопустимое значение параметра (параметр номер '2')

В Параметре Источник СправочникОбъект
Добавленные справочники добавлены в состав плана обмена. Самое интересное, что на тестовой базе это работало.
---
На другой базе то же самое. План обмена копировал из одной базы в другую в режиме конфигуратора.
Проблема решается отключением всех объектов из состава обмена и включением их обратно.
---
Проверьте, точно ли справочник добавлен в план обмена, может на тестовой добавили а на рабочей забыли?
---
На другой базе то же самое. План обмена копировал из одной базы в другую в режиме конфигуратора.
Проблема решается отключением всех объектов из состава обмена и включением их обратно.
РИБ делалась путем копирования центральной базы.
У пользователей не работают RLS по документам, организациям.
Раньше как-то решалось через добавление пользователю админских прав, потом их отключения.
Теперь вообще перестало работать - в упор не видит нужных прав.
Список документов (заказ покупателей) и организаций пуст.
В центре под этими же правами все ок.
Как быть, что можно попробовать?
---
Решилось так: запустить программу с параметром командной строки 1С: Предприятия 8
"/С ЗапуститьОбновлениеИнформационнойБазы"
Т.к. никто не ответил, забираю деньги себе.
---
Сообщение было скрыто модератором.
---
Решилось так: запустить программу с параметром командной строки 1С: Предприятия 8
"/С ЗапуститьОбновлениеИнформационнойБазы"
Т.к. никто не ответил, забираю деньги себе.
Допустим, есть некий *.xls, размером 10Гб.
Необходимо взять его с клиентской машины и прочитать в ТабДок на сервере.

Для помещения во временное хранилище, так понимаю, используем метод НачатьПомещениеФайлаНаСервер()?
это позволит избежать формирования ДвоичныеДанные на клиенте в ОЗУ и файл сразу поместится во временное хранилище.

Что необходимо сделать на стороне сервера, чтобы не формировать ДвоичныеДанные из адреса файла во временном хранилище, чтобы сформировать файловый поток для скармливания его ТабДок.Почитать(ФайловыйПоток)?

p.s. это чисто академический случай для понимания общих подходов при работе с большими файлами с помощью 1С в случае, когда файл не может быть прочитан последовательно, как *.XML, например.
---
```1c
    Поток = ПолучитьИзВременногоХранилища(Адрес).ОткрытьПотокДляЧтения();
    ТабДок.Прочитать(Поток);
    Поток.Закрыть();
```

У меня примерно так сделано
---
При чтении табличного документа из потока допустимы следующие форматы: MXL, ODS.
---
```1c
    Поток = ПолучитьИзВременногоХранилища(Адрес).ОткрытьПотокДляЧтения();
    ТабДок.Прочитать(Поток);
    Поток.Закрыть();
```

У меня примерно так сделано
---
в этом случае появляется ошибка

Ошибка при вызове метода контекста (Прочитать)
{ВнешняяОбработка.<МояВнешняяОбработка>.Форма.Форма.Форма(72)}:ТабДок.Прочитать(ФайловыйПоток);//, СпособЧтенияЗначенийТабличногоДокумента.Значение);

по причине:
Ошибка при выполнении файловой операции
---
При чтении табличного документа из потока допустимы следующие форматы: MXL, ODS.
Здравствуйте. В языке запросов 1с есть аналоги для LAG или LEAD? Или что нужно использовать, чтобы получить такой же результат, как при вызове этих функций?
---
ВычислитьВыражение("Поле", , , "Следующая", "Следующая") - LEAD
ВычислитьВыражение("Поле", , , "Предыдущая", "Предыдущая") - LAG
---
Нет, нету. А зачем это может понадобится. Если для нарастающего итога, то это будет отчень геморно запросом. Проще пост- обработкой
---
Не для нарастающего итога, просто для сравнения. Снизу добавил то, что мне удалось найти. Вроде бы работает аналогично тому, что используется в TSQL.
---
ВычислитьВыражение("Поле", , , "Следующая", "Следующая") - LEAD
ВычислитьВыражение("Поле", , , "Предыдущая", "Предыдущая") - LAG
---
Ну вы бы писали сразу, что вам для СКД надо, а не для языка запросов
Есть расширение, в него добавлена РТУ
в модуле надо дозаполнить
написана процедура &После("ОбработкаЗаполнения")
(подцепленна именно к предопределенной)
не попадаю в нее отладкой.

При печати в модуле менеджера все доработки работают, все что надо перехватывается..
---
РЕШЕНИЕ:
Когда создавала свою обработку заполнения через процедуры и функции - там список типовых - выбрала обработка заполнения, и после - процедура создалась сама
выглядела как

```1c
    Документ_РеализацияТоваровУслугОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
```

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

Если я правильно вас понял, то процедура должна срабатывать после действия. Я думаю что программа считает что раз нет вызова процедуры, то и выполнять не надо.

Или вы ее написали не в том модуле.

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

Если такая процедура уже существует в основной конфигурации, надо было выделить название этой процедуры и по ПКМ добавить в расширение.

Попробуйте так сделать. А ту, что есть, закомментируйте.
---
РЕШЕНИЕ:
Когда создавала свою обработку заполнения через процедуры и функции - там список типовых - выбрала обработка заполнения, и после - процедура создалась сама
выглядела как

```1c
    Документ_РеализацияТоваровУслугОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
```

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

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

    ЗапасыРезерв = Элементы.Запасы.ПодчиненныеЭлементы.ЗапасыРезерв;

    ЭлементОформленияГолубой = УсловноеОформление.Элементы.Добавить();
    ЭлементОформленияГолубой.Использование = Истина;
    ЭлементОформленияГолубой.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Голубой);

    ЭлементУсловияГолубой = ЭлементОформленияГолубой.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.ЗапасыРезерв");
    ЭлементУсловияГолубой.ПравоеЗначение = 0;
    ЭлементУсловияГолубой.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементУсловияГолубой.Использование = Истина;

    ОформляемоеПоле = ЭлементОформленияГолубой.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ЗапасыРезерв");

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

    &НаКлиенте
    Процедура Команда1После(Команда)
    Команда1ПослеНаСервере();
    КонецПроцедуры
```

Если убираю участок кода с отбором, то все работает, но мне нужен отбор, что бы закрашивать ячейки только с со значением больше 0
---
у этого документа есть табличная часть "Запасы", и колонка "Резерв",
(1) ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.ЗапасыРезерв");
Так как называется реквизит табличной части? Наверно в данном месте кода должно быть: "Объект.Запасы.Резерв"
---
у этого документа есть табличная часть "Запасы", и колонка "Резерв",
(1) ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.ЗапасыРезерв");
Так как называется реквизит табличной части? Наверно в данном месте кода должно быть: "Объект.Запасы.Резерв"
---
Спасибо, исправил, заработало
Не могу разобраться, что необходимо сделать с форматом числового реквизита, чтобы не выводились нули.
Как нужно:
Пример 1.
123,512 - выводит 123,512

Пример 2.
123,000 - выводит 123

т.е. округлять и убирать нули после запятой. Возможно вариант округлять в запросе перед выводом, но все же как это сделать на форме?
---
Если на форме реквизит с определенной разрядностью - он всегда будет отображать заложенную разрядность.Вариант - сделать текстовое поле, которое будет оформляться на основании числового.
---
ФорматРедактирования в свойствах поля вам может помочь.
---
Ничего не понятно: куда выводить, откуда выводить...
---
в моем случае Дерево на форме и там есть числовой реквизит, а так я думаю не так важно, просто в любой реквизит на форме, настроить вывод числового значения
---
Если на форме реквизит с определенной разрядностью - он всегда будет отображать заложенную разрядность.Вариант - сделать текстовое поле, которое будет оформляться на основании числового.
---
ФорматРедактирования в свойствах поля вам может помочь.
Здравствуйте, есть печатная форма "Транспортная накладная" и нужно вывести пункт "Номенклатура". В документе "Рейс" есть табличная часть "Заказы" и в ней реквизит "Номенклатура", как не пытался вывести не получается и в самой функции в выборке и отдельной, не появляется если даже ошибок не выдает. Обработкой проверял ничего нет, просто пусто. Подскажите как достать "Номенклатуру"?
---
Получить таблицу значений, перебрать ее и во время перебора записать наименование номенклатуры в переменную, а уже из переменной заполнять параметр печатной формы
---
вы ее уже достали судя по всему) отладки нет?
---
достать то достал, но в печатной форме она не отображается
---
отладки нет?

Пустое значение
---
отладки нет?
---
Точно пустое значение? Попробуй в отладке в поле "Выражение" допиши .Выгрузить(), Что бы получилось Номенклатура.Выгрузить(), нажми Enter выдели строку результата снизу и нажми F2
---
Номенклатура.Выгрузить()
---
Это точно поле выражение?)
На картинке нарисовал куда писать
---
Да действительно получил значения
---
Как теперь заполнить этими значения печатную форму?
---
Получить таблицу значений, перебрать ее и во время перебора записать наименование номенклатуры в переменную, а уже из переменной заполнять параметр печатной формы
---
.Выгрузить()

Может как-то не правильно получаю эту номенклатуру. Может надо через таблицу значений получить значения
Ситуация:
Есть Головная организация и куча филиалов. Заказ поставщику могут отправить с любого КПП (голова/филиал), поставщик сделат доки как нудно, но оплату мы произвести можем с другого КПП (голова/филиал), и вот возникает вопрос как в УТ произвести взаимозачет этой задолженности?
Сразу оговорюсь, у каждого филиала свой РасчетныйСчет...

Конфа: УТ 11.5.7.351

Знаю про галку Допускаются взаиморасчеты через головную организацию, но в нашем случае, могут оплатить и с филиала, если правильно понимаю, должным образом работать не будет.

Может кто-то сталкивался, подскажите как решили вопрос?
---
только речь не про ВПФ а документы которыми я могу это все оформить в программе.
Уже разобрался, взаимозачетом банальным на стороне УТ делаем зачет оплаты, а в бух выгружается как корректировка
---
Для решения данной задачи можно использовать функциональность УТ по взаимозачету дебиторской и кредиторской задолженности.

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

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

2 Создать документ "Приходный кассовый ордер" (или "Банковский платежный ордер"), указав в нем нужный КПП плательщика.

3 Связать оба документа между собой с помощью взаимозачета дебиторской и кредиторской задолженности. Для этого воспользуйтесь функцией "Взаимозачет" в документе "Поступление товаров и услуг" (или "Расходная накладная") и выберите в качестве объекта взаимозачета созданный документ "Приходный кассовый ордер" (или "Банковский платежный ордер").

4 После взаимозачета документов у вас будет возможность провести их и списать соответствующие суммы с расчетных счетов.

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

Надеюсь, это поможет вам решить задачу взаимозачета задолженности между различными КПП.
---
только речь не про ВПФ а документы которыми я могу это все оформить в программе.
Уже разобрался, взаимозачетом банальным на стороне УТ делаем зачет оплаты, а в бух выгружается как корректировка
Нужно получить название организации из справочника "Организации" без использования запроса.
---
Справочники.Организации.ОрганизацияПоУмолчанию().НаименованиеПолное
---
Справочники.Организации.НайтиПоКоду("000000001").Наименование
---
падает в ошибку
---
Вы прям так и вставили, не стали на код своей организации менять?
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Вангую, вы Наименование пытаетесь прям на клиенте получить?
---
Сообщение было скрыто модератором.
---
берем реквизит формы/объекта, выводим на форму, в нем выбираем нужную организацию и пытаемся сделать на клиенте

Объект.Организация.Наименование/Организация.Наименование, разве не?

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

Имеются две конфигурации на базе БП 3.0. Необходимо перенести ряд справочников из одной конфигурации в другую. Много чего добавлено, но справочники Контрагенты и Физические лица, а также регистр сведений Документы физических лиц стандартные.

По историческим причинам получилось так, что в конфигурации-источнике очень много одинаковых контрагентов, как следствие, одинаковых физлиц и паспортных данных. Например, есть три контрагента Иванов Иван Иванович, соответственно, есть три физлица Иванов Иван Иванович и три записи в регистре документов с одинаковыми данными и периодами.

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

Для наших целей период не влияет ни на что, дата выдачи документа на текущий момент равна периоду, она и участвует везде, где нужно.
Можно ли как-то программно изменить период в регистре абсолютно случайным образом? Нам все равно, какая дата там будет стоять, хоть 0001 первый год. Главное, чтобы не было одинакового паспорта в одном периоде
Или изменить проверку на уникальность... чтобы не было такого "Запись с такими ключевыми полями существует..." В периоде в стандартных реквизитах я такого не нашла, только контроль заполнения.
---
Много написано, но не понятен сам вопрос. Можно ли изменить период случайным образом? Можно.

```1c
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    СЧ = ГСЧ.СлучайноеЧисло(0,(НачалоДня(ТекущаяДата())-'20200101')/(24*60*60));
    СлучайнаяДата = '20200101'+СЧ*24*60*60;
```
---
Много написано, но не понятен сам вопрос. Можно ли изменить период случайным образом? Можно.

```1c
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    СЧ = ГСЧ.СлучайноеЧисло(0,(НачалоДня(ТекущаяДата())-'20200101')/(24*60*60));
    СлучайнаяДата = '20200101'+СЧ*24*60*60;
```
---
да, вопрос был именно в этом
Спасибо
Коллеги, добрый день!
Делаю обработку, которая массово создает и проводит документы.
Перед попыткой записи делаю ПроверитьЗаполнение() и там могут возникать ошибки. Эти ошибки хочется вывести пользователю на экран и еще записать в свой регистр.
Есть функция ПолучитьСообщенияПользователю(<УдалятьПолученные>), которая возвращает массив таких ошибок.
Но если в параметр УдалятьПолученные передать Истина, то сообщению не выводятся пользователю на клиенте.
Если передать Ложь, то сообщения копятся и после первого документа, функция будет в том числе возвращать ошибки относящиеся к предыдущим документам.

То есть хочется иметь процедуру типа ВывестиНакопленныеСообщениюПользователю, которая работала бы на сервере, и которую я бы вызывал перед обработкой каждого документа. Но я такой не нашел. Хотя где-то в типовом коде что-то подобное видел, но не могу найти.

Так вот вопрос - кто как пользуется ПолучитьСообщенияПользователю?
Я пока ничего лучше не нашел как после обработки каждого документа возвращаться на клиента - но за такое надо как минимум бить по рукам)))
---
Перед проверкой заполнения смотреть сколько элементов в массив, после проверки забирать новые элементы в свой регистр
---
Сообщение было скрыто модератором.
---
1. Как это - принудительно с сервера возвращаться на клиента? Научите?

Примерно так)

```1c
    &НаСервере
    Процедура ПровестиДокумент(Документ)
    ДокОбъект = Документ.ПолучитьОбъект();
    Если ДокОбъект.ПроверитьЗаполнение() Тогда
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура Команда1()
    Для Каждого Стр Из Объект.Данные Цикл
    ПровестиДокумент(Стр.Документ);
    КонецЦикла;
    КонецПроцедуры
```
---
Сообщение было скрыто модератором.
---
вы хоть раз пользовались функцией ПолучитьСообщенияПользователю при проведении массива документов?
Если нет, то вряд ли вы мне поможете в этом вопросе
---
А какое значение имеет когда пользователь получит сообщение: сразу после проведение отдельного документа или по результату проведения всего массива? На процедуру проведения он повлиять все равно не может.
---
откуда взялось слово "принудительное" во фразе "возврат с сервера на клиент"
Я вроде изначально писал вот что

(1) после обработки каждого документа возвращаться на клиента

и в (3) что это если не массовое перепроведение документов?
И почему вы взяли, что фоновые задания тут имеют какое-то место?
---
Перед проверкой заполнения смотреть сколько элементов в массив, после проверки забирать новые элементы в свой регистр
---
И правда - все гениальное просто