Понедельник, 20.11.2017, 20:06
Приветствую Вас Гость | RSS
Главная | Учимся писать отчеты для 8.2 - Форум | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS
Страница 1 из 11
Модератор форума: Buhta 
Форум » Форум » Вопросы и ответы по программам 1С » Учимся писать отчеты для 8.2
Учимся писать отчеты для 8.2
Ваш1С
1 - 26.10.2010, 17:47

Главное отличие 8.2 от предыдущих версий 1С - ярко выраженное наличие клиент-серверного разделения и использование тонкого и web-клиентов, поэтому сразу учимся разделять нашу писанину на писанину для работы с формами и писанину для работы с БД.
Соответственно, процедуры и функции, для работы с данными форм должны выполняться с директивой &НаКлиенте, а обрабатывающие данные БД с директивой &НаСервере
deal См. также "Общее описание встренного языка, Директивы компиляции", в т.ч. в Синтакс помощнике в Конфигураторе.

Возьмём типовую конфигурацию "Управление торговлей" версии 11.
Задача: сообщить пользователю наименования элементов справочника Контрагенты. На кнопку на форме вещаем событие Печать. В модуле формы напишем:

&НаКлиенте
Процедура Печать(Команда)
ВывестиКонтрагентов();
КонецПроцедуры

&НаСервере
Процедура ВывестиКонтрагентов() Экспорт

Запрос= Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Контрагенты.Ссылка,
| Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.Ссылка,
| Контрагенты.Наименование,
| Контрагенты.Партнер
|
|УПОРЯДОЧИТЬ ПО
| Наименование";

Результат=Запрос.Выполнить();
ВыборкаЗапроса=Результат.Выбрать();

Пока ВыборкаЗапроса.Следующий() Цикл
СообщениеПользователю= Новый СообщениеПользователю;
СообщениеПользователю.КлючДанных=ВыборкаЗапроса.Ссылка;
СообщениеПользователю.Текст=ВыборкаЗапроса.Наименование;
СообщениеПользователю.Сообщить();
КонецЦикла;

КонецПроцедуры

deal Об объекте СообщениеПользователю см. Общие объекты Синтакс помощника

surprised Полезно знать
...как делать отборы в запросе по пустым значениям реквизитов:

Пустая ссылка
| ГДЕ Контрагенты.ТвойРеквизит = ЗНАЧЕНИЕ(СПРавочник.Справочник2.ПустаяСсылка)

Пустая строка
| ГДЕ Контрагенты.ТвойРеквизит = ""

Пустое число
| ГДЕ Контрагенты.ТвойРеквизит = 0

Пустая дата
| ГДЕ Контрагенты.ТвойРеквизит = Датавремя(1,1,1)

Ваш1С
2 - 26.10.2010, 18:22

Усложняем задачу.
Допустим, есть Контрагенты с неуказанным Партнером (такое возможно при программном заполнении справочника Контрагенты, в частности при переносе данных). И есть Партнеры, у которых наименование совпадает с наименованием Контрагентов. Надо заполнить реквизит Партнер у контрагентов.

.....
Запрос.Текст=
"ВЫБРАТЬ
| Контрагенты.Ссылка, //выберем контрагентов
| Партнеры.Ссылка КАК Партнер //и партнёров
|ИЗ
| Справочник.Контрагенты КАК Контрагенты //контрагентов из справочника Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры // а партнеров из
| //справочника Партнёры, который связан со справочником Контрагенты
| ПО Контрагенты.Наименование = Партнеры.Наименование //одинаковым наименованием
|ГДЕ
| Контрагенты.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) //контрагентов берём только с незаполненным реквизитом Партнер
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.Ссылка,
| Партнеры.Ссылка";

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл
КонтрагентОбъект= Выборка.Ссылка.ПолучитьОбъект();
КонтрагентОбъект.Партнер=Выборка.Партнер;
КонтрагентОбъект.Записать();
КонецЦикла;

Чтобы проверить данный кусок кода, попробуйте самостоятельно написать процедуру, которая очистит у контрагентов реквизит Партнер, если наименование Контрагента и наименование Партнера в реквизите контрагента совпадают.
(постарайтесь не подглядывать в спойлер smile )

Форум » Форум » Вопросы и ответы по программам 1С » Учимся писать отчеты для 8.2
Страница 1 из 11
Поиск:

Copyright MyCorp © 2017