новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Консоль компоновки данных – практические приемы работы.Часть 1.

  • Добавить свою публикацию
  • для этого требуется регистрация

 

Эта небольшая заметка позволяет раскрыть потенциал работы с консолью компоновки данных (ККД) в повседневной работе программиста или аналитика.

Наверняка многие сталкивались с задачами типа: по-быстрому поменять реквизит документа по какому-либо правилу, загрузить в базу данные из какого-либо файла, делать различные «переброски», «переливки», анализировать расхождения, ошибки в начислениях, быстро понять «откуда в отчете берется цифра» и прочее, прочее. Зачастую мы используем для решения этих задач небольшие фрагменты кода, помещенные во временные внешние обработки. При этом полученные в результате работы этих фрагментов кода данные нигде не сохраняются, да и сами фрагменты и обработки теряются. И когда вдруг через время возникает необходимость сделать нечто похожее (а возможно и тоже самое) приходится все делать заново. Консоль компоновки данных позволяет решить многие эти проблемы. С помощью нее можно выполнять простые ( и не очень) фрагменты кода, не требующие отладки и конфигуратора. При этом полученные в результате работы данные (например заполненная таблица значений) могут сохраняться. И будут доступны при следующем открытии консоли в этой или в любой другой базах. Фрагменты кодов, запросы, схемы компоновки могут быть классифицированы. Кроме того доступна история выполнения запросов и фрагментов кода. Все настройки, данные и исходные коды хранятся в одной папке. Закинув на флешку эту папку, вы сможете весь багаж своих наработок с легкостью использовать на разных компьютерах. Объекты и запросы вместе с данными отображаются на интуитивно понятных закладках. При этом можно настроить отборы этих закладок, и не отображать то что актуально например для бухгалтерии 8.1 в торговле 8.2. Итак, перейдем к обещанным практическим примерам.

Отладка сложных схем компоновки данных, запросов и построителей.

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

 

 Функция ОтладкаККД(Объект,НастройкиСКД = Неопределено,ВнешниеДанные = Неопределено) Экспорт
	ККД = ВненшниеОбработки.Создать("ПутьКОбработкеНаДискеКонсольКомпоновкиДанных.epf")
	Форма = ККД.ПолучитьФорму("ФормаНастройки");
	Если Форма = Неопределено Тогда Возврат Ложь; КонецЕсли;
	Форма.ВнешниеДанные = ВнешниеДанные;
	Форма.ОбъектДляОтладки = Объект;
	Форма.НастройкиСКДДляОтладки = НастройкиСКД;
	Форма.Открыть();
	Возврат Истина;
КонецФункции

 

еперь, чтобы отладить например СКД, нужно установить точку останова перед формированием схемы и написать в редаткоре выражений:

 

Изображение

Здесь первый параметр -отлаживаемая схема. Другой параметр - настройки компоновщика. Внешних данных нет.

 

Дожидаемся появления Значение = Истина. После этого продолжаем отладку и видим в предприятии открытую форму ККД со считанной СКД со всеми настройками и внешними данными (Либо запрос или построитель отчета, если отлаживались они). Дальше дело техники – выясняем какой запрос генерирует нужную информацию и двойным щелчком переходим из формы СКД в форму Запросов. Где выполняя и модифицируя отдельный запрос гораздо проще найти ошибку или понимание того, что откуда берется.

Аналогичным образом можем отладить составные запросы заполненными временными таблицами. При отладке в консоль передается и менеджер временных таблиц. Посмотреть данные, содержащиеся во временных таблицах можно просто выделив ее имя в коде нажать кнопку «выполнить».

ПостроительОтчета и ПостроительЗапроса тоже можно раскрыть в консоли со всеми установленными параметрами, отборами, группировками, полями

 

Быстрая загрузка данных файла.

Допустим у нас есть список заказов покупателей в виде

Заказ покупателя ЦМ000003657 от 29.07.2011 12:13:43

Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10

Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10

Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10

Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10

И так еще тысяча строк. Нам надо поменять в них подразделение. Для ускорения процесса можно пойти на хитрость. Просто копируем столбец из экселя в новую закладку консоли запростов, выбираем Дополнительно – установить разделители строк (это действие предназначено на самом деле для очистки фрагментов запроса, взятых в кофигураторе и копированию готовых фрагментов обратно)


Получаем

 

|Заказ покупателя ЦМ000003657 от 29.07.2011 12:13:43
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10

 

 

Копируем все в буфер обмена, переходим в форму объектов и на новой вкладке пишем

Данные = « Сюда вставляем то что в буфере обмена »;

 Немного корректируем первую строчку и получаем

 

 

Данные = "Заказ покупателя ЦМ000003657 от 29.07.2011 12:13:43
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10
|Заказ покупателя ЦМ000003738 от 29.07.2011 18:42:10";

 

 

Это готовая строка, из которой теперь очень просто вытащить номера заказов. По ним получим документы и произведем нужные модификации.

Ниже пишем код:

 

Для К = 1 По СтрЧислоСтрок(Данные) Цикл //Перебираем строки
	Стр = СтрПолучитьСтроку(Данные,К);//Берем строку,
	Стр = СтрЗаменить(Стр,"", Символы.ПС); //заменяем пробелы на перевод строки,
	Номер = СтрПолучитьСтроку(Стр,3);//в полученной составной строке берем номер (3-е слово)
	Док = Документы.ЗаказПокупателя.НайтиПоНомеру(Номер,ТекущаяДата()); //Ищем документ
	Если НЕ Док.Пустая() Тогда
		ДокОбъект = Док.ПолучитьОбъект();
		ДокОбъект.Подразделение = &Подразделение; // Берем заданное в параметрах подразделение
		ДокОбъект.Записать();

		#Итератор //Вывод числа повторений цикла
	КонецЕсли; 
КонецЦикла;

 

 Видео, демонстрирующее вышеизложенное:

 

Перенос данных из одной базы в другую.

Для упрощения предположим что у нас есть две базы с одинаковой структурой –копия на вчерашний день и актуальная база. Допустим кто-то нечаянно очистил цены по определенной номенклатуре. В этой ситуации нет ничего страшного, если конечно есть адекватная копия. Вопрос только в быстром переносе нужных данных.

Итак, в копии делаем запрос в форме запросов, который выбирает нужные данные с нужным отбором

Полученную таблицу результата помещаем в объект (Поместить в объект на закладке результата запроса.) Выбираем нужный объект, на закладке результата ставим галку «сохранить». Все данные готовы для выгрузки. Закрываем ККД в копии (после этого все данные будут сброшены на диск)

Открываем консоль в актуальной базе. Видим наш объект с нужными нам данными на закладке «Таблица значений». Теперь их остается только загрузить.

В исходном коде этого объекта пишем код загрузки регистра сведений через набор записей.

 

НаборЗаписей = РегистрСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(&Номенклатура);
НаборЗаписей.Прочитать();
Для Каждого СтрТаб Из #ТаблицаЗначений Цикл //Читаем данные из таблицы значений
	ЗаполнитьЗначенияСвойств(НаборЗаписей, СтрТаб);
КонецЦикла;

НаборЗаписей.Записать();

 

Все! Никаких внешних файлов для обмена, COM Соединений – 5 минут и готово.

 

 

 
0
Читайте также
Запросы и их обработка
Когда работают одновременно кассир, деспетчера.. программа зависает в нетиповой конфигурации
Программирование 1с
Процесс обучения 1С программированию подразумевает приобретение навыков настройки программ под нужды заказчика.
Разработки
Журнал регистрации 1С в отдельной SQL-базе
Ведение журнала регистрации в 1С 8.1 в SQL базе
[1С 8] SubSys: Отчет по инвентаризациям (оприходования и списания) по складам
Отчет для получения данных по итогам оприходования и списания 1С8
Отчет по дебиторской задолженности по периодам Бух. 7.7
Внешняя обработка с двумя видами отчетов по дебиторской задолженности
Еще от автора
≡ к списку статей