FAQ для начинающего программиста 1С

Пример создания типизированых колонок в таблице значений

  1.  Отладка 1С не в файловом варианте (SQL)

  2.  Сверхбыстрое удаление элементов справочника

  3. Пример создания типизированых колонок в таблице значений

  4. Псевдо-листы (ссыла на регистры)

  5. Регистрация 1С Com connector

  6. Запрос.Отбор из регистра по документу
  7. Вызываем процедуру другой формы

Отладка 1С не в файловом варианте

   Очень часто в клиент-серверном варианте, у начинающих программистов 1С, возникат вопросы относительно отсутсвия останова в тексте модуля под тегом &НаСервере.

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

Исправляется это редактированием записи в реестре

  1. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.1 Server Agent].
  2. Скорректировать ключ для ragent.exe , добавив «-debug».
  3. Пример редактирования: C:\Program Files (x86)\1cv82\8.2.18.109\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591  -debug -d «C:\Program Files (x86)\1cv82\srvinfo»

После правки перезапускаем сервер с новыми параметрами. Теперь программист 1с может отслеживать процедуры на сервере.

 


Сверхбыстрое удаление элементов справочника и других объектов конфигурации

//=====================================
&НаСервере
Процедура УдалитьНоменклатуруТестНаСервере()
    
Запрос = Новый Запрос( "ВЫБРАТЬ
                           |    НоменклатураТест.Ссылка
                           |ИЗ
                           |    Справочник.НоменклатураТест КАК НоменклатураТест"

    );    
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
УдалитьОбъекты(Результат,,);  

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

.Процедура удаляет все элементы справочника НоменклатураТест без всяких проверок

// удаление помеченных объектов с контролем ссылочной целостности
Помеченные = НайтиПомеченныеНаУдаление();
Найденные = 0;
УдалитьОбъекты(Помеченные, Истина, Найденные);
Для каждого Ссылка из Найденные Цикл
    СтрСообщения = "Объект не удален: " + СокрЛП(Ссылка[0]);
    СтрСсылка = ", используется в " + СокрЛП(Ссылка[1]);
    Сообщить (СтрСообщения + СтрСсылка);
КонецЦикла;

Пример создания типизированых колонок в таблице значений

    ТЗ.Колонки.Добавить("ИндексСортировки"		, Новый ОписаниеТипов("Число"));
	ТЗ.Колонки.Добавить("ИмяРаздела"		, Новый ОписаниеТипов("Строка"));
	ТЗ.Колонки.Добавить("ДатаКорр"			, Новый ОписаниеТипов("Дата"));
	ТЗ.Колонки.Добавить("БезусловноеУдаление"	, Новый ОписаниеТипов("Булево"));
	ТЗ.Колонки.Добавить("Номенклатура"		, Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	ТЗ.Колонки.Добавить("ДанныеРаздела"		, Новый ОписаниеТипов("Структура"));
	// пример создания колонок "число" и "строка" с уточнением параметров:
	ТЗ.Колонки.Добавить("ПроцентВыполнения"		, Новый ОписаниеТипов("Число"	, Новый КвалификаторыЧисла(18, 2)));
	ТЗ.Колонки.Добавить("ИмяРаздела"		, Новый ОписаниеТипов("Строка"	, , Новый КвалификаторыСтроки(200, ДопустимаяДлина.Переменная)));
	ТЗ.Колонки.Добавить("ДатаСписаания"		, Новый ОписаниеТипов("Дата"	, , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));

 


Расширение командного интерфейса ( Псевдо листы)

 

 


Регистрация 1С COM connector

  1. regsvr32 (1C.../bin/)commcntr.dll ( Регистрируем библиотеку)
  2. "Службы компонентов" (например: Пуск -> Администрирование -> Службы компонентов. *Приложения COM+* добавляем новое приложение: Создать -> Приложение. На вопрос "Установка или создание нового приложения" — выбираем "Создать новое приложение". Имя нового приложения лучше написать чтобы было понятно о чем речь: *1CV8_ComConnector*, способ активации — "серверное приложение".Учетная запись для запуска приложения *Локальная Служба* после нужно будт выбирать учетку users под которой стартует сервер 1С.
  3. В ветке созданного приложения *1CV8_ComConnector* переходим на ветку "Компоненты" и создаем компонент: Создать -> Компонент
     Выбираем "Установка новых компонент", и в диалоге выбираем нужную библиотеку (comcntr.dll)
  4. Идем в роли, в createrOwner  выбираем учетку users под которой стартует сервер 1С. "1CV8_ComConnector" свойства - безопасность - убираем галку с Принудительная проверка доступа для приложения. Убеждаемся, что галка напротив  createrOwner - Есть.

 

 

|ВЫБРАТЬ
|    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура КАК Номенклатура,
|    ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена,
|    ЦеныНоменклатурыПоставщиковСрезПоследних.Регистратор КАК Регистратор
|ИЗ
|    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(, Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
 

ВЫБРАТЬ
    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена
ИЗ
    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
ГДЕ
    ЦеныНоменклатурыПоставщиковСрезПоследних.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг

ВЫБРАТЬ
    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена
ИЗ
    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
ГДЕ
    ТИПЗНАЧЕНИЯ(ЦеныНоменклатурыПоставщиковСрезПоследних.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг)

 


Вызываем процедуру другой формы

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

    
Форма = Ссылка.ПолучитьФорму("ФормаКакогоТоДокумента");
Форма.Открыть();
Форма.ПроцедураДругойФормы() // в форме должна быть объявлена как экспортная
Форма.Закрыть();