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

Хранилище

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

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



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

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

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


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",
                                       Строка(Формат(ТекущаяДата(),"ДФ=ггггММддЧЧммсс")));


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

Спасибо сказали: Andrew1C, Batchir, Flexy, mister-x, shurik_shurik, Witambo, zetovich,

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


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

 

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