15 мая 2017 г.

Получение данных из нескольких источников недопустимо

Есть ограничения в платформе 1С:Підприємство 8.3 (8.3.10.2168), ну и ниже версий.

Нельзя использовать одновременно соединение таблиц базы данных (например таблицы регистра) и данные из ВнешнеИсточникиДанных в запросах.

Обойти это ограничение возможно сначала обратиться к ВнешниеИсточникиДанных с помощью запроса, а результат запроса выгрузить в таблицу значений.

Далее сделать еще один запрос и в качестве источника данных выбрать ранее выгруженную таблицу значений.
А далее в этом запросе готовую таблицу значений соединяем с нашими данными из базы 1С (например, регистром сведений).

У меня данный пример реализован в функции ПолучитьТЗ()

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

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

22 апр. 2017 г.

Изменить стандартный сигнал 1С

Для сигнализирования события в 1С есть метод глобального контекста
Сигнал();
Но, что если нужно изменить мелодию звукового сигнала?! Для этого можно использовать внешние компоненты, например MSScriptControl.ScriptControl, а можно в изменить мелодию в звуковых настройках операционной системы



и после этого 1С будет воспроизводить тот звуковой сигнал, который будет установлен.

Компьютер не переходит в ждущий режим \ сон

Пуск - Выполнить - cmd 
powercfg.exe -requests
вывод команды был таким 
EXECUTION:
[PROCESS] \Device\HarddiskVolume6\Program Files (x86)\Google\Chrome\Application\chrome.exe Uploading data
теперь в командной строки выполняю по очереди
powercfg -requestsoverride PROCESS chrome.exe awaymode display system
powercfg -requestsoverride PROCESS chrome.exe awaymode display system execution
powercfg -requestsoverride PROCESS LockScreenContentServer.exe

21 апр. 2017 г.

Применить группировку \ сортировку для всех папок в проводнике

Чтобы применить понравившеюся группировку или сортировку в проводнике для всех остальных папок нужно открыть любую папку в проводнике, настроить нужную группировку или сортировку

далее зайти в параметры проводника не закрывая папку, где настроена группировка или сортировка 

и нажать кнопку Применить к папкам + ок


Получить предпоследнюю цену номенклатуры

      Ничего лучшего чем
ВЫБРАТЬ ПЕРВЫЕ 2
 ЦеныНоменклатуры.Период КАК Период,
 ЦеныНоменклатуры.Цена
ПОМЕСТИТЬ ПоследняяПредпоследняя
ИЗ
 РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
 ЦеныНоменклатуры.Номенклатура = &Номенклатура
 И ЦеныНоменклатуры.ТипЦен = &ТипЦен
 И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры

УПОРЯДОЧИТЬ ПО
 Период УБЫВ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
 ПоследняяПредпоследняя.Период КАК Период,
 ПоследняяПредпоследняя.Цена
ИЗ
 ПоследняяПредпоследняя КАК ПоследняяПредпоследняя

УПОРЯДОЧИТЬ ПО
 Период
не придумал, что бы получить предпоследнюю цену номенклатуры по определенному 
типу цен с определенной характеристикой

29 мар. 2017 г.

Задержка при смене раскладки клавиатуры

Windows 10 Version 10.0.15063.
При переключении языка ввода клавишами Ctrl+Пробел раскладка с задержкой переключается.

Нашел ветку
HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response
 Открыл параметр
DelayBeforeAcceptance
Изменил значение
с 1000 на 200 
Перезагрузил систему.


18 мар. 2017 г.

Не сохраняется цвет Форматированного документа 1С

Есть на форме поле с типом ФорматированныйДокумент.
На форму добавил Командную панель форматированного документа.
При форматировании в этом поле текста и дальнейшем  сохранении, все форматирования сохраняются кроме ЦветФона и ЦветТекста.


Не знаю точно, но скорее всего это баг платформы. Версия у меня 1С:Підприємство 8.3 (8.3.9.2033).

Добиться сохранения выше цветов удалось только при вставке в это поле форматированного текста, например скопировавшего с страницы веб браузера.

Сравнить значения выбора с типом Характеристики

Есть таблица на форме с колонками:


В пользовательском виде:


Настройка - имеет тип ПланВидовХарактеристикСсылка
Значение - имеет составной тип (СправочникСсылка, Булево, Строка, Дата, Число)

При выборе в таблицы Значения к определенной Настройке нужно делать проверку например:

  • Если выбрана Настройка "Порт SMTP" то значение должно быть только типа Число

Вышло вот что:
&НаКлиенте
Процедура НалаштуванняПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
 ПроверкаПравильностиВыбранногоЗначенияПоТипу(Элемент.ТекущиеДанные.Значення, Элемент.ТекущиеДанные.Налаштування);
КонецПроцедуры

&НаСервере
Процедура ПроверкаПравильностиВыбранногоЗначенияПоТипу(Значение,Настройка)
 Если Настройка = ПланыВидовХарактеристик.НаименованиеПВХ.ПортSMTP Тогда 
  Если Тип("Число") <> ТипЗнч(Значение) Тогда 
   Сообщить("В этом параметре нужно указать тип Число!")
  КонецЕсли;
 КонецЕсли;  
КонецПроцедуры
Сначала проверяем, выбранная ли настройка связанная с ПортSMTP, а далее проверяем,
введенное ли значение в этом поле типа Число.

Серверные вызовы при завершении работы запрещены

Нужно выполнять авто обмен с РИБ перед завершение работы системы, как это можно было делать и ранее.
Сейчас, как видно из ошибки выполнить действия, которые требуют серверную часть модуля нельзя. А как же выполнить обмен с РИБ перед закрытием платформы если без серверных методов не обойтись?!

Ничего лучшего кроме как

Процедура ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения)       
        Отказ = Истина;
        ТекстПредупреждения = "Нажмите Продолжить работу, что бы выполнить АвтоОбменРИБ";
     
        ПодключитьОбработчикОжидания("ВыполнитьОбмен",1,Истина);
КонецПроцедуры

Процедура ВыполнитьОбмен()Экспорт       
        Обмен.ВыполнитьОбменСоВсемаРИБ();
        ОтключитьОбработчикОжидания("ВыполнитьОбмен");   
КонецПроцедуры


не придумал. 
Тут все просто, перед завершением работы платформы, пользователю как бы намекаем, что "нажми продолжить". Если нажата кнопка "продолжить" то программа не завершиться, а передаст свое выполнение общему модулю с серверным контекстом где уже и осуществляется обмен со всеми РИБ.

16 мар. 2017 г.

DefaultAppPool stopped / остановлен

Установил IIS для дальнейшей публикации 1С Предприятия.

При переходе на главную страницу веб сервера http://localhost показывается ошибка, типа "Service Unavailabel Error code 503".

Смотрю в менеджер IIS в Application Pools, пул DefaultAppPool остановлен. При последующем запуске вручную DefaultAppPool он автоматически останавливается.

При поиске решений в интернете по IIS ошибках в Журнале событий Windows, результативного ничего не нашел.

Решение:
Зашел в Advanced Settings нашего Defaultapppool пула и установил параметр Identity на LocalService.
На всякий случай, перезапустил IIS + запустил вручную DefaultAppPool, который уже автоматически не останавливался.


Для успешной публикации базы 1С Предприятия, в моем случаи, параметр Identity был установлен в NetworkService

13 янв. 2017 г.

Скрыть общедоступную папку по сети

Открыли доступ в сеть к нескольким папкам и одну из папок хотим скрыть, что бы пользователь через Проводник не смог видеть?!

Для скрытия в конце имени папки нужно поставить знак $


т.е. берем пример с windows, которая по умолчанию скрывает некие папки для отображения в общедоступных папках в сети.

13 дек. 2016 г.

Нарушена целостность структуры конфигурации при создании РИБ

При создании начального образа периферийной базы через время получаю
Нарушена целостность структуры конфигурации
В моем случаи проблема в том, что не типовые объекты (пару справочников и константа) не были добавлены в регистрацию плана обмена


После установки галки, образ успешно создался.

10 дек. 2016 г.

Медленно работает blogger

А точнее не сам блог, а админ панель, там где показывается перечень наших публикаций.


Несколько месяцев я замечал как виснет страница браузера при доволе мощном компьютере моем, когда открыта страница перечня написанных публикаций. Все лучи поноса были в сторону "гугла". И тут до меня дошло, что когда то я выбрал показ публикаций на странице в размере 100шт.


Поставил на 10-чку показ и страничка без проблем грузиться быстро.

Установить фокус на поле ввода 7.7

На форме есть элемент Поле ввода, туда вводиться штрих код товара кассиром. Задача при каждом вводе штрих кода фокус (курсор) не переносился на другой элемент формы, а оставался в Поле ввода штрих кода.

Казалось бы, все просто, ввел в процедуру или функцию вызываемую в Поле ввода на вкладке Дополнительно
Активизировать(ПолеВвода);
и все, но при тестировании у нас появилась ошибка
Активизировать(ПолеВвода,); {D:\1CTEST\1C\EXTFORMS\РАБОЧЕЕМЕСТОКАССИРА1.ERT(737)}: В данной формуле не может быть вызвана эта процедура(функция)
поэтому один умный человек порекомендовал использовать "фиктивное" закрытие формы и вот как это работает.

В модуле формы пишем
Перем ПередатьФокус;

Процедура ИзмШКТов()
 ПоискНоменклатуры(СокрЛП(ШКтов),1);
 ПередатьФокус = "ШКтов"; 
 Форма.Закрыть(0); 
КонецПроцедуры    

Процедура ПриЗакрытии()        
 Если ПустоеЗначение(ПередатьФокус) = 0 тогда 
  Активизировать(ПередатьФокус); 
  СтатусВозврата(0); 
  ПередатьФокус = ""; 
  Возврат; 
 КонецЕсли; 
КонецПроцедуры
Поясню...
Объявили глобальную переменную, по которой будет проверять в последующем, закрывается ли, так сказать, по настоящему форма или это мы "фиктивно" используем закрытие, что бы фокус передать на наше Поле ввода.
В Поле ввода на вкладке Дополнительно мы вызываем процедуру ИзмШКТов(в ней моя лабуда обработки штрих кода, а далее мы присваиваем нашей глобальной переменной имя Поле ввода (в моем случаи называется поле ввода ШКтов) и через Форма.Закрыть(0)закрываем нашу форму для того, что бы в обработчике события ПриЗакрытии(проверить, закрывается ли форма стандартным способом или фиктивно и если фиктивно тогда методом Активизировать(ПередатьФокусуже удачно, без ошибок установиться фокус (курсор) на Поле ввода. Далее делаем глобальную переменную пустой, что бы в следующий раз сделать тоже, что и выше описано, а в конце Возвратнам не дает закрыть наше фиктивное закрытие формы.

6 дек. 2016 г.

Информация о жестком диске

Для получения информации о жестком диске в командной строке нужно выполнить
wmic diskdrive get Name, Manufacturer, Model, InterfaceType, MediaType, SerialNumber

Включенные групповые политики

А точнее подробные отчет о включенных \ отключенных групповых политиках можно получить в командной строке выполнив
GPResult /h C:\GPResult.html

Сбросить локальные политики безопасности

Для сброка выполним в командной строке
secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
а далее
shutdown /r 

Сбросить локальные политики

Что бы сбросить локальные политики на компьютере выполним в командной строке
rd /s /q "%windir%\System32\GroupPolicyUsers"
а далее
gpupdate /force 
ну а далее
shutdown /r

Узнать информацию о материнской плате

Скудную, но все же информацию о материнской плате можно получить выполнив
wmic baseboard get Manufacturer, Model, Name, PartNumber, serialnumber
в командной строке

Сохранить Восстановить записки Sticky

Для сохранения записок Windows 10 нужно скопировать все содержимое папки
%HOMEPATH%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe

Соответственно, для восстановление, все скопированное замещаем возвращаем назад в папку
%HOMEPATH%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe
согласившись на замену
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07