Перейти к содержанию

Участник:Sr.voland

Материал из Викиучебника — открытых книг для открытого мира

<html> Передаем Тз в СКД //Создаем в СКД НаборДанных - объект //Создаем в СКД колонки, такиеже как в тз //Создаем в СКД Печатную форму //Создаем на форме ТабличныйДокумент Процедура ВставляемВСКД(тз)

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

КонецПроцедуры Выгрузить ТЗ на форму ЭлементыФормы.ЗадачиАдминуТЗ.Значение = запрос.Выполнить().Выгрузить(); ЭлементыФормы.ЗадачиАдминуТЗ.СоздатьКолонки();

//Выгрузить Запрос в Табличную Часть на форму Товары.Загрузить(запрос.Выполнить().Выгрузить()); ЭлементыФормы.Товары.ОбновитьСтроки(); Формат Даты без времени формат(ТекущаяДата(),"ДЛФ=Д"); Дерево Значений (перебор) Процедура ПриОткрытии() //Галочка ОтображатьИерархию только для поля Дата

для СтрокаГод = 1 по 10 цикл Год = Дерево.Строки.Добавить(); //1й уровень Год.Дата = "1="+СокрЛП(СтрокаГод); Год.Дата2 = "11="+СокрЛП(СтрокаГод); Год.Дата3 = "111="+СокрЛП(СтрокаГод);


для Кол = 1 по 5 цикл Месяц = Год.Строки.Добавить(); //2й уровень Месяц.Дата = "2="+СокрЛП(Кол); Месяц.Дата2 = "22="+СокрЛП(Кол); Месяц.Дата3 = "222="+СокрЛП(Кол);


для КолДней = 1 по 3 цикл //3й уровень День = Месяц.Строки.Добавить(); День.Дата = "3="+Строка(КолДней); День.Дата2 = "33="+Строка(КолДней); День.Дата3 = "333="+Строка(КолДней);

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

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

Web services

http://localhost/testW/ws/DanRashNakl?WSDL //ссылка на xml ответа (ws-ссылка) http://localhost/testW/ws/shipment.1cws?wsdl //“C:\www” сюда установлен Apache стандартным “некст,некст,...,ок” SoapUI 5.0.0


Авторизация C:\www\htdocs\default.vrd

<?xml version="1.0" encoding="UTF-8"?>

<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"

     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     base="/testW"
     ib="File=&quot;C:\Documents and Settings\krushenicky\Мои документы\1C\DemoBudgetAccountingUkr&quot;;Usr=Web;Pwd=Web;"
     enable="false">
  <ws>
     <point name="DanRashNakl"
             alias="shipment.1cws"
             enable="true"/>
     <point name="Balans"
             alias="Balans.1cws"
             enable="true"/>
  </ws>

</point> Вызов из другой 1С через WS сылку

ссылка: http://localhost/testW/ws/DanRashNakl?WSDL

проксиСервер = WSСсылки.WSСсылка1.СоздатьWSПрокси("http://www.MyCompany.ru/shipment","DanRashNakl","DanRashNaklSoap"); рез = проксиСервер.Получить("222"); Авторизация C:\www\htdocs\default.vrd (вместе с Баланстом тестовым)

<?xml version="1.0" encoding="UTF-8"?> <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"

     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     base="/testW"
     ib="File=&quot;C:\Documents and Settings\krushenicky\Мои документы\1C\DemoBudgetAccountingUkr&quot;;Usr=Web;Pwd=Web;"
     enable="false">
  <ws>
     <point name="DanRashNakl"
             alias="shipment.1cws"
             enable="true"/>
     <point name="Balans"
             alias="Balans.1cws"
             enable="true"/>
  </ws>

</point>

Подключение через Putty на сервак Ipnet и запросы к нему

"53:  ssh -L 82.193.96.11:3389:10.71.1.53:3389 localhost" //Rdstop делаем на 82.193.96.11:3389

"52: ssh -L 82.193.96.11:3389:10.71.1.52:3389 localhost"

"psql -U www uni_ip -h owl3.nest.ipnet" //Запрос уже в путти "db_uni_ip" //Подлючение к базе 1С подневный баланс bill_unit = 1 - юрлицо, bill_unit = 2 - физ лицо на 2015-02-01 ПРАТ

"SELECT date(abstime(m.date)), SUM(m.amount) FROM  money m JOIN shadow_users_other suo ON m.user_id=suo.info_id WHERE m.bill_unit = 1  AND m.am_type = 7478365     AND date(abstime(m.date)) >= DATE('2015-02-01') AND date(abstime(m.date)) <= DATE('2015-02-05') GROUP BY date(abstime(m.date));"    //Оплата по дням (С,ПО) одной суммой по всем

"SELECT date(abstime(m.date)), SUM(m.amount) FROM money m JOIN shadow_users_other suo ON m.user_id=suo.info_id WHERE m.bill_unit = 1 AND m.am_type = 7478365 AND date(abstime(m.date)) = DATE('2015-02-12') GROUP BY date(abstime(m.date));" //Оплата всех на Прат одной суммой 1С подневные услуги в кредит на 2015-02-01 ПРАТ

"select sum(services), count(1) from  snapshot_users_bill where bank_balance<0 and services>0 and date='2015-02-01';"    //Все

"select sum(services), count(1) from snapshot_users_bill where bank_balance<0 and services>0 and user_type=0 and date='2015-01-27';" //Без юр лиц Почтовый клиент (Gmail) в 1С 8.2 УТП

//Качаем stunnel, устанавливаем в каталог c:\stunnel. Прописываем в stunnel.conf :

socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 debug = 7 output = stunnel.log client = yes [ssmtp] accept = 127.0.0.1:5465 connect = smtp.gmail.com:465 [pop3s] accept = 127.0.0.1:5995 connect = pop.gmail.com:995

//Выполняем в консоли команду для установки сервиса:

c:\stunnel\stunnel.exe -install

// И стартуем сервис

net start gmail

//Должна появится новая служба под названием "Gmail". //Прописываем в почтовом клиенте 1С настройки POP3/SMTP сервера:

Ннайти элемент справочника по части наименования

ВидыКонтактнойИнформации.Родитель.Наименование ПОДОБНО &Шаблончик //В зтексте апросе

Запрос.УстановитьПараметр("Шаблончик","%"+СокрЛП(ЧастьНаименования)+"%"); Внешний источник данных конект в SQL Индустриала из 1С 8.2 Прат СтрокаСАдресом = "Provider=MSDASQL.1;

  |DRIVER={PostgreSQL ANSI};
  |Server=10.71.1.240;
  |UID=odins;
  |PWD=;
  |DATABASE=uni_ip;
  |PORT=5432";
  
  пСоед = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
  пСоед.СтрокаСоединения= СтрокаСАдресом;
  
  ВнешниеИсточникиДанных.Ipnet.УстановитьОбщиеПараметрыСоединения(пСоед);
  ВнешниеИсточникиДанных.Ipnet.УстановитьСоединение();
  
  запр = новый запрос;
  запр.Текст = "ВЫБРАТЬ
               |    ДанныеАбонента.ЕДРПОУ,
               |ИЗ
               |    ВнешнийИсточникДанных.Ipnet.Таблица.ДанныеАбонента КАК ДанныеАбонента
               |ГДЕ
               |    ДанныеАбонента.ФизЮрЛицо = 1";
  
  тз = запр.Выполнить().Выгрузить();

Из Екселя в ТЗ

Функция ПрочитатьЛистExcel(ПутьС,ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт    

Если ЛистЭксель = Неопределено Тогда ЛистЭксель = Новый COMОбъект("Excel.Application"); КонецЕсли; ЛистЭксель.Workbooks.Open(ПутьС); Если ВсегоСтрок = 0 Тогда ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; КонецЕсли; Если ВсегоКолонок = 0 Тогда ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column; КонецЕсли; Если ТЗ = Неопределено Тогда ТЗ = Новый ТаблицаЗначений; Для Счетчик = 1 По ВсегоКолонок Цикл ТЗ.Колонки.Добавить("Колонка"+Счетчик,Новый ОписаниеТипов("Строка")); КонецЦикла; КонецЕсли; Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл НоваяСтрока = ТЗ.Добавить(); КонецЦикла; Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок)); Данные = Область.Value.Выгрузить(); Для Счетчик = 0 По ВсегоКолонок-1 Цикл ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик); КонецЦикла; ЛистЭксель = Неопределено; Возврат ТЗ;

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

Unix timestamp в 1С:Предприятие 8.2

Функция ПолучитьUnixTS(ПараметрДата) Возврат УниверсальноеВремя(ПараметрДата) - '19700101';

КонецФункции
//И наоборот:
Функция СконвертироватьВремяUnixTS(UnixTime)

Возврат МестноеВремя('19700101' + UnixTime);

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

Печать ТЗ (1С 8.2)

Процедура ТЗПечать(ТЗ,Заголовок="") Экспорт
  Перем Таб, Кол,Стр;
  #Если Клиент Тогда
     Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
     ТолстаяЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 2);
     Таб=Новый ТабличныйДокумент;
     Таб.Область(1,1).Текст=Заголовок;
     Таб.Область(1,1).ШиринаКолонки = 4;
     Таб.Область(1,1).Обвести(ТолстаяЛиния,ТолстаяЛиния,ТолстаяЛиния,ТолстаяЛиния);
     Для Кол=1 По ТЗ.Колонки.Количество() Цикл
         врЗаголовок = "";
         Если СокрЛП(Строка(ТЗ.Колонки[Кол-1].Заголовок)) <> "" Тогда
             врЗаголовок = Строка(ТЗ.Колонки[Кол-1].Заголовок);
         Иначе
             врЗаголовок = Строка(ТЗ.Колонки[Кол-1].Имя)
         КонецЕсли;
         Таб.Область(2,Кол+1).Текст = врЗаголовок;
         Таб.Область(2,Кол+1).Шрифт = Новый Шрифт(,,Истина);// жирный
         Таб.Область(2,Кол+1).Обвести(ТолстаяЛиния,ТолстаяЛиния,ТолстаяЛиния,ТолстаяЛиния);
         врШир = ТЗ.Колонки[Кол-1].Ширина;
         Если врШир > 0 Тогда
             Таб.Область(2,Кол+1).ШиринаКолонки = врШир;
         КонецЕсли;
     КонецЦикла;
     i=0;      
     Для Каждого Ном ИЗ ТЗ Цикл
         i=i+1;
         Таб.Область(i+2,1).Текст=Строка(i);
         Таб.Область(i+2,1).Обвести(Линия, Линия, Линия, Линия);
         Для Кол=1 По ТЗ.Колонки.Количество() Цикл
             Таб.Область(i+2,Кол+1).Текст=СокрЛп(Строка(ТЗ[i-1][кол-1]));
             Таб.Область(i+2,Кол+1).Обвести(Линия, Линия, Линия, Линия);
         КонецЦикла;
         Если i/10=Цел(i/10) Тогда
             Состояние(Заголовок+", печать: "+Строка(i));
         КонецЕсли;
     КонецЦикла;
     Таб.Показать(Заголовок);
  #КонецЕсли

КонецПроцедуры Печать ТЗ (1С 7.7) Процедура глВывестиТаблицуЗначений(ТаблицаЗначений, Заголовок = "") Перем Таб, ИИ, ЖЖ, НазваниеКолонки, ТипКолонки, Ширина, Значение, Сообщение; Таб = СоздатьОбъект("Таблица"); Если ТипЗначенияСтр(ТаблицаЗначений) <> "ТаблицаЗначений" Тогда Сообщение = "В процедуру ""глВывестиТаблицуЗначений()"" передана переменная не типа ""ТаблицаЗначений"", "+ "а типа """+СокрЛП(ТипЗначенияСтр(ТаблицаЗначений))+""""; Таб.Область(1, 1, 1, 1).Текст = Сообщение; Таб.Область(1, 1, 1, 1).ШиринаСтолбца(СтрДлина(Сообщение)); Таб.ТолькоПросмотр(1); Таб.Показать("Не таблица значений: "+Заголовок); Возврат; КонецЕсли; Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ,,,, НазваниеКолонки); Таб.Область(1, ЖЖ, 1, ЖЖ).Текст = СокрЛП(НазваниеКолонки); Таб.Область(1, ЖЖ, 1, ЖЖ).РамкаОбвести(5, 5, 5, 5); Таб.Область(1, ЖЖ, 1, ЖЖ).ВертикальноеПоложение(3); Таб.Область(1, ЖЖ, 1, ЖЖ).ГоризонтальноеПоложение(3); Таб.Область(1, ЖЖ, 1, ЖЖ).РазмерШрифта(7); Таб.Область(1, ЖЖ, 1, ЖЖ).Полужирный(1); Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(); Ширина = Макс(Ширина, СтрДлина(СокрЛП(НазваниеКолонки))); Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина); КонецЦикла; Для ИИ = 1 по ТаблицаЗначений.КоличествоСтрок() цикл Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл Значение = ТаблицаЗначений.ПолучитьЗначение(ИИ, ЖЖ); Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Текст = Значение; Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Расшифровка(Значение, 0); Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).РамкаОбвести(3, 3, 3, 3); Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(); Ширина = Макс(Ширина, СтрДлина(СокрЛП(Строка(Значение)))); Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина); ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ, ТипКолонки); ; Если ТипКолонки = "Число" тогда Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ГоризонтальноеПоложение(2); КонецЕсли; Если ИИ = ТаблицаЗначений.ТекущаяСтрока() тогда Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ЦветФона(255, 0, 0); КонецЕсли; КонецЦикла; КонецЦикла; Таб.ТолькоПросмотр(1); Таб.Показать("Таблица значений: "+Заголовок); КонецПроцедуры Удаленный сеанс отключен из-за отсутствия доступных лицензий клиента сервера терминалов для этого компьютера

32-bit HKLM\SOFTWARE\Microsoft\MSLicensing 64-bit HKLM\SOFTWARE\Microsoft\MSLicensing HKLM\SOFTWARE\Wow6432Node\Microsoft\MSLicensing Индикатор Заполнения //Элемент на форме "ИндикаторЗаполнения", тип:Индикатор Индикатор = ЭлементыФормы.ИндикаторЗаполнения; Индикатор.МаксимальноеЗначение = тзАбон.Количество(); Индикатор.Значение = 0; Индикатор.ОтображатьПроценты = Истина; Индикатор.СтильОтображения = РежимСглаживанияИндикатора.Плавный; Индикатор.Ориентация = Ориентация.Горизонтально; Индикатор.Шаг = 1; Для Каждого стр Из тзАбон цикл Индикатор.Значение = Индикатор.Значение + 1; КонецЦикла; Название месяца в запросе

   ВЫБОР МЕСЯЦ(УС_РасчетПотребления_ГрафикОбороты.ПериодРасчета)
       КОГДА 1
           ТОГДА "Январь"
       КОГДА 2
           ТОГДА "Февраль"
       КОГДА 3
           ТОГДА "Март"
       КОГДА 4
           ТОГДА "Апрель"
       КОГДА 5
           ТОГДА "Май"
       КОГДА 6
           ТОГДА "Июнь"
       КОГДА 7
           ТОГДА "Июль"
       КОГДА 8
           ТОГДА "Август"
       КОГДА 9
           ТОГДА "Сентябрь"
       КОГДА 10
           ТОГДА "Октябрь"
       КОГДА 11
           ТОГДА "Ноябрь"
       КОГДА 12
           ТОГДА "Декабрь"
   КОНЕЦ КАК Месяц

Автоматическая установка ширины колонки табличного документа Процедура РасчетШириныКолонок(ТабличныйДокумент) Экспорт Перем МаксимальноеКоличествоСтрок, МаксимальнаяШиринаКолонки; Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных; Перем ОбластьШапки, ОбластьПодвала; Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста; Перем КоличествоУровнейГруппировокСтрок, Отступ; Перем ШириныКолонок; // Максимальное количество строк отчета, которые будут использованы для расчета ширин колонок МаксимальноеКоличествоСтрок = 50; // Ограничение максимальной ширины колонки МаксимальнаяШиринаКолонки = 50; // Массив, в который будут помещаться ширины колонок ШириныКолонок = Новый Массив; // Получим количество уровней группировок в отчете для учета автоматического отступа КоличествоУровнейГруппировокСтрок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок(); // Инициализируем начальные строки НачальнаяСтрока = 0; НачалоДанных = 0; // Найдем в результирующем документе область шапки таблицы ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаТаблицы"); Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины НачальнаяСтрока = ОбластьШапки.Верх; НачалоДанных = ОбластьШапки.Низ + 1; Иначе // Если область шапки таблицы не найдена, найдем область шапки строк ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаСтрок"); Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины НачальнаяСтрока = ОбластьШапки.Верх; НачалоДанных = ОбластьШапки.Низ + 1; КонецЕсли; КонецЕсли; // Получим область подвала отчета и вычислим конечную строку расчета ОбластьПодвала = ТабличныйДокумент.Области.Найти("Подвал"); Если ТипЗнч(ОбластьПодвала) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда // Область подвала найдена КонечнаяСтрока = ОбластьПодвала.Верх - 1; Если КонечнаяСтрока - НачальнаяСтрока > МаксимальноеКоличествоСтрок Тогда КонечнаяСтрока = НачальнаяСтрока + МаксимальноеКоличествоСтрок; КонецЕсли; Иначе // Область подвала не найдена КонечнаяСтрока = НачальнаяСтрока + МаксимальноеКоличествоСтрок; КонецЕсли; // Ограничим конечную строку КонечнаяСтрока = Мин(КонечнаяСтрока, ТабличныйДокумент.ВысотаТаблицы); // Переберем все колонки отчета Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл АвтоОтступ = 0; // Переберем строки, которые будут использованы для расчета ширин колонок Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл ШиринаКолонки = 0; // Получим область текущей ячейки ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка); Если ОбластьЯчейки.Лево <> ТекущаяКолонка Или ОбластьЯчейки.Верх <> ТекущаяСтрока Тогда // Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой Продолжить; КонецЕсли; Если КоличествоУровнейГруппировокСтрок > 0 И ТекущаяСтрока = НачалоДанных Тогда // Для первой строки с данными получим значение автоотступа АвтоОтступ = ОбластьЯчейки.АвтоОтступ; КонецЕсли; // Получим текст ячейки ТекстЯчейки = ОбластьЯчейки.Текст; // Для каждой строки из текста ячейки рассчитаем количество символов в строке Для НомерСтрокиТекста = 1 По СтрЧислоСтрок(ТекстЯчейки) Цикл ШиринаТекстаЯчейки = СтрДлина(СтрПолучитьСтроку(ТекстЯчейки, НомерСтрокиТекста)); // Если используется автоотступ, то прибавим к ширине ячейки его величину Если АвтоОтступ <> Неопределено И АвтоОтступ > 0 Тогда ШиринаТекстаЯчейки = ШиринаТекстаЯчейки + КоличествоУровнейГруппировокСтрок * АвтоОтступ; КонецЕсли; ШиринаКолонки = Макс(ШиринаКолонки, ШиринаТекстаЯчейки); КонецЦикла;

Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда // Ограничим ширину колонки ШиринаКолонки = МаксимальнаяШиринаКолонки; КонецЕсли; Если ШиринаКолонки <> 0 Тогда // Ширина колонки рассчитана // Определим, сколько ячеек по ширине используется в области для текущей ячейки КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево; // Переберем все ячейки, расположенные в области Для НомерКолонки = 0 По КоличествоКолонок Цикл Если ШириныКолонок.ВГраница() > ТекущаяКолонка - 1 + НомерКолонки Тогда // В массиве ширин колонок уже был элемент для текущей колонки Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда // Значение ширины колонки еще не было установлено ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1); Иначе // Значение ширины колонки уже было установлено // Вычислим максимум ширины колонки ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1)); КонецЕсли; Иначе // В массиве ширин колонок еще не было элемента для данной колонки // Добавим элемент в массив ширин колонок ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1)); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; // Конец цикла перебора строк КонецЦикла; // Конец цикла перебора колонок Для ТекущаяКолонка = 0 По ШириныКолонок.ВГраница() Цикл Если ШириныКолонок[ТекущаяКолонка] <> Неопределено Тогда ТабличныйДокумент.Область(, ТекущаяКолонка + 1, НачалоДанных, ТекущаяКолонка + 1).ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1; КонецЕсли; КонецЦикла;

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

Загрузка данных в документ из табличного документа (в ТД скопировано из Excel) Частенько пользователи просят упростить ввод данных в программу используя копирование таблиц из Excel. Ниже я приведу пример как загрузить данные скопированные из Excel:

Создаем форму для загрузки данных:


внутри пишем код:

Код 1C v 8.х

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

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

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

Код 1C v 8.х

 //Функция преобразует строку вида 31.01.2015 в дату

Функция РазобратьДату(ИзмДата); Возврат Дата(Сред(ИзмДата,7,4)+Сред(ИзмДата,4,2)+Сред(ИзмДата,0,2)); КонецФункции

Процедура ЗагрузитьИзЕкселНажатие(Элемент) тзДанных = ПолучитьФорму("ФормаЗагрузкиИзExcel").ОткрытьМодально(); //ТЗ получили, загружаем: ГрафикПлатежейКлиент.Очистить(); Для Каждого стр из тзДанных Цикл нСтр = ГрафикПлатежейКлиент.Добавить(); нСтр.Дата = РазобратьДату(стр.К1); нСтр.Сумма = стр.К2; нСтр.СуммаАкта = стр.К3; КонецЦикла;

КонецПроцедуры Смысл в том что из Excel копируют таблицу:


Жмут на кнопку загрузить и в документе Табличная часть заполняется автоматически:


Запрос к Таблице Значений Запрос = Новый Запрос; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; // Текст запроса для построения временной таблицы Запрос.Текст = "ВЫБРАТЬ

                 |    Таб.КодУслуги КАК Код
                 |ПОМЕСТИТЬ ВТДанные
                 |ИЗ
                 |    &Данные КАК Таб";

Запрос.УстановитьПараметр("Данные",Таблица); Результат = Запрос.Выполнить(); Прямая ссылка на Гугл картинки https://docs.google.com/file/d/0B__xB2sZtgF_UVNaeE9wbXhwR2M/edit?usp=sharing

Прямая ссылка на Гугл картинки

https://docs.google.com/file/d/0B__xB2sZtgF_UVNaeE9wbXhwR2M/edit?usp=sharing вставляем айдишку (0B__xB2sZtgF_UVNaeE9wbXhwR2M) в ссылку ниже https://drive.google.com/uc?id=0B61f1BoMlPrBVS0yc0YxVThsckU (для просмотра) https://drive.google.com/uc?export=download&confirm=no_antivirus&id=0B__xB2sZtgF_UVNaeE9wbXhwR2M (для скачивания) Сериализация объекта в строку через XML

Выгрузка объекта в XML строку:

Функция ВXML(ДокументСсылка) Экспорт

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

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

Загрузка объекта из XML строки: Функция ИзXML(Стр) Экспорт

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

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

Таблица Значений как параметр в запросе Функция ЗаполняемТЗПоУслугам(НачД,КонД,ТипДенег)

запрос1 = новый запрос; запрос1.Текст = "ВЫБРАТЬ | Деньги.Сумма КАК Сумма, | Деньги.Абонент.НомерДоговора КАК НомерДоговора, | ЕСТЬNULL(Деньги.ПратТов, Деньги.Абонент.ПратТов) КАК ПратТов |ИЗ | ВнешнийИсточникДанных.Админка2.Таблица.Деньги КАК Деньги |ГДЕ | Деньги.Дата >= &Дата1 | И Деньги.Дата <= &Дата2 | И Деньги.ТипДенег В(&ТипДенег)";

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

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

Функция разбора строки на подстроки

Функция РазборСтроки(Строка,Символ)

    РазбитаяСтрока = СтрЗаменить(Строка,Символ,Символы.ПС);
    Массив = Новый Массив();
    Для А = 1 По СтрЧислоСтрок(РазбитаяСтрока) Цикл
        Массив.Добавить(СтрПолучитьСтроку(РазбитаяСтрока,А));
    КонецЦикла;
    Возврат Массив; 
КонецФункции