Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Интеграция 1С , 1С 8.х          
Vofka Подменю пользователя
сообщение 24.08.11, 12:35
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Текстовый файл
  • Как выгрузить данные из справочника в текстовый файл?
  • Как загрузить данные из текстового файла?
  • Работа с текстом. Модель последовательного доступа


XML
  • Как из одной базы перенести документ в другую базу?
  • Как можно сформировать XML-документ произвольной структуры?
  • Как сформировать XML-документ в строку?
  • Как можно обмениваться данными, используя XML-сериализацию через файлы других форматов?
  • Как можно загрузить XML документ произвольной структуры?


DBF-файлы
  • Как можно построить выгрузку-загрузку посредством файлов DBF?


Работа с HTML-документами
  • Заполнение HTML-анкет


Работа с файлами
  • Как организовать диалог выбора текстового файла?
  • Как прочитать информацию о файле?
  • Как получить список файлов в указанном каталоге?
  • Как переместить файл, выложенный на ftp к себе на локальный компьютер?
  • Как разделить большой файл на несколько файлов определенного размера?
  • Как поместить файлы в архив?
  • Как сравнить два текстовых файла?
  • Как организовать контроль формирования файла внешним приложением?


ActiveX
  • Как использовать элементы управления ActiveX?
  • Макеты ActiveDocument
  • Как сформировать новый договор на основании файла Microsoft Word?


Работа с Интернет
Работа с электронной почтой
  • Как организовать работу с электронной почтой через установленного почтового клиента?
  • Как организовать работу с почтой без установленного почтового клиента на компьютере пользователя?

Работа с файлами
  • Загрузка файлов по FTP
  • Выполнение HTTP запроса
  • Как установить HTTP соединение если подключение через прокси (proxy) сервер


Работа с COM-объектами
  • Как из одной базы 1С:Предприятие 8.0 перенести остатки товаров в другую базу, используя COM-соединение.
  • Пример обращения к программе 1С:Предприятие 8.0 из модуля MS Excel через COM-соединение
  • Как организовать считывание данных из файлов *.xls?
  • Как запустить макрос, записанный в книге Microsoft Excel?
  • Как создать документ программы Microsoft Excel по оформлению, приведенному в другом документе?
  • Как выгрузить прайс-лист в документ программы Microsoft Word?
  • Как выполнить запрос к произвольной базе данных SQL?


Automation Client/Server (OLE)
  • Как из одной базы 1С:Предприятие 8 интерактивно заполнить документ в другой базе, используя Automation Client/Server (OLE)?
  • Как из таблицы Excel загрузить список номенклатуры в 1С:Предприятие с возможностью редактирования?


Обмен данными
  • Как организовать работу удаленных складов?
  • Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет?
  • Как просмотреть объекты, для которых зарегистрированы изменения?
  • Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8?
  • Как принудительно зарегистрировать изменения объектов?


WEB-расширение
  • Как в форме списка номенклатуры отменить все установленные отборы?
  • Как запретить перенос содержимого ячеек в форме списка расходных накладных?
  • Как открыть список расходных накладных с отбором, установленным по определенному складу?
  • Как добавить кнопку для ввода документа на основании?


Реестр Windows
  • Как прочитать значение, хранящееся в реестре Windows?
  • Как сохранить значение в реестр Windows?


Автор проделал большую работу собрав всю эту информацию воедино, за что ему спасибо!

Текстовый файл

Как выгрузить данные из справочника в текстовый файл?

Текст = Новый ТекстовыйДокумент; 
Выборка = Справочники.Номенклатура.Выбрать(); 

Пока Выборка.Следующий() Цикл 
    Стр = СтрЗаменить(Выборка.Наименование, Символ(34), "%квч%"); 
    Код = Строка(Выборка.Код) + Символ(34); 
    Текст.ДобавитьСтроку(Код + Стр); 
КонецЦикла; 

Текст.Записать("c:\temp\text.txt");


Как загрузить данные из текстового файла?

Текст = Новый ТекстовыйДокумент; 
Текст.Прочитать("c:\temp\text.txt"); 

Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл 
    Стр = Текст.ПолучитьСтроку(НомерСтроки); 
    Позиция = Найти(Стр, Символ(34)); 
    Код = Сред(Стр, 1, Позиция-1); прНаименование = Сред(Стр, Позиция + 1); 
    Наименование = СтрЗаменить(прНаименование, "%квч%", Символ(34)); 

    Сообщить(Код + "-" + Наименование); 
КонецЦикла;


Работа с текстом. Модель последовательного доступа

Путь = "c:\temp\text.txt"; 
Текст = Новый ЗаписьТекста(Путь, КодировкаТекста.UTF8); 
Выборка = Справочники.Номенклатура.Выбрать(); 

Пока Выборка.Следующий() Цикл 
    Текст.ЗаписатьСтроку(Выборка.Наименование); 
КонецЦикла; 

Текст.Закрыть(); 



Путь = "c:\temp\text.txt"; 
Текст = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8); 
Стр = Текст.ПрочитатьСтроку(); 

Пока Стр <> Неопределено Цикл 
    Стр = Текст.ПрочитатьСтроку(); 
    Сообщить(Стр); 
КонецЦикла;


XML

Как из одной базы перенести документ в другую базу?

// Выгрузить в файл xml. 
ЗаписьXML=Новый ЗаписьXML(); 
ЗаписьXML.ОткрытьФайл("c:\doc.xml"); 
ЗаписьXML.ЗаписатьНачалоЭлемента("Root"); 

// Получить объект по ссылке. 
ВыгружаемыйОбъект=Документ.ПолучитьОбъект(); 

// С помощью средств сериализации записать объект в файл. 
ЗаписатьXML(ЗаписьXML,ВыгружаемыйОбъект); 

ЗаписьXML.ЗаписатьКонецЭлемента(); 
ЗаписьXML.Закрыть(); 



ЧтениеXML=Новый ЧтениеXML(); 
ЧтениеXML.ОткрытьФайл("c:\doc.xml"); 

// Текущим становится элемент Root. 
ЧтениеXML.Прочитать(); 

// Текущим становится элемент с документом. 
ЧтениеXML.Прочитать(); 

// Проверить сможет ли с данным значением "справиться" 
// система сериализации в данной базе. 
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда 

    // Получить ДокументОбъект.РеализацияТоваровУслуг 
    ЗагружаемыйОбъект=ПрочитатьXML(ЧтениеXML); 
    
    ЗагружаемыйОбъект.Записать(); 
КонецЕсли; 

ЧтениеXML.Закрыть();


Как можно сформировать XML-документ произвольной структуры?

Запись = Новый ЗаписьXML; 
Запись.ОткрытьФайл(ПутьКФайлу); 
Запись.ЗаписатьОбъявлениеXML(); 
Запись.ЗаписатьНачалоЭлемента("Корневой"); 
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура"); 
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре"); 

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); 

Пока Выборка.Следующий() Цикл 
    Если Выборка.ЭтоГруппа Тогда 
        Продолжить; 
    КонецЕсли; 

    Запись.ЗаписатьНачалоЭлемента("Элемент"); 
    Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код)); 
    Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул)); 
    Запись.ЗаписатьТекст(Выборка.Наименование); 
    Запись.ЗаписатьКонецЭлемента(); 
КонецЦикла; 

Запись.ЗаписатьКонецЭлемента(); 
Запись.Закрыть();


Как сформировать XML-документ в строку?

Запись = Новый ЗаписьXML(); 
Запись.УстановитьСтроку(); 
Запись.ЗаписатьОбъявлениеXML(); 
Запись.ЗаписатьНачалоЭлемента("Корневой"); 
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура"); 
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре"); 

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); 

Пока Выборка.Следующий() Цикл 
    Если Выборка.ЭтоГруппа Тогда 
        Продолжить; 
    КонецЕсли; 

    Запись.ЗаписатьНачалоЭлемента("Элемент"); 
    Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код)); 
    Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул)); 
    Запись.ЗаписатьТекст(Выборка.Наименование); 
    Запись.ЗаписатьКонецЭлемента(); 
КонецЦикла; 

Запись.ЗаписатьКонецЭлемента(); 
Стр = Запись.Закрыть(); 
Сообщить(Стр);


Как можно обмениваться данными, используя XML-сериализацию через файлы других форматов?

ЗаписьXML = Новый ЗаписьXML(); 
ЗаписьXML.УстановитьСтроку(); 
Данные = СсылкаНаДокумент.ПолучитьОбъект(); 
ЗаписатьXML(ЗаписьXML, Данные); 
ТекстСообщения = ЗаписьXML.Закрыть(); 

Текст = Новый ТекстовыйДокумент; 
Текст.УстановитьТекст(ТекстСообщения); 
Текст.Записать(ПутьКФайлу); 



Текст = Новый ТекстовыйДокумент; 
Текст.Прочитать(ПутьКФайлу); 

ЧтениеXML = Новый ЧтениеXML(); 
ЧтениеXML.УстановитьСтроку(Текст.ПолучитьТекст()); 

Если ВозможностьЧтенияXML(ЧтениеXML) Тогда 
    Данные = ПрочитатьXML(ЧтениеXML);     
    Данные.Записать(); 
КонецЕсли;


Как можно загрузить XML документ произвольной структуры?

Чтение = Новый ЧтениеXML; 
Чтение.ОткрытьФайл(ПутьКФайлу); 

Пока Чтение.Прочитать() Цикл 

    // Прочитать "структурные части" элементов. 
    // Проверить, какая часть элемента - текущая. 
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 
        ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла); 

        // Атрибуты элементов можно читать только если текущая часть - 
        // начало элемента 
        Пока Чтение.ПрочитатьАтрибут() Цикл 

            // Прочитать данные узла атрибута. 
            ТипУзла = Чтение.ТипУзла; 
            Имя = Чтение.Имя; 
            Значение = Чтение.Значение; 

            // Обработать полученные значения.
 
        КонецЦикла;

    ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда 

        // В примере просто выводим текст в окно сообщений. 
        Сообщить("Текст:" + Чтение.Значение); 

    ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда 

        // В примере просто выводим признак конца элемента 
        // в окно сообщений Сообщить("--Конец:" + Чтение.Имя); 

    КонецЕсли; 

КонецЦикла;


DBF-файлы

Как можно построить выгрузку-загрузку посредством файлов DBF?

БД = Новый XBase; 
БД.Поля.Добавить("CODE", "S", 5); 
БД.Поля.Добавить("NAME", "S", 40); 
БД.СоздатьФайл(Путь + "start.dbf", Путь + "index.cdx"); 
БД.Индексы.Добавить("IDXCODE", "CODE"); 
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "index.cdx"); 
БД.АвтоСохранение = Истина; 

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); 
Пока Выборка.Следующий() Цикл 
    БД.Добавить(); 
    БД.CODE = Выборка.Код; 
    БД.NAME = Выборка.Наименование; 
КонецЦикла; 

БД.ЗакрытьФайл(); 



БД = Новый XBase; 
БД.ОткрытьФайл(Путь + "start.dbf", Путь + "index.cdx"); 
БД.ТекущийИндекс = БД.Индексы.IDXCODE; 

Пока БД.Следующая() Цикл 
    Сообщить(БД.CODE); 
    Сообщить(БД.NAME); 
КонецЦикла; 

БД.ЗакрытьФайл();


Работа с HTML-документами

Заполнение HTML-анкет

Процедура URLПриИзменении(Элемент) 
    ЭлементыФормы.ПолеHTML.Перейти(URL); 
КонецПроцедуры 



Процедура ПолеHTMLДокументСформирован(Элемент) 

    // Событие возникает и при открытии формы, когда в реквизите 
    // URL содержится пустая строка. 
    Если URL <> "" Тогда 
        Док = ЭлементыФормы.ПолеHTML.Документ; 

        // При попытке обратиться к несуществующему свойству 
        // произойдет ошибка 
        Док.forms["frm"].fam.Value = "Иванов"; 
        Док.forms["frm"].nam.Value = "Иван"; 
        Док.forms["frm"].otch.Value = "Иванович"; 
    КонецЕсли; 

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


Работа с файлами

Как организовать диалог выбора текстового файла?

Режим = РежимДиалогаВыбораФайла.Открытие; 
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); 
ДиалогОткрытияФайла.ПолноеИмяФайла = ""; 
Фильтр = "Текст(*,txt)|*.txt"; 
ДиалогОткрытияФайла.Фильтр = Фильтр; 
ДиалогОткрытияФайла.МножественныйВыбор = Ложь; 
ДиалогОткрытияФайла.Заголовок = "Выберите файл"; 

Если ДиалогОткрытияФайла.Выбрать() Тогда 
    ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла; 
КонецЕсли;



Режим = РежимДиалогаВыбораФайла.ВыборКаталога; 
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); 
ДиалогОткрытия.Каталог = ""; 
ДиалогОткрытия.МножественныйВыбор = Ложь; 
ДиалогОткрытия.Заголовок = "Выберите каталог"; 

Если ДиалогОткрытия.Выбрать() Тогда 
    ПутьККаталогу = ДиалогОткрытия.Каталог; 
КонецЕсли;


Как прочитать информацию о файле?

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 
ДиалогОткрытияФайла.Выбрать(); 

Файл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла); 
Текст = "Файл: " + Файл.Имя; 
Текст = Текст + Символы.ПС + "Расширение: " + Файл.Расширение; 
Текст = Текст + Символы.ПС + "Полное имя: " + Файл.ПолноеИмя; 
Текст = Текст + Символы.ПС + "Путь: " + Файл.Путь; 
Текст = Текст + Символы.ПС + "Размер: " + Файл.Размер() + " байт"; 
Текст = Текст + ?(Файл.ПолучитьНевидимость(), Символы.ПС + "Невидимый. ", ""); 
Текст = Текст + ?(Файл.ПолучитьТолькоЧтение(), Символы.ПС + "Только чтение.", ""); 
Текст = Текст + Символы.ПС + "Последнее изменение: " + Файл.ПолучитьВремяИзменения(); 

Сообщить(Текст);


Как получить список файлов в указанном каталоге?

МассивНайденных = НайтиФайлы("C:\Обмен\Входящие", "*.xml"); 

Для Каждого Файл из МассивНайденных Цикл 
    Сообщить(Файл.Имя); 

    // Обработать найденные файлы. 

КонецЦикла;


Как переместить файл, выложенный на ftp к себе на локальный компьютер?

Если НайтиФайлы("C:\Temp\Sklad.xml") <> Неопределено Тогда 
    УдалитьФайлы("C:\Temp\ Sklad.xml "); 
КонецЕсли; 

Если НайтиФайлы("ftp://111.222.333.4/Sklad.xml") <> Неопределено Тогда 
    ПереместитьФайл("ftp://111.222.333.4/Sklad.xml", "C:\Temp\ Sklad.xml"); 
    Сообщить("Файл перемещен."); 

Иначе 
    Сообщить("Действие не выполнено. Файл в источнике не найден."); 
КонецЕсли;


Как разделить большой файл на несколько файлов определенного размера?

//Разделяем указанный файл на несколько частей заданного размера
РазделитьФайл("D:/1/MyFile.xml", 1024*1024, "D:/1/11/"); 

// Обратная операция - объединение нескольких файлов в один
ОбъединитьФайлы("D:/1/11/MyFile.xml.*", "D:/1/11/MyProg.exe");


Как поместить файлы в архив?

ФайлАрхива = Новый ЗаписьZipФайла("C:\Arch.zip", , , 
                  МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный); 
ФайлАрхива.Добавить("C:\Inetpub\wwwroot\Applic1\*.*", 
                  РежимСохраненияПутейZIP.СохранятьОтносительныеПути, 
                  РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); 
ФайлАрхива.Записать(); 

ФайлАрхива = Новый ЧтениеZIPФайла("C:\Arch.zip"); 
ФайлАрхива.ИзвлечьВсе("C:\Open", РежимВосстановленияПутейФайловZIP.Восстанавливать); 
ФайлАрхива.Закрыть();


Как сравнить два текстовых файла?

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 
ДиалогОткрытияФайла.Фильтр = "Текстовый документ(*.txt)|*.txt"; 

// Выбрать первый файл. 
ДиалогОткрытияФайла.Заголовок = "Выберите первый файл:"; 
ДиалогОткрытияФайла.Выбрать(); 
ИмяФайла1 = ДиалогОткрытияФайла.ПолноеИмяФайла; 

// Выбрать второй файл. 
ДиалогОткрытияФайла.Заголовок = "Выберите второй файл:"; 
ДиалогОткрытияФайла.Выбрать(); 
ИмяФайла2 = ДиалогОткрытияФайла.ПолноеИмяФайла; 

// Сравнить выбранные файлы. 
СравнениеФайлов = Новый СравнениеФайлов(); 
СравнениеФайлов.ПервыйФайл = ИмяФайла1; 
СравнениеФайлов.ВторойФайл = ИмяФайла2; 
СравнениеФайлов.ИгнорироватьПустоеПространство = Истина; 
СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; 

СравнениеФайлов.ПоказатьРазличия();


Как организовать контроль формирования файла внешним приложением?

Процедура ПроверкаНаличияФайла() ИмяКаталога = "c:\temp"; 

    Маска = "*.xml"; 
    НайденныеФайлы = НайтиФайлы(ИмяКаталога, Маска); 

    Для Каждого Файл Из НайденныеФайлы Цикл 
        Сообщить(Файл.Имя); 
    КонецЦикла; 

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


ПодключитьОбработчикОжидания("ПроверкаНаличияФайла", 10);


ActiveX

Как использовать элементы управления ActiveX?

Режим = РежимДиалогаВыбораФайла.Открытие; 
ДиалогФыбораФайла = Новый ДиалогВыбораФайла(Режим); 
ДиалогФыбораФайла.Фильтр = "Все файлы (все)|*.*"; 
ДиалогФыбораФайла.Заголовок = "Выберите медиа файл"; 

Если ДиалогФыбораФайла.Выбрать() Тогда 
    ПутьКМедиаФайлу = ДиалогФыбораФайла.ПолноеИмяФайла; 

    // В зависимости от варианта объекта запись полного пути к файлу 
    // производится либо в свойство FileName, либо в свойство URL. 
    Попытка 
        ЭлементыФормы.WMP.FileName = ПутьКМедиаФайлу; 
    Исключение 
        ЭлементыФормы.WMP.URL = ПутьКМедиаФайлу; 
    КонецПопытки; 
КонецЕсли;


Макеты ActiveDocument

Как сформировать новый договор на основании файла Microsoft Word?

Договор = ПолучитьМакет("Договор"); 

// Получить объект из макета. 
MSWord = Договор.Получить(); 
НаименованиеКонтрагента = "ООО Торгуем всем"; 

Попытка 
    Документ = MSWord.Application.Documents(1); 
    Документ.Activate(); 

    // Получить объект, который будем использовать для поиска и замены. 
    Замена = Документ.Content.Find; 

    // Заменить заранее определенные ключевые конструкции на требуемый текст. 
    Замена.Execute("<НазваниеКомпании>", Ложь, Истина, Ложь, , , 
                           Истина, , Ложь, НаименованиеКонтрагента); 

    // Далее аналогично для остальных ключевых конструкций. 

    // Делаем видимым приложение и активизируем его. 
    MSWord.Application.Visible = Истина; 
    MSWord.Activate(); 

Исключение 

    // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. 
    Сообщить(ОписаниеОшибки()); 
    MSWord.Application.Quit(); 

КонецПопытки;


Работа с Интернет

Работа с электронной почтой

Как организовать работу с электронной почтой через установленного почтового клиента?

Почта = Новый Почта; 
Почта.Подключиться("login", "password"); 

Сообщ = Новый ПочтовоеСообщение; 
Сообщ.Текст = "Доброе время суток!!!!"; 
Сообщ.Тема = "Срочно в номер!!!"; 

Данные = Новый ДвоичныеДанные("c:\attach.txt"); 

Сообщ.Вложения.Добавить(Данные,"attach.txt"); 
Сообщ.Получатели.Добавить("hline@1c.ru"); 

Почта.Послать(Сообщ, Ложь); 
Почта.Отключиться(); 



Почта = Новый Почта; 
Почта.Подключиться("login", "password"); 

Выборка = Почта.Выбрать(Истина, Ложь); 
Для Каждого Сообщение Из Выборка Цикл 
    Сообщить("Тема: " + Строка(Сообщение.Тема)); 
    Сообщить("Текст: " + Строка(Сообщение.Текст)); 

    Для Каждого Вложение Из Сообщение.Вложения Цикл 
        Сообщить(Строка(Вложение.Наименование)); 
    КонецЦикла; 
КонецЦикла;


Как организовать работу с почтой без установленного почтового клиента на компьютере пользователя?

// Сформировать почтовый профиль. 
// При отправке нет необходимости указывать настройки, связанные с POP сервером. 
ИПП = Новый ИнтернетПочтовыйПрофиль; 
ИПП.АдресСервераSMTP = Константы.АдресСервераSMTP.Получить(); 
ИПП.ВремяОжидания = Константы.ВремяОжидания.Получить(); 
ИПП.Пароль = Константы.Пароль.Получить(); 
ИПП.ПарольSMTP = Константы.ПарольSMTP.Получить(); 
ИПП.Пользователь = Константы.Пользователь.Получить(); 
ИПП.ПользовательSMTP = Константы.ПользовательSMTP.Получить(); 
ИПП.ПортSMTP = Константы.ПортSMTP.Получить(); 

// Создать сообщение. 
Сообщение = Новый ИнтернетПочтовоеСообщение; 
Сообщение.Получатели.Добавить("hline@1c.ru"); 
Сообщение.Отправитель.Адрес = "booktest@yandexyandex.ru"; 
Сообщение.Тема = "Срочно в номер!"; 
Сообщение.Тексты.Добавить("Доброе время суток!"); 

Вложение = Новый ДвоичныеДанные(ПутьКФайлуВложения); 

Сообщение.Вложения.Добавить(Вложение,"attach.txt"); 

// Подключиться и отправить. 
Почта = Новый ИнтернетПочта; 
Почта.Подключиться(Профиль); 
Почта.Послать(Сообщение); 
Почта.Отключиться(); 


// Формирование почтового профиля. 
// При получении нет необходимости указывать настройки, связанные с SMTP сервером.
СостояниеПриема = "Подключение к серверу"; 
ИПП = Новый ИнтернетПочтовыйПрофиль; 
ИПП.АдресСервераPOP3 = Константы.АдресСервераPOP3.Получить(); 
ИПП.ВремяОжидания = Константы.ВремяОжидания.Получить(); 
ИПП.Пароль = Константы.Пароль.Получить(); 
ИПП.Пользователь = Константы.Пользователь.Получить(); 
ИПП.ПортPOP3 = Константы.ПортPOP3.Получить(); 

Соединение = Новый ИнтернетПочта; 
Соединение.Подключиться(ИПП); 
СостояниеПриема = "Получение выборки писем"; 
Выборка = Соединение.Выбрать(ЗабиратьССервера); 
СостояниеПриема = "Создание документов - писем"; 
КоличествоВВыборке = Выборка.Количество(); 
Индекс = 1; 

Для Каждого Письмо Из Выборка Цикл 
    ТекПозиция = Окр(Индекс*100/КоличествоВВыборке); 
    Если ТекПозиция <> Позиция Тогда 
        Позиция = ТекПозиция; 
    КонецЕсли; 
    
    Док = Документы.Письмо.СоздатьДокумент(); 
    Док.Тема = Письмо.Тема; 
    СтрПолучатели = ""; 

    Для Каждого Адрес Из Письмо.Получатели Цикл 
        СтрПолучатели = СтрПолучатели + Адрес.Адрес + ","; 
    КонецЦикла; 

    Док.Получатели = СтрПолучатели; 
    Если ТипЗнч(Письмо.Отправитель) = Тип("Строка") Тогда 
        Отправитель = Письмо.Отправитель; 
    Иначе 
        Отправитель = Письмо.Отправитель.Адрес; 
    КонецЕсли; 

    Док.Отправитель = Отправитель; 
    Содержание = ""; 

    Для Каждого ТекстСообщения Из Письмо.Тексты Цикл 
        Содержание = Содержание + ТекстСообщения.Текст + Символы.ПС; 
    КонецЦикла; 

    Док.Содержание = Содержание; 

    Индекс = Индекс + 1; 

    Док.Записать(); 
КонецЦикла; 

Соединение.Отключиться();



Работа с файлами

Загрузка файлов по FTP

Процедура ЗагрузитьОтмеченные(Кнопка) 

    Сервер = Новый FTPСоединение(FTPServer); 

    Для Каждого Файл Из ПолеСписка Цикл 
        Если Файл.Пометка Тогда 
            Сервер.Получить(Файл.Значение.ПолноеИмя, "с:\temp" + 
                                                   Файл.Значение.ПолноеИмя); 
            Файл.Пометка = Ложь; 
        КонецЕсли; 
    КонецЦикла; 

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


Процедура Просмотреть(Кнопка)
 
    Сервер = Новый FTPСоединение(FTPServer); 
    МассивФайлов = Сервер.НайтиФайлы("/","*.*"); 

    Для Каждого Файл Из МассивФайлов Цикл 
        Если Файл.ЭтоФайл() Тогда 
            ПолеСписка.Добавить(Файл, Файл.Имя) 
        КонецЕсли; 
    КонецЦикла; 

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


Выполнение HTTP запроса

СерверИсточник = HTTPserver; 
Адрес = "/price.asp"; 
ИмяВходящегоФайла = "c:\temp\input.html"; 
НТТР = Новый HTTPСоединение(СерверИсточник); 
НТТР.Получить(Адрес, ИмяВходящегоФайла); 
ВходящийФайл = Новый Файл(ИмяВходящегоФайла);


Как установить HTTP соединение если подключение через прокси (proxy) сервер

// Укажем настройки прокси-сервера
ПроксиСервер = Новый ИнтернетПрокси;
ПроксиСервер.Пользователь = "Кинев";
ПроксиСервер.Пароль = "12345";
ПроксиСервер.Установить("http", "10.1.1.223", "3100");

СерверИсточник = "www.cennic-etiketka.com"; 
Адрес = "/price.asp"; 
ИмяВходящегоФайла = "c:\temp\input.html";
// Укажем в HTTP соединении что у нас есть проксик  
НТТР = Новый HTTPСоединение(СерверИсточник,,,, ПроксиСервер); 
НТТР.Получить(Адрес, ИмяВходящегоФайла); 
ВходящийФайл = Новый Файл(ИмяВходящегоФайла);


Работа с COM-объектами

Как из одной базы 1С:Предприятие 8.0 перенести остатки товаров в другую базу, используя COM-соединение.

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

Запрос.УстановитьПараметр("ДатаПереноса", ДатаПереноса); 

V8 = Новый COMОбъект("V8.ComConnector"); 
Попытка 
    Открытие = V8.Connect("File=""" + Путь + """;Usr=""Usr1"";"); 
Исключение 
    Предупреждение("База данных не открыта!!!"); 
    Возврат; 
КонецПопытки; 

Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); 
МенеджерДокумента = Открытие.Документы.ОприходованиеТоваров; 
МенеджерНоменклатуры = Открытие.Справочники.Номенклатура; 
МенеджерОрганизаций = Открытие.Справочники.Организации; 

// Менеджеры остальных справочников:  

Пока Выборка.Следующий() Цикл 
    Документ = МенеджерДокумента.СоздатьДокумент(); 
    Код = Выборка.Организация.Код; 
    Организация = МенеджерОрганизаций.НайтиПоКоду(Код); 
    Если Организация.Пустая() Тогда 
        Организация = МенеджерОрганизаций.СоздатьЭлемент(); 
        Организация.Код = Код; 

        // Остальные реквизиты: 

        Организация.Записать(); 
    КонецЕсли; 

    // Обработка остальных реквизитов, справочников: 

    ВыборкаПодчиненная = Выборка.Выбрать(); 
    Пока ВыборкаПодчиненная.Следующий() Цикл 

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

    КонецЦикла; 

    Документ.Записать(РежимЗаписиДокумента.Проведение); 

КонецЦикла;


Пример обращения к программе 1С:Предприятие 8.0 из модуля MS Excel через COM-соединение

Sub load() 

    Dim cntr As Object 
    Dim trade As Object 
    Dim Элемент As Object 
    Dim СправочникКонтрагентов As Object 
    Dim ГруппаКонтрагентов As Object 

    Set cntr = CreateObject("V8.COMConnector") 
    Set trade = cntr.Connect("File=""C:\DemoTrd4"";Usr=""Федоров (администратор)"";") 
    Set СправочникКонтрагентов = trade.Справочники.Контрагенты 
    Set ГруппаКонтрагентов = СправочникКонтрагентов.СоздатьГруппу() 
    ГруппаКонтрагентов.Наименование = "***** Экспорт из Excel ******" 
    ГруппаКонтрагентов.Записать 

    N = 11 'Количество строк в списке поставщиков 

    For Count = 3 To N 
        Set Элемент = СправочникКонтрагентов.СоздатьЭлемент() 
        Элемент.Код = Application.Cells(Count, 1).Value 
        Элемент.Наименование = Application.Cells(Count, 2).Value 
        Элемент.ИНН = Application.Cells(Count, 3).Value 
        Элемент.НаименованиеПолное = Application.Cells(Count, 4).Value 
        Элемент.Родитель = ГруппаКонтрагентов.Ссылка 
        Элемент.Записать 
    Next Count 
End Sub


Как организовать считывание данных из файлов *.xls?

Док = ПолучитьCOMОбъект(Путь + "ценыконкурентов.xls"); 
КоличествоСтраниц = 2; 

Для ТекНомер = 1 По КоличествоСтраниц Цикл 
    Контрагент = Док.Sheets(ТекНомер).Cells(1,1).Value; 
    Товар = Док.Sheets(ТекНомер).Cells(2,2).Value; 
    Цена = Док.Sheets(ТекНомер).Cells(2,3).Value; 

    счСтроки = 3; 
    Сообщить(Строка(Товар) + "-" + Строка(Цена)); 

        // можно использовать другой признак окончания данных на листе 
    Пока СокрЛП(Товар) <> "" Цикл 
        Товар = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value; 
        Цена = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value; 
        Сообщить(Строка(Товар) + "-" + Строка(Цена)); 
        счСтроки = счСтроки + 1; 
    КонецЦикла; 
КонецЦикла; 

Док.Application.Quit();


Как запустить макрос, записанный в книге Microsoft Excel?

Попытка 

    // Создать объект. 
    Excel = Новый COMОбъект("Excel.Application"); 

Исключение 
    Сообщить("Не удалось инициализировать Excel"); 
    Возврат; 
КонецПопытки; 

Попытка 

    // В реальном примере путь может быть совершенно другим. 
    Excel.Workbooks.Open("c:\doc.xls"); 

    // Запустить макрос с именем "Оформление".
    Excel.Run("Оформление"); 
    Excel.Visible = Истина; 

Исключение 

    // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. 
    Сообщить(ОписаниеОшибки()); 
    Excel.Quit(); 
КонецПопытки;


Как создать документ программы Microsoft Excel по оформлению, приведенному в другом документе?

Попытка 

    // Создать объект. 
    Excel = Новый COMОбъект("Excel.Application"); 

Исключение 
    Сообщить("Не удалось инициализировать Excel"); 
    Возврат; 
КонецПопытки; 

Попытка 

    // Если при отработке следующего фрагмента кода произойдет ошибка 
        // объект "Excel.Application" будет закрыт. 

    // Открыть книгу, содержащую шаблон оформления. 
    Excel.Workbooks.Open("c:\doc.xls"); 
    НомерКниги = Excel.Workbooks.Count; 
    Книга = Excel.Workbooks.Item(НомерКниги); 
    Лист = Excel.ActiveSheet; 

    // Создать новую книгу (в нее будем записывать данные). 
    Excel.Application.Workbooks.Add(1); 
    НомерКниги = Excel.Workbooks.Count; 
    КнигаНовая = Excel.Workbooks.Item(НомерКниги); 
    ЛистНовый = Excel.ActiveSheet; 

    // Установить ширину колонки в новой книге. 
    ЛистНовый.Columns("B").ColumnWidth = 40; 

    // Копировать область из книги-шаблона в новую книгу. 
    Лист.Range("Шапка").Copy(ЛистНовый.Range("A1:E3")); 
    ЛистНовый.Cells(1, 1).Value = "Наименование контрагента"; 

    // Считаем, что в нашем случае необходимо сформировать только 
        // две строки табличной части 
    Для НомерСтроки = 1 По 2 Цикл 
        Лист.Range("Строка").Copy(ЛистНовый.Range(ЛистНовый.Cells(3 + НомерСтроки,1), 
                                                ЛистНовый.Cells(3 + НомерСтроки, 5))); 

        // Записать значение в ячейку листа новой таблицы 
        // в реальном примере данные будут браться из информационной базы 
        ЛистНовый.Cells(3 + НомерСтроки, 1).Value = НомерСтроки; 
        ЛистНовый.Cells(3 + НомерСтроки, 2).Value = "Наименование номенклатурной позиции "  
                                                               + Строка(НомерСтроки); 
        ЛистНовый.Cells(3 + НомерСтроки, 3).Value = НомерСтроки; 
        ЛистНовый.Cells(3 + НомерСтроки, 4).Value = НомерСтроки; 
        ЛистНовый.Cells(3 + НомерСтроки, 5).Value = НомерСтроки; 
    КонецЦикла; 

    Excel.Visible = Истина; 

Исключение 
    Сообщить(ОписаниеОшибки()); 
    Excel.Quit(); 
КонецПопытки;


Как выгрузить прайс-лист в документ программы Microsoft Word?

Попытка 
    MSWord = Новый COMОбъект("Word.Application"); 
Исключение 
    Сообщить("Не удалось инициализировать Microsoft Word"); 
    Возврат; 
КонецПопытки; 

Запрос = Новый Запрос; 

// Получить данные для формируемого прайс-листа. 
Запрос.Текст = "ВЫБРАТЬ 
|    ЦеныКомпанииСрезПоследних.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения, 
|    ЦеныКомпанииСрезПоследних.Цена, 
|    ЦеныКомпанииСрезПоследних.Номенклатура.Наименование КАК Номенклатура, 
|    1 КАК Количество 
|ИЗ 
|    РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &ТипЦен) 
|    КАК ЦеныКомпанииСрезПоследних 
|УПОРЯДОЧИТЬ ПО 
|    Номенклатура 
|ИТОГИ Количество(Количество) ПО 
|    ОБЩИЕ"; 

Запрос.УстановитьПараметр("Дата", ТекущаяДата()); 
Запрос.УстановитьПараметр("ТипЦен", ТипЦен); 

Результат = Запрос.Выполнить(); 

Попытка 

    // Создать новый документ 
    MSWord.Documents.Add(); 
    Документ = MSWord.ActiveDocument(); 

    // Добавить новый параграф в созданный документ. 
    Документ.Paragraphs.Add(); 
    НомерПараграфа = Документ.Paragraphs.Count(); 
    Параграф = Документ.Paragraphs.Item(НомерПараграфа); 

    // В созданный параграф вставить новый "диапазон" 
    // и разместить в нем текст "Прайс-Лист". 
    Параграф.Range.InsertAfter("Прайс-Лист"); 

    // Установить стиль параграфа "Заголовок 1" (он должен быть определен). 
    Параграф.Range.Style="Заголовок 1"; 
    
    Документ.Paragraphs.Add(); 
    НомерПараграфа = Документ.Paragraphs.Count(); 
    Параграф = Документ.Paragraphs.Item(НомерПараграфа); 
    Параграф.Range.InsertAfter("Сформирован на дату: " + Строка(ТекущаяДата())); 
    Параграф.Range.Style = "Обычный"; 

    ВыборкаКоличества = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); 
    ВыборкаКоличества.Следующий(); 
    КоличествоСтрок = ВыборкаКоличества.Количество; 

    Документ.Paragraphs.Add();
    НомерПараграфа = Документ.Paragraphs.Count(); 
    Параграф=Документ.Paragraphs.Item(НомерПараграфа); 

    // Вставить таблицу с количеством строк равным количеству записей 
    // в выборке результата запроса и с тремя колонками 
    Документ.Tables.Add(Параграф.Range, КоличествоСтрок, 3); 

    // Получить таблицу как объект в отдельную переменную 
    // учитывая тот факт, что таблица у нас единственная 
    Таблица = Документ.Tables.Item(1); 

    // Записать данные в ячейку таблицы строка №1, колонка №1 
    Таблица.Cell(1,1).Range().InsertAfter("Номенклатура"); 

    // Установить цвет фона в ячейке 
    Таблица.Cell(1,1).Shading.BackgroundPatternColor = 16776960; 
    Таблица.Cell(1,2).Range().InsertAfter("Цена"); 
    Таблица.Cell(1,2).Shading.BackgroundPatternColor = 16776960; 
    Таблица.Cell(1,3).Range().InsertAfter("Ед.Изм."); 
    Таблица.Cell(1,3).Shading.BackgroundPatternColor = 16776960; 

    НомерСтроки = 1; 
    
    Выборка = ВыборкаКоличества.Выбрать(); 
    Пока Выборка.Следующий() Цикл НомерСтроки = НомерСтроки + 1; 
        Таблица.Cell(НомерСтроки,1).Range().InsertAfter(Выборка.Номенклатура); 
        Таблица.Cell(НомерСтроки,2).Range().InsertAfter(Строка(Выборка.Цена)); 
        Таблица.Cell(НомерСтроки,3).Range().InsertAfter(Выборка.ЕдиницаИзмерения); 
    КонецЦикла; 

    MSWord.Visible = Истина; 
    MSWord.Activate(); 

Исключение 

    // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. 
        Сообщить(ОписаниеОшибки()); 
    MSWord.Application.Quit(); 
КонецПопытки;


Как выполнить запрос к произвольной базе данных SQL?

стрПодключения = "Driver={SQL Server};" 
стрПодключения = стрПодключения + ИмяСервера + ";"; 
стрПодключения = стрПодключения +"Uid=" + ИмяПользователя + ";"; 
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";"; 
стрПодключения = стрПодключения + "DataBase =" + ИмяБазы + ";"; 
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";"; 

Connection = Новый COMОбъект("ADODB.Connection"); 
Connection.OpenServer = стрПодключения; 

RS = Новый COMОбъект("ADODB.Recordset"); 

// Запрос к базе на языке SQL запросов. 
RS.Open("Select * from TradeUnit", Connection); 

Пока RS.EOF() = 0 Цикл 

    // Можно обращаться и обрабатывать значения полей выборки. 
    ИД = RS.Fields("ID").Value; 
    Код = RS.Fields("Code").Value; 

    // Обработка других полей 

    RS.MoveNext(); 
КонецЦикла; 

RS.Close(); 
Connection.Close();


Automation Client/Server (OLE)

Как из одной базы 1С:Предприятие 8.0 интерактивно заполнить документ в другой базе, используя Automation Client/Server (OLE)?

V8 = Новый COMОбъект("V8.Application"); 

Попытка 
    Открытие = V8.Connect("File=""" + Путь + """;Usr=""Usr1"";"); 
Исключение 
    Предупреждение("База данных не открыта!!!"); 
    Возврат; 
КонецПопытки; 

МенеджерДокумента = V8.Документы.РеализацияТоваров; 
Документ = МенеджерДокумента.СоздатьДокумент(); 
ФормаДокумента = Документ.ПолучитьФорму(); 
ФормаДокумента.ОткрытьМодально();


Как из таблицы Excel загрузить список номенклатуры в 1С:Предприятие с возможностью редактирования?

Sub load() Dim trade As Object Dim СправочникНоменклатуры As Object Dim ГруппаНоменклатуры As Object Dim Элемент As Object Dim Форма As Object Set trade = CreateObject("V8.Application") trade.Connect("File=""C:\DemoTrd4"";Usr=""Федоров (администратор)"";") Set СправочникНоменклатуры = trade.Справочники.Номенклатура Set ГруппаНоменклатуры = СправочникНоменклатуры.СоздатьГруппу() ГруппаНоменклатуры.Наименование = "***** Экспорт из Excel ******" ГруппаНоменклатуры.Записать N = 4 'Количество загружаемых элементов справочника For Count = 2 To 5 Set Элемент = СправочникНоменклатуры.СоздатьЭлемент() Элемент.Код = Application.Cells(Count, 1).Value Элемент.Артикул = Application.Cells(Count, 2).Value Элемент.Наименование = Application.Cells(Count, 3).Value Элемент.НаименованиеПолное = Application.Cells(Count, 4).Value Элемент.Родитель = ГруппаНоменклатуры.Ссылка Set Форма = Элемент.ПолучитьФорму() Форма.ОткрытьМодально Next Count End Sub

Обмен данными

Как организовать работу удаленных складов?

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) 

    Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
        Если ЭлементДанных.Склад <> Склад Тогда 
            ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; 
        КонецЕсли; 
    КонецЕсли; 

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


Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) 

    Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
        ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять; 
    КонецЕсли; 

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


Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) 

    Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
        Если ПланыОбмена.ИзменениеЗарегистрировано(Ссылка, ЭлементДанных) Тогда 
            ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; 
        КонецЕсли; 
    КонецЕсли; 

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


Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет?

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) 

    Если НеВыгружатьОбъекты Тогда 

        // Проверить "ненужные типы", условие может содержать проверку 
        // на несколько типов. 
        Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
            ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; 
        КонецЕсли; 
    КонецЕсли; 

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


Как просмотреть объекты, для которых зарегистрированы изменения?

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

Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения); 
Пока Выборка.Следующий() Цикл 
    Данные = Выборка.Получить(); 
    Сообщить(Данные); 
КонецЦикла; 

ЗапСообщения.ПрерватьЗапись(); 

Стр = ЗаписьXML.Закрыть();


Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8.0?

Процедура Выгрузка(Элемент) 

    Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы 

    ЗаписьXML = Новый ЗаписьXML(); 
    ЗаписьXML.ОткрытьФайл(Путь + "выгрузка.xml"); 
    Узел = ПланыОбмена.Поставка.НайтиПоКоду("Маг1"); 

    ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); 
    ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел); 

    Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения); 

    Пока Выборка.Следующий() Цикл 
        Данные = Выборка.Получить(); 

        Если ТипЗнч(Данные) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
            ВыгрузкаРеализации(ЗаписьXML, Данные); 
    
        Иначе // все остальные объекты 
            ЗаписатьXML(ЗаписьXML, Данные); 
        КонецЕсли; 
    КонецЦикла; 

    ЗапСообщения.ЗакончитьЗапись(); 
    ЗаписьXML.Закрыть(); 

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


Процедура ВыгрузкаРеализации(ЗаписьXML, Документ) 

    ЗаписьXML.ЗаписатьНачалоЭлемента("DocumentObject.ПередачаТовара"); 

    ЗаписатьXML(ЗаписьXML, Документ.Ссылка.УникальныйИдентификатор(), 
                "Ref", НазначениеТипаXML.Явное); 
    ЗаписатьXML(ЗаписьXML, Документ.ПометкаУдаления, 
                "DeletionMark",НазначениеТипаXML.Явное); 
    ЗаписатьXML(ЗаписьXML, Документ.ВалютаДокумента, 
                "ВалютаДокумента", НазначениеТипаXML.Явное); 

    // Остальные свойства документа. 

    // Табличная часть. 
    ЗаписьXML.ЗаписатьНачалоЭлемента("Товары"); 

    Для Каждого ТекСтрока Из Документ.Товары Цикл
        ЗаписьXML.ЗаписатьНачалоЭлемента("Row"); 

        ЗаписатьXML(ЗаписьXML, ТекСтрока.Номенклатура, 
                    "Номенклатура", НазначениеТипаXML.Явное); 
        ЗаписатьXML(ЗаписьXML, ТекСтрока.Количество, 
                    "Количество", НазначениеТипаXML.Явное); 

        // Остальные реквизиты табличной части. 

        ЗаписьXML.ЗаписатьКонецЭлемента(); 
    КонецЦикла; 

    ЗаписьXML.ЗаписатьКонецЭлемента(); 
    ЗаписьXML.ЗаписатьКонецЭлемента(); 

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


Процедура Загрузка(Элемент) 

    Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы 

    ЧтениеXML = Новый ЧтениеXML(); 
    ЧтениеXML.ОткрытьФайл(Путь + "выгрузка.xml"); 
    
    ЧтСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); 
    ЧтСообщения.НачатьЧтение(ЧтениеXML); 

    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтСообщения.Отправитель, 
                                                ЧтСообщения.НомерСообщения); 

    Пока ВозможностьЧтенияДанных(ЧтениеXML) Цикл 
        Данные = ПрочитатьДанные(ЧтениеXML); 
        
        Если РазрешениеКоллизий(Данные) Тогда 
            Данные.ОбменДанными.Отправитель = ЧтСообщения.Отправитель; 
            Данные.ОбменДанными.Загрузка = Истина; 
            Данные.Записать(); 
        КонецЕсли; 
    КонецЦикла; 

    ЧтСообщения.ЗакончитьЧтение(); 
    ЧтениеXML.Закрыть(); 

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


Функция ВозможностьЧтенияДанных(ЧтениеXML) 

    ТипXML = ПолучитьXMLТип(ЧтениеXML); 

    Если ТипXML = Неопределено Тогда 
        Возврат Ложь; 
    КонецЕсли; 

    Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И 
             ТипXML.URIПространстваИмен = "" Тогда 
        Возврат Истина; 
    КонецЕсли; 

    Возврат ВозможностьЧтенияXML(ЧтениеXML); 

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


Функция ПрочитатьДанные(ЧтениеXML) 

    ТипXML = ПолучитьXMLТип(ЧтениеXML); 
    
    Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И 
             ТипXML.URIПространстваИмен = "" Тогда 
        Возврат ЧтениеРеализации(ЧтениеXML); 
    КонецЕсли; 

    Возврат ПрочитатьXML(ЧтениеXML); 

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


Функция ЧтениеРеализации(ЧтениеXML) 

    ЧтениеXML.Прочитать(); 

    // Работа со ссылкой документа. 
    ПолученнаяСсылка = ПрочитатьXML(ЧтениеXML); 
    Док = Документы.ПоступлениеТоваров.ПолучитьСсылку(
                  Новый УникальныйИдентификатор(ПолученнаяСсылка)); 

    Документ = Док.ПолучитьОбъект(); 

    Если Документ = Неопределено Тогда 
        Документ = Документы.ПоступлениеТоваров.СоздатьДокумент(); 
        Документ.УстановитьСсылкуНового(Док);
        Документ.Дата = ТекущаяДата; 
        Документ.УстановитьНовыйНомер(); 
    КонецЕсли; 

    Документ.ПометкаУдаления = ПрочитатьXML(ЧтениеXML); 
    Документ.ВалютаДокумента = ПрочитатьXML(ЧтениеXML); 

    // Табличная часть "Товары. 
    // Построчное чтение. 
    ЧтениеXML.Прочитать(); 
    Документ.Товары.Очистить(); 

    Пока ЧтениеXML.Имя = "Row" Цикл 

        // Позиционируемся на узле с номенклатурой. 
        ЧтениеXML.Прочитать(); 
        НоваяСтрока = Документ.Товары.Добавить(); 
        НоваяСтрока.Номенклатура = ПрочитатьXML(ЧтениеXML); 
        НоваяСтрока.Количество = ПрочитатьXML(ЧтениеXML); 

        // Читаем конец узла Row. 
        ЧтениеXML.Прочитать(); 
    КонецЦикла; 

    // Читаем конец табличной части. 
    ЧтениеXML.Прочитать(); 

    // Читаем конец документа. 
    ЧтениеXML.Прочитать(); 

    Возврат(Документ); 

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


Функция РазрешениеКоллизий(Данные) 

    Если ТипЗнч(Данные) = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда 

        Если Не Данные.ЭтоНовый() Тогда 
            СсылкаНаУзел = ПланыОбмена.Поставка.НайтиПоКоду("Опт"); 

        Если ПланыОбмена.ИзменениеЗарегистрировано(СсылкаНаУзел, Данные) Тогда 
        Возврат(Ложь); 
        КонецЕсли; 
    КонецЕсли; 
    КонецЕсли; 

    Возврат(Истина); 

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


Как принудительно зарегистрировать изменения объектов?

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


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


СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1"); 
ДокСсылка = Документы.РеализацияТоваров.НайтиПоНомеру(НомерДок, ДатаПериода); 
Если Не ДокСсылка.Пустая() Тогда 
    ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, ДокСсылка); 
КонецЕсли;


WEB-расширение

Как в форме списка номенклатуры отменить все установленные отборы?

private void commandPanel_ItemCommand(object source, System.Web.UI.WebControls.CommandEventArgs e) { if (e.CommandName = = "ShowAll") { foreach (V8Filter filter in listDS.Filter) { filter.Checked = false; } grid.Refresh(); } }

Как запретить перенос содержимого ячеек в форме списка расходных накладных?

private void Grid_ItemDataBound(object sender, _1C.V8.WebControls.V8GridItemEventArgs e) { foreach (TableCell cell in e.Item.Cells) cell.Wrap = false; }

Как открыть список расходных накладных с отбором, установленным по определенному складу?

Функция ПолучитьЗначениеПоУмолчанию(Пользователь, Свойство) Экспорт 

    Отбор = Новый Структура; 
    Отбор.Вставить("Пользователь", Пользователь); 
    Отбор.Вставить("Настройка", 
        ПланыВидовХарактеристик.НастройкиПользователей.НайтиПоНаименованию(Свойство)); 

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

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


private void Page_Load(object sender, System.EventArgs e) { if (!IsPostBack) { Title.Text = ListDataSource.TableInfo.Presentation; // Добавляемый код. ListDataSource.Connection.Open(); try { ObjectRef currUser = (ObjectRef)V8.Get (ListDataSource.Connection,ListDataSource.Connection.Connection, "глТекущийПользователь"); ObjectRef mainWH = (ObjectRef)V8.Call (ListDataSource.Connection,ListDataSource.Connection.Connection, "ПолучитьЗначениеПоУмолчанию", currUser, "ОсновнойСклад"); if (!mainWH.IsEmpty()) { V8Filter filter = ListDataSource.Filter["Склад"]; filter.Checked = true; filter.Condition = V8FilterCondition.Equal; filter.ValueType1 = ListDataSource.Metadata.TypesInfo[V8.TypeNameFromValue(mainWH)]; filter.Value1 = mainWH; filter.Presentation1 = mainWH.Presentation(ListDataSource.Connection); } } finally { ListDataSource.Connection.Close(); } } } using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using _1C.V8.WebControls; using _1C.V8.Data;

Как добавить кнопку для ввода документа на основании?

V8Grid_onInputOnBasis( '', 'grid', document.getElementById('grid_SelectedItem').value, 'Документ.ПриходнаяНакладная')

Реестр Windows

Как прочитать значение, хранящееся в реестре Windows?

Перем Значение; // В эту переменную запишем значение из реестра
    
RegProv=ПолучитьCOMОбъект(
 "winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"
 );

// Читаем значение ключа StartDate из ветки 
// HKEY_CURRENT_USER\Software\1C\1Cv8\Report в переменную Значение
RegProv.GetStringValue("2147483649","Software\1C\1Cv8\Report","StartDate",Значение);


Как сохранить значение в реестр Windows?

// Создадим ключ, установив значение в текущую дату
RegProv.CreateKey("2147483649","Software\1C\1Cv8\Report"); // создание раздела

// установка значения для ключа
RegProv.SetStringValue("2147483649","Software\1C\1Cv8\Report","StartDate",
                                       Строка(Формат(ТекущаяДата(),"ДФ=ггггММддЧЧммсс")));


[необходимо зарегистрироваться для просмотра ссылки]


ValeryZ Подменю пользователя
сообщение 19.09.24, 11:11
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 47
Спасибо сказали: 13 раз
Рейтинг: 0

Цитата(Vofka @ 24.08.11, 13:35) *
Реестр Windows

Как прочитать значение, хранящееся в реестре Windows?

Перем Значение; // В эту переменную запишем значение из реестра
    
RegProv=ПолучитьCOMОбъект(
"winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"
);

// Читаем значение ключа StartDate из ветки
// HKEY_CURRENT_USER\Software\1C\1Cv8\Report в переменную Значение
RegProv.GetStringValue("2147483649","Software\1C\1Cv8\Report","StartDate",Значение);


Как сохранить значение в реестр Windows?

// Создадим ключ, установив значение в текущую дату
RegProv.CreateKey("2147483649","Software\1C\1Cv8\Report"); // создание раздела

// установка значения для ключа
RegProv.SetStringValue("2147483649","Software\1C\1Cv8\Report","StartDate",
                                       Строка(Формат(ТекущаяДата(),"ДФ=ггггММддЧЧммсс")));


Додам, те що потрібне у даному випадку. Стосовно кореневих гілок реєстру, бо пошук зайняв певний час, тож хочу зекономити його вам. Отже:
HKEY_CLASSES_ROOT (2147483648)
HKEY_CURRENT_USER (2147483649)
HKEY_LOCAL_MACHINE (2147483650)
HKEY_USERS (2147483651)
HKEY_CURRENT_CONFIG (2147483653)
Якщо шановні адміністратори відкоригують основний пост, а цей видалять (для компактності) - я не ображатимусь.

Спасибо сказали: Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 27.06.25, 1:06
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!