<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://1cpp.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ</id>
	<title>FAQ - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://1cpp.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ"/>
	<link rel="alternate" type="text/html" href="https://1cpp.ru/index.php?title=FAQ&amp;action=history"/>
	<updated>2026-05-02T09:00:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.11</generator>
	<entry>
		<id>https://1cpp.ru/index.php?title=FAQ&amp;diff=307&amp;oldid=prev</id>
		<title>FedorEzeev: /* Прочие вопросы про классы */</title>
		<link rel="alternate" type="text/html" href="https://1cpp.ru/index.php?title=FAQ&amp;diff=307&amp;oldid=prev"/>
		<updated>2007-11-01T07:59:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Прочие вопросы про классы&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Вопросы новичков=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
{{Q}}Вообще ничего не понимаю. Как начать, и если можно - по шагам.&lt;br /&gt;
{{A}}Сходи в раздел [[Documentation]], там есть хороший раздел, посвященный разным QuickStart&amp;#039;ам.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Где взять?=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
{{Q}}Где взять самую последнюю версию 1С++?&lt;br /&gt;
{{A}}[[Download]]&lt;br /&gt;
&lt;br /&gt;
{{Q}}Где взять не последнюю, а другую версию 1С++?&lt;br /&gt;
{{A}}[http://www.1cpp.ru/files/ В архиве].&lt;br /&gt;
&lt;br /&gt;
{{Q}}Где взять документацию к компоненте?&lt;br /&gt;
{{A}}[[Documentation]]&lt;br /&gt;
&lt;br /&gt;
{{Q}}А где взять визуальный редактор классов к 1С++?&lt;br /&gt;
{{A}}Visual 1c++ и многое другое можно взять у [http://openconf.1cpp.ru Александра Орефкова].&lt;br /&gt;
&lt;br /&gt;
{{Q}}А где можно посмотреть на реальные примеры использования 1С++?&lt;br /&gt;
{{A}}На том же [http://1c.proclub.ru/ Клубе профессионалов] есть [http://1c.proclub.ru/modules/mydownloads/viewcat.php?cid=131 репозитарий 1С++], да и вообще, если в разных разделах поискать по строке 1С++ - можно найти много интересного.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Ссылки на другие примеры всячески приветствуются&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{Q}}Документация и примеры - это конечно, хорошо, а где можно с людьми пообщаться?&lt;br /&gt;
{{A}}На [http://www.1cpp.ru/forum/YaBB.pl официальном форуме] компоненты.&lt;br /&gt;
Раньше форум жил на [http://itland.ru/forum/index.php?showforum=8 itland&amp;#039;е], теперь там архив.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Проблемы при загрузке компоненты=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
{{Q}}При выполнении отчета пишет мне вот такое: &amp;quot;catch (_com_error&amp;amp; er)&amp;quot;.&lt;br /&gt;
{{A}}Это msblast. Читать: [http://www.viruslist.com/viruslist.html?id=2727712 что это такое] и [http://www.microsoft.com/technet/security/bulletin/MS03-026.mspx как от этого избавиться].&lt;br /&gt;
&lt;br /&gt;
{{Q}}Установил компоненту 1С++, прописал в глобальник&lt;br /&gt;
&amp;lt;code&amp;gt;ЗагрузитьВнешнююКомпоненту(&amp;quot;1cpp.dll&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
, а у меня теперь 1С валится, говорит, что &amp;quot;память не может быть read&amp;quot;. ОС - Windows NT/2000/XP. Под &amp;#039;95/&amp;#039;98/ME все нормально.&lt;br /&gt;
{{A}}Во время первого запуска компонента регистрируется в реестре. Этот процесс должен происходить с правами администратора локальной машины.&lt;br /&gt;
&lt;br /&gt;
{{Q}}У меня 100 компьютеров в сети - я не могу на каждой зайти администратором. Хочу знать, что конкретно 1С++ пишет в реестр, а дальше я как-нибудь разберусь. &lt;br /&gt;
{{A}}Эта тема обсуждалась на форуме: http://itland.ru/forum/index.php?showtopic=3627.&lt;br /&gt;
&lt;br /&gt;
{{Q}}При запуске 1С-Предприятия выдается следующее сообщение: &amp;quot;Ошибка при создании объекта из компоненты \\Адрес_сервера\Директория_БД\1CPP.dll (отсутствует интерфейс IInitDone)&amp;quot;&lt;br /&gt;
{{A}}http://www.1cpp.ru/forum/YaBB.pl?num=1148543571 - там очень подробно рассказано из-за чего эта проблема возникает и предложено несколько способов ее решения.&lt;br /&gt;
&lt;br /&gt;
{{Q}}При запуске 1С-Предприятия выдается следующее сообщение: &amp;quot;Ошибка при создании объекта из компоненты \\Адрес_сервера\Директория_БД\1CPP.dll (отсутствует CLSID)&amp;quot;&lt;br /&gt;
{{A}}Опять же: http://www.1cpp.ru/forum/YaBB.pl?num=1148543571&lt;br /&gt;
&lt;br /&gt;
{{Q}}Я в своей конфигурации использую еще несколько внешних компонент (rainbow, vtools). И боюсь, что возникнет конфликт между именами объектов этих ВК и 1С++. Как быть?&lt;br /&gt;
{{A}}Если подгружаются несколько ВК, то 1C++ должна грузиться первой. Вообще, смеси типа Rainbow, 1C++, TurboBL - являются довольно взрывоопасными, поскольку работают через сходные механизмы подмены внутренних вызовов 1С. Старайтесь использовать только 1С++ - в ней, как правило, сосредоточен весь функционал вышеупомянутых компонент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Классы=&lt;br /&gt;
==defcls.prm==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
{{Q}}Создал defcls.prm, написал там одну строку, а 1С - хоть бы хны.&lt;br /&gt;
{{A}}В &amp;lt;span title=&amp;quot;В марте 2006 года этой ошибки уже не было&amp;quot; style=&amp;quot;border-bottom:1px dotted&amp;quot;&amp;gt;старых версиях 1С++&amp;lt;/span&amp;gt; первая строка в каждом из Ваших defcls.prm должна была быть пустой. Поди догадайся.&lt;br /&gt;
&lt;br /&gt;
{{Q}}Не помогло.&lt;br /&gt;
{{A}}Если вы работаете в FAR менеджере - то обратите внимание на раскладку, в которой создается Ваш defcls.prm. Она должна быть cp1251 (Win).&lt;br /&gt;
&lt;br /&gt;
{{Q}}Чем-нибудь отличается void от undefine? В каких случаях кого использовать?&lt;br /&gt;
{{A}} Примерно так:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Void&amp;#039;&amp;#039;&amp;#039; - обозначение того, что метод не возвращает значений вообще. В терминологии 1С - Процедура, а не Функция.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Undefine&amp;#039;&amp;#039;&amp;#039; используется для типизации тех переменных/методов/параметров, для которых тип не определен / может быть любым.&lt;br /&gt;
В общем - каждому овощу свой фрукт.&lt;br /&gt;
&lt;br /&gt;
{{Q}}Что-то у меня не получается создать метод со значением по умолчанию.&lt;br /&gt;
{{A}}Как правило, именно с попытки завести метод со значениями по умолчанию начинается реальное использование файлов defcls.prm. И если что-то сразу не получается, то это значит, что нужно внимательнее отнестись к синтаксису этого файла. Известных трудностей - три.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Когда метод со значением по умолчанию описывается в defcls.prm, то нужно указывать типы значений не только параметров, но и возвращаемого значения самого метода&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &amp;#039;&amp;#039;&amp;#039;Число&amp;#039;&amp;#039;&amp;#039; TestMethod( Число Параметр_Ноль = 0 );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Если метод является процедурой (не возвращает никаких значений), то нужно указывать тип &amp;quot;возвращаемого&amp;quot; значения как &amp;#039;void&amp;#039; (обязательно с маленькой буквы).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;#039;&amp;#039;&amp;#039;void&amp;#039;&amp;#039;&amp;#039; TestMethod( Число Параметр_Ноль = 0 );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Не забывайте ставить точки с запятыми после строк описаний методов.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Наследование==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
{{Q}}Объясните, плиз, на пальцах, как реализовать наследование. Есть справочник или документ определенного вида, необходимо расширить функционал, как унаследовать свойства и методы?&lt;br /&gt;
{{A}}В defcls.prm пишешь: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;класс Документ_Счет = Документ_Счет.ert : Документ.Счет&lt;br /&gt;
{};&amp;lt;/source&amp;gt;&lt;br /&gt;
В Документ_Счет.ert реализуешь нужные тебе дополнительные методы, при этом для ссылки на объект документа используешь конструкцию Сам(Контекст). Например:&lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;Функция Сам(Конт)&lt;br /&gt;
    Возврат Конт;&lt;br /&gt;
КонецФункции&lt;br /&gt;
&lt;br /&gt;
Функция Оплачен() Экспорт&lt;br /&gt;
    Д=СоздатьОбъект(&amp;quot;Документ&amp;quot;);&lt;br /&gt;
    Д.ВыбратьПодчиненныеДокументы(,,Сам(Контекст).ТекущийДокумент());&lt;br /&gt;
    Пока Д.ПолучитьДокумент()=1 Цикл&lt;br /&gt;
        Если Д.Вид()=&amp;quot;Выписка&amp;quot; Тогда&lt;br /&gt;
            Возврат 1;&lt;br /&gt;
        КонецЕсли;&lt;br /&gt;
    КонецЦикла;&lt;br /&gt;
    Возврат 0;&lt;br /&gt;
КонецФункции&amp;lt;/source&amp;gt;&lt;br /&gt;
И в коде клиента тогда можно написать: &lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;Счет=СоздатьОбъект(&amp;quot;Документ_Счет&amp;quot;);&lt;br /&gt;
Счет.ВыбратьДокументы(); //Используешь унаследованный метод&lt;br /&gt;
Пока Счет.ПолучитьДокумент()=1 Цикл&lt;br /&gt;
    Если Счет.Оплачен()=0 Тогда //Используешь свой метод&lt;br /&gt;
        Сообщить(&amp;quot;Счет &amp;quot;+Счет.ТекущийДокумент()+&amp;quot; не оплачен.&amp;quot;);&lt;br /&gt;
    КонецЕсли;&lt;br /&gt;
КонецЦикла;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Q}}Есть класс, который является наследником от класса 1С &amp;quot;ТаблицаЗначений&amp;quot; (Назовем его &amp;quot;Общие.ТаблицаЗначений&amp;quot;).&lt;br /&gt;
Пытаемся его использовать в следующих конструкциях. &lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
ТЗ = СоздатьОбъект(&amp;quot;Общие.ТаблицаЗначений&amp;quot;);&lt;br /&gt;
Запрос.Выгрузить(ТЗ);&lt;br /&gt;
Сообщить(ТипЗначенияСтр(ТЗ)); //&amp;quot;ТаблицаЗначений&amp;quot;, вместо ожидаемого &amp;quot;Общие.ТаблицаЗначений&amp;quot;&lt;br /&gt;
ТЗ = СоздатьОбъект(&amp;quot;Общие.ТаблицаЗначений&amp;quot;);&lt;br /&gt;
ТЗ2 = СоздатьОбъект(&amp;quot;ТаблицаЗначений&amp;quot;);&lt;br /&gt;
Запрос.Выгрузить(ТЗ2);&lt;br /&gt;
Сообщить(ТЗ2.КоличествоСтрок()); //их больше нуля&lt;br /&gt;
ТЗ2.Выгрузить(ТЗ);&lt;br /&gt;
Сообщить(ТЗ.КоличествоСтрок()); // ноль&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{A}} Метод Выгрузить() у запроса (и аналогичный у таблицы значений), предполагает, что тип передаваемого в него параметра - ТаблицаЗначений. Тот факт, что наш класс является наследником ТЗ - ничего не значит. Это класс другого типа. Нужно писать вот так: &lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
ТЗ = СоздатьОбъект(&amp;quot;Общие.ТаблицаЗначений&amp;quot;);&lt;br /&gt;
Запрос.Выгрузить(ТЗ.ПолучитьБазовыйКласс());&lt;br /&gt;
Сообщить(ТипЗначенияСтр(ТЗ)); // &amp;quot;Общие.ТаблицаЗначений&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Примечание Если &amp;quot;Общие.ТаблицаЗначений&amp;quot; наследует от нескольких классов, то лучше указать, какой именно базовый класс мы хотим получить: &lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
ТЗ = СоздатьОбъект(&amp;quot;Общие.ТаблицаЗначений&amp;quot;);&lt;br /&gt;
Запрос.Выгрузить(ТЗ.ПолучитьБазовыйКласс(&amp;quot;ТаблицаЗначений&amp;quot;));&lt;br /&gt;
Сообщить(ТипЗначенияСтр(ТЗ));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Q}}А если у меня &lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;класс Наследование = classes\nasled.cls:Справочник.Номенклатура, Документ.Заявка {};&amp;lt;/source&amp;gt;&lt;br /&gt;
Каким макаром наследуются одинаковые свойства и медоды? Например, Вид()? &lt;br /&gt;
{{A}}Если не переопределить Вид() в своем классе, то вызываться будет Вид() для Справочник.Номенклатура, потому как он первый в списке классов-родителей. Можешь переопределить Вид() в своем классе, и возвращай что хочешь, например &amp;quot;Заявка_Номенклатура&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прочие вопросы про классы==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
{{Q}}Насколько полна объектная модель 1С++?&lt;br /&gt;
{{A}}Основные принципы (инкапсуляция, наследование, полиморфизм) - соблюдены. Есть ряд ограничений:&lt;br /&gt;
* Нет перегрузки операторов и функций&lt;br /&gt;
* Конструктор не умеет принимать параметры.&lt;br /&gt;
* Нет возможности создать protected поле или метод.&lt;br /&gt;
 Объектная модель 1С++ очень похожа на модель, реализованную в [http://www.python.org python].&lt;br /&gt;
&lt;br /&gt;
{{Q}}Подсоединяю чужой класс, а мне говорит &amp;quot;Форма&amp;lt;&amp;lt;?&amp;gt;&amp;gt;...; Переменная не определена&amp;quot; &lt;br /&gt;
{{A}}В глобальный модуль добавь строку &lt;br /&gt;
&amp;lt;code&amp;gt;Перем Форма Экспорт; //Для отладки классов 1С++&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Q}}Почему когда я меняю реализацию класса в *.ert изменения не применяются до перезапуска 1С? &lt;br /&gt;
{{A}}Сервис-Параметры-1С++ - Отжать &amp;quot;Оптимизация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Q}}Это для модулей, а как насчет описания классов? &lt;br /&gt;
{{A}}Иерархия классов считывается при загрузке 1С++, и в течении сеанса работы не меняется.&lt;br /&gt;
&lt;br /&gt;
{{Q}}Как сделать, чтобы при приведении объекта в строку (СокрЛП(), Строка(), СокрЛ()) - возвращалось удобочитаемое строковое представление объекта? &lt;br /&gt;
{{A}}Необходимо определить в классе метод _ПолучитьКод / _GetCode, который должен возвращать строковое представление объекта.&lt;br /&gt;
Пример реализации для класса &amp;quot;Период&amp;quot; &lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;Перем Начало  Экспорт;&lt;br /&gt;
Перем Окончание  Экспорт;&lt;br /&gt;
&lt;br /&gt;
Функция Этот(Конт)&lt;br /&gt;
	Возврат Конт;&lt;br /&gt;
КонецФункции                   &lt;br /&gt;
&lt;br /&gt;
Функция Выбрать(Подсказка) Экспорт&lt;br /&gt;
	Если ВвестиПериод(Начало, Окончание,Подсказка)&amp;lt;&amp;gt;1 Тогда&lt;br /&gt;
		Возврат 0;&lt;br /&gt;
	Иначе&lt;br /&gt;
		Возврат 1;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
КонецФункции&lt;br /&gt;
&lt;br /&gt;
Функция _ПолучитьКод()       &lt;br /&gt;
	Попытка&lt;br /&gt;
		глУстПропись(Гривня,&amp;quot;у&amp;quot;);    &lt;br /&gt;
	Исключение&lt;br /&gt;
	КонецПопытки;&lt;br /&gt;
	Возврат ПериодСтр(Начало, Окончание);&lt;br /&gt;
КонецФункции&lt;br /&gt;
&lt;br /&gt;
Процедура Конструктор()&lt;br /&gt;
	Начало = ПолучитьПустоеЗначение(&amp;quot;Дата&amp;quot;);&lt;br /&gt;
	Окончание = Начало;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
По адресу http://itland.ru/forum/index.php?showtopic=2074 можно почитать подробное обсуждение этого вопроса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>FedorEzeev</name></author>
	</entry>
</feed>