<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>5 строк кода &#187; архитектура</title>
	<atom:link href="http://5codelines.net/category/arxitektura/feed/" rel="self" type="application/rss+xml" />
	<link>http://5codelines.net</link>
	<description>Как писать комерческие приложения на MS Access</description>
	<lastBuildDate>Sat, 28 Jan 2012 21:20:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Недостатки DoCmd.GoToRecord и достоинства CodeContextObject</title>
		<link>http://5codelines.net/gotolastrecord/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gotolastrecord</link>
		<comments>http://5codelines.net/gotolastrecord/#comments</comments>
		<pubDate>Wed, 27 May 2009 13:35:37 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>
		<category><![CDATA[решения]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=149</guid>
		<description><![CDATA[Пара камней в огород DoCmd Как-то мне понадобилось перейти к последней записи в подчиненной форме. Перейти к последней записи можно разными способами, простейший &#8212; это вот эта команда: DoCmd.GoToRecord , , acLast. Вот с подчиненненными формами есть нюанс &#8212; нужно вызывать ее в обработчике события или методе подчиненной формы. В моем случае события не подходили, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Пара камней в огород DoCmd</strong><br />
Как-то мне понадобилось перейти к последней записи в подчиненной форме. Перейти к последней записи можно разными способами, простейший &#8212; это вот эта команда: <code>DoCmd.GoToRecord , , acLast</code>. Вот с подчиненненными формами есть нюанс &#8212; нужно вызывать ее в обработчике события или методе подчиненной формы. В моем случае события не подходили, метод было реализовывать влом и очень хотелось реализовать это на главной форме.</p>
<p>Поэтому пришлось написать свою функцию. Благодаря тому, что функция принимает ссылку на форму, а не имя, то можно ее использовать для любой формы, подчиненной, созданной при помощи DoCmd.OpenForm или оператора New.</p>
<pre name="code" class="vb">
Public Sub CM_FormGoToLastRecord(Optional ByRef frm As Form = Nothing)
' перейти на последнюю запись
' frm можно не передавать, в этом случае она будет получена при помощи CodeContextObject
On Error GoTo Err_

    If frm Is Nothing Then
        Set frm = CodeContextObject
    End If

    If frm Is Nothing Then Exit Sub

    Dim rst As DAO.Recordset

    Set rst = frm.RecordsetClone
    If Not rst.EOF Then rst.MoveLast
    frm.Bookmark = rst.Bookmark

Exit_:
    Exit Sub
Err_:
    mc_Log.MC_LogErr ("CM_FormGoToLastRecord()")
    Resume Exit_:
End Sub
</pre>
<p><code>mc_Log.MC_LogErr ("FormGoToLastRecord()") </code>- фукнция, которая логирует ошибку в текстовом файле. О ведении лога я как-нибудь расскажу попозже.</p>
<p><strong>CodeContextObject</strong><br />
В процедуре <code>CM_FormGoToLastRecord()</code> используется такая штука, как <code>CodeContextObject</code>, которое в справке называют свойством. Это свойство позволяет получить ссылку на объект, в рамках которого выполняется данный код. Если вызвать процедуру <code>CM_FormGoToLastRecord()</code> в событии подчиненной формы, то <code>CodeContextObject</code> выдаст ссылку на подчиненную форму. Этот же способ использует DoCmd.GoToRecord, когда не указывается имя объекта.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/gotolastrecord/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Стоит ли использовать временные таблицы для отчетов</title>
		<link>http://5codelines.net/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov</link>
		<comments>http://5codelines.net/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 15:14:38 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>
		<category><![CDATA[сопровождение]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=134</guid>
		<description><![CDATA[Стоит ли использовать временные таблицы для отчетов]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/report.PNG" alt="Отчет" /></p>
<p>Сегодня <a href="http://forum.vingrad.ru/forum/topic-251975/anchor-entry1819420/0.html#">прочитал спорное мнение на форуме</a>, что использовать временные таблицы при формировании отчетов это кривое решение. С этим мнением я в корне не согласен.</p>
<p>Мои доводы ЗА:<br />
1. <em>Модульность.</em> Временные таблицы позволяют разделить между собой отчет и код расчета данных. В последующем это повышает сопровождаемость (см. п.3).</p>
<p>2. <em>Удобство отладки.</em> Если отчет перестал работать или работает как-то не правильно, то гораздо легче проверить расчет данных для него.</p>
<p>3. <em>Сопровождаемость.</em> В любой момент может возникнуть необходимость переделать либо расчет данных, либо переделать отчет, например, печатать его в word. Это все можно модифицировать по отдельности. Также пользователь может захотеть хранить рассчитанные данные, этого тоже будет просто добиться.</p>
<p>4. <em>Документирование</em>. Если разработчик укажет комментарии к полям для временной таблицы, то это можно считать документацией.</p>
<p>Мои доводы ПРОТИВ:<br />
1. <em>Увеличивается время разработки</em>. Это происходит в том случае, если для отчета можно использовать простой запрос в качестве источника данных. Если же расчет данных не вписывается в простейшие запросы, то будет проще и надежней реализовать расчет отчета в коде.</p>
<p>Больше против я не вспомнил. Выбор очевиден <img src='http://5codelines.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Увлекаться данным способом естественно не стоит, каждой проблеме лучше подбирать свое решение. Этот метод подходит для отчетов со &#171;сложными&#187; расчетами данных.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
<p>Подписаться на: <a href="http://feeds2.feedburner.com/5codelines">RSS</a> или <a href="http://5codelines.net/e-mail-rassylka/">e-mail рассылку</a> или <a href="http://www.livejournal.com/friends/add.bml?user=5codelines">добавить в ЖЖ друзья</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/stoit-li-ispolzovat-vremennye-tablicy-dlya-otchetov/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3 вида меню в MS Access</title>
		<link>http://5codelines.net/3menu/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=3menu</link>
		<comments>http://5codelines.net/3menu/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 11:41:30 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=103</guid>
		<description><![CDATA[3 вида меню в MS Access]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/menu.png" alt="5codelines.net" /></p>
<p>То, что первым видит пользователь в программе &#8212; это меню. От него зависит (и не только) на сколько удобно будет работать с программой. С течением времени определенные подходы, которые я видел, классифицировались в следующие виды меню:<br />
- формы с кнопками,<br />
- кнопочная форма (на основе мастера),<br />
- строка меню.</p>
<p>Я заметил, что «новички» начинают с форм с кнопками, затем открывают для себя кнопочные формы, а если встает задача сделать, как классическом текстовом редакторе, то переходят к строке меню или используют вместо нее панель инструментов. Конечно, бывают исключения и это только мои наблюдения.</p>
<p>Очень долгое время я думал, что самое лучшее и удобное меню – это строка меню. Но как показала жизнь, для каждого класса задач подходит свое меню.</p>
<p><strong>1 Формы с кнопками</strong><br />
При этом подходе создается множество однотипных форм с кнопками или группой переключателей. Этот метод очень активно использовался в старых ДОСовских программах.</p>
<p>Это очень удобно использовать, когда пользователю при работе с одной из функций не нужна другая функция, которая вызывается из меню. Примером таких программ могут служить любые, в которых происходит потоковая регистрация и пользователю некогда переключаться между клавиатурой и мышкой.</p>
<p>К минусам такого способа можно отнести большое количество форм и муторность в изменении этого меню. Для пользователя может быть не удобно закрывать или сворачивать текущие формы, чтобы увидеть меню и открыть необходимую форму.</p>
<p>Очень не рекомендую использовать группы переключателей в качестве кнопок, переходить клавишами по такому меню не удастся.</p>
<p><strong>2 Кнопочная форма (на основе мастера)</strong><br />
В этом варианте существует только одна форма и мастер редактирования пунктов. Из недостатков – при открытии любая формы, форма меню будет не видна.</p>
<p>При ближайшем рассмотрении оказалось, что это обыкновенная форма с х кнопками и надписями и с системной таблицей в качестве источника данных.</p>
<p>Не знаю почему, но мне этот вариант мне не нравится. Я лучше сам его реализую при необходимости.</p>
<p><strong>3 Строка меню</strong><br />
Это мой самый любимый способ, т.к. очень просто изменять и все время на виду. Да и очень редко мне доводится разрабатывать программы для людей, не пользующихся мышкой.</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/image001.png" alt="" /></p>
<p>Чтобы меню выглядело при запуске программы как на картинке, придется немножко пошаманить.</p>
<p>При создании меню (Сервис-&gt;Настройка), по умолчанию создается панель инструментов. По этому, выбрав созданное меню, необходимо нажать кнопку свойства. Необходимо настроить его следующим образом:</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/image002.png" alt="" /></p>
<p>Я изменил тип на «Строка меню» и убрал галочку «Отображение и скрытие», чтобы пользователь ее не мог скрыть. Снимать все галочки не рекомендую, если будет желание то после этого обязательно проверьте, что из этого получилось и подойдет ли пользователю. А то можете получить проблему из-за меню. Также можно убрать перемещение, но только после того, как закончите сами ее настраивать.</p>
<p>Теперь необходимо зайти в Параметры запуска (Сервис –&gt; Параметры запуска).</p>
<p><img src="http://5codelines.net/wp-content/uploads/menu/image003.png" alt="" /></p>
<p>Тут я выбираю свою строку меню и убираю отображение окна базы данных. В таком режиме я и работаю.</p>
<p>Как вы заметили можно и свое контекстное меню сделать. Или убрать панели инструментов по умолчанию. Не рекомендую этим увлекаться. Например, панель инструментов отчетов ой как нужна, чтобы напечатать. А на панели инструментов для форм есть такая полезная штуковина как сортировка.</p>
<p>После того, как вы перезапустите свою БД, то всегда будет отображаться ваше меню. А стандартного не будет. Чтобы его отобразить/скрыть достаточно нажать Ctrl+F11. Очень удобно.</p>
<p>До встречи!</p>
<p align="right">(с) Скоков Сергей</p>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/3menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>События</title>
		<link>http://5codelines.net/events1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=events1</link>
		<comments>http://5codelines.net/events1/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 17:09:21 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[архитектура]]></category>
		<category><![CDATA[решения]]></category>
		<category><![CDATA[сопровождение]]></category>

		<guid isPermaLink="false">http://5codelines.net/?p=11</guid>
		<description><![CDATA[Как использовать события в MS Access]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые читатели.</p>
<p>Поговорим в этом выпуске об очень интересной штуке &#8212; события. Я очень мало где видел их использование в MS Access. Но они очень сильно облегчают жизнь при работе, особенно с формами. У событий есть маленькое ограничение. Их могут использовать только объекты. Это означает, что их можно объявлять и получать только в модулях пользовательских классов, формах и отчетах.</p>
<p>Чтобы объявить событие необходимо в начале модуля класса (формы, отчета или пользовательского) написать:<br />
<strong>Event ИмяСобытия( СписокАргументов )</strong></p>
<p>Для использовании события необходимо объявить в начале модуля ссылку на объект и в списке (левый список, который расположен в редакторе кода) выбрать обявленный атрибут, в правом списке можно выбрать событие, если их несколько. В результате получим следующее:<br />
<strong>Dim WithEvents Имя As Тип</strong></p>
<p>Вызвать событие можно так:<br />
<strong>RaiseEvent ИмяСобытия( Параметры )</strong></p>
<p>Где это можно применить? Рассмотрим пример из жизни. На форме заказа есть поле клиента. В этом поле отображается, допустим, УНН и название клиента. Рядом с полем кнопка. По нажатию на кнопке отображается еще одна форма &#8212; список клиентов. Задача &#8212; выбрать клиента.</p>
<p>Одним из решений будет открыть модальное окно и тут возникает куча разных вариантов: записать напрямую с формы списка клиентов в поле формы заказов (очень плохая идея!!!), скрыть форму при нажатии пользователем кнопки &#171;Ок&#187; (Выбрать) и т.д.</p>
<p>При помощи событий получается простое и элегантное решение. Всего-то объявить на форме списка клиентов событие:<br />
<strong>Event OnClientSelect(ByVal lId As Long)</strong></p>
<p>На форме заказа это событие обработать:</p>
<pre name="code" class="vb">
Dim WithEvents m_frmKlientSepis As Form_frmKlientSpis
'--

Private Sub Kn_KlientSelect_Click()
	'-- выбор клиента
	'-- можно и так
	'-- DoCmd.OpenForm "frmKlientSpis"
	'-- Set m_frmKlientSepis = Forms("frmKlientSpis")

	'-- но мне нравится этот вариант
	Set m_frmKlientSepis = New Form_frmKlientSpis
	m_frmKlientSepis.Visible = True
End Sub

Private Sub m_frmKlientSepis_OnClientSelect(ByVal lK_KLIENT As Long)
	'-- клиент выбран пользователем
	Me.K_KLIENT = lK_KLIENT
	Set m_frmKlientSepis = Nothing '-- уничтожаем форму
End Sub
</pre>
<p>Подробности можете увидеть в <a href="http://5codelines.net/wp-content/uploads/events_1_sampe.rar">примере</a>. Чуть позже я расмотрю еще один пример &#8212; связные списки.</p>
<p>До скорых встреч!</p>
<p align="right">(с) Скоков Сергей</p>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/events1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Повышение сопровождаемости. Часть 1. Формы.</title>
		<link>http://5codelines.net/povyshenie-soprovozhdaemosti-chast-1-formy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=povyshenie-soprovozhdaemosti-chast-1-formy</link>
		<comments>http://5codelines.net/povyshenie-soprovozhdaemosti-chast-1-formy/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 22:45:41 +0000</pubDate>
		<dc:creator>Сергей Скоков</dc:creator>
				<category><![CDATA[сопровождение]]></category>

		<guid isPermaLink="false">http://5codelines.net/povyshenie-soprovozhdaemosti-chast-1-formy/</guid>
		<description><![CDATA[Лучший способ работы с формами]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, уважаемые подписчики.</p>
<p>В этом выпуске мы откроем очень важную тему сопровождаемость. Это то, что экономит время в последующем, когда изменения как правило нужно вносить быстро.</p>
<p>MS Access представляет из себя конструктор со встроенным языком программирования. Формы, отчеты, запросы и пр. никакого отношения к языку не имеют. Можно сказать, что они представляют из себя хранимые настройки классов Form, Report, QureyDef и п.р. При создании формы не обязательно создается модуль класса (далее класс), только если указать в свойстве «наличие модуля» да или создать обработчик события. В этом случае имя класса будет Form_&lt;имя формы&gt;. Это истинно и для отчетов.</p>
<p>К объектам MS Access (формы, отчеты, запросы, таблицы) обращаются по текстовому имени. В результате компилятор не проверяет правильность написания текстовых констант. В процессе жизни проект может пережить много модификаций: добавлений, удалений, переименований. После подобных изменений идет страшная череда тестирований и исправлений ошибок. Один из способов повышения сопровождаемости – это писать «компилируемый код». Да, смешно звучит. Т.е. переносить проверку кода с этапа выполнения на этап компиляции. Сейчас все поясню. Все что будет сказано про форму, в той или иной степени относится к отчетам.<br />
<span id="more-12"></span><br />
<strong>Обращение к элементам управления формы</strong><br />
Для начала рассмотрим взаимодействие с элементами управления на форме. Далее под словом поле буду понимать элемент управления. К полям на форме в модуле формы (он же модуль класса) можно обращаться следующими способами:<br />
1. Me![&lt;имя поля&gt;]<br />
2. Me(&#171;&lt;имя поля&gt;&#187;)<br />
3. Me.Controls(&#171;&lt;имя поля&gt;&#187;)<br />
4. Me.&lt;имя поля&gt;<br />
5. &lt;имя поля&gt;</p>
<p>Вопрос, какой из методов компилируем? Правильный ответ 4 и 5 (действителен только в пределах модуля формы), все остальные варианты содержат текстовую константу с именем поля. Теперь рассмотрим, как это работает. Мы создали форму, разместили на ней поля. Прошло некоторое время. Какие-то поля мы удалили, у каких-то изменили имя. Задача состоит в том, чтобы проверить код на этой форме, чтобы нигде не было ошибок. Можно это сделать «глазками». А можно открыть редактор кода, выбрать пункт Debug-&gt;Compile. По ошибкам можно быстро найти места с багами. Если мы будем использовать любой способ, кроме 4-го, то это нам не поможет. Придется убеждаться в правильности методом испытания формы в реальном бою – то есть проводить тестирование. Поверьте, скомпилировать дешевле по времени.</p>
<p><strong>Взаимодействие с полем формы</strong><br />
Усложним задачу – обратимся к полю извне формы. Перед этим рассмотрим варианты обращения к открытой форме:<br />
1. Forms(&#171;&lt;имя формы&gt;&#187;)<br />
2. Forms![&lt;имя формы&gt;]</p>
<p>Как видите эти методы не очень то и сопровождаемы, так как ссылку на открытую форму можно получить только по имени (Если форма открыта методом DoCmd.OpenForm). Можно постараться оптимизировать:</p>
<pre name="code" class="vb">
Dim frm as Form  

DoCmd.OpenForm "f_doc"
'-- тут такие параноики как я могут проверить, отрылась ли форма
Set frm = Forms("f_doc")
frm. &lt;имя поля&gt; = 123
</pre>
<p>Вместо абстрактной формы &lt;имя формы&gt; появилась форма f_doc. Она же и будет использоваться далее.</p>
<p>И в этом случае поле будет определяться компилятором на этапе выполнения. Потому что класс Form не содержит этого поля. Чтобы это произошло на этапе компиляции необходимо по другому определить переменную frm:</p>
<pre name="code" class="vb">Dim frm as Form_f_doc  

DoCmd.OpenForm "f_doc"
Set frm = Forms("f_doc")
frm. &lt;имя поля&gt; = 123</pre>
<p>В результате компилятор знает тип формы, во время редактирования подскажет вам какие поля и методы пользователя есть на форме. Если мы решим изменить имя поля или метода, то скомпилировав, по ошибкам можно будет все найти и исправить.</p>
<p>Идем дальше. Обращаться на прямую к полям формы не очень рассудительно. Исходя из опыта сопровождения, гораздо дешевле реализовать соответствующую функцию обработки в модуле этой формы. В последующем модифицировать гораздо дешевле, чем рыться во многих частях программы.</p>
<p><strong>Открытие формы</strong><br />
Открытие формы на кнопку очень просто сделать при помощи мастера. Одинаковые кнопки на разных формах можно очень быстро наплодить. Но если мы хотим сэкономить в будущем, то придется немножко пописать руками.<br />
Открытие формы при помощи DoCmd.OpenForm не совсем надежно, т.к. имя формы не проверяется компилятором. Только во время выполнения получим сообщения об ошибке.<br />
Как можно свести ошибки в имени формы к минимуму? Константы!</p>
<pre name="code" class="vb">Const c_imFrmDoc as String = "f_doc"</pre>
<p>Теперь код превратиться в:</p>
<pre name="code" class="vb">
Dim frm as Form_f_doc  

DoCmd.OpenForm c_imFrmDoc
Set frm = Forms(c_imFrmDoc)
frm. &lt;имя поля&gt; = 123
</pre>
<p>Это еще не все. Если подобным образом нужно каждый раз открывать форму, то эти 4-е строчки кода придется дублировать каждый раз при открытии этой формы. Я очень популярные формы открываю при помощи специальных функций. Это гораздо удобнее, чем использование только констант. Например:</p>
<pre name="code" class="vb">
Fumction OpenFrmDoc() as Form_f_doc
On Error GoTo Err_
	DoCmd.OpenForm c_imFrmDoc
	Set OpenFrmDoc = Forms(c_imFrmDoc)
Exit_:
	Exit Function
Err_:
	Resume Exit_
End Function
</pre>
<p>Если я и ошибусь в имени формы, то это произойдет один раз. Изменить имя формы очень легко и просто. Если мне понадобится передавать дополнительные параметры для метода OpenForm, то их придется реализовать. Поменялся способ открытия формы – тоже не проблема.</p>
<p>Как еще можно открыть форму? Можно еще и так:</p>
<pre name="code" class="vb">
Dim frm as Form_f_doc  

Set frm = New Form_f_doc
'-- взаимодействие с формой
</pre>
<p>Стоит обратить внимание на 3 строчку. В ней создается новый объект указанного класса. Бонус этого метода в том, что позволяет наплодить множество экземпляров одной и той же формы. Но не позволит запустить форму в диалоговом режиме и не добавит ее в коллекцию Forms. Т.е. ссылку на форму необходимо сохранить в переменную и до тех пор пока будет хоть одна ссылка на это форму, она будет существовать.</p>
<p>Пример можно скачать <a href="http://5codelines.net/wp-content/uploads/code_1_sampe.rar">тут</a>. В примере попробуйте изменить имя формы f_doc на любое другое, а также имя ее поля P_Field. В примере специально все обработчики ошибок не содержат сообщений об ошибках.</p>
<p align="right">(с) Скоков Сергей</p>
]]></content:encoded>
			<wfw:commentRss>http://5codelines.net/povyshenie-soprovozhdaemosti-chast-1-formy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

