понедельник, 29 октября 2018 г.

Перехватить формирование отчета с СКД, изменить параметры печати

Раздел: Компьютер - Windows - 1С - Готовые решения

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

//*********************************
//А еще можно через ЭлементыФормы. Пример из "Отчета по кассе" переменные не совпадают с приведенными в примере
//*********************************

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

Ответ 2
ПриКомпоновкеРезультата() ("живёт" в модуле объекта) для этого предназначена, и форму можно не делать.
Но вызывается она только СТАНДАРТНОЙ кнопкой
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;

ДокументРезультат.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт; ДокументРезультат.АвтоМасштаб=Истина; ДокументРезультат.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МО";
Настройки = КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры


вторник, 9 октября 2018 г.

Docker на macOS. Мощный пост

Статья MS
Статья infostart

Запустить образ контейнера (и присвоить ему имя sql1)docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-latest

Запустить образ контейнера (и присвоить ему имя sql2) с пробросом контейнера в нашу сеть(?)
docker run -d --network host --name sql2 -e 'SA_PASSWORD=' -e ACCEPT_EULA=Y mcr.microsoft.com/mssql/server:2017-latest

Просмотр контейнеров
docker ps -a

Запуск интерактивной оболочки bash внутри запущенного контейнераdocker exec -it sql1 "bash"

Командная строка SQL/opt/mssql-tools/bin/sqlcmd -S localhost -U SA

ctrl-D

Узнать состояние порта на сервере при помощи PowerShell
$server="yourserver"; $port=1433; echo ((new-object Net.Sockets.TcpClient).Connect($server,$port)) "$server is listening on TCP port $port";
yourserver - может быть и именем и IP

Получить IP-адрес контейнера Docker
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' sql1

Перевод статьи
Использовать сеть хоста
Если вы используете hostсетевой драйвер для контейнера, сетевой стек этого контейнера не изолирован от хоста Docker. Например, если вы запускаете контейнер, который привязывается к порту 80 и вы используете hostсеть, приложение контейнера будет доступно на порту 80 на IP-адресе хоста.
Драйвер сетевого хоста работает только на узлах Linux и не поддерживается в Docker для Mac, Docker для Windows или Docker EE для Windows Server.
В Docker 17.06 и выше вы также можете использовать hostсеть для службы роя, перейдя --network hostк docker container createкоманде. В этом случае управляющий трафик (трафик, связанный с управлением роем и службой) по-прежнему отправляется через оверлейную сеть, но отдельные контейнеры службы роуминга отправляют данные с помощью хост-сети и портов Docker-daemon. Это создает некоторые дополнительные ограничения. Например, если контейнер обслуживания связывается с портом 80, только один контейнер обслуживания может запускаться на заданном узле рой.
Если ваш контейнер или служба не публикует никаких портов, network host не влияет.

Много команд тут
Полное практическое руководство по Docker: с нуля до кластера на AWS
Сети Docker изнутри: как Docker использует iptables и интерфейсы Linux
Назначить статический IP-адрес контейнера Docker

Mac - Необходимые программы, статьи, комманды terminal

Terminal

информация о сетевых интерфейсах
ifconfig

- Просмотрщик фото XnView
- Анализ занятого места Disk Inventory X 1.0
- Закрытый, но все еще актуальный Perian (набор кодеков для Qick Time)
- Чистое удаление программ (со всеми доп. папками и прочими "хвостами") http://freemacsoft.net/appcleaner/ (только с его помощью удалил Dropbox)
- Утилиты для дисков WD
Paragon NTFS for Mac (для дисков Seagate)
- SelfControl - блокировка определенных сайтов на некоторое время
- Не дай ему уснуть!

-- Как правильно распорядиться местом на SSD
-- 10 горячих клавиш для Safari на Mac