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

Отзыв о книге: Майк Кон "Scrum. Гибкая разработка ПО"

Книга "Scrum. Гибкая разработка ПО" Майк Кон - купить книгу Succeeding with Agile: Software Development Using Scrum ISBN 978-5-8459-1924-3 с доставкой по почте в интернет-магазине Ozon.ruКнига "Scrum. Гибкая разработка ПО" Майк Кон - купить книгу Succeeding with Agile: Software Development Using Scrum ISBN 978-5-8459-1924-3 с доставкой по почте в интернет-магазине Ozon.ru
Книга
"Scrum. Гибкая разработка ПО" автор Майк Кон


Тема SCRUM интересовала. Книга показалась солидной. Поэтому и взял (точнее заказал в подарок на день рождения).

среда, 17 декабря 2014 г.

Html.DevExpress().TextBox - привязка к полю Number

Окружение

VS 2013 , Developer Express компоненты DXperience 14.1.8

Проблема

Возникла проблема с полем в БД с именем "Number", точнее, с отображением его в виде текстбокса.

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

Entity Framework Странная ошибка Unable to update the EntitySet - because it has a DefiningQuery and no element exist

Ситуация


При сохранении объекта Entity Framework выдал ошибку

Unable to update the EntitySet - because it has a DefiningQuery and no <UpdateFunction> element exist

Текст странный. и поначалу ввел меня в ступор.

Решение


Оказалось, что я забыл установить первичный ключ в таблице. Исправил, обновил модель и все заработало.

среда, 26 ноября 2014 г.

Битрикс: проблемы с таблицей b_cache_tag (большой размер, медленные запросы)

Ситуация

В какой-то момент отключили сайт на Битриксе по причине "запросы перегружают базу данных"

Разбирательство

Выяснил, что тормозят запросы вида

SELECT TAG FROM b_cache_tag WHERE SITE_ID = 's1' AND CACHE_SALT = '/ec3'
AND RELATIVE_PATH = '/s1/bitrix/menu/06f'

Выполняются порядка 30 - 60 секунд.
Соответственно хостинг заблокировал базу

Нашел несколько статей по теме

Таблица b_cache_tag весит слишком много
http://dev.1c-bitrix.ru/community/forums/forum23/topic35459/


Непрерывно растет кеш в таблице b_cache_tag
(тут непонятно)
http://dev.1c-bitrix.ru/community/webdev/user/2651/blog/9943/?last_comment_id=0&comment_post_id=9943&PAGEN_1=2


Решение

(может не идеальное, но мне помогло)
делал по ответу в статье http://dev.1c-bitrix.ru/community/forums/forum23/topic35459/

Почистил кеш

Настройки продукта -> Автокеширование -> Очистка файлов кеша -> Все 

Также удалил содержимое папок
/bitrix/cache/ 
/bitrix/managed_cache/ 

и обрезал таблицу
TRUNCATE TABLE b_cache_tag (НО ТАК ДЕЛАТЬ НЕ НУЖНО =) )

понедельник, 10 ноября 2014 г.

Битрикс catalog.section не работает кнопка "Купить" (пустая ссылка BUY_URL)

Ситуация
Битрикс 14.(какая-то)
Перестали работать кнопки "Купить" и "В Корзину" в списке товаров.


Начал разбираться: обнаружил что ссылка BUY_URL - пустая.
Погуглил - нашел ответ в статье
http://www.alexzdesign.ru/blog/webdeveloper/1s-bitriks-ne-vyvodit-ssylki-dobavleniya-tovara-v-korzinu/

Решение:
Обновление модуля “информационные блоки” до версии 14.5.11
(для обновления включил загрузку Бета версий)

четверг, 6 ноября 2014 г.

Ошибка с System.Web.Mvc версия 4.0.0.1 (не компилируется проект)

Ситуация
Не компилируется ASP.NET MVC проект. Компилироваться перестал внезапно, без каких-то действий с моей стороны.

Изучение вопроса
Виновника проблемы нашел относительно быстро. Им оказался Microsoft, а точнее автоматический Windows Security update. Update.
Microsoft подменило версию библиотеки System.Web.Mvc с 4.0.0.0 на 4.0.0.1
(на самом деле точно такое-же произошло и с третьей версией 3.0.0.0 поменялось на 3.0.0.1 но у меня нет проектов на MVC 3, но решение, думаю будет аналогичным).

Ссылки по теме
Windows update caused MVC3 and MVC4 stop working
http://stackoverflow.com/questions/26393157/windows-update-caused-mvc3-and-mvc4-stop-working
System.Web.Mvc broken after security update
https://social.msdn.microsoft.com/Forums/vstudio/en-US/eba2bb36-762c-461b-8104-5ce45a3a3f67/systemwebmvc-broken-after-security-update?forum=netfxsetup


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


Решение, которое помогло мне

1. Заменил ссылку на библиотеку:
во всех проектах удалил ссылку (reference) на старую библиотеку и добавил ссылку на System.Web.Mvc 4.0.0.1
(после этого проекты хотя бы стали компилироваться)

2. Поправил конфиг-файлы:
Тут правил основной web.config и web.config из папки Views
суть исправлений: делал поиск по строке System.Web.Mvc и менял 4.0.0.0 на 4.0.0.1.

После этого заработало локально

3. Сделал так чтобы библиотека копировалась в bin директорию проекта:
В свойствах (properties) добавленного файла (System.Web.Mvc) установил значение
Copy Local = true

после этих изменений и паблиша заработало на удаленном хостинге.

Вопросы/пожелания принимаются в комментариях

суббота, 25 октября 2014 г.

Visual Studio 2013 не создается ASP.NET Web-проект: пустое (disabled) окно с шаблонами

Окружение: Visual Studio 2013

Проблема:
не получается создать ASP.NET Web-проект. Окно с выбором шаблонов пустое: шаблонов нет, остальные элементы в disabled-состоянии.


Решение


1.Закройте VS.
Перейдите в папку
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
Удалите следующие сборки, если они существуют
Microsoft.VisualStudio.Web.WindowsAzure.Contracts.dll Microsoft.VisualStudio.Web.WindowsAzure.Explorer.dll Microsoft.VisualStudio.Web.Internal.Contracts.dll


2.Запустите VS2013 с 3-м апдейтом, попытайтесь создать ASP.NET Web приложение, Все должно работать нормально.



Ссылки по которым нашел решение

тут проблема описана с картинками
http://stackoverflow.com/questions/25255683/asp-net-project-templates-missing-after-installing-update-3-for-visual-studio-20


аналогичный вопрос, тут даже ответил специалист поддержки Microsoft
http://stackoverflow.com/questions/25270008/cant-create-new-mvc5-project-or-any-other-asp-net-projects-in-visual-studio-20/25276352#25276352

воскресенье, 28 сентября 2014 г.

Битрикс: не работает сайт из-за кеша

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

В этот раз помогла служба поддержки хостинга.

Они удалили весь кеш:
Внутри папки
http/bitrix/ 
удалить папки
cache
managed_cache
stack_cache 

среда, 17 сентября 2014 г.

MS SQL использование GUID как первичных ключей (Primary key)

Проблема

В двух словах: планирую новый проект на MS SQL
планируется распределенная структура (несколько баз)
соовтетсвенно в очередной раз возник вопрос: какими должны быть ключевые поля
Int или GUID
(предметно-зависимые отбросил сразу, т.к. на практике ни к чему хорошему не приводило)

распределенная структура располагает с GUID-ключам
но в общем случае при использовании GUID  в лоб появляеются проблемы с производительностью.

Обзор "лучших практик" привел к решению
Последовательные или комбинированные (COMB) гуиды
COMB от NHibernate
или на уровне БД - NEWSEQUENTIALID

все ссылки по тексту ниже.

Разделил их на 4 раздела

1. Базовые знания
2. Исследование вопроса GUID-ов
3. Варианты решений
4. (факультатив) связь с Entity Framework

1. Базовая подготовка по MS SQL / Guid


GUID - вики статья
(вдруг кто не знает)
http://ru.wikipedia.org/wiki/GUID


Описание типа данных uniqueidentifier в MS SQL
Использование данных uniqueidentifier
http://technet.microsoft.com/ru-ru/library/ms190215(v=sql.105).aspx

Функция NEWSEQUENTIALID (Transact-SQL)
описание функции в MS SQL
http://msdn.microsoft.com/ru-ru/library/ms189786.aspx

UuidCreateSequential function
http://msdn.microsoft.com/en-us/library/aa379322(VS.85).aspx

2. Статьи очерчивающие проблемы использвания GUID'ов для первичных ключей


Хорошая статья с замерами
GUID vs INT Debate
http://blogs.msdn.com/b/sqlserverfaq/archive/2010/05/27/guid-vs-int-debate.aspx

Простенькая статья с замерами
Целочисленные, символьные и GUID-ключи в MS SQL
http://www.arbinada.com/main/node/38

Обсуждение отличий в скорости работы обычных гуидов и последовательных
What are the performance improvement of Sequential Guid over standard Guid?
http://stackoverflow.com/questions/170346/what-are-the-performance-improvement-of-sequential-guid-over-standard-guid/170363#170363

Статья отценивающая за и проив гуидов как первичных ключей
есть расчеты и самодельная генерация комбинированных гуидов на стооне сервера.
в двух словах: автор - за комбогуиды
The Cost of GUIDs as Primary Keys
http://www.informit.com/articles/article.aspx?p=25862

Еще статья оценивающая, хорошо ли брать гуиды в качестве первичных ключей
SQL Server: Is it OK to use a uniqueidentifier (GUID) as a Primary Key?
http://mitch-wheat.blogspot.com.au/2011/08/sql-server-is-it-ok-to-use.html

еще обсуждение на Stackoverflow
Про издержки в производительности при использовании гуидов
What are the performance improvement of Sequential Guid over standard Guid?
http://stackoverflow.com/questions/170346/what-are-the-performance-improvement-of-sequential-guid-over-standard-guid/170363#170363

3. Статьи с вариантами решения

Это решение взял за основу
CombGuid. Генерация “дружественных” к SQL серверам значений Guid в .net приложениях
пример самостоятельной генерации (тут логика взята из библиотеки Magnum)
http://habrahabr.ru/post/214667/

Собственно NHibernate'овская реализация Гуидов
(по нему сделано много комбовских реализаций)
https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Id/GuidCombGenerator.cs

Хорошая статья - чуть не взял её за основу
но склонился к NHibernate'овской реализации.
она учитывает 2 аспекта
1. использование функции uuidcreatesequential
2. превращение функции с SQL-server-совместимый формат
http://www.shirmanov.com/2010/05/generating-newsequentialid-compatible.html
Generating NewSequentialID compatible Sequential Guids in C#

обсуждение на stackoverflow
Ищут .NET эквивалент для newsequentialid
Is there a .NET equalent to SQL Servers newsequentialid()
http://stackoverflow.com/questions/211498/is-there-a-net-equalent-to-sql-servers-newsequentialid
тут дали ссылку на PInvoke.net (см. ниже)
но еще есть пример реализации COMB от NHibernate

pinvoke.net
пример адаптации для Net Windows функции uuidcreatesequential (rpcrt4)
http://www.pinvoke.net/default.aspx/rpcrt4.uuidcreatesequential
это годный рабочий пример, но не уверен в дружественности сгенерированных гуидов к MS SQL

еще пример
по сути дублирует код с pinvoke.net
http://www.csharpque.com/2012/06/generating-sequential-guid.html

Немного про взаимодействие с EF


Using sequential guids as identifiers in Entity Framework
http://bartwullems.blogspot.com/2013/10/using-sequential-guids-as-identifiers.html
тут описаны 2 варианта
1. генерация гуида через скл-сервер
2. ссылка на нхибернейтовсую реализацию Comb

Статьи по теме

Пример создания последовательного Guid в базе
MS SQL: Создание нового последовательного Guid


пятница, 12 сентября 2014 г.

FastReport запуск дизайнера в рантайме для ускорения отладки (FastReport Run Designer in Runtime)

Окружение

Delphi 7, FastReport 4

Ситуация

Работаю со сложным проектом и сложными печатными формами (отчетами).
В какой-то момент понял, что при разработке макетов отчетов выполняю по кругу такие действия:
1. правка в дизайн тайме
2. проверка в рантайме

  • запуск программы
  • ввод логина/пароля
  • открытие нужной формы
  • поиск нужного документа
  • вызов пункта меню Печать
  • просмотр отчета, получившегося на выходе 
  • определение что еще нужно править, 
  • возврат к шагу 1

В этой схеме работы львиную долю времени занимают непродуктивные шаги: запуск программы/поиск документа/вызов меню печать. Очень захотелось исключить непродуктивные шаги.

Что захотелось сделать

Я подумал, что было бы классно: открыть в рантайме нужный документ открыть его макет и сразу же его дизайнерить.
и сразу же смотреть, что получается, без перезапуска программы.

По ходу решения задачи нашел 2 решения.


Решение 0. Самое простое

Тут идея проста как 3 копейки: нужно выполнить команду.

Report.DesignReport()

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

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

Решение 1. Через событие OnPreview

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

Суть решения

1. делаю вспомогательный юнит (модуль)

-------------------------------------

unit uUtilsFr;

interface
uses
  frxClass, frxPreview;

type
   TFastReportDesignReportButtonOnClickStubClass = class(TObject)
  public
    procedure OnClick(Sender: TObject);
  end;


procedure FastReportAddDesignButtonToPreviewForm(AReport: TfrxReport);

implementation
uses
  Buttons;

var
  lfxDesignReportButtonOnClickStub: TFastReportDesignReportButtonOnClickStubClass;

{ TFastReportDesignReportButtonOnClickStubClass }

procedure FastReportAddDesignButtonToPreviewForm(AReport: TfrxReport);
var
  lfrxPreviewForm: TfrxPreviewForm;
  lbtnDesign: TSpeedButton;
begin
  lfrxPreviewForm := TfrxPreviewForm(AReport.PreviewForm);

  lbtnDesign := TSpeedButton.Create(lfrxPreviewForm);
  lbtnDesign.OnClick := lfxDesignReportButtonOnClickStub.OnClick;
  lbtnDesign.Caption := 'Дизайнер';
  lbtnDesign.Width:= 66;

  lfrxPreviewForm.ToolBar.InsertControl(lbtnDesign);
end;

procedure TFastReportDesignReportButtonOnClickStubClass.OnClick(
  Sender: TObject);
begin
  TfrxPreviewForm(TSpeedButton(Sender).Owner).Report.DesignReport;
end;

initialization
  lfxDesignReportButtonOnClickStub := TFastReportDesignReportButtonOnClickStubClass.Create;

finalization
  lfxDesignReportButtonOnClickStub.Free;
end.

-------------------------------------

2. В компоненте отчета в событие OnPreview добавляю строчку

FastReportAddDesignButtonToPreviewForm(TfrxReport(sender));

(тут по сути вызываю функцию из созданного в пункте 1 модуля)

Что получается на выходе
В окне превью отчета появляется кнопка "Дизайнер", которая открывает дизайнер отчета.

Решение 2. Через собственный компонент Экспорта

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

Идея решения: делаю свой фиктивный компонент экспорта отчетов. Суть экспорта: открытие дизайнера.

Сложность решения: нужен будет свой компонент (то есть я предполагаю, что понятия создания/регистрации компонентов в Delphi вам знакомы).

Суть решения

1. Делаем компонент


unit ufrxExportDesign;

interface

uses
  Classes, Controls, Dialogs, frxClass;

type
  TfrxExportDesign = class(TfrxCustomExportFilter)
  public
    constructor Create(AOwner: TComponent); override;

    class function GetDescription: String; override;
    function ShowModal: TModalResult; override;


  end;

implementation

{ TfrxPDFExport }

constructor TfrxExportDesign.Create(AOwner: TComponent);
begin
  inherited;
  ShowDialog:= true;
end;

class function TfrxExportDesign.GetDescription: String;
begin
  Result := 'Run Designer';
end;

function TfrxExportDesign.ShowModal: TModalResult;
begin
  Report.DesignReport();
  Result:= mrCancel;
end;

end.



2. регистрируем компонент. 

Тут код я не привожу, т.к. это будет зависеть от вашей инфраструктуры проектов

3. Кидаем компонент на форму с отчетами
(по сути достаточно одного компонента на приложение)

Что получается на выходе 
в подменю "Экспорт" окна предпросмотра отчета у вас появятся кнопка "Run Designer"

Примечание

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

Самое главное: Как сохранить изменения

После того, как в рантайме вас все устраивает, в окне дизайнера вызовите команду "Соханить в файл".
Потом в дизайн-тайме открываете дизайнер этого же отчета и загружаете из файла.
В самом простом варианте этого достаточно

вторник, 9 сентября 2014 г.

JavaScript-Wizard (Мастер) по возможности с BootStrap стилизацией

Задача

внедрить в сайт визард, по возможности поддерживающий Bootstrap


Исследование темы

С выбором пока не определился. Все собранные материалы привел ниже.
Вопросы/пожелания/предложения принимаются в комментариях.

Пока понравился больше всего
jQuery Steps (у него еще и таблица есть)
http://www.jquery-steps.com/Examples#basic-form


Вроде тоже неплохо
Twitter Bootstrap Wizard Plugin
http://vadimg.com/twitter-bootstrap-wizard-example/


Это визард на основе аккордеона
Accordion Wizard for Bootstrap 3
http://sathomas.me/acc-wizard/#prerequisites


Неплохо, но по умолчанию не бутстраповский
Smart Wizard 3
http://mstratman.github.io/jQuery-Smart-Wizard/index.htm


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

Наследование в MS SQL Server с использованием Entity Framework (EF)

Ситуация 

Созреваю на применение наследования в базе данных. Работаю с MS SQL Server 2008 (планирую переход на 2012)

Моя мотивация: 

в системе есть несколько типов документов, а будет еще больше.
И у всех документов нужны типовые реквизиты:

  • состояние (проведен/не проведен), 
  • дата создания, 
  • автор, 
  • дата изменения, 
  • последний изменивший,
  • пометка удаления


Дублировать эти поля во всех типах документов очень не хочется.
Хотелось бы создать таблицу "Базовый документ" со всеми этими служебными полями и остальные документы наследовать от неё.

Изучение темы

К сожалению, на нашел в MS SQL каких-нибудь стандартных механизмов. Похоже, придется все делать "ручками".

Похоже выбирать буду метод TPT (Table Per Type)

Все материалы привожу ниже

Материалы по теме

Статья про реализацию наследования в БД
Implementing Table Inheritance in SQL Server
тут про бд описано нормально, но не освещено как с этим "взлетать": а именно, как работать в прикладном решении
http://www.sqlteam.com/article/implementing-table-inheritance-in-sql-server

Несколько веток на Stackoverflow
How can you represent inheritance in a database?
http://stackoverflow.com/questions/3579079/how-can-you-represent-inheritance-in-a-database

Table “Inheritance” in SQL Server
http://stackoverflow.com/questions/529256/table-inheritance-in-sql-server


Статью по связке с Entity Framework
Implementing Inheritance with the Entity Framework 6 in an ASP.NET MVC 5 Application (11 of 12)
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application


Inheritance in the Entity Framework
http://blogs.msdn.com/b/adonet/archive/2007/03/15/inheritance-in-the-entity-framework.aspx

EF Designer TPT Inheritance
http://msdn.microsoft.com/en-us/data/jj618293.aspx

EF Designer TPH Inheritance
http://msdn.microsoft.com/en-us/data/jj618292.aspx

вторник, 26 августа 2014 г.

API Privat24 (Приват24) Пример расчета сигнатуры на C# ASP.NET MVC

Ситуация

Делаю интерфейс к системе онлайн платежей Приват24 (Интернет-эквайринг ПриватБанка)
на ASP.NET MVC (код соответственно на C#)
Документация к системе есть здесь
https://api.privatbank.ua/article/4/

По документации сделал правильную форму для отправки на сервер.

Возникла проблема с разбором ответа

Проблема

Нужно сверить сигнатуру в приватбанковском ответе о платеже.
Но в документации примеры только на PHP.
Решение задачи "в лоб" приводило к неправильной сигнатуре. Пришлось повозиться.
Здесь делюсь результатами.
Примечание: эта статья посвящена только разбору сигнатуры. Остальные вопросы оставил пока за скобками (чтобы не распыляться). Если будет интересно - пишите запросы в комментариях.

Решение

Сначала несколько "помогаторов" (вспомогательные методы)

Помогатор 0

Используем модули

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;

Помогатор 1

Преобразователь массива байтов в строку

        /// <summary>
        /// Возвращает массив байтов в виде шестнадцатиричной строки
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        private static string GetByteArrayAsHexadecimalString(IEnumerable<byte> buffer)
        {
            return buffer.Select(b => b.ToString("x2")).Aggregate("", (total, cur) => total + cur);
        }


Помогатор 2

Рассчитыватель сигнатуры

        /// <summary>
        /// вычисление сигнатуры приват24
        /// </summary>
        /// <param name="payment"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        private static string ComputeSignature(string payment, string password)
        {
            var str = payment + password;
            var sha1 = System.Security.Cryptography.SHA1.Create();
            var md5 = System.Security.Cryptography.MD5.Create();            

            var md5Res = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
            var md5ResString = GetByteArrayAsHexadecimalString(md5Res);

            var sha1Res = sha1.ComputeHash(Encoding.UTF8.GetBytes(md5ResString));
            var sha1ResString = GetByteArrayAsHexadecimalString(sha1Res);
            return sha1ResString;
        }

Помогатор 3

Превращение полей POST-запроса в словарь (Dictionary<string,string>).
Эту строчку применил в экшене контроллера, чтобы дальше уже работать со словарем, а не с полями формы.

var dic = Request.Form.AllKeys.ToDictionary(key => key, key => Request.Form[key]);

Основной метод

Сверка сигнатуры в ответе системы приват24

        public void ParseResult(Dictionary<string, string> fields)
        {
            var passedsignature = fields["signature"];
            var payment = fields["payment"];
            var computedsignature = ComputeSignature(payment, _merchInfo.Password);
            if (passedsignature == computedsignature)
            {
                Console.WriteLine("Bingo!");
                // тут логика разбора ответа
                // ...
            }
            else
            {
                Console.WriteLine("Сигнатуры не совпадают!");
            }                       
        }


среда, 6 августа 2014 г.

Visual Studio 2013 пропал пункт меню "Create Unit Tests...". Восстановление

Внимание!
Есть аналогичная статья по Visual Studio 2012 http://dev-doc.blogspot.com/2013/10/visual-studio-2012-create-unit-tests.html

Окружение
Visual Studio 2013

Проблема
нет пункта меню "Create Unit Test" который помогает делать заглушку для тестов

Решение
  1. Меню: Tools -> Extensions and Updates
  2. Выбираем: Online -> Visual Studio Gallery
  3. Задаем в поиске: "Unit Test Generator"


Где нашел
здесь http://stackoverflow.com/questions/9547055/where-is-the-create-unit-tests-selection

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

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

Окружение
Битрикс 14.5.3,1С 8.1 УТ

Проблема
Перестала работать выгрузка заказов. Причем сообщение об ошике невнятное типа "Заказы не выгружены"

Что делал

Решил начать с отладки 1С
Отлаживал Обработку "Обмен с сайтом", в её модуле прошелся по процедуре "ВыполнитьОбменЗаказами".

Там добрался до ошибки:
Битрикс возвращает такую строку: "Ошибка проверки источника запроса. обновите модуль обмена".

погуглил
нашел решение здесь: http://dev.1c-bitrix.ru/community/blogs/product_features/exchange-with-1c-analyze-typical-operations.php

Решение
в Битриксе в

Настройки -> Инструменты - > Команда PHP строка 

нужно выполнить такие команды

COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y" ); 
COption::SetOptionString("sale", "secure_1c_exchange", "N" ); 

Кто найдет решение лучше - поделитесь

воскресенье, 27 июля 2014 г.

Windows пипетка

Понадобилась экранная пипетка снимать цвет изображения windows, в частности для программирования в Delphi.

Воспользовался программой
http://www.ant-karlov.ru/colours-ekrannaya-pipetka.html

В Windows 8 работает.
Спасибо автору. 

пятница, 4 июля 2014 г.

Delphi 7 Модуль данных (datamodule) не виден на экране

Ситуация
Работаю над проектом в Delphi 7
Перед этим проектом занимался другой разработчик

Проблема
Не отображается визуальное представление датамодуля (datamodule)

Код вижу, но при нажатии на F12 визуальное представление не отображается


Причина
Причину выяснил по косвенным признакам + дедуктивный метод.

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

Решение
Открыл через проводник файл dfm модуля данных и поправил на 1 свойства Top и Left
(через делфи до них не добраться)

среда, 25 июня 2014 г.

Angular ошибка Uncaught object в строке 36

Ситуация
Начинаю изучать Angular по мануалам. как только добавляю конфигурацию роутинга (даже пустую)

var myApp = angular.module("myApp", [])
    .config(function ($routeProvider, $locationProvider) {
})
;

- получаю ошибку

Uncaught object (строка 36)

Решение
Проблема в устаревшей документации. С версии 1.2* в Angular роутинг вінесен в отдельній файл, соответсвенно, надо добавлять его в скрипты
<script src='bower_components/angular/angular.js'></script>
<script src='bower_components/angular/angular-route.js'></script>
и в определении приложения - тоже добавлять ссылку на него

var myApp = angular.module('myApp', ['ngRoute']);

Cсылка по теме
http://stackoverflow.com/questions/23898348/angular-application-config-uncaught-object-error-ngroute

Еще одна точка проверки

Добился что пустой config не вызывает ошибку. Но когда добавляю маршрут - опять получаю ту же ошибку

Uncaught object (строка 36)

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

$routeProvider.when('/catalogcountry/', {
            templateUrl: '/templates/country/country-list.html',
            controller: 'CountriesController'
        });

четверг, 12 июня 2014 г.

Visual Studio исключить папки и файлы из Web-публикации (Web Publish)

Ситуация
Разрабатываю сайт на ASP.NET MVC
Уосновная часть сайта уже разработана, доделываю некоторые модули + поддержка.
По большей части скрипты и контент сформированы и не меняются (сюда же относится и фреймворки типа bootstrap и библиотеки типа jQuery, knockoutjs)
Но каждый раз публикация сайта занимает долгое время из- за перевыгрузки файлов с этими папками.

Задача
Исключить некторые папки из публикации веб-проекта на ASP.NET MVC

Решение
По простому - нужно внести некоторые папки как исключение в конфигурационный файл проекта.

Но сделать это оказалось не просто, особенно, если вы новичок в студии.
задача разбилась на 3 поздадачи, которые я тут и опишу.

1. Подготовить новую конфигурацию.

На солюшене (именно на солюшене, а не на проекте) выбираете "Configuration Manager ..." из контекстного меню.

Откроется окно менеджера конфигурации

В дропдауне "Active Solution Configuration" есть пункт "New". Выбираем и создаем новую конфигурацию с произвольным именем.

Для удобства есть возможности скопировать настройки с уже существующей конфигурации.

ок. КОнфигурация есть. Назовем её "Custom"


2. Настроить конфигурацию в проекте.

теперь наша задача внести изменения в .cproj файл для этого
2.1. Выгружаем проект. Выбираем "Unload project" из контекстного меню над проектом.
2.2. Открываем файл проекта. Для этого над выгруженным проектом выбираем "Edit [имя проекта].cproj"
2.2. Изменяем .cproj файл:
Ищем раздел
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '[Имя вашей конфигурации]|AnyCPU'">
и добавлем в него строчки типа
<ExcludeFilesFromDeployment>File1.aspx;File2.aspx</ExcludeFilesFromDeployment>
<
ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment

в конце концов секция должна выглядеть примерно так
<PropertyGroup Condition='$(Configuration)|$(Platform)' == '[Имя вашей конфигурации]|AnyCPU' ">
  ... 

  <
ExcludeFilesFromDeployment>File1.aspx;File2.aspx</ExcludeFilesFromDeployment>
  <
ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment>
</
PropertyGroup>

2.3. Сохраняем .cproj файл
2.4. Загружаем проект в студию ("Reload project" из контектсного меню над проектом)

3. Указываем нужную конфигурацию для публикации.

Над проектом выбираем "Publish"
В окне публикации переходим в раздел "Settings" и выбираем нашу конфигурацию.

4. Собственно выполняем публикацию.


Ссылки по теме

Using Web.config Transformation in Web Site Projects
http://andrewtwest.com/2010/02/25/using-web-config-transformations-in-web-site-projects/

How to: Edit Project Files
http://msdn.microsoft.com/en-us/library/ms171487(v=vs.90).aspx

среда, 11 июня 2014 г.

ASP.MVC работа с nullable decimal (decimal?)

Окружение: ASP.NET MVC, VS 2013

Проблема

Столкнулся с проблемой, что nullable decimal не разбираются

Решение

сделал кастомный биндер
код взял из статьи
http://icanmakethiswork.blogspot.com/2013/03/decimalmodelbinder-for-nullable-decimals.html

и потом зарегистрировал биндер в global.asax

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());

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

gmail Ошибка Please log in via your web browser and then try again

Attention! For your convenience this material is available in English



Ситуация


делаю отправку через веб-сайт емейлов от имени gmail-аккаунта (задаю логин/пароль/SMTP сервер/порт)

Ошибка

При отладке приложения на локальном сервере - все ок.
Как только загружаю на хостинг - выдает ошибку

534-5.7.14 Please log in via your web browser and then try again. 534-5.7.14 Learn more at 534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 18sm42904851wju.15 - gsmtp 


Исследование

погуглил. помог один из ответов отсюда
http://stackoverflow.com/questions/20337040/gmail-smtp-debug-error-please-log-in-via-your-web-browser

Решение

Суть проблемы в моем случае
Gmail блокирует почту с незнакомых IP-адресов
Естественно выполнить с IP-адреса хостинга пожелание гугла залогиниться в веб-почту ("Please log in via your web browser") я не смог.

Соответственно нужно было отключить блокировку незнакомых адресов через эту ссылку
https://accounts.google.com/DisplayUnlockCaptcha

UPD
также разрешил ненадежные приложения через
https://myaccount.google.com/lesssecureapps

См. также

Gmail SMTP debug: error “please log in via your web browser”
http://stackoverflow.com/questions/20337040/gmail-smtp-debug-error-please-log-in-via-your-web-browser

четверг, 29 мая 2014 г.

Как отключить автозагрузку DevExpress CodeRush при старте Visual Studio

Ситуация 
Visual Studio сильно тормозит при загрузке из-за CodeRush.

Решение
Помогла статья https://www.devexpress.com/Support/Center/Question/Details/Q390681

Если в двух словах и по русски
Заходите в настройки CodeRush
Выставляете в дропдауне снизу уровень "Эксперт"

В левой панели выбираете Core/Startup  (опция Startup появляется только при выставлении уровня "Эксперт")
И ставите галочку  "Load manually" (Загружать вручную)

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

вторник, 27 мая 2014 г.

Visual Studio 2012 переход ASP.NET MVC проекта на Razor 3

Как в студии

по простому: установите пакет Microsoft.AspNet.Mvc

и замените 2 на 3 в вебконфиге там где встречается слово WebPages

ссылка по теме: http://stackoverflow.com/questions/19102831/how-to-install-asp-net-mvc-5-in-visual-studio-2012

среда, 21 мая 2014 г.

Инструкции по обновлению, вставке или удалению из хранилища затронули непредвиденное число строк ({0})

Окружение

Visual Studio 2012
EF 5
MS SQL Server 2008

При добавлении записи в таблицу возникает ошибка

Инструкции по обновлению, вставке или удалению из хранилища затронули непредвиденное число строк ({0}). Сущности могли быть изменены или удалены с момента их загрузки. Обновите записи диспетчера ObjectStateManager

Как искал

В русскоязычном сообществе почти ничего не нашел

нашел занятный сайт - переводчик ошибок
http://finderr.net/clr/ru/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8E-%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B5-%D0%B8%D0%BB%D0%B8-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8E-%D0%B8%D0%B7-%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0-%D0%B7%D0%B0%D1%82%D1%80%D0%BE%D0%BD%D1%83%D0%BB%D0%B8-%D0%BD%D0%B5%D0%BF%D1%80%D0%B5%D0%B4%D0%B2%D0%B8%D0%B4%D0%B5-/17429932

Далее искал уже по ошибке

Store update, insert, or delete statement affected an unexpected number of rows ({0}). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

Свел возможные варианты решения

1. Вы не указываете значение первичного ключа при записи.
Проверьте. если дейстительно первичный ключ нулл - задайте его явно (часто ребята забывают возвращать его из формы, или при database сценарии указывают это поле как пропускаемое)

если у вас этот вариант - смотрите ссылки
http://rpelepei.blogspot.com/2010/05/0.html
или
http://stackoverflow.com/questions/1836173/entity-framework-store-update-insert-or-delete-statement-affected-an-unexpec

2. Ошибки многопользовательской работы
http://stackoverflow.com/questions/1836173/entity-framework-store-update-insert-or-delete-statement-affected-an-unexpec

3. Побочные эффекты триггеров

http://stackoverflow.com/questions/6819813/solution-for-store-update-insert-or-delete-statement-affected-an-unexpected-n

http://stackoverflow.com/questions/5820992/error-when-inserting-into-table-having-instead-of-trigger-from-entity-data-frame

http://www.britishdeveloper.co.uk/2010/06/entity-framework-optimisticconcurrencye.html

У меня был третий вариант. опишу поподробнее:
Сразу оговорюсь, что игра с SET NOCOUNT ON/OFF мне не помогла.
Также не помог фиктивный  селект в конце триггера.

Таблица заказов ORDER
на ней висит триггер на Insert.
Триггер в свою очередь вызывал хранимую процедуру (синхронизация с таблицей пользователей) в которой делалась выборка из заказа (ORDER) которая не возвращала записей.
Оказалось этот селект и мешал Entity Framework'у нормально работать.

Что сделал: я переделал логику так чтобы не было пустых селектов из исходной таблицы



среда, 14 мая 2014 г.

Outlook: Сбой при регистрации библиотеки макрокоманд VB

Окружение

Windows 8.1,
установил Outlook2013

Проблема

Outlook при запуске выдает сообщение:

Сбой при регистрации библиотеки макрокоманд VB. Установите ее заново или выполните команду Regsvr32.exe Vbscript.dll для регистрации

Что НЕ помогло

Несколько раз сносил/ставил/восстанавливал Outlook, менял версии 64 на 32-разрядные.
Все без толку.

Суть проблемы и Решение

Оказалось, проблема в том, что некоторые программы, в том числе Outlook не могут работать, когда папка профиля пользовтаеля названа по русски (если быть точнее - с использованием символов Unicode).

Соответственно, Windows называет так папку, если вы указали русское имя пользователя
В проводнике Windows Показывает эту папку как
C:\Пользователи\Ваня 

Но на самом деле папка называется так
C:\Users\Ваня

(имя "Ваня" взял для примера, у вас может быть "Олег" или "Маша")

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

Есть несколько путей решения

1. Полностью переустановить систему, и назвать нового пользователя английским именем.

2. Сменить имя папки профиля пользователя на английское

Пример для Windows 7 с использованием загрузочного диска
http://sos.mirtesen.ru/blog/43556428021/Izmenenie-papki-polzovatelya-v-Windows-7

Пример для Windows 8 с использованием другого пользователя с правами администратора
http://www.youtube.com/watch?v=jwl4YJlAx-A


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

PS: Никогда! Никогда! не называйте пользователя Windows русскими буквами!

Ссылки по теме

Обсуждение Outlook 2013 failed to start in Windows 8.1
http://answers.microsoft.com/en-us/office/forum/office_2013_release-outlook/outlook-2013-failed-to-start-in-windows-81/0c01712d-6f82-4e27-b331-61491730b215

Заметка в базе знаний Microsoft
Errors when you start Outlook, and your Windows user account contains Unicode characters
http://support.microsoft.com/kb/961100/en-us



среда, 30 апреля 2014 г.

Run Script On Multiple MS SQL DataBases

Problem

Run script on multiple MS SQL Server Databases (in My Case it is MS SQL Server 2008 databases)


Solution

I've write simple app to solve this problem.
Main idea: set the list of database connections and run script on each database from list

It's pretty simple, but very usefull for me.

Download

How to use

1. Fill database list
Fill the database list in file ConnectionStrings.txt
Format
host|dbname|user|password

One database info per line

2. Set the script
copy your script into file script.txt

3. Run Run.bat
That's all. All databases from ConnectionStrings.txt will be updated by script from script.txt


Feedback

Please, leave feedback in comments to this post

See also
Question on forums
http://www.dbforums.com/microsoft-sql-server/1621678-best-mssql-management-tools.html

discussions on stackoverflow
http://stackoverflow.com/questions/1461955/sql-server-execute-batch-t-sql-script-on-multiple-databases/27794906#27794906
http://stackoverflow.com/questions/3306218/run-script-on-multiple-dbssql-server

Накатить скрипт на несколько MS SQL баз

Задача

"Накатить" скрипт на несколько MS SQL баз (в моем случае MS SQL Server 2008)

Решение

Сделал простое приложение, которым и хочу здесь поделиться
Что делает приложение: накатывает скрипт на базы по списку

Скачать


Инструкция

1. Настроить список баз
задаете список баз в файле ConnectionStrings.txt
формат файла: список строк вида: 

host|dbname|user|password

по одной строке на базу

2. Указать скрипт
вносите SQL-скрипт в файл script.txt

3. Запустить Run.bat
Это все: скрипт из файла script.txt выполнится на всех базах из списка, который вы задали в файле ConnectionStrings.txt


Обратная связь

Пожелания/предложения оставляйте в комментариях к посту

См. также
Тема на форуме: обработка нескольких баз
http://www.dbforums.com/microsoft-sql-server/1621678-best-mssql-management-tools.html

обсуждение темы на stackoverflow
http://stackoverflow.com/questions/1461955/sql-server-execute-batch-t-sql-script-on-multiple-databases/27794906#27794906
http://stackoverflow.com/questions/3306218/run-script-on-multiple-dbssql-server

пятница, 14 марта 2014 г.

Битрикс 1С - не выгружаются нулевые остатки

Окружение

Битрикс 14 (14.0.14)
1С 8.2 (8.2.17.153) конфигурация Управление Торговлей для Украины 2.3 (2.3.18.1)

Проблема

В битрикс не выгружается информация о том что у товара нулевой остаток.
Т.е.е Если остаток больше нуля - битрикс его отображает после выгрузки.
Но если в 1С товара на остатках нет, то при выгрузке товара в битрикс информация об остатках не обновляется (остается тот остаток, который был до "нулевого").

Исследование

По этому вопросу наткнулся на ветку
https://dev.1c-bitrix.ru/community/forums/forum26/topic53668/
в ней и натолкнулся на идею.
На момент исследования решения не было

Решение

(подходит для тех, кто не боится поправить конфигурацию 1С)

В
Обработка.Обмен с сайтом.

Поправил функцию

ЗаполнитьСписокЗначенийПредложения

Там было такое условие

Если Остаток > 0 Тогда
  ДобавитьУзелCML(СписокЗначенийCML, "Количество", ФорматЗначенияДляCML(Остаток, ФорматКоличества));
КонецЕсли;

То есть при нулевом остатке в файл экспорта не попадала никакая информация
Я поправил его на такой вид (новый код выделил зеленым)

Если Остаток > 0 Тогда
  ДобавитьУзелCML(СписокЗначенийCML, "Количество", ФорматЗначенияДляCML(Остаток, ФорматКоличества));
иначе
  ДобавитьУзелCML(СписокЗначенийCML, "Количество", "0");
КонецЕсли;

суббота, 22 февраля 2014 г.

Ошибка: Error 1 Running transformation: Please overwrite the replacement token '$edmxInputFile$'

Ситуация 
среда: Visual Studio 2012
Добавил в проект файл связанный с Entity Framework, а именно EF 5.x DbContext Generator
Потом решил убрать его (перенести в другой проект). Удалил все вновь созданные файлы, почистил app.config

Проблема
Получил ошибку Error 1 Running transformation: Please overwrite the replacement token '$edmxInputFile$'

Решение
Перегрузить студию

пятница, 14 февраля 2014 г.

Сменить язык вывода ошибок .NET Framework (локализация .NET Framework)

Ситуация

отлаживаю ASM.NET MVC приложение. получаю сообщения об ошибках на русском. не могу по ним загуглить помощь.

Задача

Получать сообщения об ошибках на английском (комьюнити больше - легче искать подсказки в гугле и stackoverflow)

Предварительное решение

Решение не идеальное, но для конкретного случая мне подошло

перед место, где появляется ошибка вывожу
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");


этот совет нашел в этой заглохшей теме
http://www.sql.ru/forum/563711-2/kak-smetit-yazyk-freymvorka-net

Кто найдет решение лучше - поделитесь пож.



четверг, 6 февраля 2014 г.

Шаблоны сообщений в Outlook

В какой-то момент понял, что по работе пишу много однотипных сообщений в Outlook.
Задался вопросом поиска механизма шаблонов.
Помогла статья.
http://v-time.com.ua/ru/nash-blog/entry/sozdanie-shablonov-pisem-v-outlook-2010.html
сделал все по ней и заработало

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

Internet Explorer 11 зависает на Windows 8.1

Ситуация

Обновил Windows до версии 8.1. Соответственно получил Internet Explorer 11
После активной работы IE при запуске зависал.

Симпотмы 

Загружается IE, но в основном окне пусто. Заголовок вкладки пустой. Почти все пункты меню "Сервис" неактивны. IE "срубается" только через диспетчер задач.

Не помогала не перезагрузка компьютера ни переустановка Internet Explorer.

Что помогло в моем случае

Очень странное решение, но тем не менее, у меня сработало.
(в двух совах IE завис на включенной панели разработчика)

0. срубил все экземпляры IE через диспетчер задач

1. запустил IE без надстроек
iexplore.exe -extoff

2. Передернул видимость панели инструментов разработчика (несколько раз нажал F12 чтобы панель разработчика в конце концов оказалась невидимой)

3. Закрыл IE

4. Запустил IE в стандартном режиме

Что нашел по теме, но мне не помогло

(может в вашем случае поможет)

Советы по устранению ошибки в IE
http://answers.microsoft.com/en-us/ie/forum/ie11-iewindows8_1/internet-explorer-11-crash-on-run-after-81-install/67e84baf-98fe-43c9-9354-9a46091fcbb6
Тут в основном советовали переустановить драйвера видеокарты NVidia

update ie (обновление для IE)
Update for Internet Explorer 11 for Windows 8.1 for x64-based systems (KB2901549) - Русский
http://www.microsoft.com/ru-ru/download/details.aspx?id=40854
(Выберите нужный язык)
Это обновление у меня отказалось ставиться

сделать резет IE
http://www.techguylabs.com/episodes/1030/how-can-i-reset-internet-explorer-11
(до этого решения просто руки не дошли. могло бы и помочь)

Ссылки по теме

Параметры командной строки IE