<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>AXForum - Блоги - Kabardian</title>
		<link>//axforum.info/forums/blog.php?u=14258</link>
		<description>Microsoft Dynamics: Axapta, CRM, Navision. Форум, Вопросы и помощь специалистов.</description>
		<language>ru</language>
		<lastBuildDate>Fri, 24 Apr 2026 14:34:14 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>http://axforum.info//img.axforum.info/misc/rss.jpg</url>
			<title>AXForum - Блоги - Kabardian</title>
			<link>//axforum.info/forums/blog.php?u=14258</link>
		</image>
		<item>
			<title>X++ печать QR-кода в AX 2009 / 2012</title>
			<link>//axforum.info/forums/blog.php?b=8177</link>
			<pubDate>Fri, 29 May 2015 08:43:27 GMT</pubDate>
			<description><![CDATA[static void CreateQRCode(Args _args)
{    
    Microsoft.Dynamics.QRCode.Encoder   encoder;
    System.Drawing.Bitmap               bitmap;
    
    str url = "http://axforum.info/";
    str fileName = @"C:\Temp\QrCode.jpg";
    ;
    
    encoder = new Microsoft.Dynamics.QRCode.Encoder();
    
    bitmap = encoder.Encode(url);
    bitmap.Save(fileName, System.Drawing.Imaging.ImageFormat::get_Jpeg());
}]]></description>
			<content:encoded><![CDATA[<div><div class="xpp"><div class="smallfont xpp_title">X++:</div><pre class="alt2 xpp_code"><span style="color: blue">static</span> <span style="color: blue">void</span> CreateQRCode(Args _args)
{    
    Microsoft.Dynamics.QRCode.Encoder   encoder;
    System.Drawing.Bitmap               bitmap;
    
    <span style="color: blue">str</span> url = <span style="color: red">&quot;http://axforum.info/&quot;</span>;
    <span style="color: blue">str</span> fileName = @<span style="color: red">&quot;C:\Temp\QrCode.jpg&quot;</span>;
    ;
    
    encoder = <span style="color: blue">new</span> Microsoft.Dynamics.QRCode.Encoder();
    
    bitmap = encoder.Encode(url);
    bitmap.Save(fileName, System.Drawing.Imaging.ImageFormat::get_Jpeg());
}</pre></div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=8177</guid>
		</item>
		<item>
			<title>X++: Настройка журнала базы данных для таблицы</title>
			<link>//axforum.info/forums/blog.php?b=8163</link>
			<pubDate>Tue, 25 Nov 2014 12:56:07 GMT</pubDate>
			<description><![CDATA[//Настройка журнала базы данных для таблицы
static void DatabaseLogSetup(Args _args)
{
    TableName   tableName = 'CustTable'; //TODO: 1. Указать название таблицы

    void createDatabaseLog(TableName _tableName, DatabaseLogType _logType, boolean _infoLog = true)
    {
        DatabaseLog     databaseLog = null;
        ;

        select databaseLog
            where databaseLog.logTable == tableName2Id(_tableName)
               && databaseLog.logField == 0
               && databaseLog.logType == _logType;

        if(databaseLog.recId ==0)
        {
            databaseLog.logType = _logType;
            databaseLog.logTable = tableName2Id(_tableName);
            databaseLog.insert();
            if(_infoLog)
            {
                info(strFmt("%1 - %2", _tableName, _logType));
            }
        }
    }
    ;

    if(tableName2Id(tableName)!=0)
    {
        //TODO: 2. Закомментировать ненужные виды логирования
        createDatabaseLog(tableName, DatabaseLogType::Insert); //Вставка
        createDatabaseLog(tableName, DatabaseLogType::Update); //Обновление
        createDatabaseLog(tableName, DatabaseLogType::Delete); //Удаление 
        createDatabaseLog(tableName, DatabaseLogType::RenameKey); //Переименование первичного ключа

        info(int2str(tableName2Id(tableName)));

        SysFlushDatabaseLogSetup::main();
    }
    else
    {
        info(strFmt("Таблица %1 не существует!", tableName));
    }
}]]></description>
			<content:encoded><![CDATA[<div><div class="xpp"><div class="smallfont xpp_title">X++:</div><pre class="alt2 xpp_code"><span style="color: green">//Настройка журнала базы данных для таблицы
</span><span style="color: blue">static</span> <span style="color: blue">void</span> DatabaseLogSetup(Args _args)
{
    TableName   tableName = <span style="color: red">'CustTable'</span>; <span style="color: green">//TODO: 1. Указать название таблицы
</span>
    <span style="color: blue">void</span> createDatabaseLog(TableName _tableName, DatabaseLogType _logType, boolean _infoLog = <span style="color: blue">true</span>)
    {
        DatabaseLog     databaseLog = <span style="color: blue">null</span>;
        ;

        <span style="color: blue">select</span> databaseLog
            <span style="color: blue">where</span> databaseLog.logTable == tableName2Id(_tableName)
               &amp;&amp; databaseLog.logField == 0
               &amp;&amp; databaseLog.logType == _logType;

        <span style="color: blue">if</span>(databaseLog.recId ==0)
        {
            databaseLog.logType = _logType;
            databaseLog.logTable = tableName2Id(_tableName);
            databaseLog.insert();
            <span style="color: blue">if</span>(_infoLog)
            {
                info(strFmt(<span style="color: red">&quot;%1 - %2&quot;</span>, _tableName, _logType));
            }
        }
    }
    ;

    <span style="color: blue">if</span>(tableName2Id(tableName)!=0)
    {
        <span style="color: green">//TODO: 2. Закомментировать ненужные виды логирования
</span>        createDatabaseLog(tableName, DatabaseLogType::Insert); <span style="color: green">//Вставка
</span>        createDatabaseLog(tableName, DatabaseLogType::Update); <span style="color: green">//Обновление
</span>        createDatabaseLog(tableName, DatabaseLogType::Delete); <span style="color: green">//Удаление 
</span>        createDatabaseLog(tableName, DatabaseLogType::RenameKey); <span style="color: green">//Переименование первичного ключа
</span>
        info(int2str(tableName2Id(tableName)));

        SysFlushDatabaseLogSetup::main();
    }
    <span style="color: blue">else</span>
    {
        info(strFmt(<span style="color: red">&quot;Таблица %1 не существует!&quot;</span>, tableName));
    }
}</pre></div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=8163</guid>
		</item>
		<item>
			<title><![CDATA[AX 2012: добавление кнопок "Создать", "Удалить" на обычные формы]]></title>
			<link>//axforum.info/forums/blog.php?b=6406</link>
			<pubDate>Thu, 10 Apr 2014 05:32:11 GMT</pubDate>
			<description><![CDATA[Чтобы добавить в обычную форму кнопки "Создать", "Удалить" можно сделать так:
1. Создать из шаблона новую форму-донор (пустышка) из (я брал шаблона SimpleList)
2. Из узла формы-донора, созданной в п. 1 выделить узел Designs/Design/ActionPane и перетащить мышкой его в узел Designs/Design формы-назначения
3. Удалить форму из п. 1 за ненадобностью

Таким подходом можно оживить формы, импортированные из предыдущих версий системы (проверено на формах импортированных из Axapta 3.0, но должно также сработать на 4.0 и 2009).]]></description>
			<content:encoded><![CDATA[<div>Чтобы добавить в обычную форму кнопки &quot;Создать&quot;, &quot;Удалить&quot; можно сделать так:<ol style="list-style-type: decimal"><li>Создать из шаблона новую форму-донор (пустышка) из (я брал шаблона SimpleList)</li>
<li>Из узла формы-донора, созданной в п. 1 выделить узел Designs/Design/ActionPane и перетащить мышкой его в узел Designs/Design формы-назначения</li>
<li>Удалить форму из п. 1 за ненадобностью</li>
</ol>Таким подходом можно оживить формы, импортированные из предыдущих версий системы (проверено на формах импортированных из Axapta 3.0, но должно также сработать на 4.0 и 2009).</div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=6406</guid>
		</item>
		<item>
			<title>Мое решение задачи FizzBuzz</title>
			<link>//axforum.info/forums/blog.php?b=8085</link>
			<pubDate>Fri, 04 Apr 2014 05:40:27 GMT</pubDate>
			<description><![CDATA[Мое решение задачи FizzBuzz (http://habrahabr.ru/post/111843/):

---Цитата---
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
---Конец цитаты---
static void FizzBuzz(Args _args)
{
    int i;
    int multipleFizz = 3;
    int multipleBuzz = 5;
    
    str fizzStr = 'Fizz';
    str buzzStr = 'Buzz';
    str fizzBuzzStr = 'FizzBuzz';
    ;

    for(i=1;i<=100;i++)
    {
        if( (i mod multipleFizz != 0) && (i mod multipleBuzz != 0) )
            info(strFmt("%1", i));

        if( (i mod multipleFizz == 0) && (i mod multipleBuzz == 0) )
            info(fizzBuzzStr);

        if( (i mod multipleFizz == 0) && (i mod multipleBuzz != 0) )
            info(fizzStr);

        if( (i mod multipleFizz != 0) && (i mod multipleBuzz == 0) )
            info(buzzStr);
    }
}Результат работы джобика:

---Цитата---
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
---Конец цитаты---
]]></description>
			<content:encoded><![CDATA[<div>Мое решение <a href="http://habrahabr.ru/post/111843/" target="_blank">задачи FizzBuzz</a>:<br />
<div class="q">
	<div class="smallfont q_title">Цитата:</div>
	<div class="alt2 q_body">
		
			Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
		
	</div>
</div><div class="xpp"><div class="smallfont xpp_title">X++:</div><pre class="alt2 xpp_code"><span style="color: blue">static</span> <span style="color: blue">void</span> FizzBuzz(Args _args)
{
    <span style="color: blue">int</span> i;
    <span style="color: blue">int</span> multipleFizz = 3;
    <span style="color: blue">int</span> multipleBuzz = 5;
    
    <span style="color: blue">str</span> fizzStr = <span style="color: red">'Fizz'</span>;
    <span style="color: blue">str</span> buzzStr = <span style="color: red">'Buzz'</span>;
    <span style="color: blue">str</span> fizzBuzzStr = <span style="color: red">'FizzBuzz'</span>;
    ;

    <span style="color: blue">for</span>(i=1;i&lt;=100;i++)
    {
        <span style="color: blue">if</span>( (i <span style="color: blue">mod</span> multipleFizz != 0) &amp;&amp; (i <span style="color: blue">mod</span> multipleBuzz != 0) )
            info(strFmt(<span style="color: red">&quot;%1&quot;</span>, i));

        <span style="color: blue">if</span>( (i <span style="color: blue">mod</span> multipleFizz == 0) &amp;&amp; (i <span style="color: blue">mod</span> multipleBuzz == 0) )
            info(fizzBuzzStr);

        <span style="color: blue">if</span>( (i <span style="color: blue">mod</span> multipleFizz == 0) &amp;&amp; (i <span style="color: blue">mod</span> multipleBuzz != 0) )
            info(fizzStr);

        <span style="color: blue">if</span>( (i <span style="color: blue">mod</span> multipleFizz != 0) &amp;&amp; (i <span style="color: blue">mod</span> multipleBuzz == 0) )
            info(buzzStr);
    }
}</pre></div>Результат работы джобика:<br />
<div class="q">
	<div class="smallfont q_title">Цитата:</div>
	<div class="alt2 q_body">
		
			1<br />
2<br />
Fizz<br />
4<br />
Buzz<br />
Fizz<br />
7<br />
8<br />
Fizz<br />
Buzz<br />
11<br />
Fizz<br />
13<br />
14<br />
FizzBuzz<br />
16<br />
17<br />
Fizz<br />
19<br />
Buzz<br />
Fizz<br />
22<br />
23<br />
Fizz<br />
Buzz<br />
26<br />
Fizz<br />
28<br />
29<br />
FizzBuzz<br />
31<br />
32<br />
Fizz<br />
34<br />
Buzz<br />
Fizz<br />
37<br />
38<br />
Fizz<br />
Buzz<br />
41<br />
Fizz<br />
43<br />
44<br />
FizzBuzz<br />
46<br />
47<br />
Fizz<br />
49<br />
Buzz<br />
Fizz<br />
52<br />
53<br />
Fizz<br />
Buzz<br />
56<br />
Fizz<br />
58<br />
59<br />
FizzBuzz<br />
61<br />
62<br />
Fizz<br />
64<br />
Buzz<br />
Fizz<br />
67<br />
68<br />
Fizz<br />
Buzz<br />
71<br />
Fizz<br />
73<br />
74<br />
FizzBuzz<br />
76<br />
77<br />
Fizz<br />
79<br />
Buzz<br />
Fizz<br />
82<br />
83<br />
Fizz<br />
Buzz<br />
86<br />
Fizz<br />
88<br />
89<br />
FizzBuzz<br />
91<br />
92<br />
Fizz<br />
94<br />
Buzz<br />
Fizz<br />
97<br />
98<br />
Fizz<br />
Buzz
		
	</div>
</div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=8085</guid>
		</item>
		<item>
			<title>Как получить список таблиц с отключенным Optimistic Concurrency Control</title>
			<link>//axforum.info/forums/blog.php?b=399</link>
			<pubDate>Sat, 20 Apr 2013 04:56:56 GMT</pubDate>
			<description><![CDATA[источник http://fandyax.blogspot.ru/2012/07/how-to-get-occenabled-table-from-aot.html
----------------------------------------------------------------
static void THK_tableOccenabledFromAOT01(Args _args)
{
    #AOT
    #properties
    TreeNode        TreeNode = TreeNode::findNode(#TablesPath);
    str             tableName;
    str             temporaryProperty;
    sysdictTable    m_dictTable;
    int             i,records,m;
    dictionary      m_dictionary = new dictionary();
    #File
    #WinAPI
    #Avifiles
    CommaIo                 commaIO;
    SysOperationProgress    sysProgress;
    fileName                fileName;
    FileIOPermission        permission;
    int                     start;
;
    if(!Box::yesNo("Are your sure lookup Occenabled table infomation?",dialogButton::No,"Occenabled Table"))
        return;
    fileName = WinAPI::getFolderPath(#CSIDL_Personal) + "\\" + "A02AvgPrice.csv";// + date2str(systemdateget(),321,2,0,2,0,2) + ".CSV";
    permission  = new FileIOPermission(fileName,#io_write);
    permission.assert();
    commaIo = new CommaIo(fileName,#io_write);
    if(!commaIo)
    {
        warning("Please close your csv file and try again. Thanks!");
        return;
    }
    if(commaIo.status() == IO_Status::Ok)
        CommaIo.outFieldDelimiter(",");
    else
        return;
    start = timeNow();
    records = m_dictionary.tableCnt();
    sysProgress = SysOperationProgress::newGeneral(#AviUpdate,"Waitting ... write CSV file",records);
    CommaIo.writeExp(["Id","Table Id","Table Name","Table Label","Occenabled","utilElementType"]);
    for (i = 1; i < records; i++)
    {
        m_dictTable = new sysdictTable(m_dictionary.tableCnt2Id(i));
        sysProgress.incCount(1);
        sysProgress.setText(strfmt("completed %1 [%2]: %3",i/ records * 100, i, m_dictTable.name()));
        if(!m_dictTable.occEnabled())
        {
            m++;
            CommaIo.writeExp([m,m_dictTable.id(),m_dictTable.name(),m_dictTable.label(),m_dictTable.occEnabled(),m_dictTable.utilElementType()]);
        }
        sysProgress.update(true);
    }
    if(m)
    {
        if (winAPI::fileExists(fileName))
        {
            winAPI::shellExecute(fileName);
        }
    }
    CodeAccessPermission::revertAssert();
    info(strfmt("It takes time %1",global::time2StrHMS(timenow() - start)));
    info(strfmt("completed %1 records",m));
}]]></description>
			<content:encoded><![CDATA[<div>источник <a href="http://fandyax.blogspot.ru/2012/07/how-to-get-occenabled-table-from-aot.html" target="_blank">http://fandyax.blogspot.ru/2012/07/h...-from-aot.html</a><br />
----------------------------------------------------------------<br />
<div class="xpp"><div class="smallfont xpp_title">X++:</div><pre class="alt2 xpp_code"><span style="color: blue">static</span> <span style="color: blue">void</span> THK_tableOccenabledFromAOT01(Args _args)
{
    #AOT
    #properties
    TreeNode        TreeNode = TreeNode::findNode(#TablesPath);
    <span style="color: blue">str</span>             tableName;
    <span style="color: blue">str</span>             temporaryProperty;
    sysdictTable    m_dictTable;
    <span style="color: blue">int</span>             i,records,m;
    dictionary      m_dictionary = <span style="color: blue">new</span> dictionary();
    #File
    #WinAPI
    #Avifiles
    CommaIo                 commaIO;
    SysOperationProgress    sysProgress;
    fileName                fileName;
    FileIOPermission        permission;
    <span style="color: blue">int</span>                     start;
;
    <span style="color: blue">if</span>(!Box::yesNo(<span style="color: red">&quot;Are your sure lookup Occenabled table infomation?&quot;</span>,dialogButton::No,<span style="color: red">&quot;Occenabled Table&quot;</span>))
        <span style="color: blue">return</span>;
    fileName = WinAPI::getFolderPath(#CSIDL_Personal) + <span style="color: red">&quot;\\&quot;</span> + <span style="color: red">&quot;A02AvgPrice.csv&quot;</span>;<span style="color: green">// + date2str(systemdateget(),321,2,0,2,0,2) + &quot;.CSV&quot;;
</span>    permission  = <span style="color: blue">new</span> FileIOPermission(fileName,#io_write);
    permission.assert();
    commaIo = <span style="color: blue">new</span> CommaIo(fileName,#io_write);
    <span style="color: blue">if</span>(!commaIo)
    {
        warning(<span style="color: red">&quot;Please close your csv file and try again. Thanks!&quot;</span>);
        <span style="color: blue">return</span>;
    }
    <span style="color: blue">if</span>(commaIo.status() == IO_Status::Ok)
        CommaIo.outFieldDelimiter(<span style="color: red">&quot;,&quot;</span>);
    <span style="color: blue">else</span>
        <span style="color: blue">return</span>;
    start = timeNow();
    records = m_dictionary.tableCnt();
    sysProgress = SysOperationProgress::newGeneral(#AviUpdate,<span style="color: red">&quot;Waitting ... write CSV file&quot;</span>,records);
    CommaIo.writeExp([<span style="color: red">&quot;Id&quot;</span>,<span style="color: red">&quot;Table Id&quot;</span>,<span style="color: red">&quot;Table Name&quot;</span>,<span style="color: red">&quot;Table Label&quot;</span>,<span style="color: red">&quot;Occenabled&quot;</span>,<span style="color: red">&quot;utilElementType&quot;</span>]);
    <span style="color: blue">for</span> (i = 1; i &lt; records; i++)
    {
        m_dictTable = <span style="color: blue">new</span> sysdictTable(m_dictionary.tableCnt2Id(i));
        sysProgress.incCount(1);
        sysProgress.setText(strfmt(<span style="color: red">&quot;completed %1 [%2]: %3&quot;</span>,i/ records * 100, i, m_dictTable.name()));
        <span style="color: blue">if</span>(!m_dictTable.occEnabled())
        {
            m++;
            CommaIo.writeExp([m,m_dictTable.id(),m_dictTable.name(),m_dictTable.label(),m_dictTable.occEnabled(),m_dictTable.utilElementType()]);
        }
        sysProgress.update(<span style="color: blue">true</span>);
    }
    <span style="color: blue">if</span>(m)
    {
        <span style="color: blue">if</span> (winAPI::fileExists(fileName))
        {
            winAPI::shellExecute(fileName);
        }
    }
    CodeAccessPermission::revertAssert();
    info(strfmt(<span style="color: red">&quot;It takes time %1&quot;</span>,global::time2StrHMS(timenow() - start)));
    info(strfmt(<span style="color: red">&quot;completed %1 records&quot;</span>,m));
}</pre></div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=399</guid>
		</item>
		<item>
			<title>An illegal directory structure for Axapta has been detected</title>
			<link>//axforum.info/forums/blog.php?b=348</link>
			<pubDate>Fri, 31 Aug 2012 06:46:57 GMT</pubDate>
			<description>Пригодилась статья для решения проблемы с запуском клиента.
--------------------------------------------
When you try to log on to the Microsoft Dynamics AX 4.0 client, you receive the following error message:
An illegal directory structure for Axapta has been detected. The sub-directory C:\Program Files\Microsoft Dynamics AX\401\Client\\bin does not exist.

http://support.microsoft.com/kb/961581</description>
			<content:encoded><![CDATA[<div>Пригодилась статья для решения проблемы с запуском клиента.<br />
--------------------------------------------<br />
When you try to log on to the Microsoft Dynamics AX 4.0 client, you receive the following error message:<br />
An illegal directory structure for Axapta has been detected. The sub-directory C:\Program Files\Microsoft Dynamics AX\401\Client\\bin does not exist.<br />
<br />
<a href="http://support.microsoft.com/kb/961581" target="_blank">http://support.microsoft.com/kb/961581</a></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=348</guid>
		</item>
		<item>
			<title>Экспорт лицензии AX 4.0 и AX 2009 в файл</title>
			<link>//axforum.info/forums/blog.php?b=338</link>
			<pubDate>Mon, 28 May 2012 11:31:22 GMT</pubDate>
			<description><![CDATA[Для экспорта лицензии из какой-либо инсталляции AX 4.0 или AX 2009 в файл достаточно:
* разобраться со структурой файла лицензии
* экспортировать данные из системной таблицы SysConfig в текстовый файл с учетом структуры файла лицензии


После экспорта файл лицензии можно использовать по назначению :-).
-------------------------------------
Джоб, который экспортирует лицензию в текстовый файл (проверялся на AX 2009, но должен также работать на AX 4.0):
static void ASB_ExportLicenceFile(Args _args)
{
    SysConfig   sysConfig;
    AsciiIO file = new AsciiIO("c:\\license.txt", "W"); //TODO: указать путь
    ;

    file.read();

    file.write("LicenseVersion 2");
    file.write("");

    select sysConfig
    where sysConfig.configType == ConfigType::LicenseName;  //TODO: изменить значение для версий: AX4.0 - ConfigType::LicensName, AX 2009 - ConfigType::LicenseName
    file.write(strFmt("License #%1", sysConfig.value));

    file.write(" Properties");
    select sysConfig
    where sysConfig.configType == ConfigType::SerialNo;
    file.write(strFmt("  Serial #%1", sysConfig.value));
    file.write(" EndProperties");
    file.write("");
    file.write(" Codes");
    file.write("");

    while select sysConfig
    order by id
    where sysConfig.configType == ConfigType::AccessCodes &&
          sysConfig.value != ""
    {
        file.write(strFmt("  CodeLine #%1", sysConfig.id + 1)); //TODO: проверить зачем к номеру ID прибавляется единица
        file.write(strFmt("    Value #%1", sysConfig.value));
        file.write("  EndCodeLine");
        file.write("");
    }

    file.write(" EndCodes");
    file.write("");
    file.write("EndLicense");

    box::info("Конец!");
}]]></description>
			<content:encoded><![CDATA[<div>Для экспорта лицензии из какой-либо инсталляции AX 4.0 или AX 2009 в файл достаточно:<ul><li>разобраться со структурой файла лицензии</li>
<li>экспортировать данные из системной таблицы SysConfig в текстовый файл с учетом структуры файла лицензии</li>
</ul><br />
После экспорта файл лицензии можно использовать по назначению :-).<br />
-------------------------------------<br />
Джоб, который экспортирует лицензию в текстовый файл (проверялся на AX 2009, но должен также работать на AX 4.0):<br />
<div class="xpp"><div class="smallfont xpp_title">X++:</div><pre class="alt2 xpp_code"><span style="color: blue">static</span> <span style="color: blue">void</span> ASB_ExportLicenceFile(Args _args)
{
    SysConfig   sysConfig;
    AsciiIO file = <span style="color: blue">new</span> AsciiIO(<span style="color: red">&quot;c:\\license.txt&quot;</span>, <span style="color: red">&quot;W&quot;</span>); <span style="color: green">//TODO: указать путь
</span>    ;

    file.read();

    file.write(<span style="color: red">&quot;LicenseVersion 2&quot;</span>);
    file.write(<span style="color: red">&quot;&quot;</span>);

    <span style="color: blue">select</span> sysConfig
    <span style="color: blue">where</span> sysConfig.configType == ConfigType::LicenseName;  <span style="color: green">//TODO: изменить значение для версий: AX4.0 - ConfigType::LicensName, AX 2009 - ConfigType::LicenseName
</span>    file.write(strFmt(<span style="color: red">&quot;License #%1&quot;</span>, sysConfig.value));

    file.write(<span style="color: red">&quot; Properties&quot;</span>);
    <span style="color: blue">select</span> sysConfig
    <span style="color: blue">where</span> sysConfig.configType == ConfigType::SerialNo;
    file.write(strFmt(<span style="color: red">&quot;  Serial #%1&quot;</span>, sysConfig.value));
    file.write(<span style="color: red">&quot; EndProperties&quot;</span>);
    file.write(<span style="color: red">&quot;&quot;</span>);
    file.write(<span style="color: red">&quot; Codes&quot;</span>);
    file.write(<span style="color: red">&quot;&quot;</span>);

    <span style="color: blue">while</span> <span style="color: blue">select</span> sysConfig
    <span style="color: blue">order</span> <span style="color: blue">by</span> id
    <span style="color: blue">where</span> sysConfig.configType == ConfigType::AccessCodes &amp;&amp;
          sysConfig.value != <span style="color: red">&quot;&quot;</span>
    {
        file.write(strFmt(<span style="color: red">&quot;  CodeLine #%1&quot;</span>, sysConfig.id + 1)); <span style="color: green">//TODO: проверить зачем к номеру ID прибавляется единица
</span>        file.write(strFmt(<span style="color: red">&quot;    Value #%1&quot;</span>, sysConfig.value));
        file.write(<span style="color: red">&quot;  EndCodeLine&quot;</span>);
        file.write(<span style="color: red">&quot;&quot;</span>);
    }

    file.write(<span style="color: red">&quot; EndCodes&quot;</span>);
    file.write(<span style="color: red">&quot;&quot;</span>);
    file.write(<span style="color: red">&quot;EndLicense&quot;</span>);

    box::info(<span style="color: red">&quot;Конец!&quot;</span>);
}</pre></div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=338</guid>
		</item>
		<item>
			<title>Перебор содержимого папки в X++</title>
			<link>//axforum.info/forums/blog.php?b=321</link>
			<pubDate>Tue, 28 Feb 2012 08:08:55 GMT</pubDate>
			<description><![CDATA[Нашел замечательную статью (http://erpkb.com/Axapta/Klass/WinApi), где описано как с помощью WinAPI из X++ перебрать содержимое папки.

static void FindFile(Args _args)
{
    #File
    FileName fullFileName(FileName _path, FileName _fileName)
    {
        FileName    pathName;
        FileName    fileName;
        FileName    fileExtension;
        ;
        [pathName,fileName,fileExtension] = fileNameSplit(_fileName);
        return _path + '\\' + fileName + fileExtension;
    }

    void findFiles(FileName _path, 
                  FileName _fileName, 
                  boolean _inclSubDir = true, 
                  FileName _prefix = fullFileName(_path,_fileName))
    {
        FileName    fileName;
        int         hdl;
        ;
        setprefix(_prefix);
        if (WinAPI::folderExists(_path))
        {
            [hdl,fileName] = WinApi::findFirstFile(fullFileName(_path,_fileName));
            while (fileName)
            {
                if (WinAPI::fileExists(fullFileName(_path,fileName)))
                    info(fileName);
                fileName = WinApi::findNextFile(hdl);
            }
            WinApi::findClose(hdl);
            if (_inclSubDir)
            {
                [hdl, fileName] = WinAPI::findFirstFile(_path+'\\'+#AllFiles);
                while (fileName)
                {
                    if (strlwr(fileName) != strlwr(_fileName) &&
                        strlwr(fileName) != strlwr('.')       &&
                        strlwr(fileName) != strlwr('..')      &&
                        WinAPI::pathExists(fullFileName(_path,fileName))
                    )
                        findFiles(fullFileName(_path,fileName), _fileName, _inclSubDir, fileName);
                    fileName = WinApi::findNextFile(hdl);
                }
                WinApi::findClose(hdl);
            }
        }
    }
    findFiles('c:\\Program Files','*.doc');
}]]></description>
			<content:encoded><![CDATA[<div><a href="http://erpkb.com/Axapta/Klass/WinApi" target="_blank">Нашел замечательную статью</a>, где описано как с помощью WinAPI из X++ перебрать содержимое папки.<br />
<br />
<div class="xpp"><div class="smallfont xpp_title">X++:</div><pre class="alt2 xpp_code"><span style="color: blue">static</span> <span style="color: blue">void</span> FindFile(Args _args)
{
    #File
    FileName fullFileName(FileName _path, FileName _fileName)
    {
        FileName    pathName;
        FileName    fileName;
        FileName    fileExtension;
        ;
        [pathName,fileName,fileExtension] = fileNameSplit(_fileName);
        <span style="color: blue">return</span> _path + <span style="color: red">'\\'</span> + fileName + fileExtension;
    }

    <span style="color: blue">void</span> findFiles(FileName _path, 
                  FileName _fileName, 
                  boolean _inclSubDir = <span style="color: blue">true</span>, 
                  FileName _prefix = fullFileName(_path,_fileName))
    {
        FileName    fileName;
        <span style="color: blue">int</span>         hdl;
        ;
        setprefix(_prefix);
        <span style="color: blue">if</span> (WinAPI::folderExists(_path))
        {
            [hdl,fileName] = WinApi::findFirstFile(fullFileName(_path,_fileName));
            <span style="color: blue">while</span> (fileName)
            {
                <span style="color: blue">if</span> (WinAPI::fileExists(fullFileName(_path,fileName)))
                    info(fileName);
                fileName = WinApi::findNextFile(hdl);
            }
            WinApi::findClose(hdl);
            <span style="color: blue">if</span> (_inclSubDir)
            {
                [hdl, fileName] = WinAPI::findFirstFile(_path+<span style="color: red">'\\'</span>+#AllFiles);
                <span style="color: blue">while</span> (fileName)
                {
                    <span style="color: blue">if</span> (strlwr(fileName) != strlwr(_fileName) &amp;&amp;
                        strlwr(fileName) != strlwr(<span style="color: red">'.'</span>)       &amp;&amp;
                        strlwr(fileName) != strlwr(<span style="color: red">'..'</span>)      &amp;&amp;
                        WinAPI::pathExists(fullFileName(_path,fileName))
                    )
                        findFiles(fullFileName(_path,fileName), _fileName, _inclSubDir, fileName);
                    fileName = WinApi::findNextFile(hdl);
                }
                WinApi::findClose(hdl);
            }
        }
    }
    findFiles(<span style="color: red">'c:\\Program Files'</span>,<span style="color: red">'*.doc'</span>);
}</pre></div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=321</guid>
		</item>
		<item>
			<title>Фильтр в sp_who2 (SQL)</title>
			<link>//axforum.info/forums/blog.php?b=302</link>
			<pubDate>Mon, 26 Dec 2011 17:38:23 GMT</pubDate>
			<description><![CDATA[
PHP:
---------
DECLARE @Table TABLE(
        SPID INT,
        Status VARCHAR(MAX),
        LOGIN VARCHAR(MAX),
        HostName VARCHAR(MAX),
        BlkBy VARCHAR(MAX),
        DBName VARCHAR(MAX),
        Command VARCHAR(MAX),
        CPUTime INT,
        DiskIO INT,
        LastBatch VARCHAR(MAX),
        ProramName VARCHAR(MAX),
        SPID_1 INT,
        REQUESTID INT
)

INSERT INTO @Table EXEC sp_who2

SELECT  *
FROM    @Table
WHERE DBName <> 'master' AND HostName='AOS2' /*фильтры-сортировку указывать здесь и ниже*/
ORDER BY LastBatch
---------
]]></description>
			<content:encoded><![CDATA[<div><div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">PHP код:</div>
	<div class="alt2" dir="ltr" style="
		margin: 0px;
		padding: 6px;
		border: 1px inset;
		width: 640px;
		height: 370px;
		text-align: left;
		overflow: auto">
		<code style="white-space:nowrap">
			<!-- php buffer start --><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">DECLARE&nbsp;@</span><span style="color: #0000BB">Table&nbsp;TABLE</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">SPID&nbsp;INT</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Status&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">LOGIN&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">HostName&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">BlkBy&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">DBName&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Command&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">CPUTime&nbsp;INT</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">DiskIO&nbsp;INT</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">LastBatch&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ProramName&nbsp;VARCHAR</span><span style="color: #007700">(</span><span style="color: #0000BB">MAX</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">SPID_1&nbsp;INT</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">REQUESTID&nbsp;INT<br /></span><span style="color: #007700">)<br /><br /></span><span style="color: #0000BB">INSERT&nbsp;INTO&nbsp;</span><span style="color: #007700">@</span><span style="color: #0000BB">Table&nbsp;EXEC&nbsp;sp_who2<br /><br />SELECT&nbsp;&nbsp;</span><span style="color: #007700">*<br /></span><span style="color: #0000BB">FROM&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">@</span><span style="color: #0000BB">Table<br />WHERE&nbsp;DBName&nbsp;</span><span style="color: #007700">&lt;&gt;&nbsp;</span><span style="color: #DD0000">'master'&nbsp;</span><span style="color: #007700">AND&nbsp;</span><span style="color: #0000BB">HostName</span><span style="color: #007700">=</span><span style="color: #DD0000">'AOS2'&nbsp;</span><span style="color: #FF8000">/*фильтры-сортировку&nbsp;указывать&nbsp;здесь&nbsp;и&nbsp;ниже*/<br /></span><span style="color: #0000BB">ORDER&nbsp;BY&nbsp;LastBatch&nbsp;<br /></span>
</span>
</code><!-- php buffer end -->
		</code>
	</div>
</div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=302</guid>
		</item>
		<item>
			<title>Очистка кэша SQL сервера</title>
			<link>//axforum.info/forums/blog.php?b=301</link>
			<pubDate>Mon, 26 Dec 2011 17:18:03 GMT</pubDate>
			<description>
PHP:
---------
CHECKPOINT 
DBCC DROPCLEANBUFFERS 
DBCC FREEPROCCACHE
---------
</description>
			<content:encoded><![CDATA[<div><div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">PHP код:</div>
	<div class="alt2" dir="ltr" style="
		margin: 0px;
		padding: 6px;
		border: 1px inset;
		width: 640px;
		height: 66px;
		text-align: left;
		overflow: auto">
		<code style="white-space:nowrap">
			<!-- php buffer start --><code><span style="color: #000000">
<span style="color: #0000BB">CHECKPOINT&nbsp;<br />DBCC&nbsp;DROPCLEANBUFFERS&nbsp;<br />DBCC&nbsp;FREEPROCCACHE&nbsp;<br /></span>
</span>
</code><!-- php buffer end -->
		</code>
	</div>
</div></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=301</guid>
		</item>
		<item>
			<title>Количество физических процессоров на сервере SQL</title>
			<link>//axforum.info/forums/blog.php?b=300</link>
			<pubDate>Mon, 26 Dec 2011 17:15:37 GMT</pubDate>
			<description>Количество физических процессоров на сервере SQL можно посмотреть так:

PHP:
---------
SELECT cpu_count/hyperthread_ratio AS sockets
FROM sys.dm_os_sys_info
---------
Взято отсюда:
http://sqlblog.com/blogs/kalen_delaney/archive/2007/12/08/hyperthreaded-or-not.aspx</description>
			<content:encoded><![CDATA[<div>Количество физических процессоров на сервере SQL можно посмотреть так:<br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">PHP код:</div>
	<div class="alt2" dir="ltr" style="
		margin: 0px;
		padding: 6px;
		border: 1px inset;
		width: 640px;
		height: 50px;
		text-align: left;
		overflow: auto">
		<code style="white-space:nowrap">
			<!-- php buffer start --><code><span style="color: #000000">
<span style="color: #0000BB">SELECT&nbsp;cpu_count</span><span style="color: #007700">/</span><span style="color: #0000BB">hyperthread_ratio&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">sockets<br />FROM&nbsp;sys</span><span style="color: #007700">.</span><span style="color: #0000BB">dm_os_sys_info&nbsp;<br /></span>
</span>
</code><!-- php buffer end -->
		</code>
	</div>
</div>Взято отсюда:<br />
<a href="http://sqlblog.com/blogs/kalen_delaney/archive/2007/12/08/hyperthreaded-or-not.aspx" target="_blank">http://sqlblog.com/blogs/kalen_delan...ed-or-not.aspx</a></div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=300</guid>
		</item>
		<item>
			<title>Особенности работы Application Hierarchy Tree</title>
			<link>//axforum.info/forums/blog.php?b=69</link>
			<pubDate>Sun, 17 Jan 2010 20:49:22 GMT</pubDate>
			<description><![CDATA[Application Hierarchy Tree показывает ирерархию объектов по выбранному классу или расширенному типу данных (EDT).

_Особенности работы:_
+ показывает иерархию вверх и вниз для выбранного объекта;
– не показывает тех, кто находится на одном уровне с выбранным объектом.

Например, иерархия EDT AmountCur выглядит по-разному, в зависимости от того откуда вызван инструмент Application Hierarchy Tree:
* cо стороны EDT-предка:
Изображение: http://axforum.info/forums/blog_attachment.php?attachmentid=33&d=1263760037 
* со стороны EDT AmountCur:
Изображение: http://axforum.info/forums/blog_attachment.php?attachmentid=34&d=1263760037 


Поэтому, чтобы увидеть всю иерархию типов, нужно дважды запускать Application Hierarchy Tree:
* первый раз, чтобы найти предка;
* второй раз со стороны предка, чтобы увидеть всю иерархию.

]]></description>
			<content:encoded><![CDATA[<div><i>Application Hierarchy Tree</i> показывает ирерархию объектов по выбранному классу или расширенному типу данных (EDT).<br />
<br />
<u>Особенности работы:</u><br />
+ показывает иерархию вверх и вниз для выбранного объекта;<br />
<font color="Red">– не показывает тех, кто находится на одном уровне с выбранным объектом.</font><br />
<br />
Например, иерархия EDT AmountCur выглядит по-разному, в зависимости от того откуда вызван инструмент <i>Application Hierarchy Tree</i>:<ul><li>cо стороны EDT-предка:<br />
<img src="http://axforum.info/forums/blog_attachment.php?attachmentid=33&amp;d=1263760037" border="0" alt="" /></li>
<li>со стороны EDT AmountCur:<br />
<img src="http://axforum.info/forums/blog_attachment.php?attachmentid=34&amp;d=1263760037" border="0" alt="" /></li>
</ul><br />
Поэтому, чтобы увидеть всю иерархию типов, нужно дважды запускать <i>Application Hierarchy Tree</i>:<ul><li>первый раз, чтобы найти предка;</li>
<li>второй раз со стороны предка, чтобы увидеть всю иерархию.</li>
</ul></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="//axforum.info/forums/blog_attachment.php?attachmentid=33&amp;d=1263760037" target="attachment" rel="Lightbox" id="attachment33"><img class="thumbnail" src="//axforum.info/forums/blog_attachment.php?attachmentid=33&amp;stc=1&amp;thumb=1&amp;d=1263760037" border="0" alt="Нажмите на изображение для увеличения
Название: Hierarchy for EDT Amount.png
Просмотров: 608
Размер:	10.1 Кб
ID:	33" /></a>
	&nbsp;
	

	<a href="//axforum.info/forums/blog_attachment.php?attachmentid=34&amp;d=1263760037" target="attachment" rel="Lightbox" id="attachment34"><img class="thumbnail" src="//axforum.info/forums/blog_attachment.php?attachmentid=34&amp;stc=1&amp;thumb=1&amp;d=1263760037" border="0" alt="Нажмите на изображение для увеличения
Название: Hierarchy for EDT AmountCur.png
Просмотров: 423
Размер:	3.8 Кб
ID:	34" /></a>
	&nbsp;
	
		<br /><br />
	

				</div>
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=69</guid>
		</item>
		<item>
			<title>Номенклатура-услуга</title>
			<link>//axforum.info/forums/blog.php?b=64</link>
			<pubDate>Sat, 26 Dec 2009 06:58:21 GMT</pubDate>
			<description>
---Цитата (сообщение от Pavel)---
Позволю себе изменить порядок вопросов (и ответов).



Прежде всего потому что услуги точно также как товары и изделия могут составлять суть операций с поставщиками и покупателями в модулях Заказы/Закупки.

Пример - Компания продает услуги (или и товары и услуги). 
- в модуль покупатели заводим контрагентов
- в модуле склад заводим номенклатурные группы (виды услуг) и карточки услуг для отражения аналитики операций с контрагентами
- в модуле Заказы заводим по договорам или фактам сделок с покупателями карточки заказов
- в строках Заказов указываем суть сделок (услуги, стоимость, количество в соответствующих единицах измерения).

Далее, в обработке заказа есть определенная специфика по сравнению с продажей товаров:
1) проводка Delivery Note (в терминах аксапты – сборочной накладной) отражает факт оказания/совершения услуги
2) проводка Invoice (в терминах аксапты – накладной) отражает факт возникновения дебиторской задолжности
3) расход услуги со склада вещь виртуальная, т.к. услуги хоть и продаются аналогично товарам, но в отличие от них не хранятся, поэтому смысл складкой операции расхода в этом случае состоит в фиксации исторического факта «расхода услуги»
4) система при продаже товаров автоматически делает проводку по списанию себестоимости. Списание себестоимости услуг выполняется только при включении параметра, т.к. не вся функциональность складского модуля по формированию себестоимости в партиях расхода применима к услугам (например, стандартную/плановую можно использовать, а ФИФО/ЛИФО - бессмысленно).



Не нужно искать сложное в простом. Услуга - это услуга, товар – это товар, спецификация – это такая единица учета, которая может состоять из других товаров, услуг и спецификаций, содержащихся в номенклатурном справочнике (кроме себя самой и прочих случаев рекурсивных вложений в спецификациях).

Все Items номенклатурного справочника делятся на товары/услуги/спецификации. Хотя, карточки перечисленных видов номенклатуры заводятся и хранятся в одном справочнике, но функциональность системы обрабатывает их по-разному.



Зачем вообще закрывают склад? Полагаю, чтобы ответить на принципиальный в учете вопрос: «Какова стоимость запасов ТМЦ?» Услуги с одной стороны не являются ТМЦ, но с другой в системе могут входить в описание спецификаций, которые являются ТМЦ.
Закрытие склада - это процедура калькуляции себестоимости, а как писал выше, в ряде случаев в системе имеет смысл вести учет себестоимости проданных услуг по методу стандартной себестоимости.
---Конец цитаты---
Не работал с услугами, надо попробовать.</description>
			<content:encoded><![CDATA[<div><div class="q">
	<div class="smallfont q_title">Цитата:</div>
	<div class="alt2 q_body">
		
			Сообщение от <strong>Pavel</strong>
			<a href="/forums/showthread.php?p=26763#post26763" rel="nofollow"><img class="inlineimg" src="//img.axforum.info/buttons/viewpost.gif" border="0" alt="Посмотреть сообщение" /></a>
			<div style="font-style:italic">Позволю себе изменить порядок вопросов (и ответов).<br />
<br />
<br />
<br />
Прежде всего потому что услуги точно также как товары и изделия могут составлять суть операций с поставщиками и покупателями в модулях Заказы/Закупки.<br />
<br />
Пример - Компания продает услуги (или и товары и услуги). <br />
- в модуль покупатели заводим контрагентов<br />
- в модуле склад заводим номенклатурные группы (виды услуг) и карточки услуг для отражения аналитики операций с контрагентами<br />
- в модуле Заказы заводим по договорам или фактам сделок с покупателями карточки заказов<br />
- в строках Заказов указываем суть сделок (услуги, стоимость, количество в соответствующих единицах измерения).<br />
<br />
Далее, в обработке заказа есть определенная специфика по сравнению с продажей товаров:<br />
1) проводка Delivery Note (в терминах аксапты – сборочной накладной) отражает факт оказания/совершения услуги<br />
2) проводка Invoice (в терминах аксапты – накладной) отражает факт возникновения дебиторской задолжности<br />
3) расход услуги со склада вещь виртуальная, т.к. услуги хоть и продаются аналогично товарам, но в отличие от них не хранятся, поэтому смысл складкой операции расхода в этом случае состоит в фиксации исторического факта «расхода услуги»<br />
4) система при продаже товаров автоматически делает проводку по списанию себестоимости. Списание себестоимости услуг выполняется только при включении параметра, т.к. не вся функциональность складского модуля по формированию себестоимости в партиях расхода применима к услугам (например, стандартную/плановую можно использовать, а ФИФО/ЛИФО - бессмысленно).<br />
<br />
<br />
<br />
Не нужно искать сложное в простом. Услуга - это услуга, товар – это товар, спецификация – это такая единица учета, которая может состоять из других товаров, услуг и спецификаций, содержащихся в номенклатурном справочнике (кроме себя самой и прочих случаев рекурсивных вложений в спецификациях).<br />
<br />
Все Items номенклатурного справочника делятся на товары/услуги/спецификации. Хотя, карточки перечисленных видов номенклатуры заводятся и хранятся в одном справочнике, но функциональность системы обрабатывает их по-разному.<br />
<br />
<br />
<br />
Зачем вообще закрывают склад? Полагаю, чтобы ответить на принципиальный в учете вопрос: «Какова стоимость запасов ТМЦ?» Услуги с одной стороны не являются ТМЦ, но с другой в системе могут входить в описание спецификаций, которые являются ТМЦ.<br />
Закрытие склада - это процедура калькуляции себестоимости, а как писал выше, в ряде случаев в системе имеет смысл вести учет себестоимости проданных услуг по методу стандартной себестоимости.</div>
		
	</div>
</div>Не работал с услугами, надо попробовать.</div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=64</guid>
		</item>
		<item>
			<title>Длина ключа в SQL и производительность</title>
			<link>//axforum.info/forums/blog.php?b=63</link>
			<pubDate>Fri, 25 Dec 2009 20:51:00 GMT</pubDate>
			<description>
---Цитата (сообщение от glibs)---
Код закупки входит в состав ключа или составного ключа в большом количестве таблиц, в частности: строки закупок, накладные поставщиков и строки накладных поставщиков, связь закупок и накладных, параметрические таблицы по обработке закупок. используя длинный ключ вы сознательно подсаживаете себе производительность на операциях выборки данных. Не говоря уже о том, что нерационально используете дисковое пространство. Если закупок у вас будет много или строк в них будет много, то на ряде операций время отклика у вас будет в разы больше чем могло бы быть, если бы коды были оптимальными.
---Конец цитаты---
Не уверен, что:
1. сильно пострадает дисковое пространство;
2. время отклика в ряде операций упадет в разы.

На досуге обязательно проверю.</description>
			<content:encoded><![CDATA[<div><div class="q">
	<div class="smallfont q_title">Цитата:</div>
	<div class="alt2 q_body">
		
			Сообщение от <strong>glibs</strong>
			<a href="/forums/showthread.php?p=216518#post216518" rel="nofollow"><img class="inlineimg" src="//img.axforum.info/buttons/viewpost.gif" border="0" alt="Посмотреть сообщение" /></a>
			<div style="font-style:italic">Код закупки входит в состав ключа или составного ключа в большом количестве таблиц, в частности: строки закупок, накладные поставщиков и строки накладных поставщиков, связь закупок и накладных, параметрические таблицы по обработке закупок. используя длинный ключ вы сознательно подсаживаете себе производительность на операциях выборки данных. Не говоря уже о том, что нерационально используете дисковое пространство. Если закупок у вас будет много или строк в них будет много, то на ряде операций время отклика у вас будет в разы больше чем могло бы быть, если бы коды были оптимальными.</div>
		
	</div>
</div>Не уверен, что:<ol style="list-style-type: decimal"><li>сильно пострадает дисковое пространство;</li>
<li>время отклика в ряде операций упадет в разы.</li>
</ol>На досуге обязательно проверю.</div>

]]></content:encoded>
			<dc:creator>Kabardian</dc:creator>
			<guid isPermaLink="true">//axforum.info/forums/blog.php?b=63</guid>
		</item>
	</channel>
</rss>
