воскресенье, 18 декабря 2016 г.

Технологический журнал от «А» до «Я»

Технологический журнал крайне полезный инструмент для расследования различных проблем производительности и стабильности, но далеко не все о нем знают и умеют грамотно использовать.
В данной статье мы очень подробно рассмотрим этот инструмент — от описания до примеров использования.

среда, 19 октября 2016 г.

Как ставить задачи правильно

При постановке задач следует проверять себя, соответствует ли ваша поставленная задача требуемым параметрам
Итак, Любая задача должна быть :

S (Specific) — конкретной
M (Measurable) — измеримой
A (Attainable) — выполнимой, достижимой
R (Relevant) — значимой
T (Time-bounded) — обозначенной во времени

А теперь разберемся по пунктам:

понедельник, 19 сентября 2016 г.

Последовательности событий в 1С

Последовательность событий при записи элемента справочника из формы элемента (записать и закрыть), а также при записи вида характеристики из формы элемента (записать и закрыть), при записи счета из формы счета (записать и закрыть), при записи вида расчета из формы вида расчета (записать и закрыть).
МОДУЛЬ ФОРМЫ КЛИЕНТ: «Перед записью» — МОДУЛЬ ФОРМЫ СЕРВЕР: «Обработка проверки заполнения на сервере» — МОДУЛЬ ОБЪЕКТА СЕРВЕР: «Обработка проверки заполнения» — МОДУЛЬ ФОРМЫ СЕРВЕР: «Перед записью на сервере» — (Начало транзакции записи — МОДУЛЬ ОБЪЕКТА СЕРВЕР: «Перед записью»- (запись)- «При записи»- МОДУЛЬ ФОРМЫ СЕРВЕР: «При записи на сервере» — Конец транзакции записи) — «После записи на сервере» — МОДУЛЬ ФОРМЫ КЛИЕНТ: «После записи» — «Перед закрытием» — «При закрытии».

пятница, 2 сентября 2016 г.

Microsoft SQL Server Native Client 10.0: Named Pipes Provider: Could not open a connection to SQL Server

Всем привет, если при подключении базы данных в кластер серверов у Вас возникла такая ошибка:

Microsoft SQL Server Native Client 10.0: Named Pipes Provider: Could not open a connection to SQL Server


вторник, 12 января 2016 г.

Падение сервера PostgreSQL

Сегодня после отключения света, отказался запускаться PosygreSQL сервер, Сразу скажу что машина где это произошло тестовая, поэтому ни чего сложного не случилось. Однако симптомы были такие:
При попытке запустить службу "Postgres"выдавалось сообщение что служба остановлена. В журнале событий было написано "Служба "PostgreSQL Database Server 9.1.9-1.1C" перешла в состояние Остановлена." - что собственно ни о чем не говорит.
А вот в логах самого сервера выдало следующее сообщение:

понедельник, 21 декабря 2015 г.

Оптимизация обработки "Редактор свойств номенклатуры"

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

Итак предыстория такая: есть база с УТ 11 которая работала на выделенном сервере(SQL сервер отдельно от сервера 1С, при этом сам сервер 64 битный)  , Периодически появляются проблемы с сервером, проявляется это резким замедлением производительности в самый неожиданный момент, Если в момент тормозов зайти на сервер то можно было увидеть, что процессы 1с(rphost) могли съесть все имеющуюся на сервере память, а скорее всего даже гораздо больше. Вычислить проблему мне удалось подглядев в консоль администрирования 1С в закладке "сеансы" в колонке "Данные СУБД (5 мин)", было очень большое значение, что говорило, что c сервера поступают большой объем данных.

Поговорив с пользователем, я выяснил, что он запустил обработку "Редактор свойств номенклатуры", с большим количеством позиций, в результате чего обработка зависла и ему пришлось убивать 1С через диспетчер задач. Так же мне позже сказали что этой обработкой им советовали пользоваться очень осторожно, т.к. в ней можно получать не более 300 позиций номенклатуры. К слову сказать в текущей базе используется огромное количество свойств номенклатуры(больше 100),

После того как я выяснил что это за обработка, я решил убедиться что эта та самая обработка, которая портит работу сервера. Я решил попробовать ее запустить(на тот момент я не знал о советах по ограничению выбираемого количества номенклатур. Поэтому я решил запустить ее по для получения всего списка номенклатур. И вот что я увидел после запуска на сервере:

Как видно из скриншота, я практически сразу понял, что обработка сейчас завесит сервер, поэтому я убил свое соединение, прежде чем сервер стал тормозить.

среда, 12 августа 2015 г.

1С + PostgreSQL — syntax error at or near «SECOND» at character...

Возникла задачка потестировать  работу 1С  в связке с СУБД PostgreSQL на сервере. С установкой сервера 1С и самой СУБД проблем не возникло, но при попытке создать ИБ средствами 1С вылезла ошибка — «syntax error at or near „SECOND“ at character...», при повторной попытке — «DATABASE не пригоден для использования». При этом база в самой СУБД создается, но какая-то кривая.
Решение:
1. Удалить создавшуюся кривую базу;
2. Остановить службу PostgreSQL;
3. Открыть в блокноте конфигурационный файл PostgreSQL — %ProgramFiles%\PostgreSQL\9.1.9-1.1C\data\postgresql.conf;
4. Раскомментировать и привести к такому виду эти строчки:
backslash_quote = on
escape_string_warning = off
standart_conforming_strings = off
5. Сохранить postgresql.conf, запустить службу PostgreSQL и создать ИБ;
6. Остановить службу PostgreSQL и обратно закомментировать строчки, которые раскомментировали выше;
7. Запустить службу PostgreSQL.

четверг, 11 июня 2015 г.

Поиск по разным полям в Конвертации Данных

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

вторник, 3 марта 2015 г.

Ошибка при попытке вставки записи с неуникальным значением ссылки


Добрый день, сегодня мне попалась вот такая ошибка:"Ошибка при попытке вставки записи с неуникальным значением ссылки" 

Как показало расследование, то данная ошибка в моем случае возникала при записи только что скопированного объекта,

четверг, 26 февраля 2015 г.

Запрет ввода на основании

Иногда возникает потребность отменить ввод документа на основании другого по каким-то условиям. К сожалению нормального решения в данном вопросе нет, т.к. в процедуре модуля "ОбработкаЗаполнения" не передается параметр "Отказ", т.е. в самой обработке, что-бы вы не сделали форма документа откроется, а там уже проверять поздно. Одним из решений является создание своей кнопки в документе основания, и там выполнять проверку на нужные условия. Данное решение имеет один минус. если таких документов будет много, то такие изменения нужно будет ввести во все документы.

суббота, 14 февраля 2015 г.

Создание конфигурации с любым релизом.

Поскольку мне часто приходится работать с разными клиентами, и у каждого свой релиз конфигурации. Регулярно появляется потребность создать пустую базу или получить демо-базу, по релизу клиента. Но вся сложность заключается в том что фирма 1С выпускает установочные конфигурации не так часто. Да и для компаний не франчайзи, доступ открыт только к обновлениям. А получить дистрибутив с которого можно будет развернуть демо-базу это только прерогатива фирм франчайзи.

Т.е здесь политика 1С такова, что когда вы покупаете конфигурацию от 1С Вам предоставляется Setup  текущей версии, а дальше только update. И если Вы захотите создать новую пустую или демо базу, то Вам придется немного постараться, что-бы получить нормальную конфигурацию с последним релизом.

Раньше я хранил cf файлы от тех релизов с которыми мне приходилось работать. И когда появлялась потребность получить пустую или демо базу заданного релиза. Мне приходилось разворачивать ближайшую базу к требуемому релизу, а потом обновлять конфигурацию имеющимся cf файлом. получалось не совсем удобно, так как при таких действиях могли вылезать подводные камни.

вторник, 30 декабря 2014 г.

Что делать если некорректно работает метод ПроверитьВывод

Всем привет. Сегодня я столкнулся с достаточно недокументированой особеностью платформы. А именно при формировании печатной формы некооректно отрабатывал метод ПроверитьВывод. Суть проблеммы заключалась в том что табличный документ не влезал на страницу, и последние две строчки печатались на отдельном листе. Решив, что я что-то напутал в коде я все проверил, естественно ни чего особенного в нем не нашел. Поскольку проблемма была не решена, а решить ее требовалось, я готов был прикрутить костыль, а именно перед началом вывода документа увеличить поля табличного документа, а после вывести документы с нормальными полями, к сожалению,а может быть и к счастью(так как в дальнейшем, была найдена и устранена данная ошибка), эту проблему таким способом решить не удалось. Документ по прежнему печатался как и раньше, т.е вылезал за область документа.
Еще раз изучив код вывода документа, Я обратил внимание на строчку:

ТабДокумент.ИмяПараметровПечати = "ИмяПечатнойФормы";

Все дело оказалось в свойстве табличного документа КлючПараметровПечати или ИмяПараметровПечати. Как оказалось при установке данного свойства настройки печатной формы тут же восстанавливаются. После того как я изменил имя печатной формы, метот ПроверитьВывод заработал корректно.

Таким образом данное свойство следует устанавливать не в начале процедуры вывода на печать а в конце.





понедельник, 25 августа 2014 г.

Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'



Добрый день. Сегодня наступил на интересные грабли:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'


Подобная ошибка возникает при попытке передать с клиента на сервер таблицу значений, и это мне давно известно, однако я получил эту ошибку без явной передачи таблицы. Вот часть кода с которым произошла ошибка:

воскресенье, 17 августа 2014 г.

Установка 1С на ubuntu 10.04

Увеличиваем максимальный размер сегмента памяти до 1Гб. Для менее мощных машин устанавливают от 64Мб до половины объема ОЗУ (для теста выделим 1Gb):
# echo "kernel.shmmax=1073741824" >>/etc/sysctl.conf
# sysctl -p 

Генерируем русскую локаль и задаем переменную среды LANG, именно с ней будет работать скрипт инициализации базы данных.
# locale-gen en_US ru_RU ru_RU.UTF-8
# export LANG="ru_RU.UTF-8"

Устанавливаем необходимые зависимости:
# apt-get install imagemagick

Ставим все необходимые пакеты (1c берем с их офф.сайта):
dpkg -i 1c-enterprise83-common_8.3.4-476_amd64.deb
dpkg -i 1c-enterprise83-server_8.3.4-476_amd64.deb      
dpkg -i 1c-enterprise83-ws_8.3.4-476_amd64.deb
dpkg -i 1c-enterprise83-common-nls_8.3.4-476_amd64.deb 
dpkg -i 1c-enterprise83-server-nls_8.3.4-476_amd64.deb  
dpkg -i 1c-enterprise83-ws-nls_8.3.4-476_amd64.deb 


Заходим в консоль из windows и создаем новую базу


Устанавливаем apache
apt-get install apache2


Добавляем в httpd.conf необходимые данные о базе данных, с помощью скрипта webinst, входящего в состав пакета 1С сервера. Для этого переходим в каталог:

Консоль:
cd /opt/1C/v8.3/i386

Запускаем скрипт с необходимыми параметрами:

Консоль:
./webinst -apache22 -wsdir base -dir '/var/www/base' -connStr 'Srvr="1cserver";Ref="base";' -confPath /etc/apache2/httpd.conf


Где base - имя БД к которой настраиваем доступ, 1cserver - имя сервера на котором установлен 1С сервер.

Устанавливаем необходимые пакеты для работы(шрифты):

apt-get install ttf-mscorefonts-installer

воскресенье, 10 августа 2014 г.

Удаление 1С на сервере linux(Ubuntu)

Иногда возникают ситуации, когда необходимо удалить уже установленный пакет 1С.
Для того что-бы посмотреть уже установенные пакеты от 1С необходимо выполнить команду:

dpkg -l | grep 1c-enterprise

Соответственно для удаление пакета необходимо воспользоваться командой :

dpkg -r  <имя пакета>

Внимание, некоторые пакеты имеют зависимости, при удалении которых выдается соответствующее сообщение c именем пакета. Следовательно Вам будет необходимо удалить сначала зависимый пакет, а потом основной.

Если вы хотите удалить сервер 1С вместе с конфигурационными файлами, Вам необходимо будет воспользоваться командой(пример для 8.3)

dpkg --purge 1c-enterprise83-server

вторник, 15 июля 2014 г.

Ошибка загрузки библиотеки libWand.so по причине:Библиотека не обнаружена.

Сегодня, после переустановки платформы   8.3.4.468 на сервере ubuntu с 64 на 32 битную. при запуске бухгалтерии в толстом клиенте получил ошибку:

Ошибка загрузки библиотеки libWand.so по причине:Библиотека не обнаружена. 
Часть функций будет недоступна. 
Обратитесь к разделу справочной системы «1С:Предприятие - Работа пользователя – 
Особенности работы в Linux – Внешние библиотеки» 


Оказалось, что для 32 битной платформы, библиотеки нужны тоже 32 битные(что вроде бы логично, но было упущено из виду)

Решение: установить 32 битный пакет imagemagick командой:
apt-get install imagemagick:i386

воскресенье, 20 апреля 2014 г.

Ошибка: При подписке на событие

Сегодня после обновления УТ 11 у меня выскочила вот такая ошибка:

При подписке ОбменДаннымиПриСозданииПланаОбмена на событие ОбработкаПолученияФормы произошла ошибка. Обработчик события не найден.

Вопрос решился очисткой кеша приложения(можно просто удалить базу из списка и создать заново).. Видимо вопрос очистки кэша на платформе 8.3.4.465 до сих пор не решен.

PS: в документации  есть описание дополнительного ключа /ClearCache - при установке которого должна производиться очистка кеша. Если прописать в настройках ИБ данный ключ, то подобные ошибки будут встречаться реже. однако регулярная очистка кэша приведет к долгому первому запуску форм и приложения.  

пятница, 3 января 2014 г.

Веб сервисы на PHP+nuSOAP и подключение из 1С

Это небольшая история о том как я используя библиотеку nuSOAP на PHP запустил веб сервис и подключился к нему из 1С.

Во первых почему nuSOAP - наверное потому что это простота использования, Вам достаточно скачать исходники, положить в Ваш проект и на этом подключение модулей заканчивается.
И начинаются другие трудности о которых я хочу поведать читателю.
Первое с чем я столкнулся, это то что в примерах выложенных на просторах интернета, есть ошибки, по крайней мере у меня по методике копипаста сразу не заработали, а точнее(как я выяснил позже) не заработал клиент на PHP а вот сервер оказался вполне рабочим, и так, вот самый простой работающий пример, который выглядит так:

<?php
// Подключаем код NuSOAP
require_once('lib\nusoap.php');
// Создаем экземпляр сервера
$server = new soap_server();
// Инициализируем поддержку WSDL
$server->configureWSDL('hellowsdl', 'urn:hellowsdl');
// Устанавливаем пространство имен с префиксом tns для WSDL-схемы
$server->wsdl->schemaTargetNamespace = 'urn:hellowsdl';
$server->soap_defencoding = 'utf-8';
// Регистрируем предоставляемый метод
$server->register('hello',                // название метода
    array('name' => 'xsd:string'),        // входные параметры
    array('return' => 'xsd:string'),      // выходные параметры
    'urn:hellowsdl',                      // пространство имен
    'urn:hellowsdl#hello',                // soapaction
    'rpc',                                // стиль
    'encoded',                            // использование
    'Says hello to the caller'            // описание
);

// Определяем метод как функцию PHP
function hello($name) {

      return $name;
}

// Используем HTTP-запрос чтобы вызвать сервис
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

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

Более того там был не рабочий код клиента, который должен был обратиться к данному веб сервису и получить с него данные. Но поскольку моя задача состояла подключиться к нему из 1С, то проще оказалось проверить работоспособность веб сервера именно из 1С код подключения к веб сервису получился такой:

Определение = Новый WSОпределения("http://localhost/helloworld.php?wsdl");
Прокси = Новый WSПрокси(Определение, "urn:hellowsdl", "hellowsdl", "hellowsdlPort");
Результат = Прокси.hello(Реквизит1);
Сообщить(Результат);

Все работало, но как показали тесты данный пример на отрез отказывался работать с русской кодировкой. Не буду мучать читателя о всех способах, которые мне пришлось попробовать, чтобы заставить корректно работать с кирилицей данный веб сервис, но решение так-же было найдено на просторах интернета, правда не с первого раза, поэтому и решил написать, что-бы было больше информации на данную тему. Итак суть решения в том что nuSOUP пытается автоматически привести переданные значения  в кодировку utf-8, а поскольку 1с отправляет данные уже в кодировке utf-8  то в итоге нам конвертируют значения несколько раз, и что-бы решить данную проблему, модуль nuSOUP необходимо отучить от автоматической конвертации. Для этого открываем файл nusoup.php и ищем строки:

var $decode_utf8 = true;
Меняем на 
var $decode_utf8 = false;
далее ищем:
function nusoap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){
и меняем на 
function nusoap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=false){
после этого мой сервис заработал корректно. Однако на сайте где было найдено данное решение были и другие советы, я их тоже оставлю на данной странице, дабы они не потерялись:

И снова отправьте тестовую строку и посмотрите изменился ли результат

Также можно заменить все упоминания ISO-8859-1 на UTF-8 или cp1251

Если дело уж совсем плохо, то можно конвертировать в формат &#1053;&#1072; &#1075; 
Ну и в конце концов можно попробовать использовать другой NuSoap

Если случится чуди и всё заработает как надо 
Замените 
$GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel = 9;
на 
$GLOBALS['_transient']['static']['nusoap_base']->globalDebugLevel = 0;

вторник, 30 июля 2013 г.

Ошибка СКД "Рекурсивное получение представления для поля"

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

Поэтому, если при формировании отчета на СКД вам попалась ошибка <Рекурсивное получение представления для поля "имя поля"> - это значит что Вы дважды получаете представление по указанному полю. Первый раз в поле "Выражение представление" на закладке "Набор данных", а второй раз в макете отчета. Когда заполняли параметр макета, там автоматически по заданному полю подставляется функция Представление(<ИмяПоля>).

вторник, 16 июля 2013 г.

Горячие символы или новое это хорошо забытое старое.


Горячие символы или новое это хорошо забытое старое.

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


Собственно речь идет о возможности ввода символов по его внутреннему коду. В интернете можно найти достаточное количество статей (по ключевым словам "Ввод символов через alt"), где представлены все символы. Как правило этот метод импользуют для набора символов, которых нет на клавиатуре:™ или ©, я же предлагаю Вам и сам использую этот метод в работе для ввода символов, которые мне не доступны на одной из раскладок. Ведь работать, иногда приходится удаленно(через RDP), на клиентском компьютере(или с разных ноутбуков), где нет привычных настроек или поменяно расположение клавиш, или что еще хуже другое переключение раскладки.
Распечатав краткую таблицу символов, наиболее встечающихся при коддинге, и поместив ее перед монитором, теперь можно ввести любой символ найдя его в таблице, а спустя некоторое время данная информация осядет на корке головного мозга и дальше будет не нужна. Ниже представлена сама таблица с символами, которые чаще как мне кажется необходимы при коддинге:
Символ
КодСимволКод
#
35      ^94
&38\
92
@64/47
?63{123
$36}125
[91<60
]93>62
|124`96
'39"34

 Ну и сам метод ввода, для тех, кто еще не догадался, для набора нужного символа необходимо нажать кнопку Alt  и не отпуская ее набрать внутренний код нужного символа, и все!
Не знаю как Вам а мне данный способ очень сильно упрощает жизнь, надеюсь и Вам поможет.
 ЗЫ:
Кстати, если зажать клавишу CTRL и покрутить колесо мышки, в модуле где очень много строчек кода, то эффект будет как от наджатия PageDown и PageUp.