<?xml version="1.0" encoding="windows-1251"?>

<rss version=".92">
 <channel>
	<title>Сообщения блогов группы  "Программирование" (1c-bux-kirov.ru)</title>
	<link>http://1c-bux-kirov.ru</link>
	<guid>http://1c-bux-kirov.ru</guid>
	<language>ru</language>
	<docs>http://backend.userland.com/rss092</docs>

    <item>
      <title>Константин Долгушин: Программный вывод отчета СКД и использование внешних данных</title>
      <description><![CDATA[Описание для обычных форм (не управляемых)<br />Создаем форму отчета<br />Вместо стандартной кнопки &nbsp;"Сформировать" делаем свою<br />В модуле формы добавляем процедуру<br /><br />Процедура ДействияФормыСформироватьОтчет(Кнопка)<br />	<br />	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных";);// твой макет СКД<br /><br /> &nbsp; &nbsp; &nbsp;Настройки = Этаформа.КомпоновщикНастроек.Настройки;<br /><br />	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;<br />	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;<br />	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, &nbsp;Настройки, ДанныеРасшифровки);<br />	<br />	ДатаОкончания=МакетКомпоновки.ЗначенияПараметров.ПериодОтчета.Значение.ДатаОкончания;//МакетКомпоновки.ЗначенияПараметров.КонецПериода.Значение;<br />	<br /> &nbsp; &nbsp; &nbsp;ТабЗн1=ПолучитьТабЗнДляОтчета();<br />	ВнешниеНаборыДанных = Новый Структура; <br /> &nbsp; &nbsp; &nbsp;ВнешниеНаборыДанных.Вставить("ТабЗн",ТабЗн1); // Вот здесь и заполняется таблица значений<br />	<br />	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;<br />	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); // а вот здесь передается в скд <br />	<br />	Результат = ЭлементыФормы.Результат;<br /> &nbsp; &nbsp;Результат.Очистить();<br />	<br />	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;<br />	ПроцессорВывода.УстановитьДокумент(Результат); <br />	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);	<br />КонецПроцедуры<br /><br /><br /><br />Для внешней таблицы ТабЗн1<br />В схеме компоновки данных добавляем набор данных объект и описываем его поля,<br />указываем имя объекта ТабЗн1<br /><br />Программно заполняем ТабЗн1 с помощью процедуры ПолучитьТабЗнДляОтчета()<br /><a href="http://1c-bux-kirov.ru/blog/?page=post&amp;blog=SrezPoslednixNaDatuVZaprose&amp;post_id=3">Подробнее...</a>]]></description>
      <link>http://1c-bux-kirov.ru/blog/?page=post&amp;blog=SrezPoslednixNaDatuVZaprose&amp;post_id=3</link>
    </item>

    <item>
      <title>Константин Долгушин: Ошибка формата потока</title>
      <description><![CDATA[При работе с 1С:Предприятие 8 по некоторым независящим от нас с Вами причинам вы можете столкнуться с сообщением об ошибке «Ошибка формата потока».<br />Часто помогает выполнение следующих действий<br /><ul><li><B>удаление из списка баз и повторное добавление</B><li><B>очищение кеша &nbsp;(удалить данные из каталога «C:\Documents and Settings\пользователь\Application Data\1C\1Cv82&#8243;</B><br /></ul>Общей причиной возникновения такой ситуации можно считать сбои железа (в одном случае пропала сеть, отключилось электричество), софта и т.д. (и не обязательно 1С).<br /><a href="http://1c-bux-kirov.ru/blog/?page=post&amp;blog=SrezPoslednixNaDatuVZaprose&amp;post_id=oshibka-formata-potoka">Подробнее...</a>]]></description>
      <link>http://1c-bux-kirov.ru/blog/?page=post&amp;blog=SrezPoslednixNaDatuVZaprose&amp;post_id=oshibka-formata-potoka</link>
    </item>

    <item>
      <title>Константин Долгушин: Срез последних на каждую дату в запросе</title>
      <description><![CDATA[С задачей получения среза последних на каждую дату рано или поздно сталкиваются все. Безусловно, это задача достаточно просто решается запросом с соединением по максимальной дате из меньших или равных дат. Но эту же задачу можно решить и с помощью компоновки данных. Не будем рассуждать о том, какой из способов более производителен, все может зависеть от конкретной задачи.<br />Первый набор данных:<br />В качестве примера, создадим отчет по продажам, в котором отдельной колонкой будем выводить цену из прайса на дату продажи.<br />Создадим набор данных-запрос «ПродажиОбороты»:<br />ВЫБРАТЬ<br /> ПродажиОбороты.Период КАК Дата,<br /> ПродажиОбороты.Контрагент КАК Контрагент,<br /> ПродажиОбороты.Номенклатура КАК Номенклатура,<br /> ПродажиОбороты.КоличествоОборот КАК Количество,<br /> ПродажиОбороты.СтоимостьОборот КАК Стоимость<br />{ВЫБРАТЬ<br /> Дата,<br /> Контрагент.*,<br /> Номенклатура.*,<br /> Количество,<br /> Стоимость}<br />ИЗ<br /> РегистрНакопления.Продажи.Обороты({(&НачалоПериода)},<br />{(&КонецПериода)}, День, ) КАК ПродажиОбороты<br />{ГДЕ<br /> ПродажиОбороты.Период,<br /> ПродажиОбороты.Контрагент.*,<br /> ПродажиОбороты.Номенклатура.*,<br /> ПродажиОбороты.КоличествоОборот,<br /> ПродажиОбороты.СтоимостьОборот}<div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/1.png" border="0" width="604" height="255" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/1.png" data-bx-onload="Y" /></div> <br /><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/2.png" border="0" width="252" height="110" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/2.png" data-bx-onload="Y" /></div><div align="justify">Сейчас наш отчет будет иметь следующий вид:</div><div align="justify"> </div><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/3.png" border="0" width="504" height="423" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/3.png" data-bx-onload="Y" /></div>Теперь необходимо добавить в отчет колонку «Цена по прайсу», которая будет подтягиваться из регистра сведений «Цены номенклатуры» на дату продажи.<br />Второй набор данных:<br />Добавим второй набор данных-запрос «Цены», цены будем брать для фиксированного типа цен:<br />ВЫБРАТЬ<br /> &Дата КАК Дата,<br /> ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,<br /> ЦеныНоменклатурыСрезПоследних.Цена КАК Цена<br />{ВЫБРАТЬ<br /> Дата,<br /> Номенклатура.*,<br /> Цена}<br />ИЗ<br /> РегистрСведений.ЦеныНоменклатуры.СрезПоследних(<br /> &Дата,<br /> Номенклатура = &Номенклатура<br /> И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних<br />{ГДЕ<br /> (&Дата),<br /> ЦеныНоменклатурыСрезПоследних.Номенклатура.*,<br /> ЦеныНоменклатурыСрезПоследних.Цена}<br />В данном наборе данных три параметра: Дата, Номенклатура и тип цен. Из низ самые интересные Дата и Номенклатура. Они будут использованы при соединении наборов данных, причем параметр данных присутствует как в параметрах виртуальной таблицы, так и в выбранных полях.<br />Соединения наборов:<br />Приступим к основной «фишке» данного метода – соединениям наборов:<br /><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/4.png" border="0" width="623" height="249" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/4.png" data-bx-onload="Y" /></div>Здесь самое основное правильно настроить параметры. Если указан параметр,то &nbsp;СКД передает в приемник связи параметры, указанные в соединении. Значениями этих параметров будут значения соответствующих полей источника связи.<br />Далее добавим поле цена в ресурсы и в выбранные поля.<br /><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/5.png" border="0" width="400" height="196" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/5.png" data-bx-onload="Y" /></div><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/6.png" border="0" width="366" height="186" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/6.png" data-bx-onload="Y" /></div>Результат:<br />Теперь можно формировать отчет. Проверим правильность работы отчета на примере «Дивана для отдыха».<br /><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/7.png" border="0" width="684" height="733" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/7.png" data-bx-onload="Y" /></div>В запросе:<br />Рассмотрим решение этой же задачи в запросе. Данная задача может быть решена как с использованием вложенных запросов, так и с помощью. временных таблиц. Попробуем решить задачу, используя временные таблицы. Сначала приведем весь текст запроса, а потом кратко разберем по частям принцип его работы.<br />Текст запроса:<br />ВЫБРАТЬ<br /> ПродажиОбороты.Период КАК Дата,<br /> ПродажиОбороты.Контрагент КАК Контрагент,<br /> ПродажиОбороты.Номенклатура КАК Номенклатура,<br /> СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,<br /> СУММА(ПродажиОбороты.СтоимостьОборот) КАК Стоимость<br />ПОМЕСТИТЬ втБезЦены<br />ИЗ<br /> РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ПродажиОбороты<br /><br />СГРУППИРОВАТЬ ПО<br /> ПродажиОбороты.Период,<br /> ПродажиОбороты.Контрагент,<br /> ПродажиОбороты.Номенклатура<br /><br />ИНДЕКСИРОВАТЬ ПО<br /> Номенклатура,<br /> Дата,<br /> Контрагент<br />;<br /><br />////////////////////////////////////////////////////////////////////////////////<br />ВЫБРАТЬ<br /> втБезЦены.Дата КАК Дата,<br /> втБезЦены.Контрагент КАК Контрагент,<br /> втБезЦены.Номенклатура КАК Номенклатура,<br /> втБезЦены.Количество,<br /> втБезЦены.Стоимость,<br /> МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период<br />ПОМЕСТИТЬ втМаксПериод<br />ИЗ<br /> втБезЦены КАК втБезЦены<br /> ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры<br /> ПО втБезЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура<br /> И втБезЦены.Дата &gt;= ЦеныНоменклатуры.Период<br /><br />СГРУППИРОВАТЬ ПО<br /> втБезЦены.Дата,<br /> втБезЦены.Контрагент,<br /> втБезЦены.Номенклатура,<br /> втБезЦены.Количество,<br /> втБезЦены.Стоимость<br /><br />ИНДЕКСИРОВАТЬ ПО<br /> Номенклатура,<br /> Дата,<br /> Контрагент,<br /> Период<br />;<br /><br />////////////////////////////////////////////////////////////////////////////////<br />ВЫБРАТЬ<br /> втМаксПериод.Дата,<br /> втМаксПериод.Контрагент,<br /> втМаксПериод.Номенклатура,<br /> втМаксПериод.Количество,<br /> втМаксПериод.Стоимость,<br /> ЦеныНоменклатуры.Цена<br />ИЗ<br /> втМаксПериод КАК втМаксПериод<br /> ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры<br /> ПО втМаксПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура<br /> И втМаксПериод.Период = ЦеныНоменклатуры.Период<br />ГДЕ<br /> ЦеныНоменклатуры.ТипЦен = &ТипЦен<br />АВТОУПОРЯДОЧИВАНИЕ<br />Данный пакетный запрос содержит три подзапроса. Рассмотрим их подробнее.<br />Первый запрос пакета группирует данные по периоду, контрагенту и номенклатуре и помещает их во временную таблицу втБезЦены. Далее мы будем соединять эту таблицу с таблицей цен номенклатуры и получим небольшой выигрыш в том, что соединять будем уже сгруппированные данные.<br />Во втором запросе пакета мы соединяем временную таблицу с регистром сведений «ЦеныНоменклатуры» при этом из регистра сведений мы выбираем МАКСИМАЛЬНУЮ дату из меньших или равных дат. &nbsp;Результат этого запроса также помещаем во временную таблицу (втМаксПериод). Посмотрим, какие данные попадают в эту таблицу:<br /><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/9.png" border="0" width="573" height="257" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/9.png" data-bx-onload="Y" /></div>В последнем запросе пакета, мы еще раз соединяем временную таблицу с таблицей цен номенклатуры. На этот мы соединяем таблице по номенклатуре и периоду.<br />Итоговый результат запроса:<br /><div align="center"><img src="http://1cskd.ru/wp-content/uploads/2010/10/91.png" border="0" width="571" height="255" data-bx-image="http://1cskd.ru/wp-content/uploads/2010/10/91.png" data-bx-onload="Y" /></div><div align="justify">Как мы видим результаты вывода цен в обоих случаях (через СКД и через запрос) оказались одинаковы.</div><br /><a href="http://1c-bux-kirov.ru/blog/?page=post&amp;blog=SrezPoslednixNaDatuVZaprose&amp;post_id=1">Подробнее...</a>]]></description>
      <link>http://1c-bux-kirov.ru/blog/?page=post&amp;blog=SrezPoslednixNaDatuVZaprose&amp;post_id=1</link>
    </item>

  </channel>
</rss>