Участник: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="C:\Documents and Settings\krushenicky\Мои документы\1C\DemoBudgetAccountingUkr";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="C:\Documents and Settings\krushenicky\Мои документы\1C\DemoBudgetAccountingUkr";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 По СтрЧислоСтрок(РазбитаяСтрока) Цикл Массив.Добавить(СтрПолучитьСтроку(РазбитаяСтрока,А)); КонецЦикла; Возврат Массив; КонецФункции