- Работа в программе 1СКонецЕсли;
// выдаем текст запроса в окно сообщений для проверки
// (в реальной программе это не делается)
Сообщить(ТекстЗапроса);
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Сообщить("Ошибка в тексте запроса");
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
// вызов процедуры формирования запроса
Запросить();
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
// если две группировки
Если Признак=0 Тогда
Пока Запрос.Группировка("Долж")=1 Цикл
Таб.ВывестиСекцию("Должность");
Нум=0; // для нумерации сотрудников
Пока Запрос.Группировка("ФИО")=1 Цикл
Если Запрос.ФИО.ЭтоГруппа()=1 Тогда
Таб.ВывестиСекцию("Подразделение");
Иначе
Нум=Нум+1;
Таб.ВывестиСекцию("ФИО");
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
// если меньше двух группировок
Нум=0;
Пока Запрос.Группировка("ФИО")=1 Цикл
Если Запрос.ФИО.ЭтоГруппа()=1 Тогда
Таб.ВывестиСекцию("Подразделение");
Иначе
Нум=Нум+1;
Таб.ВывестиСекцию("ФИО");
КонецЕсли;
КонецЦикла;
КонецЕсли;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры
Процедура Выгрузить()
// вызов процедуры формирования запроса
Запросить();
Текст=СоздатьОбъект("Текст");
Текст.Шаблон(1);
Текст.ДобавитьСтроку(Заголовок);
Текст.ДобавитьСтроку("");
// если две группировки
Если Признак=0 Тогда
Пока Запрос.Группировка("Долж")=1 Цикл
Текст.ДобавитьСтроку(" Всего на должности [Запрос.Долж] – [Запрос.Кол_во] человек");
Нум=0; // для нумерации сотрудников
Пока Запрос.Группировка("ФИО")=1 Цикл
Если Запрос.ФИО.ЭтоГруппа()=1 Тогда
Текст.ДобавитьСтроку(" В подразделении [Запрос.ФИО] – [Запрос.Кол_во] человек");
Иначе
Нум=Нум+1;
Текст.ДобавитьСтроку("[Нум#Ч2]. [Запрос.ФИО#С50] – [Запрос.ФИО.ДатаПриема] [Запрос.ФИО.ДатаУвольнения]");
КонецЕсли;
КонецЦикла;
Текст.ДобавитьСтроку("");
КонецЦикла;
Иначе
// если меньше двух группировок
Нум=0;
Пока Запрос.Группировка("ФИО")=1 Цикл
Если Запрос.ФИО.ЭтоГруппа()=1 Тогда
Текст.ДобавитьСтроку("");
Текст.ДобавитьСтроку(" В подразделении [Запрос.ФИО] – [Запрос.Кол_во] человек");
Иначе
Нум=Нум+1;
Текст.ДобавитьСтроку("[Нум#Ч2]. [Запрос.ФИО#С50] – [Запрос.ФИО.ДатаПриема] [Запрос.ФИО.ДатаУвольнения]");
КонецЕсли;
КонецЦикла;
КонецЕсли;
Текст.ДобавитьСтроку(" Итого: [Запрос.Кол_во] человек");
Текст.ТолькоПросмотр(1);
Текст.Показать("Отчет","Новый.txt");
КонецПроцедуры
Процедура ВыборСтатуса()
ТипСтатуса=Статус.ПолучитьЗначение(Статус.ТекущаяСтрока());
КонецПроцедуры
Процедура ВыборПериода()
Если ТипПериода=1 Тогда
Форма.ВыбДата.Доступность(1);
Форма.ДатаНач.Доступность(0);
Форма.ДатаКон.Доступность(0);
Иначе
Форма.ВыбДата.Доступность(0);
Форма.ДатаНач.Доступность(1);
Форма.ДатаКон.Доступность(1);
КонецЕсли;
КонецПроцедуры
ТипСтатуса=1;
ТипГрупп=0;
Порядок=1;
ТипПериода=1;
Статус.ДобавитьЗначение(1,"Все работники");
Статус.ДобавитьЗначение(2,"Работающие");
Статус.ДобавитьЗначение(3,"Уволенные");
Статус.ДобавитьЗначение(4,"Принятые на работу");
Группировка.ДобавитьЗначение(1,"Группировать по должностям");
Группировка.ДобавитьЗначение(2,"Группировать по подразделениям");
ВыбДата=ТекущаяДата();
ДатаНач=ТекущаяДата();
ДатаКон=ТекущаяДата();
Обратите внимание, что в начале процедуры Выгрузить() нет вызова стандартной процедуры открытия файла Открыть(), так как файл не существует и мы его создаем.
Сохраните конфигурацию и запустите 1С в режиме Предприятие. Выгрузите несколько отчетов о сотрудниках в текстовый файл. Откройте и просмотрите этот файл через Far или Norton.
11.3 Загрузка данных из текстового файла
Иногда требуется выполнить противоположную операцию, то есть прочитать данные из тестового файла и по ним внести изменения в конфигурацию. Например, вышестоящая организация разослала список всех существующих должностей в виде текстового файла и требуется загрузить эти данные из файла и поместить в справочник Должности. Создайте через Far или Norton текстовый файл следующего содержания:
Дворник
Директор
Главный бухгалтер
Бухгалтер
Инженер
Конструктор
Менеджер
Начальник отдела
Программист
Рабочий
И сохраните этот файл под именем Долж.txt в тот каталог, где находится конфигурация.
Создадим обработку, которая будет читать данные из указанного файла и, если такой должности в справочнике Должности нет, добавлять в справочник.
Создайте обработку ЗагрузкаДолжностей и включите ее в меню Обработки под именем Загрузить должности. На форме диалога разместите следующие элементы (рисунок 11.3.1):
Рисунок 11.3.1
Элемент Файл имеет следующие свойства: Идентификатор – Файл, Тип – Строка, Длина – 30.
В программном модуле запрограммируем процедуру Выполнить():
Процедура Выполнить()
Текст=СоздатьОбъект("Текст");
Долж=СоздатьОбъект("Справочник.Должности");
// используем оператор Попытка для того, чтобы
// отследить ошибки при работе с файлом, например,
// если файл не существует
Попытка
// устанавливаем кодовую страницу Windows
Текст.КодоваяСтраница(0);
// открываем файл
Текст.Открыть(Файл);
Если Текст.КоличествоСтрок() = 0 Тогда
Предупреждение("Файл пустой!");
Возврат;
КонецЕсли;
Для Ном = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(Ном);
Если СтрДлина(Стр)>0 Тогда
// ищем должность в справочнике Должности
Долж.НайтиПоНаименованию(Стр,0,1);
// если не найдено добавляем
Если Долж.Выбран()=0 Тогда
Долж.Новый();
Долж.Наименование=Стр;
Долж.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Исключение
// вывод сообщения об ошибке
Предупреждение(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Сохраните конфигурацию и запустите 1С в режиме Предприятие. Запустите созданную обработку с именем файла Долж.txt и убедитесь, что в справочнике Должности появились новые элементы.
Задания:
В конфигурациях, созданных на прошлых занятиях, сделайте следующие изменения и дополнения:
Вариант 1
В отчет по справочнику Картины внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Художники.
Вариант 2
В отчет по справочнику Склад внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Товары.
Вариант 3
В отчет по справочнику Абоненты внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Улицы.
Вариант 4
В отчет по справочнику Каталог внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Авторы.
Вариант 5
В отчет по справочнику Налоги внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Улицы.
Вариант 6
В отчет по справочнику Соискатели внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Профессии.
Вариант 7
В отчет по справочнику Квартиры внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Улицы.
Вариант 8
В отчет по справочнику Номера внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник ТипНомера.
Вариант 9
В отчет по справочнику Подписка внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник ТипИздания.
Вариант 10
В отчет по справочнику Квартиры внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Улицы.
Вариант 11
В отчет по справочнику Касса внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Направления.
Вариант 12
В отчет по справочнику Путевки внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Города.
Вариант 13
В отчет по справочнику Обувь внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник ТипыОбуви.
Вариант 14
В отчет по справочнику Драгоценности внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник ТипыИзделия.
Вариант 15
В отчет по справочнику Студенты внесите возможность выгрузки данных в текстовый файл. Создайте обработку для загрузки данных из файла в справочник Группы.
Контрольные вопросы:
1. Для чего используется типа данных Текст?
2. В чем преимущество использования текстовых файлов?
3. Как узнать количество строк в текстовом файле?
4. Как открыть текстовый файл?
5. Как прочитать строку из текстового файла?
6. Как добавить строку в текстовый файл?