=======================================================================
== Открыть форму элемента ячейки таблицы со сво-ом "ТолькоПросмотр"
=======================================================================

&НаКлиенте
Процедура ПриАктивизацииЯчейки(Элемент)
	
	ИмяКолонки = Элементы.ИмяЭлемента.ТекущийЭлемент.Имя;
	ИмяКолонки = СтрЗаменить(ИмяКолонки, "ИмяЭлемента", "");
	ЗначениеАктивнойЯчейки = Элементы.ИмяЭлемента.ТекущиеДанные[ИмяКолонки];
	
	Сообщить("ЗначениеАктивнойЯчейки:"+ЗначениеАктивнойЯчейки+"; Тип:"+ТипЗнч(ЗначениеАктивнойЯчейки));
	
	Если ТипЗнч(ЗначениеАктивнойЯчейки)=Тип("СправочникСсылка.ИмяСправочника") Тогда
		ПараметрыФормы = Новый Структура("Ключ",ЗначениеАктивнойЯчейки);
		ОткрытьФорму("Справочник.ИмяСправочника.ФормаОбъекта",ПараметрыФормы,ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры

Где:
ИмяЭлемента    - Имя табличного элемента формы
ИмяСправочника - Имя справочника или иного объекта метаданных форму которого необходимо открыть

=======================================================================
== КД 2.0
=======================================================================

Если снята галка "поиск по уникальному идентификатору", то поиск вовсе не идет, а просто создается новый объект. Если же обмен идет с использованием типового плана обмена, то поиск ведется в соответствии с регистром сведений "СоответствияОбъектовИнформационныхБаз" (опять-таки, если база типовая), где объекту текущей базы сопоставлен УИД базы, с которой происходит обмен. Можно попробовать вернуть галку поиска по идентификатору, установить галку "Продолжить поиск по полям поиска...", а в ПКО в событии "Поля поиска" жестко прописать поиск объекта, например:

СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоНаименованию(СвойстваПоиска.Получить("Наименование")).Ссылка;

=======================================================================
== MS SQL Server
=======================================================================
После установки и конфигурирования MS SQL, на файлы БД применяются разешения, где помимо всего прочего присутствует имя экземпляра MS SQL - MSSQLSERVICE (по умолчанию), при попытке добавить аналогичную учетную запись над ругие БД выдается ошибка сообщающая о том, что учетная запись не существует…

Решение:
При добавлении учетной записи необходимо указывать ее как сервис, заглавными буквами:

NT SERVICE\MSSQLSERVER

-------------------------------
== Сброс паролей пользователей
-------------------------------
Теперь попробуем заставить платформу думать что в базе нет ни одного пользователя. Для этого необходимо всего навсего переименовать таблицу v8users и строчку с файлом users.usr. Открываем SQL Server Management Studio логинимся и создаем запрос к базе данных с содержанием:

Код SQL
EXEC sp_rename 'v8users', 'v8users_old'
GO
UPDATE Params
SET FileName = 'users.usr_old'
WHERE FileName = 'users.usr'
GO

После этого открываем базу данных в конфигураторе и видим что платформа не спрашивает пользователя и пароль, при этом в SQL Server будет заново создана таблица v8users. Теперь чтобы всех пользователей вернуть обратно не закрывая конфигуратора выполним в SQL Server Management Studio запрос (После выполнения запроса в списке пользователей появяться все пользователи 1С, останеться только найти нужного и изменить ему пароль.):

Код SQL
DROP TABLE v8users
GO
EXEC sp_rename 'v8users_old', 'v8users'
GO
UPDATE Params
SET FileName = 'users.usr'
WHERE FileName = 'users.usr_old'
GO
-------------------------------
PS: Для PostgreSQL открываем pgAdminIII и выполняем:
Код SQL
ALTER TABLE v8users RENAME TO v8users_old;
UPDATE Params SET FileName = 'users.usr_old' WHERE FileName = 'users.usr';   
заходим в конфигуратор и выполняем:

Код SQL
DROP TABLE v8users;
ALTER TABLE v8users_old RENAME TO v8users;
UPDATE Params SET FileName = 'users.usr' WHERE FileName = 'users.usr_old';
-------------------------------
Для файловой базы:
1.В HEX-редакторе нужно открыть файл базы с именем 1Cv8.1CD
2.Найти "users.usr" и переименовать на "lsers.usr".
3.Найти "v8users" и переименовать на "l8users".
4.Сохранить изменения.

=======================================================================
== Таблица значений в XML файл и обратно (Управляемые формы)
=======================================================================
&НаСервере
Функция ПроизвестиЗаписьТаблицыВXMLСервер()
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ТаблицаСооответсвияУслугНоменклатуре.Выгрузить());
    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
    Возврат ЗаписьXML.Закрыть();
    
КонецФункции

&НаСервере
Функция ПроизвестиЧтениеТаблицыИзXMLСервер(СтрокаXML)
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ТипОбъектаXDTO = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueTable");
    ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO); 
    ОбъектXDTO.Проверить();
    
    ЧтениеXML.Закрыть();
    ТаблицаСооответсвияУслугНоменклатуре.Загрузить(СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO));
    
КонецФункции

&НаКлиенте
Процедура СохранитьНастройкиТаблицыСоответствия(Команда)
    
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.МножественныйВыбор = Ложь;
    Диалог.Фильтр = "Текст(*.XML)|*.XML";                 
    
    Если Диалог.Выбрать() Тогда
        
        ТекстовыйДокумент = Новый ТекстовыйДокумент;
        ТекстовыйДокумент.ДобавитьСтроку(ПроизвестиЗаписьТаблицыВXMLСервер());
        ТекстовыйДокумент.Записать(Диалог.ПолноеИмяФайла);
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьНастройкиТаблицыСоответствия(Команда)
    
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.МножественныйВыбор = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.Фильтр = "Текст(*.XML)|*.XML";                 
    
    Если Диалог.Выбрать() Тогда
        
        ТекстовыйДокумент = Новый ТекстовыйДокумент;
        ТекстовыйДокумент.Прочитать(Диалог.ПолноеИмяФайла);
        ПроизвестиЧтениеТаблицыИзXMLСервер(ТекстовыйДокумент.ПолучитьТекст());
        
    КонецЕсли;
    
КонецПроцедуры
=======================================================================
== Получить Дату из Текстовой строки
=======================================================================
Функция ПолучитьДатуИзСтроки(ДатаТекст)
	
	Год   = Прав(ДатаТекст,4);
	Месяц = Лев(Прав(ДатаТекст,7),2);
	Число = Лев(ДатаТекст,2);
	
	Возврат Дата(Строка(Год+Месяц+Число));
	
КонецФункции
=======================================================================
== Включить отладку на сервере 1С
=======================================================================
Отладка на сервере для платформы 1С 8.1
---
Чтобы точки останова отрабатывали в серверных процедурах, необходимо:

Остановить службу 1C Enterprise Server Agent.
Запустить редактор системного реестра. Чтобы открыть редактор реестра, необходимо нажать Windows + R (или Пуск-Выполнить) и ввести в командную строку regedit.
Найти ветку реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.1 Server Agent].
Скорректировать атрибут «ImagePath»= , добавив «-debug».
Запустить службу 1C Enterprise Server Agent.

Пример:
До включения:
«C:\Program Files\1cv81\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:\Program Files\1cv81\server»
После включения отладки:
«C:\Program Files\1cv81\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d «C:\Program Files\1cv81\server»
---
Если не работает отладка в 1С 8.2 и 8.3
---
Остановить службу 1C:Enterprise 8.2 Server Agent.
Запустить редактор системного реестра. Чтобы открыть редактор реестра, необходимо нажать Windows + R (или Пуск-Выполнить) и ввести в командную строку regedit.
Найти ветку реестра [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\1C:Enterprise 8.2 Server Agent\].
Находим свойство «ImagePath»= , добавляем в строку «-debug».
Записываем и запускаем службу.

Пример:
До включения:
«C:\Program Files (x86)\1cv82\8.2.18.109\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:\Program Files (x86)\1cv82\srvinfo»
После включения отладки:
«C:\Program Files (x86)\1cv82\8.2.18.109\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:\Program Files (x86)\1cv82\srvinfo» -debug»
=======================================================================
== Разбить ПериодОтчета на ВременныеОтрезки
=======================================================================
Условное оформление (Настройки отчета)
--
ДЕНЬ
Формат: ДЛФ=DD
--
МЕСЯЦ
Формат: ДФ='ММММ гггг'
--
КВАРТАЛ
Формат: ДФ='к"" КВАРТАЛ ""гггг'
--
ГОД
Формат: ДФ='гггг"" ГОД""'
--
НЕДЕЛЯ
СКД.ВычисляемоеПоле.Выражение:
ВЫБОР КОГДА &Отрезок="НЕДЕЛЯ" ТОГДА
ПОДСТРОКА(НЕДЕЛЯ(ДатаРегистратора), 1, 2) + ПОДСТРОКА(" НЕДЕЛЯ ", 1, 8) + ПОДСТРОКА(ГОД(ДатаРегистратора), 4, 2)
ИНАЧЕ ДатаРегистратора КОНЕЦ
=======================================================================
== Присоединенные файлы к самодельному справочнику
=======================================================================
1. Создать справочник с именем "ИмяСамодельногоСправочникаПрисоединенныеФайлы". Синоним "Присоединенные файлы (Имя самодельного справочника)". Создать копированием любого аналогичного справочника. После этого необходимо в реквизите "ВладелецФайла" указать в типе ссылку на самодельный справочник.

2. Прописать в список типов "Определяемые типы":

   "ПрисоединенныйФайл"
   СправочникСсылка."ИмяСамодельногоСправочникаПрисоединенныеФайлы"

   "ПрисоединенныйФайлОбъект"
   СправочникОбъект."ИмяСамодельногоСправочникаПрисоединенныеФайлы"

   "ВладелецПрисоединенныхФайлов"
   СправочникСсылка."ИмяСамодельногоСправочника"

   "ВладелецПрисоединенныхФайловОбъект"
   СправочникОбъект."ИмяСамодельногоСправочника"

3. Наводим красоту.  Добавим в модуль объекта вновь созданного справочника "ИмяСамодельногоСправочникаПрисоединенныеФайлы" процедуру перед записью чтобы проставлялись картинки в соответствии с расширением файла и Автор. Ниже текст процедуры с наиболее популярным списком расширений.
Процедура ПередЗаписью(Отказ)
	
	ЭтотОбъект.Автор = Справочники.Пользователи.НайтиПоНаименованию(Пользователи.ТекущийПользователь());
	Если ЭтотОбъект.Расширение="txt"  Тогда ЭтотОбъект.ИндексКартинки=10; КонецЕсли;
	Если ЭтотОбъект.Расширение="pdf"  Тогда ЭтотОбъект.ИндексКартинки=52; КонецЕсли;
	Если ЭтотОбъект.Расширение="jpg"  Тогда ЭтотОбъект.ИндексКартинки=42; КонецЕсли;
	Если ЭтотОбъект.Расширение="jpeg" Тогда ЭтотОбъект.ИндексКартинки=42; КонецЕсли;
	Если ЭтотОбъект.Расширение="tif"  Тогда ЭтотОбъект.ИндексКартинки=46; КонецЕсли;
	Если ЭтотОбъект.Расширение="xls"  Тогда ЭтотОбъект.ИндексКартинки=20; КонецЕсли;
	Если ЭтотОбъект.Расширение="xlsx" Тогда ЭтотОбъект.ИндексКартинки=70; КонецЕсли;
	Если ЭтотОбъект.Расширение="doc"  Тогда ЭтотОбъект.ИндексКартинки=18; КонецЕсли;
	Если ЭтотОбъект.Расширение="docx" Тогда ЭтотОбъект.ИндексКартинки=68; КонецЕсли;
	Если ЭтотОбъект.Расширение="zip"  Тогда ЭтотОбъект.ИндексКартинки=34; КонецЕсли;
	Если ЭтотОбъект.Расширение="heic" Тогда ЭтотОбъект.ИндексКартинки=4;  КонецЕсли;
	
КонецПроцедуры

4. Очистить все остальное содержимое модулей объекта и менеджера.
=======================================================================
== Подсистема печати для самодельного документа (Новая версия БСП)
=======================================================================
1. ОбщийМодуль.УправлениеПечатьюПереопределяемый

В процедуру «ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)»
Добавить строчку с документом:
СписокОбъектов.Добавить(Документы.Витал_ЗаказКроссДокинг);
 
2. В модуль менеджера документа добавить пустые процедуры:

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
КонецПроцедуры
 
3. В модуль формы документа добавить:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
  &НаКлиенте
  Процедура Подключаемый_ВыполнитьКоманду(Команда)
      ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
  КонецПроцедуры

  &НаСервере
  Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
      ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
  КонецПроцедуры

  &НаКлиенте
  Процедура Подключаемый_ОбновитьКоманды()
      ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
  КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

4. На форме документа добавить Элемент подменю «ПодменюПечать».
=======================================================================
== Подсистема печати для самодельного документа
=======================================================================
1. ОбщийМодуль.УправлениеПечатьюПереопределяемый

В процедуру «ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)»
Добавить строчку с документом:
СписокОбъектов.Добавить(Документы.Витал_ЗаказКроссДокинг);
 
2. В модуль менеджера документа добавить пустые процедуры:

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
КонецПроцедуры
 
3. В модуль формы документа добавить:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
    УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ПодменюПечать); 
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
    УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьНазначаемуюКоманду(Команда)
    Если НЕ ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(ЭтаФорма, Команда.Имя) Тогда
        РезультатВыполнения = Неопределено;
        ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(Команда.Имя, РезультатВыполнения);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(ИмяЭлемента, РезультатВыполнения)
    ДополнительныеОтчетыИОбработки.ВыполнитьНазначаемуюКомандуНаСервере(ЭтаФорма, ИмяЭлемента, РезультатВыполнения);
КонецПроцедуры

4. На форме документа добавить Элемент подменю «ПодменюПечать».
=======================================================================
== ВПФ для своего документа в УТ 10.3
=======================================================================
1.Добавляем в МодульОбъекта:
Процедура Печать(ФормаВладелец) Экспорт

	УниверсальныеМеханизмы.ОткрытьФормуВыбораПечатныхФормОбъекта(ЭтотОбъект, ФормаВладелец);

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

2.Добавляем в МодульФормы:
Процедура ОсновныеДействияФормыДействие(Кнопка)
	
	ЭтотОбъект.Печать(ЭтаФорма);
	
КонецПроцедуры
=======================================================================
== ЗаполнитьЗначенияСвойств()
=======================================================================
Процедура ЗаполнитьЗначенияСвойств() позволяет копировать значения свойств объекта-источника в свойства объекта-приемника.

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

Например: заполнение реквизитов документа "РасходнаяНакладная" значениями реквизитов документа "ПриходнаяНакладная":

    РасходнаяНакладная = Документы.РасходнаяНакладная.СоздатьДокумент();
    // заполняем реквизиты документа
    ЗаполнитьЗначенияСвойств(РасходнаяНакладная, ПриходнаяНакладная, , "Дата, Проведен, ПометкаУдаления");
    // заполняем табличную часть документа
    Для каждого СтрокаСоставаПриходнойНакладной из ПриходнаяНакладная.Состав Цикл
        СтрокаСоставаРасходнойНакладной = РасходнаяНакладная.Состав.Добавить();     
        // заполняем значения очередной строки табличной части
        ЗаполнитьЗначенияСвойств(СтрокаСоставаРасходнойНакладной, СтрокаСоставаПриходнойНакладной);
    КонецЦикла;
=======================================================================
== Вычисление Хэш строки
=======================================================================
//////////////////////////////////////////////////////////////////////
 //СтрокаХэш - исходный текст
 //hash- начальное значение hash
 // М - множитель (влияет накачество хэш и производительность)
 // TABLE_SIZE - размер получаемого ключа, как Максимальная величина + 1
Функция Хэш(СтрокаХэш, hash=0, M = 31, TABLE_SIZE = 18446744073709551616)
    //TABLE_SIZE = 18446744073709551615; 64 бита
    //M = 31; Умножитель
    ДлинаСтроки = СтрДлина(СтрокаХэш);
    Для к=1 по ДлинаСтроки цикл
        hash = M * hash + КодСимвола(Сред(СтрокаХэш,к,1));
    конеццикла;
    возврат hash%TABLE_SIZE;
КонецФункции

// Для ускорения работы с большими текстами их надо передавать блоками
// Данная функция разбивает исходный текст (Параметр "Строка") на блоки
// длиной ДлинаБлока и вычислет хэш блоками возвращая результат для всего текста.
Функция ХэшБлоками(Строка, ДлинаБлока = 64, hash = 0, M = 31, TABLE_SIZE = 18446744073709551616)
     НачПозиция = 1;
     ДлинаСтроки = СтрДлина(Строка);
      Пока  НачПозиция<=ДлинаСтроки цикл
        hash = Хэш(Сред(Строка, НачПозиция, ДлинаБлока), hash, M, TABLE_SIZE);
        НачПозиция = НачПозиция + ДлинаБлока;
    КонецЦикла;
    возврат hash;
КонецФункции
=======================================================================
== Пакетная печать табличных документов
=======================================================================
// Создаем пакет
Пакет = Новый ПакетОтображаемыхДокументов;

// Документы, находящиеся в этом пакете, печатаются в 5 экземплярах
Пакет.КоличествоЭкземпляров = 5;

// Добавляем документы в пакет
ЭлементПакета1 = Пакет.Состав.Добавить();
ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент1, УникальныйИдентификатор);
ЭлементПакета2 = Пакет.Состав.Добавить();
ЭлементПакета2.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент2, УникальныйИдентификатор);

// Добавляем вложенный пакет для третьего документа
ВложенныйПакет = Новый ПакетОтображаемыхДокументов;
ЭлементПакета3 = Пакет.Состав.Добавить();
ЭлементПакета3.Данные = ВложенныйПакет;

// Документ во вложенном пакете печатается в 2 экземплярах
ВложенныйПакет.КоличествоЭкземпляров = 2;

// Добавляем документ во вложенный пакет
ЭлементВложенногоПакета1 = ВложенныйПакет.Состав.Добавить();
ЭлементВложенногоПакета1.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент3, УникальныйИдентификатор);

// Печатаем пакет
Пакет.Напечатать();
=======================================================================
== Разбивка ПЕРИОДА НА ОТРЕЗКИ (&Периодичность)
=======================================================================
	ВЫБОР
		КОГДА &Периодичность = "ДЕНЬ"
			ТОГДА НАЧАЛОПЕРИОДА(Документ.Дата, ДЕНЬ)
		КОГДА &Периодичность = "НЕДЕЛЯ"
			ТОГДА НАЧАЛОПЕРИОДА(Документ.Дата, НЕДЕЛЯ)
		КОГДА &Периодичность = "МЕСЯЦ"
			ТОГДА НАЧАЛОПЕРИОДА(Документ.Дата, МЕСЯЦ)
		КОГДА &Периодичность = "КВАРТАЛ"
			ТОГДА НАЧАЛОПЕРИОДА(Документ.Дата, КВАРТАЛ)
		КОГДА &Периодичность = "ГОД"
			ТОГДА НАЧАЛОПЕРИОДА(Документ.Дата, ГОД)
	КОНЕЦ КАК Период

В ПАРАМЕТРЫ добавить "ПЕРИОД" и "ПЕРИОДИЧНОСТЬ"
Еще нужно добавить "группировку" по "Период" в макете отчета.
=======================================================================
== Вывод Реквизита на форму в динамике (в коде модуля формы)
=======================================================================
    ТранспортноеСредство                      = Элементы.Добавить("Витал_ТранспортноеСредство", Тип("ПолеФормы"), Элементы.ГруппаПодвал);
    ТранспортноеСредство.Вид                  = ВидПоляФормы.ПолеВвода;
    ТранспортноеСредство.ПутьКДанным          = "Объект.Витал_ТранспортноеСредство";
    ТранспортноеСредство.Видимость            = Истина;
    ТранспортноеСредство.Заголовок            = "Транспортное средство";
    ТранспортноеСредство.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу;
=======================================================================
== Вывод ТЗ в ТабличныйДокумент
=======================================================================
Функция ДанныеТаблицыЗначенийВТабличныйДокумент(ДанныеВТабличныйДокумент)
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	
	Построитель = Новый ПостроительОтчета;
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДанныеВТабличныйДокумент);
	Построитель.ВыводитьЗаголовокОтчета = Ложь;
	Построитель.Вывести(ТабличныйДокумент);
	
	ТабличныйДокумент.УдалитьОбласть(ТабличныйДокумент.Область(1,1,ТабличныйДокумент.ВысотаТаблицы,1),ТипСмещенияТабличногоДокумента.ПоГоризонтали);
	
	Возврат ТабличныйДокумент;

КонецФункции

====== А потом его можно записать в файл ЭКСЕЛЬ:

	ИмяФайлаТД = КВФ+ПолнаяДата()+".xls";
	ТД = Новый ТабличныйДокумент;
	ТД = ДанныеТаблицыЗначенийВТабличныйДокумент(ВыборкаДляВыгрузки);
	ТД.ИспользуемоеИмяФайла = ИмяФайлаТД;
	ТД.Записать(ИмяФайлаТД,ТипФайлаТабличногоДокумента.XLS97);
=======================================================================
== Вывод формы списка по условию отбора
=======================================================================
Процедура ПриОткрытии()
	
	Если РольДоступна("Внешник") Тогда
		СправочникСписок.Отбор.Ответственный.ВидСравнения  = ВидСравнения.Равно;
		СправочникСписок.Отбор.Ответственный.Значение      = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя,Истина).Ссылка;
		СправочникСписок.Отбор.Ответственный.Использование = Истина;
	КонецЕсли;
	
КонецПроцедуры
=======================================================================
== К одному ТабДок присоединяет другой ТабДок со своим форматом строк
=======================================================================
// Процедура ПрисоединитьТабличныйДокумент осуществляет вывод Присоединяемого документа под указанным
// С возможностью создания нового формата строк для всей области присоединяемого документа
// Удобно использовать, чтобы колонки различной ширины не разъезжались
//
// Параметры:
//  ОсновнойДокумент  - ТабличныйДокумент - документ, куда будут добавлены области присоединяемого документа
//  ПрисоединяемыйДокумент  - ТабличныйДокумент/ОбластьЯчеекТабличногоДокумента - документ, который присоединяем
//  СоздатьФорматСтрок - Булево - флаг, указывающий на то, что необходимо создать свой формат строк
//
Процедура ПрисоединитьТабличныйДокумент(ОсновнойДокумент, Знач ПрисоединяемыйДокумент, Знач СоздатьФорматСтрок = Ложь) Экспорт
	
	ВремТабДок = Новый ТабличныйДокумент;
	ОбластьЯчеек = ВремТабДок.Вывести(ПрисоединяемыйДокумент);
	
	Если СоздатьФорматСтрок Тогда
		ОбластьЯчеек.СоздатьФорматСтрок();
	КонецЕсли;
	
	ОсновнойДокумент.Вывести(ВремТабДок);
	
КонецПроцедуры
=======================================================================
== ВидыСтавокНДС
=======================================================================
Перечисление осталось. Но если Вы посмотрите в справочнике Номенклатуры форму элемента, то на форме стоит выбор значений, например:
20%
20/120
10%
10/110
0%
БезНДС
То есть, не всех значений из Перечисления.СтавкиНДС.
И тип этого поля, если посмотреть в конфигураторе, Объект.ВидСтавкиНДС,
где ВидСтавкиНДС - ПеречислениеСсылка.ВидыСтавокНДС
со значениями:
Общая
ОбщаяРасчетная
Пониженная
ПониженнаяРасчетная
Нулевая
БезНДС
=======================================================================
== Запуск "Обновление версии программы" 
=======================================================================
Нужно запустить программу с ключом:
/С ЗапуститьОбновлениеИнформационнойБазы
=======================================================================
== Текст запроса на получение цен из регистра на дату документа
=======================================================================
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЦеныНоменклатуры.Номенклатура.Производитель,
	ВложенныйЗапрос.Номенклатура,
	ЦеныНоменклатуры.ВидЦены,
	ЦеныНоменклатуры.Цена,
	ВложенныйЗапрос.Ссылка КАК Ссылка
ИЗ
	(ВЫБРАТЬ
		РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
		РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
		МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
	ИЗ
		Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
			ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
				И РеализацияТоваровУслугТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период
	
	СГРУППИРОВАТЬ ПО
		РеализацияТоваровУслугТовары.Ссылка,
		РеализацияТоваровУслугТовары.Номенклатура) КАК ВложенныйЗапрос
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И ВложенныйЗапрос.Период = ЦеныНоменклатуры.Период
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныНоменклатуры.Номенклатура.Производитель В(&Производитель)
	И ВложенныйЗапрос.Ссылка.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, -45) И &ТекущаяДата

УПОРЯДОЧИТЬ ПО
	Ссылка
=======================================================================
== Получение сведений о контрагенте
=======================================================================
   ОбАгенте = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Агент.Ссылка, Дата);
   Сведения     = Новый Структура();
   Сведения.Вставить("Агент", ОбАгенте);
   ПредставлениеАгента = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(Сведения.Агент,
                         "НаименованиеДляПечатныхФорм,ЮридическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
=======================================================================
== Вывести чистый номер документа на печать
=======================================================================
   ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомДок,Истина,Истина)
=======================================================================
== Програмная запись ДопСвойств и ДопРеквизитов объектов
=======================================================================
Процедура ПриЗаписи(Отказ)
	ТаблицаСвойств = Новый ТаблицаЗначений;
	ТаблицаСвойств.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
	ТаблицаСвойств.Колонки.Добавить("Значение");
		
	СтрокаСвойства = ТаблицаСвойств.Добавить();
	СтрокаСвойства.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "НаименованиеДопСвойстваИлиХарактеристики");
	СтрокаСвойства.Значение = "ЗначениеДопСвойстваИлиХарактеристики";
	
	УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЭтотОбъект.Ссылка, ТаблицаСвойств);
КонецПроцедуры
=======================================================================
== Програмная получение ДопСвойств и ДопРеквизитов объектов
=======================================================================
Функция ПолучитьДополнительноеСведение(Объект, ИмяСвойства) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДополнительныеСведения.Объект КАК Объект,
		|	ДополнительныеСведения.Свойство КАК Свойство,
		|	ДополнительныеСведения.Значение КАК Значение
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		|ГДЕ
		|	ДополнительныеСведения.Объект = &Объект
		|	И ДополнительныеСведения.Свойство.Имя ПОДОБНО &Имя";
	
	Запрос.УстановитьПараметр("Имя", ИмяСвойства);
	Запрос.УстановитьПараметр("Объект", Объект);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
		Возврат ВыборкаДетальныеЗаписи.Значение;
	КонецЕсли;
	Возврат Неопределено;
	
КонецФункции
=======================================================================
== Порядок применения расширений
== если их больше чем одно!
==
== В первую очередь применяются расширения с назначением Исправление,
== после этого Адаптация и самыми последними — Дополнение.
=======================================================================
== Руководитель организации
=======================================================================
   Руководители = ОтветственныеЛицаБП.ОтветственныеЛица(Выборка.Организация, Выборка.Дата);
   ОбластьПодвал.Параметры.ФИОРуководителя = Руководители.Руководитель;
=======================================================================
== Число прописью
=======================================================================
   с копейками
   ЧислоПрописью(Число, "Л=ru_RU;ДП=Истина", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2")
   
   копейки числом
   ЧислоПрописью(Число, "Л=ru_RU", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2")
=======================================================================
== Дата документа из ссылки
=======================================================================
   ДатаДокумента = Дата(Строка(Прав(ДатаДок,4) + Сред(ДатаДок,4,2) + Лев(ДатаДок,2)));
=======================================================================
== Месяц прописью
=======================================================================
Функция ПолучитьМесяцПрописью(Дата)

	НомерМесяца = Месяц(Дата);
	
	СоответствиеМесяцев = Новый Соответствие();
	СоответствиеМесяцев.Вставить(1, "Января");
	СоответствиеМесяцев.Вставить(2, "Февраля");
	СоответствиеМесяцев.Вставить(3, "Марта");
	СоответствиеМесяцев.Вставить(4, "Апреля");
	СоответствиеМесяцев.Вставить(5, "Мая");
	СоответствиеМесяцев.Вставить(6, "Июня");
	СоответствиеМесяцев.Вставить(7, "Июля");
	СоответствиеМесяцев.Вставить(8, "Августа");
	СоответствиеМесяцев.Вставить(9, "Сентября");
	СоответствиеМесяцев.Вставить(10, "Октября");
	СоответствиеМесяцев.Вставить(11, "Ноября");
	СоответствиеМесяцев.Вставить(12, "Декабря");
	
	Возврат СоответствиеМесяцев[НомерМесяца];

КонецФункции
=======================================================================
== Получить Фамилию c Инициалами
=======================================================================
Функция ПолучитьФамилиюСИнициалами(знач ФИО)
 
    ФИОСПереносами = СтрЗаменить(ФИО, " ", Символы.ПС);
 
    ЧастиСтроки = Новый Массив;
    Для Индекс = 1 По СтрЧислоСтрок(ФИОСПереносами) Цикл
        Стр = СтрПолучитьСтроку(ФИОСПереносами, Индекс);
        Если ЗначениеЗаполнено(Стр) Тогда
            ЧастиСтроки.Добавить(СокрЛП(Стр));
        КонецЕсли;
    КонецЦикла;
 
    Результат = "";
 
    Если ЧастиСтроки.Количество() > 0 Тогда
        Результат = Результат + ЧастиСтроки[0];
 
        Если ЧастиСтроки.Количество() > 1 Тогда
            Результат = Результат + " " + Лев(ЧастиСтроки[1], 1) + ".";
 
            Если ЧастиСтроки.Количество() > 2 Тогда
                Результат = Результат + " " + Лев(ЧастиСтроки[2], 1) + ".";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
 
    Возврат Результат;
 
КонецФункции
=======================================================================
== Получить ИТОГ по Колонке ДинамическогоСписка
=======================================================================
Процедура РассчитатьИтоги()
    
    Схема               = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
    Настройки           = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
    КомпоновщикМакета   = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки     = КомпоновщикМакета.Выполнить(Схема, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    ПроцессорВывода     = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    Результат           = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    ЭтотОбъект.ЭтаФорма.Элементы.СуммаКОплате.ТекстПодвала = "Итого: " + Формат(Результат.Итог("СуммаКОплате"),"ЧДЦ=2; ЧН=-");

КонецПроцедуры
=======================================================================
== Получить ТЗ Из ДинамическогоСписка
=======================================================================
&НаСервере
Функция Получить_ТЗ_Из_ДинамическогоСписка()
 
	Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
 
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	ТЗ = Новый ТаблицаЗначений;
	ПроцессорВывода.УстановитьОбъект(ТЗ); 
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	Возврат ТЗ;
 
КонецФункции
=======================================================================
== Word'овский макет
=======================================================================
&НаСервере
---
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
СсылкаМакет = ОбработкаОбъект.ПолучитьМакет("ВордМакет");
Word = СсылкаМакет.Получить();

СсылкаМакет = Word.Application.Documents(1);
СсылкаМакет.Activate();

Word.Bookmarks("Область-Закладка").Select();
Word.Application.Selection.TypeText("Вставляемый текст");
	
СсылкаМакет.Application.Visible = Истина;

=======================================================================
== Вывод на печать макета в форму печати
=======================================================================
&НаСервере
Процедура ПечатьНакладнойНаСервере(МассивОбъектов)
	
    КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
    КоллекцияПечатныхФорм.Колонки.Добавить("ИмяВРЕГ");
    КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
    КоллекцияПечатныхФорм.Колонки.Добавить("Картинка");
    КоллекцияПечатныхФорм.Колонки.Добавить("ПолныйПутьКМакету");
    КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
    КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
    КоллекцияПечатныхФорм.Колонки.Добавить("Экземпляров");
    КоллекцияПечатныхФорм.Колонки.Добавить("ИмяФайлаПечатнойФормы");
    КоллекцияПечатныхФорм.Колонки.Добавить("ОфисныеДокументы");
	
    ПечФорма                   = КоллекцияПечатныхФорм.Добавить();
    ПечФорма.ИмяВРЕГ           = ВРег("УПД");
    ПечФорма.ИмяМакета         = "Печать_накладной";
    ПечФОрма.ПолныйПутьКМакету = "Документ.Накладная.Печать_накладной";
    ПечФОрма.ТабличныйДокумент = Документы.Накладная.ПолучитьМакет("Печать_накладной");
    ПечФорма.Экземпляров       = 1;
	
    Строка = КоллекцияПечатныхФорм.Добавить();
	
    Строка.ИмяМакета             = "Печать_накладной";
    Строка.ИмяВРЕГ               = "УПД";
    Строка.СинонимМакета         = "";
    Строка.ТабличныйДокумент     = Документы.Накладная.СформироватьПечатнуюФормуНакладной(МассивОбъектов);
    Строка.Экземпляров           = 1;
    Строка.Картинка              = "";
    Строка.ПолныйПутьКМакету     = "";
    Строка.ИмяФайлаПечатнойФормы = "";
    Строка.ОфисныеДокументы      = "";
	
    ПараметрыОтправки=Новый Структура;
    ПараметрыОтправки.Вставить("Получатель");
    ПараметрыОтправки.Вставить("Текст","");
    ПараметрыОтправки.Вставить("Тема","");
	
    ПараметрыВывода = Новый Структура;
    ПараметрыВывода.Вставить("ЗаголовокФормы",Объект.Ссылка);
    ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно",Ложь);
    ПараметрыВывода.Вставить("ПараметрыОтправки",ПараметрыОтправки);
	
    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами",Ложь);
	
    ОбъектыПечати = Новый СписокЗначений;
	
    ОбъектыПечати = Документы.Накладная.ПолучитьМакет("Печать_накладной");
	
КонецПроцедуры

&НаКлиенте
Процедура ПечатьНакладной(Команда)
	
    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(Объект.Ссылка);
	
    ПечатьНакладнойНаСервере(МассивОбъектов);
	
    ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати");
    ПараметрыОткрытия.ИмяМенеджераПечати = "Документы.Накладная.СформироватьПечатнуюФормуНакладной(МассивОбъектов)";
    ПараметрыОткрытия.ИменаМакетов       = "Документ.Накладная.Печать_накладной";
    ПараметрыОткрытия.ПараметрКоманды    = МассивОбъектов;
    ПараметрыОткрытия.ПараметрыПечати    = Неопределено;
    
    ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ЭтаФорма, Строка(Новый УникальныйИдентификатор));

КонецПроцедуры
=======================================================================
== Число 1234.56 прописью с копейками
=======================================================================
ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2");
=======================================================================
== Установки цвета ВАЖНОЙ КНОПКИ
=======================================================================
ЦветФона   : FFE100
ЦветТекста : 4D4D4D
ЦветРамки  : 71641A
=======================================================================
== Работа со строкой
=======================================================================
СтрРазделить();
Функция распила строки
=======================================================================
== Параметры открытия формы
=======================================================================
УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("ТипКонтрагента", "Поставщик");
УсловияОтбора.Вставить("Лояльность", "Надежный");

ПараметрыФормы = Новый Структура ("Отбор", УсловияОтбора);

ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы);
=======================================================================
== РеквизитФормы
=======================================================================
Так, например, можно получить наполненный данными СправочникОбъект на основании данных формы, если вызвать метод «РеквизитФормыВЗначение(«Объект»). При этом произойдет то, что описано выше – будет создан новый СправочникОбъект и наполнен данными из указанного реквизита данных формы.

Обратное преобразование выполняется методом «ЗначениеВРеквизитФормы». Если мы произвели какие-то действия с данными СправочникОбъект, например, очистили табличную часть, то мы должны поместить наши изменения обратно в форму.
=======================================================================
== Временное хранилище
=======================================================================
Данные помещаются в хранилище по ссылке. Это значит, что помещая данные в хранилище и изменяя их вне хранилища мы, фактически, меняем и само хранилище, т.к. в нем лежит только ссылка на данные. Пример:

Массив = Новый Массив; Массив.Добавить("Привет");

Адрес = ПоместитьВоВременноеХранилище(Массив);

Массив.Добавить("До свидания");

МассивИзХранилища = ПолучитьИзВременногоХранилища(Адрес);

Сообщить(Массив = МассивИзХранилища); // Истина

Сообщить(МассивИзХранилища.Количество()); // 2 элемента

В приведенном коде массив помещается в хранилище, после чего к нему добавляется еще один элемент. Видим, что в хранилище лежит тот же самый объект и объект получаемый из хранилища тоже изменен.
=======================================================================
== Вызов ФормыВыбора и получение значения выбора
=======================================================================
&НаКлиенте
Процедура ВыбратьНоменклатуру(Команда)

ОписаниеВыбора = Новый ОписаниеОповещения(«ОбработатьВыборНоменклатуры»,ЭтаФорма);

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

&НаКлиенте

Процедура ОбработатьВыборНоменклатуры(РезультатЗакрытия,ДопПараметры) Экспорт

Если Не ЗначениеЗаполнено(РезультатЗакрытия) Тогда
Возврат;
КонецЕсли;

ВыбраннаяНоменклатура = РезультатЗакрытия;

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

 

Где ВыбраннаяНоменклатура это реквизит формы.
Заметьте, процедура ОбработатьВыборНоменклатуры, которую мы указали в описании оповещения, обязательно должна быть экспортной.
Теперь нам осталась указать объект описание выбора в шестом параметре метода ОткрытьФорму

 

&НаКлиенте
Процедура ВыбратьНоменклатуру(Команда)

ОписаниеВыбора = Новый ОписаниеОповещения(«ОбработатьВыборНоменклатуры»,ЭтаФорма);

ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора»,,,,,,
ОписаниеВыбора,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры
=======================================================================
== Запрос на получение ОСТАТКОВ
=======================================================================
    Запрос = Новый Запрос();
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ХозрасчетныйОстатки.КоличествоОстаток КАК ТекОстаток,
        |    ХозрасчетныйОстатки.КоличествоОстатокДт КАК ТекОстатокДТ
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный.Остатки(
        |            &Дата,
        |            Счет = &Счет,
        |            &МассивСубконто,
        |            Организация = &Организация
        |                И Субконто1 = &Номенклатура
        |                И Субконто2 = &Склад) КАК ХозрасчетныйОстатки";
        
    МассивСубконто = Новый Массив;    
    МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
    МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
    
    Запрос.УстановитьПараметр("МассивСубконто", МассивСубконто);
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладе);
    Запрос.УстановитьПараметр("Дата",ТекущаяДата());
    
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(ВыборкаДетальныеЗаписи.Номенклатура);
    КонецЦикла;
=======================================================================
== Таблица значений в Массив и обратно
=======================================================================
// Функция преобразует ТаблицуЗначений в Массив из структур.
//
Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные) Экспорт
    
    мсДанные = Новый Массив;
        
    // Запишем в массив
    Для Каждого СтрокаТЗ Из тзДанные Цикл
        
        стСтрокаТаблицы = Новый Структура;
        Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл
            стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
        КонецЦикла;
        
        мсДанные.Добавить(стСтрокаТаблицы);
        
    КонецЦикла;
    
    Возврат мсДанные;
    
КонецФункции // ПреобразоватьТаблицуЗначенийВМассив()

// Функция преобразует Массив из структур в ТаблицуЗначений.
//
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт
    
    тзДанные = Новый ТаблицаЗначений;
    
    Для Каждого ЭлементМассива Из мсДанные Цикл
        // Рисуем колонки для таблицы
        Если тзДанные.Колонки.Количество() = 0 Тогда
            Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
                тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
            КонецЦикла;
        КонецЕсли;
        
        // Добавляем данные в таблицу
        НоваяСтрока = тзДанные.Добавить();
        Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
            НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
        КонецЦикла;
    КонецЦикла;
    
    Возврат тзДанные;
    
КонецФункции // ПреобразоватьМассивВТаблицуЗначений()
=======================================================================
== Код 1C v 7.x
=======================================================================
 Процедура Выполнить()
  Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда
    Предупреждение("Компонента не обнаружена");
    Возврат;
  КонецЕсли;
  Анализатор=СоздатьОбъект("AddIn.XMLParser");
  Корень=Анализатор.СоздатьДокумент();
  План=Корень.СоздатьПодчиненныйЭлемент("ПланСчетов");
  Счет=СоздатьОбъект("Счет.Основной");
  Родитель=СоздатьОбъект("Счет.Основной");
  Счет.ВыбратьСчета();
  Пока Счет.ПолучитьСчет()=1 Цикл
    // если это счет, а не субсчет
    Если Счет.Уровень()=1 Тогда
      Родитель.НайтиПоКоду(Счет.Код);
      СчетXML=План.СоздатьПодчиненныйЭлемент("Счет");
      СчетXML.УстановитьАтрибут("Код", Счет.Код);
      СчетXML.УстановитьАтрибут("Валютный", Счет.Валютный);
      СчетXML.УстановитьАтрибут("Количественный", Счет.Количественный);
      СчетXML.УстановитьАтрибут("Забалансовый", Счет.Забалансовый);
      Если Счет.Активный=1 Тогда
        СчетXML.УстановитьАтрибут("вид","активный");
      ИначеЕсли Счет.Активный=2 Тогда
        СчетXML.УстановитьАтрибут("вид","пассивный");
      Иначе
        СчетXML.УстановитьАтрибут("вид","активно-пассивный");
      КонецЕсли;
      СчетXML.Значение=Счет.Наименование;
    Иначе
      Если Счет.ПринадлежитГруппе(Родитель)=1 Тогда
        СубсчетXML=СчетXML.СоздатьПодчиненныйЭлемент("Субсчет");
        СубсчетXML.УстановитьАтрибут("Код", Счет.Код);
        // аналогично устанавливаем все атрибуты на элемент СубсчетXML
        СубсчетXML.Значение=Счет.Наименование;
      КонецЕсли;
    КонецЕсли;
  КонецЦикла;
  Корень.Записать(КаталогПрограммы()+"plan.xml");
КонецПроцедуры
=======================================================================
== Форматирование
=======================================================================
Формат(ТабДок.Количество, "Ч-15.0, ");
Формат(ТабДок.Количество, "ЧГ-0, ");
Формат(Дата, "ДЛФ=Д");  // 01.01.2005
Формат(Дата, "ДЛФ=ДД"); // 1 января 2005 г.
КодБезРазделителяТриад = СтрЗаменить(Строка(Код),Символ(160),"");
=======================================================================
== Закрыть все открытые окна
=======================================================================
НомерОкна = 1;
Окна = ПолучитьОкна();
Пока НомерОкна<Окна.Количество() Цикл
	Если Не Окна.Получить(НомерОкна).Заголовок="Начальная страница" Тогда
    	Форма = Окна.Получить(НомерОкна).ПолучитьСодержимое();
   		Форма.Закрыть();
	КонецЕсли;
	НомерОкна = НомерОкна + 1;
КонецЦикла;    
Tags: справочник функций 1С, справка по 1С, полезный функционал 1С, рабочие механизмы 1С, helpme 1C, функции 1С, helpme1s