Ошибка 2147221164(0x80040154): Класс не зарегистрирован

Если при синхронизации баз 1С (например, обмен между УТ и БП, ЗУП или БП) возникла ошибка

Не удалось подключится к другой программе: -2147221164(0x80040154): Класс не зарегистрирован

возможно у вас не зарегистрирован COM-объект. Если у вас 64-битный сервер, а клиент 32-битный, выполните следующие действия:

  1. Откройте консоль Панель управления -> Администрирование -> Службы компонентов, далее там ищем Службы компонентов -> Компьютеры -> Мой компьютер. Правый клик по пункту Приложения COM+, Создать -> Приложение.
  2. В окне Установка или создание нового приложения выбираем Создать новое приложение. Вводим понятное имя для нового приложения, например, , способ активации — Серверное приложение.
  3. В качестве учетной записи для запуска приложения выбираем Указанный пользователь и через кнопку Обзор находим учетку, под которой запускается сервер 1С. По-умолчанию это USR1CV8. После этого Далее, Далее, Готово.
  4. В ветке только что созданного приложения открываем узел Роли и в нём роль CreatorOwner. Правый клик по пункту Пользователи, Создать -> Пользователь. Здесь выбираем учетку, под которой запускается сервер 1С (USR1CV8).
  5. В ветке созданного приложения переходим на узел Компоненты. Правый клик, Создать -> Компонент. Далее.
  6. Выбираем Установка новых компонентов, и в появившемся окне выбираем нужную DLL-ку (C :\ Program Files (x86)\1cv8\bin\comcntr.dll). Завершаем создание компонента.
  7. Открываем свойства только что созданного компонента (V81.COMConnector.1), переходим на вкладку Безопасность, в списке Явно установленные для выделенных объектов роли устанавливаем флажок напротив роли CreatorOwner.

Использование JSON в 1С

Для чтения объекта JSON самое простое что можно сделать — превратить его в Структуру:

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Для записи JSON, например, списка

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоМассива();
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
          Запись.ЗаписатьНачалоОбъекта();
          Запись.ЗаписатьИмяСвойства(«id»);

          Запись.ЗаписатьЗначение( Выборка.Номенклатура.УникальныйИдентификатор());
          Запись.ЗаписатьИмяСвойства(«name»);
          Запись.ЗаписатьЗначение(Выборка.Наименование);
          Запись.ЗаписатьКонецОбъекта();
КонецЦикла;
Запись.ЗаписатьКонецМассива();
Результат = Запись.Закрыть();

результат в виде строки будет в переменной Результат.

Ошибка в 1С УТ11: Ошибочное значение параметра «Склад»

При проведении документа «Поступление товаров и услуг» возникает ошибка

Ошибочное значение парамера «Склад»

Самое забавное, что в тексте ошибки опечатка. И разработчики 1С могут ошибаться 😉

Но перейдем к сути, ошибка может возникать из-за того, что у номенклатуры не заполнено поле Тип номенклатуры или в документе выбраны группы, а не элементы справочника Номенклатура. Да, так бывает, когда содержимое документа загружается универсальной обработкой непонятно откуда взятой пользователем.

Проверяйте содержимое табличной части Товары.

СообщениеПользователю для табличной части

Когда делается проверка заполнения табличной части, например, документа, сообщать пользователю о не заполненных данных через функцию Сообщить() не правильно. Ведь пользователю придется глазами искать строку, где нет данных. Лучше всего для этого использовать объект СообщениеПользователю.

Пример использование этого объекта:

Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = «Данные по продажам не заполнены!»;
Сообщение.Поле = «Объект.Товары[10].Продажи»;
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();

в типовых конфигурациях, например, 1С УТ 11, можно использовать упрощенный вызов из общего модуля

Для каждого Эл Из Объект.Товары Цикл
        Если Эл.Продажи = 0 И Эл.Остаток = 0 Тогда
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю(«В строке » + Эл.НомерСтроки + » нет данных ни по продажам, ни по остаткам!»,, ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(«Объект.Товары», Эл.НомерСтроки, «Продажи»),, Отказ);
        КонецЕсли;
КонецЦикла;

Связи параметров выбора или как связать поля ввода на форме

Если на форме два поля, один из которых подчинён другому по структуре данных, то часто бывает необходимо ограничить ввод данных по владельцу. Например, есть поле Партнёр и Вид цены поставщика.

Для того, чтобы в поле Вид цены поставщика автоматически выбирались только данные выбранного Партнера, необходимо в свойстве СвязиПараметровВыбора поля Вид цены поставщика сделать настройку Отбор.Владелец(Объект.Партнер).

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

Связи параметров выбора

Связи параметров выбора

Теперь необходимо в колонке Имя вместо Партнер ввести текст Отбор.Владелец. Задача выполнена!