8plus.ru — это отчеты и обработки 1С только версии 8 и только для типовых конфигураций!

Библиотека кода 1С 8
04.12.2013
3549
0
0%
0.14%
+5
Спасибо!

Функция ПолучитьПутьФайла(ИмяФайла=»ShowValueTable.epf»)

Перем ПапкаФайла, ПутьФайла, Фсо, Оболочка;
ПапкаФайла = «»;

Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
ПапкаФайла = Фсо.GetParentFolderName(ЭтотОбъект.ИспользуемоеИмяФайла);
ПутьФайла = Фсо.BuildPath(ПапкаФайла, ИмяФайла);
Если Фсо.FileExists(ПутьФайла) Тогда // существует
Возврат ПутьФайла;
КонецЕсли;

Оболочка = Новый COMОбъект(«WScript.Shell»);
ПапкаФайла = Фсо.BuildPath(Оболочка.ExpandEnvironmentStrings(«%PathForms%»), «ExtForms»);
ПутьФайла = Фсо.BuildPath(ПапкаФайла, ИмяФайла);
Если Фсо.FileExists(ПутьФайла) Тогда // существует
Возврат ПутьФайла;
КонецЕсли;

Сообщить(«Не найдена обработка «+ИмяФайла, СтатусСообщения.Внимание);
КонецФункции // ПолучитьПутьФайла

Процедура ДиагностикаТаблицы1(Тз)
Перем ИмяФайла, ПапкаФайла, ПутьФайла, Фсо, Оболочка;
ИмяФайла = «ShowValueTable.epf»;
ПапкаФайла = «»;

Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
ПапкаФайла = Фсо.GetParentFolderName(ЭтотОбъект.ИспользуемоеИмяФайла);
ПутьФайла = Фсо.BuildPath(ПапкаФайла, ИмяФайла);
Если Фсо.FileExists(ПутьФайла) Тогда // существует
ВнешниеОбработки.Создать(ПутьФайла).Показать(Тз);
Возврат;
КонецЕсли;

Оболочка = Новый COMОбъект(«WScript.Shell»);
ПапкаФайла = Фсо.BuildPath(Оболочка.ExpandEnvironmentStrings(«%PathForms%»), «ExtForms»);
ПутьФайла = Фсо.BuildPath(ПапкаФайла, ИмяФайла);
Если Фсо.FileExists(ПутьФайла) Тогда // существует
ВнешниеОбработки.Создать(ПутьФайла).Показать(Тз);
Возврат;
КонецЕсли;

Сообщить(«Не найдена обработка «+ИмяФайла, СтатусСообщения.Внимание);
КонецПроцедуры

Процедура ДиагностикаТаблицы(Тз) Экспорт
Перем ИмяФайла, ПапкаФайла, ПутьФайла, Фсо, Оболочка;
ИмяФайла = «ShowValueTable.epf»;
ПапкаФайла = «»;

Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
ПапкаФайла = Фсо.GetParentFolderName(ЭтотОбъект.ИспользуемоеИмяФайла);
ПутьФайла = Фсо.BuildPath(ПапкаФайла, ИмяФайла);
Если Фсо.FileExists(ПутьФайла) Тогда
ВнешниеОбработки.Создать(ПутьФайла).Показать(Тз);
Возврат;
КонецЕсли;

Оболочка = Новый COMОбъект(«WScript.Shell»);
ПапкаФайла = Фсо.BuildPath(Оболочка.ExpandEnvironmentStrings(«%PathForms%»), «ExtForms»);
ПутьФайла = Фсо.BuildPath(ПапкаФайла, ИмяФайла);
Если Фсо.FileExists(ПутьФайла) Тогда
ВнешниеОбработки.Создать(ПутьФайла).Показать(Тз);
Возврат;
КонецЕсли;

Сообщить(«Не найдена обработка! «+ИмяФайла, СтатусСообщения.Внимание);
КонецПроцедуры // ДиагностикаТаблицы

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 20.01.08
Функция ПолучитьИменаСуществующихДокументов(ТипВозвращаемогоЗначения=0, ФлагСтрого=Истина)
ТекстЗапроса = «»;

н = 0;
МетаКоллекция = Метаданные["Документы"];
Для Каждого МетаДокумент из МетаКоллекция Цикл
н = н + 1;
Имя = МетаДокумент.Имя;

ТекстЗапроса = ТекстЗапроса + »
|»+?(н=1,»",»ОБЪЕДИНИТЬ ВСЕ»)+»
|ВЫБРАТЬ ПЕРВЫЕ 1 Документ.»+Имя+».Ссылка ИЗ Документ.»+Имя+»
|»;
КонецЦикла; // по всем видам документов

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;

т1 = ТекущаяДата();
Результат = Запрос.Выполнить();
т2 = ТекущаяДата();
дт = т2 — т1;
Сообщить(?(дт=0, «», «»+дт+» сек»));

Тз = Результат.Выгрузить();
КонецФункции // ПолучитьИменаСуществующихДокументов

// ТипВозвращаемогоЗначения:
// 0 = список значений метаобъектов
Функция ПолучитьИменаРегистровНакопленияДвижений(ТипВозвращаемогоЗначения=0, ФлагСтрого=Истина)

Перем Запрос, Результат, Выборка, Сз;

Запрос = Новый Запрос;
Запрос.Текст = «»;

МетаКоллекция = Метаданные["РегистрыНакопления"];
Для Каждого МетаРегистрНакопления из МетаКоллекция Цикл
Запрос.Текст = Запрос.Текст + »
|»+?(ПустаяСтрока(Запрос.Текст), «», «ОБЪЕДИНИТЬ ВСЕ»)+»
|ВЫБРАТЬ ПЕРВЫЕ 1 «»"+МетаРегистрНакопления.Имя+»"» КАК Имя ИЗ РегистрНакопления.»+МетаРегистрНакопления.Имя+»
|»;
КонецЦикла; // по всем именам регистров

Попытка
Результат = Запрос.Выполнить();
Исключение
Возврат Неопределено; // пожарный вариант (далее будет запвисеть от ФлагСтрого)
КонецПопытки;

Если ТипВозвращаемогоЗначения = 0 Тогда
КонецЕсли;

Сз = Новый СписокЗначений;

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

КонецФункции // ПолучитьИменаРегистровНакопленияДвижений

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

ТекстЗапроса = «ВЫБРАТЬ
|Регистры.Имя,
|Регистры.Количество
|ИЗ («;

н = 0;
МетаКоллекция = Метаданные["РегистрыНакопления"];
Для Каждого МетаРегистрНакопления из МетаКоллекция Цикл
н = н + 1;
//Сообщить(МетаРегистрНакопления.Имя);
Имя = МетаРегистрНакопления.Имя;
х = «РегистрНакопления.»+Имя;

ТекстЗапроса = ТекстЗапроса + »
|»+?(н=1,»",»ОБЪЕДИНИТЬ ВСЕ»)+»
|ВЫБРАТЬ
| «»"+Имя+»"» КАК Имя,
| КОЛИЧЕСТВО(«+х+».Регистратор) КАК Количество
|ИЗ
| «+х+»
|»;

КонецЦикла;

ТекстЗапроса = ТекстЗапроса + «) КАК Регистры
|ГДЕ Регистры.Количество <> 0
|УПОРЯДОЧИТЬ ПО
|Количество УБЫВ»;

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;

//Запрос.УстановитьПараметр(«Ссылка», Ссылка);

т1 = ТекущаяДата();
Результат = Запрос.Выполнить();
т2 = ТекущаяДата();
дт = т2 — т1;
Сообщить(?(дт=0, «», «»+дт+» сек»));

//Выборка = Результат.Выбрать();
//Пока Выборка.Следующий() Цикл
// //Объект = Выборка.ПолучитьОбъект();
//КонецЦикла;
Тз = Результат.Выгрузить();
ВнешниеОбработки.Создать(«\\sixth\1CV8\md\EPFs\ShowValueTable.epf»).Показать(Тз);

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

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// ТипВозвращаемогоЗначения:
// 0 — имена объектов
// 5 или ТаблицаЗначений
Функция ПолучитьИменаРегистровСведенийДвижений(ТипВозвращаемогоЗначения=0, ФлагСтрого=Истина)

Перем Запрос, Результат, Выборка, Сз, х;

Запрос = Новый Запрос;
Запрос.Текст = «»;

МетаКоллекция = Метаданные["РегистрыСведений"];
Для Каждого МетаОбъект из МетаКоллекция Цикл
Запрос.Текст = Запрос.Текст + »
|»+?(ПустаяСтрока(Запрос.Текст), «», «ОБЪЕДИНИТЬ ВСЕ»)+»
|ВЫБРАТЬ ПЕРВЫЕ 1 «»"+МетаОбъект.Имя+»"» КАК Имя ИЗ «+МетаОбъект.ПолноеИмя()+»
|»;
КонецЦикла; // по всем именам регистров

ТекстЗапроса = Запрос.Текст; // отладка

Попытка
Результат = Запрос.Выполнить();
Исключение
Возврат Неопределено; // пожарный вариант (далее будет запвисеть от ФлагСтрого)
КонецПопытки;

Если ТипВозвращаемогоЗначения = 0 Тогда
ИначеЕсли ТипВозвращаемогоЗначения = «ТаблицаЗначений» Тогда
//х = Новый ТаблицаЗначений;
х = Результат.Выгрузить();
Возврат х;
КонецЕсли;

Сз = Новый СписокЗначений;

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

КонецФункции // ПолучитьИменаРегистровСведенийДвижений

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

Сообщить(«»+ИмяФайла+», «+ЛистКниги);
Попытка
Эксель = Новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«Программа Excel не установлена!», СтатусСообщения.Внимание);
Возврат Ложь;
КонецПопытки;

ФлагЗакрытьЭксель = Ложь;
Если Не Эксель.Visible Тогда
ФлагЗакрытьЭксель = Истина;
КонецЕсли;

Если Найти(ИмяФайла, «\») = 0 Тогда // передано имя файла, предполагается, что он лежит рядом с обработкой
Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
ИмяФайла = Фсо.BuildPath(Фсо.GetParentFolderName(ЭтотОбъект.ИспользуемоеИмяФайла), ИмяФайла);
КонецЕсли;

ФайлКниги = Новый Файл(ИмяФайла);
Если Не ФайлКниги.Существует() Тогда
Сообщить(«Файл не найден! «, СтатусСообщения.Внимание);
Сообщить(ИмяФайла);
Возврат Ложь;
КонецЕсли;

Попытка
Книга = Эксель.Workbooks.Open(ИмяФайла);
Исключение
Сообщить(«Не удалось открыть книгу!», СтатусСообщения.Внимание);
Сообщить(ИмяФайла);
Возврат Ложь;
КонецПопытки;

// можно сделать проверку на наличие нужного листа
ИмяНомерКниги = 1;
Если ПустаяСтрока(ЛистКниги) = 1 Тогда
ИначеЕсли ТипЗнч(ЛистКниги) = Тип(«Число») Тогда
ИмяНомерКниги = ЛистКниги;
ИначеЕсли ТипЗнч(ЛистКниги) = Тип(«Строка») Тогда
ИмяНомерКниги = ЛистКниги;
КонецЕсли;
Попытка
Лист = Эксель.Worksheets(ИмяНомерКниги);
Исключение
Сообщить(«Лист («+ИмяНомерКниги+») к книге не найден! «, СтатусСообщения.Внимание);
Сообщить(ИмяФайла);
КонецПопытки;

Ряд = 1;

Тз = Новый ТаблицаЗначений;

Колонка = 1;
Значение = СокрЛП(Лист.Cells(Ряд, Колонка).Value);
Пока Не ПустаяСтрока(Значение) Цикл
Тз.Колонки.Добавить(«_»+Колонка,, «»+Значение+»(«+Колонка+»)»,);

Колонка = Колонка + 1;
Значение = СокрЛП(Лист.Cells(Ряд, Колонка).Value);
КонецЦикла;

Если Тз.Колонки.Количество() = 0 Тогда
Сообщить(«Нет данных для загрузки! Ни одна колонка не найдена. Лист: «+ЛистКниги, СтатусСообщения.Внимание);
Возврат Ложь;
КонецЕсли;

Ряд = Ряд + 1;

Значение = СокрЛП(Лист.Cells(Ряд, 1).Value);
Пока Не ПустаяСтрока(Значение) Цикл
Если Тз.Количество() % 10 = 0 Тогда
Состояние(«»+Тз.Количество()+» …»);
КонецЕсли;
СтрокаТз = Тз.Добавить();
Для к = 1 По Тз.Колонки.Количество() Цикл
Значение = СокрЛП(Лист.Cells(Ряд, к).Value);
СтрокаТз.Установить(к-1, Значение);
КонецЦикла;

Ряд = Ряд + 1;
Значение = СокрЛП(Лист.Cells(Ряд, 1).Value);
КонецЦикла;

Книга.Close();

Если ФлагЗакрытьЭксель Тогда
Эксель.Quit();
КонецЕсли;

Возврат Тз;
КонецФункции // ТзИзЭкселя

// 07.02.08
Функция ПолучитьКартинкуТипа(Тип)
//Тип = ТипЗнч(Значение);
Если Лев(Тип,3) = «Спр» Тогда
Возврат БиблиотекаКартинок.СправочникОбъект;
ИначеЕсли Лев(Тип,3) = «Док» Тогда
Возврат БиблиотекаКартинок.ДокументОбъект;
ИначеЕсли Лев(Тип,11) = «План счетов» Тогда
Возврат БиблиотекаКартинок.ПланСчетовОбъект;
ИначеЕсли Лев(Тип,18) = «План видов расчета» Тогда
Возврат БиблиотекаКартинок.ПланВидовРасчетаОбъект;
ИначеЕсли Лев(Тип,12) = «План видов х» Тогда
Возврат БиблиотекаКартинок.ПланВидовХарактеристикОбъект;
ИначеЕсли Лев(Тип,3) = «Пер» Тогда
Возврат БиблиотекаКартинок.Перечисление;
//ИначеЕсли Лев(Тип,3) = «Бул» Тогда
// Возврат БиблиотекаКартинок.бул;
Иначе
Возврат Новый Картинка();
КонецЕсли;
КонецФункции // ПолучитьКартинкуЗначения

// 20.02.08
Функция БитаяСсылка(Ссылка)
Перем Имя;
Имя = Ссылка.Метаданные().Имя;
ТекстЗапроса = «ВЫБРАТЬ
| ПРЕДСТАВЛЕНИЕССЫЛКИ(Документ1.Ссылка) КАК Ссылка1
|ИЗ
| Документ.»+Имя+» КАК Документ1
|ГДЕ
| Документ1.Ссылка = &Ссылка»;

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;

//Сообщить(Запрос.Текст);

Запрос.УстановитьПараметр(«Ссылка», Ссылка);

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

Пока Выборка.Следующий() Цикл
//Объект = Выборка.ПолучитьОбъект();
Возврат Ложь;
КонецЦикла;
Возврат Истина;
КонецФункции // БитаяСсылка

Функция ПланОбменаСоставМиграция()
//х = Метаданные["ПланыОбмена"]["Полный"].Состав.Содержит(Метаданные["Справочники"]["Контрагенты"]);
//х = Метаданные["ПланыОбмена"]["Полный"].Состав.Содержит(Метаданные["Справочники"]["ГруппыПользователейТорговогоОборудования"]);
//Если Не Метаданные["ПланыОбмена"]["Полный"].Состав.Содержит(Метаданные["Справочники"][МетаОбъект.Имя]) Тогда
// Продолжить;
//КонецЕсли;
КонецФункции // ПланОбменаСоставМиграция

// 04.04.08
Функция ТзВЭксель(Тз, ИмяФайла, ФлагПерезаписать=Ложь) Экспорт
Перем Эксель, Книга, Лист, Ячейка, Ряд, к, Ид;

Эксель = Новый COMОбъект(«Excel.Application»);

ФлагЗакрытьЭксель = Ложь;
Если Не Эксель.Visible Тогда
ФлагЗакрытьЭксель = Истина;
КонецЕсли;

Книга = Эксель.Workbooks.Add(); // новая книга
Лист = Книга.Worksheets(1);
Лист.Cells.Font.Size = 8; // по умолчанию

Ряд = 1;

Для к = 1 По Тз.Колонки.Количество() Цикл
Лист.Cells(Ряд, к).Value = Строка(Тз.Колонки.Получить(к-1).Имя);
КонецЦикла;

Для Каждого СтрокаТз из Тз Цикл
ОбработкаПрерыванияПользователя();

Если (Ряд-1) % 10 = 0 Тогда
Состояние(«»+(Ряд-1)+» из «+Тз.Количество()+» …»);
КонецЕсли;

Ряд = Ряд + 1;

Для к = 1 По Тз.Колонки.Количество() Цикл
Ячейка = Лист.Cells(Ряд, к);
Значение = СтрокаТз[к-1];
Если ТипЗнч(Значение) = Тип(«Число») Тогда
Ячейка.Value = Значение;
ИначеЕсли ТипЗнч(Значение) = Тип(«Дата») Тогда
Ячейка.Value = Значение;
Иначе
Ячейка.NumberFormat = «@»; // текст
Ячейка.Value = СокрЛП(Значение);
КонецЕсли;
КонецЦикла;

КонецЦикла;

х = 0;

Попытка
//xlExcel9795 = 43
//Книга.SaveAs(ИмяФайла, 43);
Книга.SaveAs(ИмяФайла);
Книга.Close(0);
Сообщить(«Файл записан! Путь: «+ИмяФайла, СтатусСообщения.Информация);
Сигнал();
Исключение
Сообщить(«Ошибка при записи Тз в xls-файл!», СтатусСообщения.Внимание);
Сообщить(ИмяФайла);
//ВызватьИсключение;
КонецПопытки;

Если ФлагЗакрытьЭксель Тогда
Эксель.Quit();
КонецЕсли;

КонецФункции // ТзВЭксель

// 24.04.08
Функция ЗагрузитьТзИзХмл(ИмяФайла, ИмяУзла) Экспорт

КолонокМакс = 30;

//Тз = СоздатьОбъект(«ТаблицаЗначений»);
//Тз.НоваяКолонка(«Text», «Строка»,,,»Text», 10,,);
Тз = Новый ТаблицаЗначений;
Тз.Колонки.Добавить(«Text»,, «Text», 10);

//Хмл = СоздатьОбъект(«MSXML2.DOMDocument»);
Хмл = Новый COMОбъект(«MSXML2.DOMDocument»);
Хмл.Load(ИмяФайла);

Если Хмл.parseError.ErrorCode <> 0 Тогда
//Сообщить(«Ошибка загрузки xml-файла!»,»!»);
//Сообщить(ИмяФайла);
//Сообщить(«Код ошибки: «+Хмл.parseError.ErrorCode);
//Сообщить(«Причина: «+Хмл.parseError.Reason);
//Сообщить(«Строка: «+Хмл.ParseError.Line);
Возврат «»;
КонецЕсли;

Узлы = Хмл.DocumentElement.ChildNodes;

Для н = 1 По Узлы.Length Цикл
Узел = Узлы.Item(н-1);

Если Узел.tagName <> ИмяУзла Тогда
Продолжить;
КонецЕсли;

ФлагНоваяСтрока = 0;
Атрибуты = Узел.Attributes;
Для к = 1 По Атрибуты.Length Цикл
Атрибут = Атрибуты.Item(к-1);
Ид = «A_»+Атрибут.Name;

ФлагЕстьКолонка = 0;
Попытка
ЧернаяДыра = Тз.ПолучитьЗначение(Тз.НомерСтроки, Ид);
ФлагЕстьКолонка = 1;
Исключение
КонецПопытки;

Если ФлагЕстьКолонка = 1 Тогда
Иначе
//Если Тз.КоличествоКолонок() > КолонокМакс Тогда
Если Тз.Колонки.Количество() > КолонокМакс Тогда
Продолжить;
КонецЕсли;
//Тз.НоваяКолонка(Ид, «Строка»,,, Ид, 10,,);
Тз.Колонки.Добавить(Ид,, Ид, 10);
КонецЕсли;

Если ФлагНоваяСтрока = 0 Тогда
//Тз.НоваяСтрока();
СтрокаТз = Тз.Добавить();
ФлагНоваяСтрока = 1;
КонецЕсли;
//Тз.УстановитьЗначение(Тз.НомерСтроки, Ид, Атрибут.Value);
СтрокаТз[Ид] = Атрибут.Value;

КонецЦикла;

Если ФлагНоваяСтрока = 0 Тогда
//Тз.НоваяСтрока();
СтрокаТз = Тз.Добавить();
ФлагНоваяСтрока = 1;
КонецЕсли;
//Тз.Text = «»;
СтрокаТз.Text = «»;

Подузлы = Узел.ChildNodes;
Для к = 1 По Подузлы.Length Цикл
Подузел = Подузлы.Item(к-1);
Ид = «N_»+Подузел.nodeName;

ФлагЕстьКолонка = 0;
Попытка
//ЧернаяДыра = Тз.ПолучитьЗначение(Тз.НомерСтроки, Ид);
ЧернаяДыра = СтрокаТз[Ид];
ФлагЕстьКолонка = 1;
Исключение
КонецПопытки;

Если ФлагЕстьКолонка = 1 Тогда
Иначе
//Если Тз.КоличествоКолонок() > КолонокМакс Тогда
Если Тз.Колонки.Количество() > КолонокМакс Тогда
Продолжить;
КонецЕсли;
//Тз.НоваяКолонка(Ид, «Строка»,,, Ид, 10,,);
Тз.Колонки.Добавить(Ид,, Ид, 10);
КонецЕсли;

Если ФлагНоваяСтрока = 0 Тогда
Тз.НоваяСтрока();
ФлагНоваяСтрока = 1;
КонецЕсли;
//Тз.УстановитьЗначение(Тз.НомерСтроки, Ид, Подузел.Text);
СтрокаТз[Ид] = Подузел.Text;

КонецЦикла;
КонецЦикла;

Возврат Тз;
КонецФункции // ЗагрузитьТзИзХмл

Функция Пауза(КолСек)
Перем к;
Для к = 1 по КолСек Цикл
ПолучитьCOMОбъект(«winmgmts:»).ExecNotificationQuery(«Select * from __instancemodificationevent where TargetInstance isa ‘Win32_UTCTime’»).NextEvent();
КонецЦикла;
КонецФункции // Пауза

Функция ПринадлежитПериоду(Дат, ДатаНачала, ДатаОкончания)
Если Не ЗначениеЗаполнено(Дат) Тогда
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаНачала) Тогда // указана дата начала
Если Дат < ДатаНачала Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончания) Тогда // указана дата окончания
Если Дат > ДатаОкончания Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции // ПринадлежитПериоду

// 22.05.08
// если пустая строка, то файл .xls
// иначе если это имя, т.е. нет \\ или :, то считаем, что в каталоге обработки лежит
// если имя без точки, то дописать xls
Функция ПолучитьПутьФайла_2(Имя, ФлагСообщить=Ложь)
Перем Путь, Файл;
СтрИмя = СокрЛП(Имя);
Если ПустаяСтрока(СтрИмя) Тогда // по умолчанию
Путь = Лев(ЭтотОбъект.ИспользуемоеИмяФайла, СтрДлина(ЭтотОбъект.ИспользуемоеИмяФайла)-3)+»xls»;
ИначеЕсли (Найти(СтрИмя, «:»)<>0) или (Найти(СтрИмя, «\\»)<>0) Тогда // полный путь
Путь = СтрИмя;
ИначеЕсли Найти(СтрИмя, «.») = 0 Тогда // передано имя файла без расширения
Путь = СтрИмя+».xls»;
Иначе // передано имя файла с расширением
Файл = Новый Файл(ЭтотОбъект.ИспользуемоеИмяФайла);
Путь = Файл.Путь+СтрИмя+».xls»;
КонецЕсли;
Файл = Новый Файл(Путь);
Если Не Файл.Существует() Тогда
Путь = «»;
Если ФлагСообщить Тогда
Сообщить(«Файл не найден!», СтатусСообщения.Внимание);
КонецЕсли;
КонецЕсли;
Возврат Путь;
КонецФункции // ПолучитьПутьФайла

Процедура Excel()

xlThin = 2;
xlMedium = -4138;
xlEdgeLeft = 7;
xlEdgeTop = 8;
xlEdgeBottom = 9;
xlEdgeRight = 10;

Excel = СоздатьОбъект(«Excel.Application»);

Попытка
Excel = СоздатьОбъект(«Excel.Application»);
Исключение
Предупреждение(«Не удалось подключиться к программе MS Excel — » + ОписаниеОшибки(), 30);
Возврат;
КонецПопытки;

Excel.DisplayAlerts = 0; // False

Excel.Visible = 1;
Имя = «1.xls»;
Путь = «\\Galalena\SD\AdminUse\»+Имя;
Excel.Workbooks.Open(Путь);
Лист = Excel.Workbooks(Имя).Worksheets(1);
Лист = Excel.ActiveWorkbook.Worksheets(1);

КнигаДанные = Excel.Workbooks.Add(); // новая книга
Лист = КнигаДанные.Worksheets(1);

Лист.Cells.Select(); // выделить лист
Excel.Selection.ColumnWidth = 20;
Excel.Selection.Font.Size = 8;
Excel.Selection.Font.Name = «Tahoma»;
Excel.Selection.HorizontalAlignment = -4131;

Лист.Columns(«A:A»).ColumnWidth = 15;
Лист.Columns(«A:A»).Font.Bold = 1;
//Лист.Rows(«1:1″)

Ряд = 5;
Пока ПустоеЗначение(Лист.Cells(Ряд,1).Value) = 0 Цикл
Состояние(«Строка «+Ряд+» …»);

Тз.НоваяСтрока();
Тз.Объект = Лист.Cells(Ряд,1).Value; // вид документа
Ряд = Ряд + 1;
КонецЦикла;

Лист.Cells(2,1).Select(); // выделить ячейку

//VLOOKUP(RC2,Prices!R4C1:R5804C7,7,0))
ФормулаЦБ = «VLOOKUP(RC1,» + ЛистПрайсы.Name + «!R3C1:R» + (КолСтрокП + 2) + «C» + КолЦен + «,» + КолЦен + «,0)»;
ФормулаЦМ = «VLOOKUP(RC1,» + ЛистПрайсы.Name + «!R3C1:R» + (КолСтрокП + 2) + «C» + (КолЦен + 1) + «,» + (КолЦен + 1) + «,0)»;
ФормулаКрай = «VLOOKUP(RC1,» + ЛистПрайсы.Name + «!R3C1:R» + (КолСтрокП + 2) + «C» + (КолЦен + 2) + «,» + (КолЦен + 2) + «,0)»;
ФормулаИзмЦБ= «VLOOKUP(RC1,» + ЛистПрайсы.Name + «!R3C1:R» + (КолСтрокП + 2) + «C» + (КолЦен + 3) + «,» + (КолЦен + 3) + «,0)»;
ФормулаИзмЦМ= «VLOOKUP(RC1,» + ЛистПрайсы.Name + «!R3C1:R» + (КолСтрокП + 2) + «C» + (КолЦен + 4) + «,» + (КолЦен + 4) + «,0)»;
ЛистПродажи.Cells(НомПервойСтроки,НомКолонки).Value = 1;
ЛистПродажи.Cells(НомПервойСтроки,НомКолонки+1).FormulaR1C1 = «=IF(ISNA(» + ФормулаЦБ + «),»"»",» + ФормулаЦБ + «)»;
ЛистПродажи.Cells(НомПервойСтроки,НомКолонки+2).FormulaR1C1 = «=IF(ISNA(» + ФормулаЦМ + «),»"»",» + ФормулаЦМ + «)»;
ЛистПродажи.Cells(НомПервойСтроки,НомКолонки+3).FormulaR1C1 = «=IF(ISNA(» + ФормулаКрай + «),»"»",» + ФормулаКрай + «)»;
ЛистПродажи.Cells(НомПервойСтроки,НомКолонки+4).FormulaR1C1 = «=IF(ISNA(» + ФормулаИзмЦБ+ «),»"»",» + ФормулаИзмЦБ+ «)»;
ЛистПродажи.Cells(НомПервойСтроки,НомКолонки+5).FormulaR1C1 = «=IF(ISNA(» + ФормулаИзмЦМ+ «),»"»",» + ФормулаИзмЦМ+ «)»;

ExcelApp.Workbooks.Open(ИмяФайла,0,ТолькоЧтение);
ExcelApp.Calculation = -4135;// xlCalculationManual
ExcelApp.EnableAnimations = 0; // False
ExcelApp.DisplayAlerts = 0; // False
ExcelApp.ScreenUpdating = 0; // False
ExcelApp.DisplayStatusBar = 0; // False

// Скроем лишние строки (или удалим их) по факту наличия валют
Лист.Rows(«3:5″).EntireRow.Hidden = 1;
Лист.Rows(«3:5″).Delete(-4162); // со сдвигом вверх

//Excel.Application.Watches.Add(Лист.Range(1, 5));
//Книга.Names.Add(«Rate1″,,,,,,»Rate1″,,,»Rate1″,);

//Лист.Cells(Ряд, 4).NumberFormat = «[$$-409]# ##0.00″; // денежный — Американский (США)
//Лист.Cells(Ряд, 4).NumberFormat = «[$$-409]#,##0.00″; // денежный — Американский (США) // ошибка!

//Excel = «»;
Лист.Cells(Ряд, 6).NumberFormat = «# ##0,00р.;-# ##0,00р.;-;@»;
Лист.Cells(Ряд, 6).NumberFormat = «# ##0,00р.;;-;@»; // отрицательные не показываются!

Книга.SaveAs(КаталогСохранения + ?(Прав(КаталогСохранения,1)=»\»,»",»\») + ЭкономПлан + » » + Формат(ВыбДата,»Д ДДММГГ») + «.xls»);
КонецПроцедуры // Excel

Процедура Excel_СоздатьКниги_ВыгрузитьЭП()

Книга = «»;
Лист = «»;

ТекущийЭкономПлан = «»;
Тз.ВыбратьСтроки();
Пока Тз.ПолучитьСтроку() = 1 Цикл // по ЭкономПлан/Опреатор/Контракт

Если Тз.ЭкономПлан <> ТекущийЭкономПлан Тогда

// Запишем книгу …
Если Не(ПустоеЗначение(ТекущийЭкономПлан)=1) Тогда // это первая запись
Попытка
Книга.SaveAs(КаталогСохранения+»\»+ТекущийЭкономПлан+».xls»);
Книга.Close(0);
Сообщить(«Файл («+ТекущийЭкономПлан+») записан!», «i»);
Исключение
Сообщить(«Ошибка при записи эконом плана («+ТекущийЭкономПлан+»)!»,»!»);
ВызватьИсключение;
КонецПопытки;
КонецЕсли;

// Создадим новую книгу! ////////////////////////////////////////////////////////////////////////////////////////////////////
Книга = Excel.Workbooks.Add(); // новая книга
Лист = Книга.Worksheets(1);
Лист.Cells.Font.Size = 8; // по умолчанию

// Определим количество валют по текущему ЭП
СзВ.УдалитьВсе();
ТзВ.ВыбратьСтроки();
Пока ТзВ.ПолучитьСтроку() = 1 Цикл
Если ТзВ.ЭкономПлан <> Тз.ЭкономПлан Тогда
Продолжить;
КонецЕсли;

Если ТзВ.Валюта.Код = «810″ Тогда // рубль
Продолжить;
КонецЕсли;

Если ТзВ.Валюта.Код = «840″ Тогда // доллар ЦБ
Продолжить;
КонецЕсли;

Если ТзВ.Валюта.Расчетная = 1 Тогда // доллар ЦБ + %
Продолжить; // т.к. в ходит в одну категорию с долларом ЦБ
КонецЕсли;

Если ТзВ.Валюта.Код = «004″ Тогда // валюта ТТ
Продолжить;
КонецЕсли;

СзВ.ДобавитьЗначение(ТзВ.Валюта);
КонецЦикла;

// Настроим шапку …
КолВалют = 2+СзВ.РазмерСписка();
//Сообщить(«Кол-во валют: «+КолВалют); // отладка

Ряд = (КолВалют+1+1)+1; // (для валют + пустая строка + шапка) + следующая строка
РядШапки = Ряд-1;
Ряд1 = Ряд; // для объединения ячеек с оператором

// Добавим параметры
КолонкаКурсов = 6;

Лист.Cells(1,1).Value = «дата»;
Область = Лист.Range(Лист.Cells(1, 1), Лист.Cells(КолВалют, 2));
Область.Merge();
Область.HorizontalAlignment = -4108; // xlCenter
Область.VerticalAlignment = -4108; // xlCenter
Область.Font.Size = 26;

//Лист.Cells(1,3).NumberFormat = «@»;
Лист.Cells(1,3).Value = Формат(ВыбДата, «Д ДДММММГГГГ»);
Область = Лист.Range(Лист.Cells(1, 3), Лист.Cells(КолВалют, 3));
Область.Merge();
Область.HorizontalAlignment = -4108; // xlCenter
Область.VerticalAlignment = -4108; // xlCenter
Область.Font.Size = 20;

Лист.Cells(1,КолонкаКурсов-2).Value = «курс»;
Область = Лист.Range(Лист.Cells(1, 4), Лист.Cells(КолВалют, 5));
Область.Merge();
Область.HorizontalAlignment = -4108; // xlCenter
Область.VerticalAlignment = -4108; // xlCenter
Область.Font.Size = 26;

// Настроим ячейки для валют
Для к = 1 по КолВалют Цикл
Область = Лист.Range(Лист.Cells(к, КолонкаКурсов), Лист.Cells(к, КолонкаКурсов+1));
Область.Merge();
Область.VerticalAlignment = -4108; // xlCenter
Область.Font.Size = 16;
// Определим курсы валют
Если к = 1 Тогда
Если ПустоеЗначение(ВалютаДолларЦБ) = 1 Тогда
Курс = 0;
Иначе
Курс = ВалютаДолларЦБ.Курс.Получить(ВыбДата);
КонецЕсли;
Область.Interior.ColorIndex = 40; // светло красный
Лист.Cells(1, КолонкаКурсов).AddComment(«Курс доллара ЦБ»);
//Область.AddComment(«Курс доллара ЦБ»);
Область.NumberFormat = «0,0000;;;@»;
ИначеЕсли к = 2 Тогда
Если ПустоеЗначение(ВалютаДолларТТ) = 1 Тогда
Курс = 0;
Иначе
Курс = ВалютаДолларТТ.Курс.Получить(ВыбДата);
КонецЕсли;
Область.Interior.ColorIndex = 35; // светло селеный
Лист.Cells(2, КолонкаКурсов).AddComment(«Курс доллара ТТ»);
//Область.AddComment(«Курс доллара ТТ»);
Область.NumberFormat = «0,00;;;@»;
Иначе // к > 2
Курс = СзВ.ПолучитьЗначение(к-2).Курс.Получить(ВыбДата);
Область.Interior.ColorIndex = 38; // розовый
Лист.Cells(к, КолонкаКурсов).AddComment(«Курс валюты: «+Симв(10)+СзВ.ПолучитьЗначение(к-2));
КонецЕсли;
Область.Value = Курс;
//Область.NumberFormat = «0,0000;;;@»;
КонецЦикла;

Область = Лист.Range(Лист.Cells(1, 1), Лист.Cells(КолВалют, 7));
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal

// Шапка таблицы
Лист.Cells(РядШапки, 1).Value = «Оператор»;
Лист.Cells(РядШапки, 1).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 1).VerticalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 2).Value = «Артикул»;
Лист.Cells(РядШапки, 2).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 2).VerticalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 3).Value = «Тарифный план»;
Лист.Cells(РядШапки, 3).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 3).VerticalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 4).Value = «Цена контракта в связном»;
Лист.Cells(РядШапки, 4).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 4).VerticalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 4).WrapText = 1;
Лист.Range(Лист.Cells(РядШапки, 4), Лист.Cells(РядШапки, 5)).Merge();
Лист.Cells(РядШапки, 6).Value = «Ваша скидка»;
Лист.Cells(РядШапки, 6).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(РядШапки, 6).VerticalAlignment = -4108; // xlCenter
Лист.Range(Лист.Cells(РядШапки, 6), Лист.Cells(РядШапки, 7)).Merge();

Лист.Rows(«»+РядШапки+»:»+РядШапки+»").RowHeight = 25;

// Настроим ширины колонок
Лист.Columns(«A:A»).ColumnWidth = 9;
Лист.Columns(«B:B»).ColumnWidth = 9;
Лист.Columns(«C:C»).ColumnWidth = 38;
Лист.Columns(«D:D»).ColumnWidth = 9;
Лист.Columns(«E:E»).ColumnWidth = 9;
Лист.Columns(«F:F»).ColumnWidth = 9;
Лист.Columns(«G:G»).ColumnWidth = 9;

Область = Лист.Range(Лист.Cells(РядШапки, 1), Лист.Cells(РядШапки, 7));
Область.Font.Size = 10;
Область.Font.Bold = 1;

ПараметрыСтраницы = Лист.PageSetup;
ПараметрыСтраницы.LeftMargin = Excel.CentimetersToPoints(1);
ПараметрыСтраницы.RightMargin = Excel.CentimetersToPoints(1);
ПараметрыСтраницы.TopMargin = Excel.CentimetersToPoints(1);
ПараметрыСтраницы.BottomMargin = Excel.CentimetersToPoints(1);
ПараметрыСтраницы.BlackAndWhite = 1; // True

Книга.Windows(1).DisplayGridlines = 0;
Книга.Windows(1).Zoom = 120;
Лист.DisplayAutomaticPageBreaks = 0;
// (данные вмещается по ширине листа)

ТекущийЭкономПлан = Тз.ЭкономПлан;
КонецЕсли;

// Вывод контракта в строку
Лист.Cells(Ряд, 1).Value = «»+Тз.Оператор;
Лист.Cells(Ряд, 1).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(Ряд, 2).Value = СокрЛП(Тз.Контракт.Код);
Лист.Cells(Ряд, 2).HorizontalAlignment = -4108; // xlCenter
Лист.Cells(Ряд, 3).Value = СокрЛП(Тз.Контракт);
//Лист.Cells(Ряд, 8).Value = «»+Тз.Контракт.Валюта; // отладка
//Лист.Cells(Ряд, 9).Value = «»+Тз.Контракт.ВалютаСкидки; // отладка

// Заполним основную ячейку с ценой! ////////////////////////////////////////////////////////////////////////////////////////////////////
Если ПустоеЗначение(Тз.Контракт.Валюта.Код) = 1 Тогда
Цена = 0;
Формула = «»;
НомерЦвета = -4142; // нет цвета

ИначеЕсли Тз.Контракт.Валюта.Код = «810″ Тогда // руб.
Цена = 0;
Формула = Тз.Контракт.Цена;
НомерЦвета = 39; // светло фиолетовый

ИначеЕсли Тз.Контракт.Валюта.Код = «840″ Тогда // доллар ЦБ
Цена = Тз.Контракт.Цена;
Формула = «=ROUND(RC[-1]*R1C»+КолонкаКурсов+»,2)»;
НомерЦвета = 40; // светло оранжевый

ИначеЕсли Тз.Контракт.Валюта.Расчетная = 1 Тогда // доллар ЦБ +%
Цена = Тз.Контракт.Цена;
Формула = «=ROUND(RC[-1]*ROUND(R1C»+КолонкаКурсов+»*1.0″+Тз.Контракт.Валюта.Процент+»,4),2)»;
НомерЦвета = 40; // светло оранжевый

ИначеЕсли Тз.Контракт.Валюта.Код = «004″ Тогда // доллар ТТ
Цена = Тз.Контракт.Цена;
Формула = «=ROUND(RC[-1]*R2C»+КолонкаКурсов+»,2)»;
НомерЦвета = 35; // светло селеный

Иначе // другие валюты (Например МТС Челяб и другие)
// Определим ИндексВалюты (от 3 до СзВ.РазмерСписка())
ИндексВалюты = 2 + СзВ.НайтиЗначение(Тз.Контракт.Валюта);
Если ИндексВалюты > 2 Тогда // валюту нашли
Цена = Тз.Контракт.Цена;
Формула = «=ROUND(RC[-1]*R»+ИндексВалюты+»C»+КолонкаКурсов+»,2)»;
НомерЦвета = 38; // розовый
Иначе // не нашли!?
Цена = Тз.Контракт.Цена;
Формула = «»;
НомерЦвета = -4142; // нет цвета
КонецЕсли;

КонецЕсли;

// Здесь повторяется та же кухня, что и с ценой
Если ПустоеЗначение(Тз.Контракт.СкидкаОбъект) = 1 Тогда
ВалютаСкидки = «»;
СуммаСкидки = 0;
ИначеЕсли ПустоеЗначение(Тз.Контракт.СкидкаОбъект.Валюта) = 1 Тогда
ВалютаСкидки = «»;
СуммаСкидки = Тз.Контракт.СкидкаОбъект.Сумма; // по идее должно быть 0
Иначе
ВалютаСкидки = Тз.Контракт.СкидкаОбъект.Валюта;
СуммаСкидки = Тз.Контракт.СкидкаОбъект.Сумма;
КонецЕсли;

Если ПустоеЗначение(ВалютаСкидки) = 1 Тогда
Скидка = 0;
ФормулаСкидки = 0;
НомерЦветаСкидки = -4142; // нет цвета

ИначеЕсли ВалютаСкидки.Код = «810″ Тогда // руб.
Скидка = 0;
ФормулаСкидки = СуммаСкидки;
НомерЦветаСкидки = 39; // светло фиолетовый

ИначеЕсли ВалютаСкидки.Код = «840″ Тогда // доллар ЦБ
Скидка = СуммаСкидки;
ФормулаСкидки = «=ROUND(RC[-1]*R1C»+КолонкаКурсов+»,2)»;
НомерЦветаСкидки = 40; // светло оранжевый

ИначеЕсли ВалютаСкидки.Расчетная = 1 Тогда // доллар ЦБ +%
Скидка = СуммаСкидки;
ФормулаСкидки = «=ROUND(RC[-1]*ROUND(R1C»+КолонкаКурсов+»*1.0″+ВалютаСкидки.Процент+»,4),2)»;
НомерЦветаСкидки = 40; // светло оранжевый

ИначеЕсли ВалютаСкидки.Код = «004″ Тогда // доллар ТТ
Скидка = СуммаСкидки;
ФормулаСкидки = «=ROUND(RC[-1]*R2C»+КолонкаКурсов+»,2)»;
НомерЦветаСкидки = 35; // светло селеный

Иначе // другие валюты (Например МТС Челяб и другие)
// Определим ИндексВалюты (от 3 до СзВ.РазмерСписка())
ИндексВалюты = 2 + СзВ.НайтиЗначение(ВалютаСкидки);
Если ИндексВалюты > 2 Тогда // валюту нашли
Скидка = СуммаСкидки;
ФормулаСкидки = «=ROUND(RC[-1]*R»+ИндексВалюты+»C»+КолонкаКурсов+»,2)»;
НомерЦветаСкидки = 38; // розовый
Иначе // не нашли!?
Скидка = СуммаСкидки;
ФормулаСкидки = «»;
НомерЦветаСкидки = -4142; // нет цвета
КонецЕсли;

КонецЕсли;

Лист.Cells(Ряд, 4).Value = Цена;
Лист.Cells(Ряд, 4).HorizontalAlignment = -4108; // xlCenter
//Лист.Cells(Ряд, 4).HorizontalAlignment = -4152; // xlRight
//Лист.Cells(Ряд, 4).NumberFormat = «[$$-409]# ##0,00″; // денежный — Американский (США)
Лист.Cells(Ряд, 4).NumberFormat = «[$$-409]# ##0,00;;-;@»;

Лист.Cells(Ряд, 5).FormulaR1C1 = Формула;
Лист.Cells(Ряд, 5).HorizontalAlignment = -4108; // xlCenter
//Лист.Cells(Ряд, 5).HorizontalAlignment = -4152; // xlRight
//Лист.Cells(Ряд, 5).NumberFormat = «# ##0,00р.»; // денежный — Рубль
Лист.Cells(Ряд, 5).NumberFormat = «# ##0,00р.;;-;@»;
Лист.Cells(Ряд, 5).Interior.ColorIndex = НомерЦвета;

Лист.Cells(Ряд, 6).Value = Скидка;
Лист.Cells(Ряд, 6).HorizontalAlignment = -4108; // xlCenter
//Лист.Cells(Ряд, 6).HorizontalAlignment = -4152; // xlRight
//Лист.Cells(Ряд, 6).NumberFormat = «[$$-409]# ##0,00″; // денежный — Американский (США)
Лист.Cells(Ряд, 6).NumberFormat = «[$$-409]# ##0,00;;-;@»;

Лист.Cells(Ряд, 7).FormulaR1C1 = ФормулаСкидки;
Лист.Cells(Ряд, 7).HorizontalAlignment = -4108; // xlCenter
//Лист.Cells(Ряд, 7).HorizontalAlignment = -4152; // xlRight
//Лист.Cells(Ряд, 7).NumberFormat = «# ##0,00р.»; // денежный — Рубль
Лист.Cells(Ряд, 7).NumberFormat = «# ##0,00р.;;-;@»;
Лист.Cells(Ряд, 7).Interior.ColorIndex = НомерЦветаСкидки;

////////////////////////////////////////////////////////////////////////////////////////////////////

// Ввод строки еще не закончен… ;)
// Теперь попробуем объединить ячейки с оператором
Если Тз.НомерСтроки = Тз.КоличествоСтрок() Тогда // это последня строка и объединять ячейки по любому!
// Объединим ячейки
//Сообщить(«Вообще последняя строка … (Ряд1 = «+Ряд1+», Ряд = «+Ряд+»)»); // отладка
Лист.Range(Лист.Cells(Ряд1, 1), Лист.Cells(Ряд, 1)).Merge();
Лист.Range(Лист.Cells(Ряд1, 1), Лист.Cells(Ряд, 1)).VerticalAlignment = -4108; // xlCenter
Ряд1 = Ряд+1;
// Заодно нарисуем границы :)
Область = Лист.Range(Лист.Cells(РядШапки, 1), Лист.Cells(Ряд, 7));
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal

ИначеЕсли Тз.ПолучитьЗначение(Тз.НомерСтроки+1,»ЭкономПлан») <> Тз.ЭкономПлан Тогда // это последний контракт в этой книге!
// Объединим ячейки
//Сообщить(«Последняя строка в книге (будут еще книги)… (Ряд1 = «+Ряд1+», Ряд = «+Ряд+»)»); // отладка
Лист.Range(Лист.Cells(Ряд1, 1), Лист.Cells(Ряд, 1)).Merge();
Лист.Range(Лист.Cells(Ряд1, 1), Лист.Cells(Ряд, 1)).VerticalAlignment = -4108; // xlCenter
Ряд1 = Ряд+1;
// Заодно нарисуем границы :)
Область = Лист.Range(Лист.Cells(РядШапки, 1), Лист.Cells(Ряд, 7));
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal

ИначеЕсли Тз.ПолучитьЗначение(Тз.НомерСтроки+1,»Оператор») <> Тз.Оператор Тогда // это последний контракт текущего оператора в одной книге!
// Объединим ячейки
Лист.Range(Лист.Cells(Ряд1, 1), Лист.Cells(Ряд, 1)).Merge();
Лист.Range(Лист.Cells(Ряд1, 1), Лист.Cells(Ряд, 1)).VerticalAlignment = -4108; // xlCenter
Ряд1 = Ряд+1;
Иначе // просто очередной контракт опреатора
КонецЕсли;

// А теперь ввод строки закончен! :) Уф!
Ряд = Ряд + 1;
КонецЦикла; // по строкам Тз

// Запишем последнюю книгу
Попытка
Книга.SaveAs(КаталогСохранения+»\»+ТекущийЭкономПлан+».xls»);
Книга.Close(0);
Сообщить(«Файл («+ТекущийЭкономПлан+») записан!», «i»);
Исключение
Сообщить(«Ошибка при записи эконом плана («+ТекущийЭкономПлан+»)!»,»!»);
ВызватьИсключение;
КонецПопытки;

КонецПроцедуры // Excel_СоздатьКниги_ВыгрузитьЭП

// 12.08.10
Функция ПолучитьСвойствоОбъекта(Объект, КодСвойства) Экспорт

Перем Свойство;

Если Не ЗначениеЗаполнено(Объект) Тогда
Возврат Неопределено;
КонецЕсли;

Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(КодСвойства);
Если Не ЗначениеЗаполнено(Свойство) Тогда
Сообщить(«Свойство по коду («+КодСвойства+») не найдено!», СтатусСообщения.Внимание);
Возврат Неопределено;
КонецЕсли;

ТекстЗапроса = «ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &Объект
| И ЗначенияСвойствОбъектов.Свойство = &Свойство»;

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр(«Объект», Объект);
Запрос.УстановитьПараметр(«Свойство», Свойство); // Код поставщика Мосмарт

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

Если Тз.Количество() > 0 Тогда
Возврат Тз.Получить(0).Значение;
КонецЕсли;

КонецФункции // ПолучитьКодПоставщика

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 24.08.10

Процедура Ячейка(Лист, Ряд, Колонка, Значение, ВыравниваниеГоризонтальное=0, ВыравниваниеВертикальное=0, СтрФормат=»", СтрФормула=»")
Лист.Cells(Ряд, Колонка).Value = Значение;
Если ВыравниваниеГоризонтальное <> 0 Тогда
Лист.Cells(Ряд, Колонка).HorizontalAlignment = ВыравниваниеГоризонтальное;
КонецЕсли;
Если ВыравниваниеВертикальное <> 0 Тогда
Лист.Cells(Ряд, Колонка).VerticalAlignment = ВыравниваниеВертикальное;
КонецЕсли;
Если СтрФормат <> «» Тогда
Лист.Cells(Ряд, Колонка).NumberFormat = СтрФормат;
КонецЕсли;
Если СтрФормула <> «» Тогда
Лист.Cells(Ряд, Колонка).FormulaR1C1 = СтрФормула;
КонецЕсли;
КонецПроцедуры // Ячейка

Процедура Объединить(Лист, Ряд1, Колонка1, Ряд2, Колонка2)
Область = Лист.Range(Лист.Cells(Ряд1, Колонка1), Лист.Cells(Ряд2, Колонка2));
Область.Merge();
Область.HorizontalAlignment = -4108; // xlCenter
Область.VerticalAlignment = -4108; // xlCenter
Область.WrapText = 1;
КонецПроцедуры // Ячейка

Функция ОбластьЛиста(Лист, Ряд1, Колонка1, Ряд2, Колонка2)

Возврат Лист.Range(Лист.Cells(Ряд1,Колонка1), Лист.Cells(Ряд2,Колонка2));

КонецФункции // Область

Процедура СоздатьКнигуЭксель(ТзПлан)

ДниНедели = Новый Массив(8);
ДниНедели[1] = «Понедельник»;
ДниНедели[2] = «Вторник»;
ДниНедели[3] = «Среда»;
ДниНедели[4] = «Четверг»;
ДниНедели[5] = «Пятница»;
ДниНедели[6] = «Суббота»;
ДниНедели[7] = «Воскресенье»;

Попытка
Эксель = Новый COMОбъект(«Excel.Application»);
Исключение
Предупреждение(«Не удалось подключиться к программе Microsoft Excel — » + ОписаниеОшибки(), 30);
Возврат;
КонецПопытки;

Эксель.DisplayAlerts = 0; // False

Эксель.Visible = 1; // на период отладки
Книга = Эксель.Workbooks.Add(); // новая книга

Книга.Sheets.Add(,,4,);

// {{ добавим Имя
Лист2 = Книга.Worksheets(5);
Лист2.Name = «Линии»;
Лист2.Cells.Font.Size = 8; // по умолчанию

Ячейка(Лист2, 1, 1, «Линии (оборудование)»);
Ячейка(Лист2, 2, 1, «НЕХАМА»);
Ячейка(Лист2, 3, 1, «КАЛИПСО»);
Ячейка(Лист2, 4, 1, «BIG SIZE»);

Книга.Names.Add(«Линии»,,,,,,,,, «=Линии!R2C1:R4C1″,);
// }}

ЗаполнитьЛист(ТзПлан, Эксель, Книга, 1, «Флоупак»);
ЗаполнитьЛист(ТзПлан, Эксель, Книга, 2, «Big Size»);
ЗаполнитьЛист(ТзПлан, Эксель, Книга, 3, «Наборы»);
ЗаполнитьЛист(ТзПлан, Эксель, Книга, 4, «Банка»);

Книга.Sheets(1).Select();

//Эксель.Visible = 1; // на случай ускорения прорисовки

// Запишем последнюю книгу
//Попытка
// Книга.SaveAs(КаталогСохранения+»\»+ТекущийЭкономПлан+».xls»);
// Книга.Close(0);
// Сообщить(«Файл («+ТекущийЭкономПлан+») записан!», «i»);
//Исключение
// Сообщить(«Ошибка при записи эконом плана («+ТекущийЭкономПлан+»)!»,»!»);
// ВызватьИсключение;
//КонецПопытки;

КонецПроцедуры // Создать КнигуЭксель

Процедура ЗаполнитьЛист(ТзПлан, Эксель, Книга, НомерЛиста, ИмяЛиста)

Лист = Книга.Worksheets(НомерЛиста);
//Sheets.Add After:=Sheets(Sheets.Count)
Лист.Name = ИмяЛиста;
Лист.Cells.Font.Size = 8; // по умолчанию

Книга.Sheets(НомерЛиста).Select();

РядЗаголовка = 1;
РядПервыйТаблицы = РядЗаголовка + 3;
КолонкаНоменклатура = 1;
КолонкаПерваяТаблицы = КолонкаНоменклатура + 4;

// Вывод шапки

НомерДаты = 1;
Дат = НачалоДня(НачПериода);
Пока Дат

//Ячейка(Лист, РядЗаголовка, КолонкаНоменклатура, «Наименование продукции», -4108, -4108);
Ячейка(Лист, РядЗаголовка, КолонкаНоменклатура, «Наименование продукции (код)», -4108, -4108);
Ячейка(Лист, РядЗаголовка, КолонкаНоменклатура+1, «Материал», -4108, -4108);
Ячейка(Лист, РядЗаголовка, КолонкаНоменклатура+2, «План производства», -4108, -4108);
Ячейка(Лист, РядЗаголовка, КолонкаНоменклатура+3, «Осталось распределить по дням», -4108, -4108);

Объединить(Лист, РядЗаголовка, КолонкаНоменклатура, РядЗаголовка+2, КолонкаНоменклатура);
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура+1, РядЗаголовка+2, КолонкаНоменклатура+1);
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура+2, РядЗаголовка+2, КолонкаНоменклатура+2);
Объединить(Лист, РядЗаголовка, КолонкаНоменклатура+3, РядЗаголовка+2, КолонкаНоменклатура+3);

Ряд = РядЗаголовка;
Колонка = КолонкаПерваяТаблицы+3*(НомерДаты-1);
Лист.Cells(Ряд, Колонка).Value = Формат(Дат, «ДЛФ=DD»); // значение
Объединить(Лист, Ряд, Колонка, Ряд, Колонка+2);

Ряд = РядЗаголовка+1;
Колонка = КолонкаПерваяТаблицы+3*(НомерДаты-1);
Лист.Cells(Ряд, Колонка).Value = Формат(ДниНедели[НомерДаты], «ДЛФ=DD»); // значение
Объединить(Лист, Ряд, Колонка, Ряд, Колонка+2);

Ячейка(Лист, РядЗаголовка+2, КолонкаПерваяТаблицы+3*(НомерДаты-1), «План», -4108, -4108);
Ячейка(Лист, РядЗаголовка+2, КолонкаПерваяТаблицы+3*(НомерДаты-1)+1, «Линия», -4108, -4108);
Ячейка(Лист, РядЗаголовка+2, КолонкаПерваяТаблицы+3*(НомерДаты-1)+2, «Оч.», -4108, -4108);
//Ячейка(Лист, РядЗаголовка+2, КолонкаПерваяТаблицы+3*(НомерДаты-1)+2, «Очередность», -4108, -4108);
//Лист.Cells(РядЗаголовка+2, КолонкаПерваяТаблицы+3*(НомерДаты-1)+2).Wrap = -1; // True

//Лист.Columns(«A:A»).ColumnWidth = 28;

Дат = НачалоДня(Дат + 60 * 60 * 24);
НомерДаты = НомерДаты + 1;
КонецЦикла;

Область = Лист.Range(Лист.Cells(РядЗаголовка, КолонкаНоменклатура), Лист.Cells(РядЗаголовка+2, (КолонкаПерваяТаблицы-КолонкаНоменклатура)+7*3));
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal

// Настроим ширины колонок
Лист.Columns(«A:A»).ColumnWidth = 28;
Лист.Columns(«B:B»).ColumnWidth = 16;
Лист.Columns(«C:C»).ColumnWidth = 10;
Лист.Columns(«D:D»).ColumnWidth = 10;

// Вывод таблицы
Тз = ТзПлан; // для удобства

НомСтр = 0;
Для Каждого СтрокаТз из Тз Цикл

// отладка
//Если НомСтр > 5 Тогда
// Прервать;
//КонецЕсли;

ОбработкаПрерыванияПользователя();
//Состояние(«»+(Тз.Индекс(СтрокаТз)+1)+» из «+Тз.Количество()+» …»);

Если СтрокаТз.НомерЛиста <> НомерЛиста Тогда
Продолжить;
КонецЕсли;

НомСтр = НомСтр + 1;

Код = СтрокаТз.Код;
Номенклатура = СтрокаТз.Номенклатура;
КолПлан = СтрокаТз.КолПлан;

Ряд = РядПервыйТаблицы + (НомСтр-1);

СтрНаименование = СокрЛП(Номенклатура)+» («+СокрЛП(Код)+»)»;

Ячейка(Лист, Ряд, КолонкаНоменклатура, СтрНаименование);
Ячейка(Лист, Ряд, КолонкаНоменклатура+1, «»);
Ячейка(Лист, Ряд, КолонкаНоменклатура+2, КолПлан,,, «# ##0″);
Ячейка(Лист, Ряд, КолонкаНоменклатура+3, «»,,,, «=RC[-1]-RC[1]-RC[4]-RC[7]-RC[10]-RC[13]-RC[16]-RC[19]«); // формула

НомерДаты = 1;
Дат = НачалоДня(НачПериода);
Пока Дат

Ид = ИдПоДате(Дат);
КолПланДня = СтрокаТз[Ид];

Ячейка(Лист, Ряд, КолонкаПерваяТаблицы+3*(НомерДаты-1), КолПланДня,,, «# ##0″);

Дат = НачалоДня(Дат + 60 * 60 * 24);
НомерДаты = НомерДаты + 1;
КонецЦикла; // по колонкам дней

КонецЦикла; // по списку номенклатуры

// Вывод подвала

// Выведем сумму
Ряд = Ряд + 1;
СтрФормула = «=SUM(R[-"+НомСтр+"]C:R[-1]C)»;
Ячейка(Лист, Ряд, КолонкаНоменклатура+2, «»,,, «# ##0″, СтрФормула); // формула
Ячейка(Лист, Ряд, КолонкаНоменклатура+3, «»,,, «# ##0″, СтрФормула); // формула
НомерДаты = 1;
Дат = НачалоДня(НачПериода);
Пока Дат

Ид = ИдПоДате(Дат);

Колонка = КолонкаПерваяТаблицы+3*(НомерДаты-1);

Ячейка(Лист, Ряд, Колонка, КолПланДня,,, «# ##0″, СтрФормула);

Область = ОбластьЛиста(Лист, РядПервыйТаблицы, Колонка+1, РядПервыйТаблицы+(НомСтр-1), Колонка+1);
Область.Select();
//Область.Validation.Delete();
Область.Validation.Add(3,,, «=Линии»,); // xlValidateList

Дат = НачалоДня(Дат + 60 * 60 * 24);
НомерДаты = НомерДаты + 1;
КонецЦикла; // по колонкам дней

Колонка2 = КолонкаПерваяТаблицы+3*(НомерДаты-1)-1;
Область = ОбластьЛиста(Лист, 1, 1, РядПервыйТаблицы+(НомСтр-1), Колонка2);
Область.Borders(7).Weight = 2; // xlLeft
Область.Borders(8).Weight = 2; // xlTop
Область.Borders(9).Weight = 2; // xlBotton
Область.Borders(10).Weight = 2; // xlRight
Область.Borders(11).Weight = 2; // xlInsideVertical
Область.Borders(12).Weight = 2; // xlInsideHorizontal

Область = ОбластьЛиста(Лист, 1, 1, 1, 1);
Область.Select(); // вернемся в угло листа

ПараметрыСтраницы = Лист.PageSetup;
ПараметрыСтраницы.LeftMargin = Эксель.CentimetersToPoints(1);
ПараметрыСтраницы.RightMargin = Эксель.CentimetersToPoints(1);
ПараметрыСтраницы.TopMargin = Эксель.CentimetersToPoints(1);
ПараметрыСтраницы.BottomMargin = Эксель.CentimetersToPoints(1);
ПараметрыСтраницы.BlackAndWhite = 1; // True
ПараметрыСтраницы.Orientation = 2; // xlLandscape
//ПараметрыСтраницы.Zoom = 0; // не требуется
ПараметрыСтраницы.FitToPagesWide = 1;
ПараметрыСтраницы.FitToPagesTall = 10;

//Эксель.ActiveWindow.DisplayZeros = 0;
Окно = Книга.Windows(1);
Окно.DisplayZeros = 0;
Окно.SplitRow = 3;
Окно.SplitColumn = 4;
Окно.FreezePanes = -1; // Tree

//СтрОбласть = «R[-"+НомСтр+"]C:R[-1]C;
//Range(«A2:A5″).Select

//expression.Add(Type, AlertStyle, Operator, Formula1, Formula2)

//Sheets(«Лист1″).Select
//Range(«R4:R61″).Select
//With Selection.Validation
// .Delete
// .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
// xlBetween, Formula1:=»=Линии»
// .IgnoreBlank = True
// .InCellDropdown = True
// .InputTitle = «»
// .ErrorTitle = «»
// .InputMessage = «»
// .ErrorMessage = «»
// .ShowInput = True
// .ShowError = True
//End With

//Книга.Windows(1).DisplayGridlines = 0;
//Книга.Windows(1).Zoom = 120;
//Лист.DisplayAutomaticPageBreaks = 0;

КонецПроцедуры // ЗаполнитьЛист

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Функция COM_соединение()

КонецФункции // COM_соединение

Функция ОбновитьСоединение()
Если ТипЗнч(гКоннектор) = Тип(«Неопределено») Тогда

//гСтрСоединения = «File=»"C:\1Cv81\DBs\Анализ ролей»";»;
КаталогИБ = СокрЛП(ВыбКаталогИБ);
гСтрСоединения = «File=»"»+КаталогИБ+»"»;»;
Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
Если Не Фсо.FolderExists(КаталогИБ) Тогда
Сообщить(«Каталог ИБ не найден! «+КаталогИБ, СтатусСообщения.Внимание);
Возврат Неопределено;
КонецЕсли;

гКоннектор = Новый COMObject («V81.COMConnector»);
гСоединение = гКоннектор.Connect(гСтрСоединения);
КонецЕсли;
КонецФункции // ОбновитьСоединение

Функция COM_ОбновитьРоли()
// можно проверить необходимость обновления
// …

ОбновитьСоединение();

Состояние(«Роли…»);

Запрос = гСоединение.NewObject(«Запрос»);
//Спр = Соединение.NewObject(«Справочник.Роли»);
ТекстЗапроса = «ВЫБРАТЬ
| Роли.Ссылка
|ИЗ
| Справочник.Роли КАК Роли»;

Запрос.Текст = ТекстЗапроса;
//Запрос.УстановитьПараметр(«Ссылка», Ссылка);

РезультатЗапроса = Запрос.Выполнить();
Тз = РезультатЗапроса.Выгрузить();
//Сообщить(Тз.Количество());

Для Каждого СтрокаТз из Тз Цикл
ОбработкаПрерыванияПользователя();
Объект = СтрокаТз.Ссылка.ПолучитьОбъект();
Попытка
Объект.Удалить();
Исключение
//Сообщить(«Не удалось удалить объект! «+Соединение.String(Объект));
КонецПопытки;
КонецЦикла; // по ролям в справочнике

// Заполнение справочника Роли
сСпр = гСоединение.Справочники.Роли;
Для Каждого Роль из Метаданные.Роли Цикл
сЭлемент = сСпр.СоздатьЭлемент();
сЭлемент.Наименование = Роль.Имя;
сЭлемент.Порядок = Метаданные.Роли.Индекс(Роль)+1;
сЭлемент.Записать();

КонецЦикла; // по ролям
Сообщить(«Записано ролей: «+Метаданные.Роли.Количество());
КонецФункции // ОбновитьРоли

Функция OLE_ОбновитьСоединение()
//Если ТипЗнч(гКоннектор) = Тип(«Неопределено») Тогда
Если ТипЗнч(гСоединение) = Тип(«Неопределено») Тогда

СтрСоединения = «Srvr=»"tgx8″»;Ref=»"v81AzTtAuto»";Usr =»"Пользователь»";Pwd =»"1″»;»;

Коннектор = Новый COMObject («V81.COMConnector»);
гСоединение = Коннектор.Connect(СтрСоединения);
КонецЕсли;
КонецФункции // ОбновитьСоединение

Процедура OLE_ОсновныеДействияФормыВыгрузить(Кнопка)

Перем Тз;

ОбновитьСоединение();

сСпр = гСоединение.Справочники.Организации;
сОрганизация = сСпр.НайтиПоКоду(«1″);

сЗапрос = гСоединение.NewObject(«Запрос»);
ТекстЗапроса = «ВЫБРАТЬ
| ОперацияБух.Ссылка
|ИЗ
| Документ.ОперацияБух КАК ОперацияБух
|ГДЕ
| ОперацияБух.Организация = &Организация
| И ОперацияБух.Комментарий ПОДОБНО &Комментарий
| И (НЕ ОперацияБух.ПометкаУдаления)
| И ОперацияБух.Дата МЕЖДУ &Дата1 И &Дата2″;

сЗапрос.Текст = ТекстЗапроса;

сЗапрос.УстановитьПараметр(«Дата1″, Дата1);
сЗапрос.УстановитьПараметр(«Дата2″, КонецДня(Дата2));
сЗапрос.УстановитьПараметр(«Организация», сОрганизация);
//сЗапрос.УстановитьПараметр(«Содержание», «»);
сЗапрос.УстановитьПараметр(«Комментарий», «»);

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

Если сТз.Количество() = 0 Тогда
Возврат;
КонецЕсли;

Стр = «В базе уже есть операции («+сТз.Количество()+») для текущей базы! «+глПомощник.СтрокаСоединенияБаза()+»
|Все они будут помечены на удаление.
|Продолжить?»;
Если Вопрос(Стр, РежимДиалогаВопрос.ДаНетОтмена, 60, КодВозвратаДиалога.Да, «Подтверждение») <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;

// пометим их на удаление
Для Каждого сСтрокаТз из сТз Цикл
ОбработкаПрерыванияПользователя();
//Состояние(«»+(Тз.Индекс(СтрокаТз)+1)+» из «+Тз.Количество()+» …»);

сОбъект = сСтрокаТз.Ссылка.ПолучитьОбъект();
сОбъект.УстановитьПометкуУдаления(Истина);
КонецЦикла;

сДокумент = гСоединение.Документы.ОперацияБух.СоздатьДокумент();
сДокумент.Дата = КонецМесяца(Дата1);
сДокумент.Организация = сОрганизация;
//сДокумент.Содержание = «»;
сДокумент.Содержание = Формат(Дата1, «ДФ=ММММ») + » » + Формат(Дата1, «ДФ=гггг»);
сДокумент.Комментарий = «»;
сДокумент.Записать();

сНз = гСоединение.РегистрыБухгалтерии.Налоговый.СоздатьНаборЗаписей();
сНз.Отбор.Регистратор.Установить(сДокумент.Ссылка);

Для Каждого СтрокаТз из Тз Цикл

ОбработкаПрерыванияПользователя();
//Состояние(«»+(Тз.Индекс(СтрокаТз)+1)+» из «+Тз.Количество()+» …»);

Если НачалоМесяца(СтрокаТз.ДатаПериода) <> НачалоМесяца(Дата1) Тогда
Продолжить;
КонецЕсли;

сЗп = сНз.Добавить();
сЗп.Период = КонецМесяца(Дата1);
сЗп.Организация = сОрганизация;
сЗп.СчетДт = ПолучитьСчет(СтрокаТз.Дт);
сЗп.ВидУчетаДт = ПолучитьПодразделение(СтрокаТз.Подразделение);
сЗп.СчетКт = ПолучитьСчет(СтрокаТз.Кт);
сЗп.ВидУчетаКт = сЗп.ВидУчетаДт;
сЗп.НомерЖурнала = «»;
сЗп.Содержание = «»;
сЗп.Сумма = СтрокаТз.Сумма;

КонецЦикла;

сНз.Записать();

СообщитьЛог(«Операция № «+сДокумент.Номер+» от «+сДокумент.Дата+» создана.», СтатусСообщения.Информация);

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

Функция Word_Замена() Экспорт

// 1) сделать замену строки ЭтотОбъект.Ссылка на ЭтотОбъектСсылка
// После заменить ЭтотОбъект. на пустую строку

// 2) раскомментировать этот блок
//ЭтотОбъектСсылка = СсылкаНаОбъект;
//Дата = СсылкаНаОбъект.Дата;
//Номер = СсылкаНаОбъект.Номер;
//Ответственный = СсылкаНаОбъект.Ответственный;
//мВалютаРегламентированногоУчета = глЗначениеПеременной(«ВалютаРегламентированногоУчета»);

Если СсылкаНаОбъект.РаботникиОрганизации.Количество() = 0 Тогда
Сообщить(«Не найден ни один сотрудник!», СтатусСообщения.Внимание);
Возврат Неопределено;
КонецЕсли;

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

ИмяФайла = «\\centro\shares\disks\Соглашение о расторжении договора.doc»;

Ворд = Новый COMОбъект(«Word.Application»);

Ворд.Visible = Истина;
Ворд.Documents.Open(ИмяФайла);

Поиск = Ворд.Selection.Find;
Поиск.ClearFormatting();
Поиск.Replacement.ClearFormatting();
Поиск.Text = «[ФИО]«;
Поиск.Replacement.Text = «Сидоров»;
Поиск.Forward = Истина;
Поиск.Wrap = 1; // wdFindContinue
Поиск.Format = Ложь;
Поиск.MatchCase = Ложь;
Поиск.MatchWholeWord = Ложь;
Поиск.MatchWildcards = Ложь;
Поиск.MatchSoundsLike = Ложь;
Поиск.MatchAllWordForms = Ложь;
//Поиск.Replace = 2; // wdReplaceAll — ошибка (это я сам придумал вынести в свойство)

//Function Execute([FindText], [MatchCase], [MatchWholeWord], [MatchWildcards], [MatchSoundsLike], [MatchAllWordForms], [Forward], [Wrap], [Format], [ReplaceWith], [Replace], [MatchKashida], [MatchDiacritics], [MatchAlefHamza], [MatchControl]) As Boolean
// Function Execute(,,,,,,,,,,, , , , )

Поиск.Execute(,,,,,,,,, , 2, , , , ); // wdReplaceAll

Поиск.Execute(«(Серия)», Ложь, Ложь, Ложь, Ложь, Ложь, Истина, 1, Ложь, «03 01″, 2,,,,); // wdFindContinue, wdReplaceAll

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

Функция ПолучитьРасширениеКартинки(х) Экспорт
Перем СтрРасширение, ФорматК;

Если ТипЗнч(х) = Тип(«Картинка») Тогда
ФорматК = х.Формат();
ИначеЕсли ТипЗнч(х) = Тип(«ФорматКартинки») Тогда
ФорматК = х;
Иначе
Возврат «dat»;
КонецЕсли;

Если ФорматК = ФорматКартинки.BMP Тогда
СтрРасширение = «bmp»;
ИначеЕсли ФорматК = ФорматКартинки.GIF Тогда
СтрРасширение = «gif»;
ИначеЕсли ФорматК = ФорматКартинки.JPEG Тогда
СтрРасширение = «jpg»;
ИначеЕсли ФорматК = ФорматКартинки.PNG Тогда
СтрРасширение = «png»;
//ИначеЕсли ФорматК = ФорматКартинки.Icon Тогда
// СтрРасширение = «ico»;
Иначе
СтрРасширение = «pic»;
КонецЕсли;
Возврат СтрРасширение;
КонецФункции // ПолучитьРасширениеКартинки

Функция ПолучитьРазмерКартинки(оКартинка) Экспорт
Перем ИмяФайла;

стРазмеры = Новый Структура;
стРазмеры.Вставить(«Ширина», 0);
стРазмеры.Вставить(«Высота», 0);

//Если оКартинка.Формат() <> ФорматКартинки.JPEG Тогда // на случай, если IE не будет их открывать
// стРазмеры.Вставить(«Ширина», 0);
// стРазмеры.Вставить(«Высота», 0);
// Возврат стРазмеры;
//КонецЕсли;

Если оКартинка.Формат() <> ФорматКартинки.JPEG Тогда // на случай, если IE не будет их открывать
//Сообщить(«Формат картинки («+оКартинка.Формат()+») не JPG!»);
КонецЕсли;
//Сообщить(«Формат картинки: «+оКартинка.Формат());

Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
//ИмяФайла = Фсо.BuildPath(КаталогВременныхФайлов(), Фсо.GetTempName());
ИмяФайла = Фсо.BuildPath(КаталогВременныхФайлов(), Фсо.GetTempName()+».»+ПолучитьРасширениеКартинки(оКартинка));
Попытка
//Сообщить(«»+ИмяФайла);
оКартинка.Записать(ИмяФайла);
Сообщить(«»+ИмяФайла, СтатусСообщения.Информация);
Исключение
//Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
Иэ = Новый COMОбъект(«InternetExplorer.Application»);

Попытка
Иэ.Navigate(ИмяФайла);
Исключение
Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат стРазмеры;
КонецПопытки;
//Сообщить(«Ширина: «+Иэ.document.images(0).width);
//Сообщить(«Высота: «+Иэ.document.images(0).height);

Кол = 1;
Пока Иэ.Busy Цикл
//Пауза();
Кол = Кол + 1;
Если Кол > 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Попытка
стРазмеры.Ширина = Иэ.document.images(0).width;
стРазмеры.Высота = Иэ.document.images(0).height;
Исключение
Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Попытка
Иэ.Quit();
Исключение
Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Попытка
Фсо.DeleteFile(ИмяФайла);
Исключение
//Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Возврат стРазмеры;

КонецФункции // ПолучитьРазмерКартинки

//Функция ПолучитьРазмерКартинки(оКартинка) Экспорт
// Перем ИмяФайла;
// Фсо = Новый COMОбъект(«Scripting.FileSystemObject»);
// ИмяФайла = Фсо.BuildPath(КаталогВременныхФайлов(), Фсо.GetTempName());
// Попытка
// //Сообщить(«»+ИмяФайла);
// оКартинка.Записать(ИмяФайла);
// Исключение
// //Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
// КонецПопытки;
// Иэ = Новый COMОбъект(«InternetExplorer.Application»);
// Иэ.Navigate(ИмяФайла);
// //Сообщить(«Ширина: «+Иэ.document.images(0).width);
// //Сообщить(«Высота: «+Иэ.document.images(0).height);
//
// стРазмеры = Новый Структура;
// стРазмеры.Вставить(«Ширина», Иэ.document.images(0).width);
// стРазмеры.Вставить(«Высота», Иэ.document.images(0).height);
//
// Иэ.Quit();
//
// Попытка
// Фсо.DeleteFile(ИмяФайла);
// Исключение
// //Сообщить(«Описание: «+ОписаниеОшибки(), СтатусСообщения.Внимание);
// КонецПопытки;
//
// Возврат стРазмеры;
//
//КонецФункции // ПолучитьРазмерКартинки

Функция УстановитьЗначениеСвойстваНоменклатуры(Объект, ИмяСвойства, Значение) Экспорт

Если Объект.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;

оСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства);
если Не ЗначениеЗаполнено(оСвойство) тогда
//сообщить(«свойство не обнаружено.»,СтатусСообщения.Внимание);
Возврат Неопределено;
конецЕсли;

нзЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
нзЗначенияСвойств.Отбор.Объект.Установить(Объект);
нзЗначенияСвойств.Отбор.Свойство.Установить(оСвойство);

нзЗначенияСвойств.Прочитать();
Если нзЗначенияСвойств.Количество() = 0 Тогда // не было значения
знзЗначениеСвойства = нзЗначенияСвойств.Добавить();
знзЗначениеСвойства.Объект = Объект;
знзЗначениеСвойства.Свойство = оСвойство;
знзЗначениеСвойства.Значение = Значение;
нзЗначенияСвойств.Записать();
ИначеЕсли нзЗначенияСвойств.Количество() = 1 Тогда // заменим, если значение отличается
знзЗначениеСвойства = нзЗначенияСвойств.Получить(0);
Если Значение <> знзЗначениеСвойства.Значение Тогда
знзЗначениеСвойства.Объект = Объект;
знзЗначениеСвойства.Свойство = оСвойство;
знзЗначениеСвойства.Значение = Значение;
нзЗначенияСвойств.Записать();
КонецЕсли;
Иначе // ерунда какая-то …
Возврат Неопределено;
КонецЕсли;

КонецФункции // ПолучитьЗначениеСвойстваНоменклатуры

функция ПолучитьЗначениеСвойстваНоменклатуры(Объект, ИмяСвойства) экспорт
Перем Запрос;

оСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства);
если Не ЗначениеЗаполнено(оСвойство) тогда
//сообщить(«свойство не обнаружено.»,СтатусСообщения.Внимание);
Возврат Неопределено;
конецЕсли;

Запрос = новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &Объект
| И ЗначенияСвойствОбъектов.Свойство = &Свойство
|»;

Запрос.УстановитьПараметр(«Объект», Объект);
Запрос.УстановитьПараметр(«Свойство», оСвойство);

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

если РезультатЗапроса.Следующий() тогда

Возврат РезультатЗапроса.Значение;

иначе
//сообщить(«для «+строка(Контрагент)+» свойство «»Глубина кредита по умолчанию»" не заполнено.»,СтатусСообщения.Внимание);
Возврат Неопределено;
конецЕсли;

//возврат Результат;

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

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

если Не ЗначениеЗаполнено(Свойство) тогда
Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
конецЕсли;

Если ПустаяСтрока(СтрЗначение) Тогда
Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
КонецЕсли;

ТекстЗапроса = «ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Ссылка
|ИЗ
| Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец = &Владелец»;

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр(«Владелец», Свойство);

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

л = СтрДлина(СтрЗначение);
//л = СтрДлина(СтрЗначение)-1; // пожарный вариант

// можно улучшить
// выбрать не помеченные, если нет, то получить помеченный
Для Каждого СтрокаТз из Тз Цикл

ОбработкаПрерыванияПользователя();
//Состояние(«»+(Тз.Индекс(СтрокаТз)+1)+» из «+Тз.Количество()+» …»);

х = НРег(СокрЛП(СтрокаТз.Ссылка));

//Если х = НРег(СокрЛП(СтрЗначение)) Тогда
Если Лев(х, л) = Лев(НРег(СокрЛП(СтрЗначение)), л) Тогда // пожарный вариант
Возврат СтрокаТз.Ссылка;
КонецЕсли;

КонецЦикла; // не нашли

Сообщить(«Не удалось найти значение («+СтрЗначение+»)! Свойство: «+Свойство, СтатусСообщения.Внимание);
Возврат Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();

КонецФункции // ПолучитьЗначениеСвойства

Функция СоздатьСвойствоНоменклатуры(ИмяСвойства) Экспорт

Пвх = ПланыВидовХарактеристик.СвойстваОбъектов;

СсылкаПвх = Пвх.НайтиПоНаименованию(ИмяСвойства);
Если СсылкаПвх.Пустая() Тогда
оСвойство = Пвх.СоздатьЭлемент();
оСвойство.Наименование = ИмяСвойства;
оСвойство.ТипЗначения = Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(5, 0, ДопустимыйЗнак.Неотрицательный),,);
оСвойство.НазначениеСвойства = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;
Попытка
оСвойство.Записать();
Исключение
КонецПопытки;
Иначе
КонецЕсли;

КонецФункции // СоздатьСвойствоНоменклатуры

Процедура ВыгрузитьВСкуль_SQL()

ИмяТаблицы = «Tree»;

Соединение = новый COMОбъект(«ADODB.Connection»);
Соединение.ConnectionString = «Driver={SQL Server};Server=Srv10;Database=XmlFile;Trusted_Connection=Yes;»;
Соединение.CursorLocation = 3;

Попытка
Соединение.Open();
Исключение
Сообщить(«Ошибка: «+ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат;
КонецПопытки;

НаборЗаписей = новый COMОбъект(«ADODB.Recordset»);
НаборЗаписей.Open(ИмяТаблицы, Соединение, 2, 4, 2);

ЧтениеXML = Новый ЧтениеXML;

т1 = ТекущаяДата();
ЧтениеXML.ОткрытьФайл(гПуть);

// чтобы увидеть конец-край
Кол = 0;
Пока ЧтениеXML.Прочитать() Цикл
Если Кол % 10000 = 0 Тогда
ОбработкаПрерыванияПользователя();
Состояние(«Сбор данных, «+Кол+» …»);
КонецЕсли;
Кол = Кол + 1;
КонецЦикла;
КолМакс = Кол;
ЧтениеXML.Закрыть();
т2 = ТекущаяДата();
дт1 = т2-т1;

Состояние(«Очистка таблицы SQL …»);
Попытка
Соединение.Execute(«DELETE FROM «+ИмяТаблицы);
Исключение
КонецПопытки;
Попытка
//Соединение.Execute(«DELETE FROM Values»);
Исключение
КонецПопытки;

т1 = ТекущаяДата();
ЧтениеXML.ОткрытьФайл(гПуть);

мСтек = Новый Массив(100); // в стеке храним Ид родителей и обращаемся к массиву только при смене родителя

Ид = 0;
Кол = 0;
РазмерСтекаПик = 0;
РазмерСтека = 0;
ИдРодителя = 0; // текущий родитель
КолЗаписей = 0;
Пока ЧтениеXML.Прочитать() Цикл
Если Кол % 10000 = 0 Тогда
ОбработкаПрерыванияПользователя();
Процент = Окр(Кол / КолМакс * 100);
СтрСостояния = «»+Процент+»% … («+Кол+» из «+КолМакс+», «+РазмерСтекаПик+»)»;
Состояние(СтрСостояния);
КонецЕсли;

Если КолЗаписей >= 100000 Тогда
СтрСостояния = «»+Процент+»% … («+Кол+» из «+КолМакс+», «+РазмерСтекаПик+») — Запись в SQL»;
Состояние(СтрСостояния);
НаборЗаписей.UpdateBatch();
КолЗаписей = 0;
КонецЕсли;

Кол = Кол + 1;

//1 ELEMENT_NODE
//2 ATTRIBUTE_NODE
//3 TEXT_NODE
//4 CDATA_SECTION_NODE
//5 ENTITY_REFERENCE_NODE
//6 ENTITY_NODE
//7 PROCESSING_INSTRUCTION_NODE
//8 COMMENT_NODE
//9 DOCUMENT_NODE
//10 DOCUMENT_TYPE_NODE
//11 DOCUMENT_FRAGMENT_NODE
//12 NOTATION_NODE

Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда // новый элемент
РазмерСтека = РазмерСтека + 1;
Ид = Ид + 1;

//Добавить в выгрузку …
НаборЗаписей.AddNew();
КолЗаписей = КолЗаписей + 1;
НаборЗаписей.Fields.Item(«ID»).Value = Ид;
НаборЗаписей.Fields.Item(«PID»).Value = ИдРодителя;
НаборЗаписей.Fields.Item(«NodeType»).Value = 1;
НаборЗаписей.Fields.Item(«Presentation»).Value = Строка50(ЧтениеXML.Имя); // маловероятно, что длинна превысит 50 символов…

мСтек.Установить(РазмерСтека, Ид);
ИдРодителя = Ид;

// откроем (увеличим) стек
Если РазмерСтека > РазмерСтекаПик Тогда
РазмерСтекаПик = РазмерСтека;
КонецЕсли;
//СтрокаБ.Уровень = ТзСтек.Количество()-1;

ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // окончание элемента
// закроем стек
РазмерСтека = РазмерСтека — 1;

//мСтек.Установить(РазмерСтека, Ид);
ИдРодителя = мСтек.Получить(РазмерСтека);

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

НаборЗаписей.AddNew();
КолЗаписей = КолЗаписей + 1;
НаборЗаписей.Fields.Item(«ID»).Value = Ид;
НаборЗаписей.Fields.Item(«PID»).Value = ИдРодителя;
НаборЗаписей.Fields.Item(«NodeType»).Value = 3;
НаборЗаписей.Fields.Item(«Presentation»).Value = Строка50(ЧтениеXML.Значение);

ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут Тогда
Ид = Ид + 1;

НаборЗаписей.AddNew();
КолЗаписей = КолЗаписей + 1;
НаборЗаписей.Fields.Item(«ID»).Value = Ид;
НаборЗаписей.Fields.Item(«PID»).Value = ИдРодителя;
НаборЗаписей.Fields.Item(«NodeType»).Value = 2;
НаборЗаписей.Fields.Item(«Presentation»).Value = Строка50(ЧтениеXML.Значение);

ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Комментарий Тогда
Ид = Ид + 1;

НаборЗаписей.AddNew();
КолЗаписей = КолЗаписей + 1;
НаборЗаписей.Fields.Item(«ID»).Value = Ид;
НаборЗаписей.Fields.Item(«PID»).Value = ИдРодителя;
НаборЗаписей.Fields.Item(«NodeType»).Value = 8;
НаборЗаписей.Fields.Item(«Presentation»).Value = Строка50(ЧтениеXML.Значение);

Иначе
Ид = Ид + 1;

НаборЗаписей.AddNew();
КолЗаписей = КолЗаписей + 1;
НаборЗаписей.Fields.Item(«ID»).Value = Ид;
НаборЗаписей.Fields.Item(«PID»).Value = ИдРодителя;
НаборЗаписей.Fields.Item(«NodeType»).Value = 0; // неизвестно
НаборЗаписей.Fields.Item(«Presentation»).Value = «»;

КонецЕсли;

КонецЦикла; // по элементам xml-файла

Если КолЗаписей > 0 Тогда
СтрСостояния = «100% … («+Кол+» из «+КолМакс+», «+РазмерСтекаПик+») — Запись в SQL»;
//СтрСостояния = «100% … («+РазмерСтекаПик+») — Запись»;
Состояние(СтрСостояния);
НаборЗаписей.UpdateBatch();
КонецЕсли;

НаборЗаписей.Close();
НаборЗаписей = «»;
Соединение.Close();
Соединение = «»;

т2 = ТекущаяДата();
дт2 = т2-т1;

//ЭлементыФормы.Надпись1.Заголовок = «»;
ЭлементыФормы.Надпись1.Заголовок = «»+Кол+» («+РазмерСтекаПик+»)»+Символы.ПС+дт2+» («+дт1+») сек»;

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

// НайтиФайлы(«C:\Обмен\Входящие», «*.xml»);
Функция ПолучитьСписокФайлов(Путь)
Перем Скрипт, Фсо, Папка, Тз;

Тз = Новый ТаблицаЗначений;
Тз.Колонки.Добавить(«Файл»,, «Файл», 10);
Тз.Колонки.Добавить(«Путь»,, «Путь», 10);
Тз.Колонки.Добавить(«Имя»,, «Имя», 10);

мФайлы = НайтиФайлы(Путь, «*.txt»);
Для Каждого Файл из мФайлы Цикл
//Сообщить(Файл.Имя);

СтрокаТз = Тз.Добавить();
СтрокаТз.Файл = Файл;
СтрокаТз.Путь = Файл.ПолноеИмя;
СтрокаТз.Имя = Файл.Имя;

КонецЦикла;

Возврат Тз;
КонецФункции // ПолучитьСписокФайлов

Функция КодСимволаASCII(Символ)
КодUNICODE = КодСимвола(Символ);
Если ((КодUNICODE > 1039) И (КодUNICODE < 1104)) Тогда
Возврат (КодUNICODE — 848);
ИначеЕсли КодUNICODE = 8470 Тогда
Возврат 185;
ИначеЕсли КодUNICODE = 1105 Тогда
Возврат 184;
ИначеЕсли КодUNICODE = 1025 Тогда
Возврат 168;
Иначе
Возврат КодUNICODE;
КонецЕсли;
КонецФункции

Функция URLEncode( value )

table = «%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14″ +
«%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28″ +
«%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37%38%39%3A%3B%3C» +
«%3D%3E%3F%40%41%42%43%44%45%46%47%48%49%4A%4B%4C%4D%4E%4F%50″ +
«%51%52%53%54%55%56%57%58%59%5A%5B%5C%5D%5E%5F%60%61%62%63%64″ +
«%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78″ +
«%79%7A%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C» +
«%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0″ +
«%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4″ +
«%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8″ +
«%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC» +
«%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0″ +
«%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF»;

result = «»;

length = СтрДлина( value );

Для i = 1 По length Цикл
symbol = Сред( value, i, 1 );
//code = КодСимвола( symbol );
code = КодСимволаASCII( symbol );
result = result + Сред( table, code*3 + 1, 3 );
КонецЦикла;

Возврат result;
КонецФункции

Функция Примеры_ТаблицаЗначений()
ОСВЭкспл = новый ТаблицаЗначений; // создаем таблицу значений
ОСВЭкспл.Колонки.Добавить(«Код»); // по этому полю будем искать
ОСВЭкспл.Колонки.Добавить(«Сумма»);

ОСВЭкспл.Индексы.Добавить(«Код»); // а здесь добавляем индексКонецФункции //

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

//Функция преобразовавает «Фамилия Имя Отчество» в «Фамилия И. О.»
//Код 1C v 8.0 — 8.1
//Пример обращения
//Текст = «Андреева Алла Александровна»;
//Сообщить(ФамилияИО(Текст)); //Выведет — Андреева А. А.
//Отсюда: http://www.forum.mista.ru/topic.php?id=503739
Функция ФамилияИО(ПолнИмя) Экспорт
ПервПроб = Найти(ПолнИмя,» «);
Если ПервПроб=0 Тогда
Возврат ПолнИмя;
Иначе
Фамилия = Лев(ПолнИмя,ПервПроб);
ИО = Сред(ПолнИмя,ПервПроб+1);
ИО = СокрЛ(ИО);
Имя = Лев(ИО,1)+».»;
ВтПроб = Найти(ИО,» «);
Если ВтПроб=0 Тогда
Возврат Фамилия+Имя;
Иначе
Возврат Фамилия+Имя+» «+Лев(СокрЛ(Сред(ИО,ВтПроб+1)),1)+».»;
КонецЕсли;
КонецЕсли;
КонецФункции

//#{32}+
// использование:
// Если ПервыйРаньше = Истина Тогда
// КонецЕсли;
Функция ПервыйРаньше(Документ1, Документ2)

Если Не ЗначениеЗаполнено(Документ1) или Не ЗначениеЗаполнено(Документ2) Тогда
Возврат Неопределено;
КонецЕсли;

ТекстЗапроса = «ВЫБРАТЬ
| Таб.Ссылка
|ИЗ
| (ВЫБРАТЬ
| Документы1.Ссылка КАК Ссылка
| ИЗ
| Документ.»+Документ1.Метаданные().Имя+» КАК Документы1
| ГДЕ
| Документы1.Ссылка = &Ссылка1
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Документы2.Ссылка
| ИЗ
| Документ.»+Документ2.Метаданные().Имя+» КАК Документы2
| ГДЕ
| Документы2.Ссылка = &Ссылка2) КАК Таб
|
|УПОРЯДОЧИТЬ ПО
| Таб.Ссылка.МоментВремени»;

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр(«Ссылка1″, Документ1);
Запрос.УстановитьПараметр(«Ссылка2″, Документ2);

РезультатЗапроса = Запрос.Выполнить();
Тз = РезультатЗапроса.Выгрузить();
//Дз = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Если Тз.Количество() <> 2 Тогда
Возврат Неопределено;
ИначеЕсли Тз[0].Ссылка = Документ1 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;

КонецФункции // ПервыйРаньше

Процедура ОткрытьТиповойОтчет()
// 13.05.10
// вариант открытия отчета
Отчет = Отчеты.ВедомостьТоварыНаСкладах.Создать();
//Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Установить(ВыбСклад);
Форма = Отчет.ПолучитьФорму();
Форма.Открыть();
//Форма.Обновить();
Отчет.УниверсальныйОтчет.ДатаНач = НачалоДня(Дата1);
Отчет.УниверсальныйОтчет.ДатаКон = КонецДня(Дата2);
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Использование = Истина;
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Значение = Склад;
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Номенклатура.Использование = Истина;
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Номенклатура.Значение = Материал;
//Отчет.УниверсальныйОтчет.ДобавитьОтбор(«Склад»); // можно так писать, т.е. пользоваться экспортными процедурами очета
Отчет.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки.Очистить();
Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки(«Склад»);
Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки(«Номенклатура»);
Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки(«Регистратор.ВидОперации»);
Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки(«Регистратор»);
Форма.ОбновитьОтчет();
КонецПроцедуры // ОткрытьТиповойОтчет

Процедура Ком_Коннектор_COM_Connector()
//СтрСоединения = «Srvr=»"tgx8″»;Ref=»"v82AzTtAuto»";Usr =»"Пользователь»";Pwd =»"1″»;»;
СтрСоединения = «Srvr=»"sql-prf-01:1641″»;Ref=»"v82AzTtAuto»";Usr =»"Пользователь»";Pwd =»"1″»;»;

Коннектор = Новый COMObject («V81.COMConnector»);
Сообщить(СтрСоединения);
гСоединение = Коннектор.Connect(СтрСоединения);
КонецПроцедуры // Ком_Коннектор_COM_Connector

Процедура Оле_Аппликейшн_OLE_Application()
ИмяОбработки = «\\texcistrade\pub\PUB.1C\1Cv81\EPFs\ПолучитьПроводкиУу.epf»;

Приложение = Новый COMОбъект(«V82.Application»);

Приложение.Connect(СтрСоединения);

Приложение.Visible = Истина;

пОбработка = Приложение.ВнешниеОбработки.Создать(ИмяОбработки);
пОбработка.Авто = Истина;
пОбработка.Дата1 = НачПериода;
пОбработка.Дата2 = КонПериода;
пОбработка.ПолучитьФорму().Открыть();

Приложение.ЗавершитьРаботуСистемы(Ложь);

«Srvr=»"sql-prf-01:1641″»;Ref=»"v82KaTg»";Usr =»"Gusev»";Pwd =»"1″»;»

КонецПроцедуры // Ком_Коннектор_COM_Connector

+5
Спасибо!
Программирование 1С  →  Основное → Общее
Конфигурация: БП, ЗУП, КА, Розница, УПП, УТ 10.3, УТ 11
Вход