Отправляет email-рассылки с помощью сервиса Sendsay

1С: грабли, камни и бриллианты

  Все выпуски  

1С: грабли, камни и бриллианты


Служба Рассылок Subscribe.Ru

Здравствуйте, уважаемые!
Вашему взору представлена рассылка "1С: грабли, камни и бриллианты" и
я ее ведущий Кружаев Валерий  krug@tula.net

Выпуск 5.

Сегодня небольшое Ноу-Хау (для кого как :) ).
Случается, что вы приходите к клиенту и нужно утащить его рабочую базу к себе,
дабы не терять времени на набивку пустышки абы-какими данными для проверки.
У вас и в мыслях нет использовать базу во зло клиенту, а он никак базу не дает.
В этом случае можно договориться с клиентом, что вы покоцаете его базу до неузнаваемости
и получите таким образом пластилин для своей лепки.
Как будем коцать?
Обрезаем ключевые справочники по наименованиям до 3-5 первых символов, если этого
покажется мало - вырезаем последние (на взгляд клиента наиболее актуальные) документы.
Ну и можно еще что-нибудь порезать.
В результате у вас есть материал для работы, но это уже не база для анализа (если
конечно вы не занимаетесь именно анализом).
Как порезать базы - я оставляю решить вам.

Продолжаем наше обучение.
Было получено два письма:
1.
"Домашнее задание:
Создайте пустую конфигурацию
===== Конец цитаты ===============================================

Какую конфигурацию: 1C:Бухгалтерия, 1С:Склад,...?
"
Ответ:
Пустая конфигурация является, мягко говоря, бесполой, пока не созданы регистры,
план счетов или журналы расчетов и в документах не установлена привязка к типам
учета.
В этом имеется некоторый плюс в том смысле, что мы можем использовать оболочку
1С с ее прекрасными визуальными и прочими средствами в качестве просто базы данных,
без проводок.
Например, один мой знакомый создал конфигурацию для учета выдачи книг в церковной
библиотеке (!). Кстати, если у кого-то есть варианты использования 1С по непрямому
назначению - поделитесь со мной и мы сможем наладить какое-нибудь сотрудничество.
И еще - если у вас имеется комплексная конфигурация, то вы счастливый обладатель
всех компонент: и бухгалтерского учета, и оперативного учета, и расчета. Следовательно,
можете создавать, впрочем как и редактировать, любую конфигурацию.
А если у вас отдельная бухгалтерия, зарплата или торговля, т.е. не все компоненты
вами приобретены, то вам не повезло и ваши возможности ограничены.
Впрочем, это легко решается, но за рамками легальности и в этой рассылке не рассматривается.
Кто не в курсе насчет компонент:
Вместе с основной оболочкой поставляются компоненты, за которые заплачено. Выглядят
они в виде динамических библиотек (dll), их наличие проверяется при запуске оболочки
и если их нет, а конфигурация предполагает их наличие, оболочка ругается и не
работает.
Имеется еще внешняя компонента управления распределенными информационными базами,
но она в стандартной поставке отсутствует и продается отдельно (стоит ваще немеряно!!!).
Полезная штука, если у вас несколько удаленных баз, и их содержимое нужно периодически
синхронизировать.
Я с ней уже подружился :)

Письмо 2:
"Есть несколько пожеланий по рубрике домашнее задание:

KV> Создайте пустую конфигурацию, в ней две константы, два набора прав и два
интерфейса.
1. Желательно указывать с каким именем создавать тот или иной объект,
   чтобы на следующем шаге можно было четко указать что с каким
   объектом нужно сделать. Это позволит создать действительно "учебную
   задачу", а не набор разрозненных заданий.
KV> Закройте права доступа к константам в подчиненном интерфейсе.
2. Некорректно указан предыдущий шаг
   "Создайте  <..вырезано..> и два интерфейса"
    <..вырезано..>
   "Закройте права доступа к константам в подчиненном интерфейсе."
   На предыдущем шаге не было указано, что один из интерфейсов должен
   быть подчиненным.
3. Было пропущено задание создание пользователя с набором прав и
   интерфейсом
4. Права доступа назначаются в наборе прав, а не в интерфейсе.
KV> Посмотрите в вашей конфигурации, что получилось.
5. Желательно указать: что нужно конкретно посмотреть и под каким
   пользователем стартовать.
KV> Периодическую константу наполните какой-нибудь периодической информацией.
KV> Подсказка - меняйте рабочую дату в меню сервис>параметры.
6. Уточнить, что не в конфигураторе, а в 1С:Предприятии
KV> Потом создайте обработку, которая будет просматривать всю историю вашей константы
KV> в таблице значений и сможет редактировать значения на разные даты.
7. А вот здесь желательно уточнить задание, т.е. что
   обработка должна сделать.

Вот примерно так я переформулировал задание:
1. Создать пустую конфигурацию с именем "Учебная" в папке "Stud" (на
   любом диске, в любом каталоге)
2. Создать две константны:
   - Наименование версии: "ВерИмя" тип строка
   - Номер версии: "ВерНом" тип число
3. Создать два набора прав:
   - "Администратор"
   - "Оператор"
4. Создать два интерфейса
   - "Полный"
   - "Ограничен"
5. Создать двух пользователей
   - "Мастер": права администратора, интерфейс полный
   - "Юзер"  : права оператор, интерфейс ограничен
6. Константу "ВерНом" сделать периодической.
7. Закрыть права доступа на константы для оператора
8. Запустить 1С:Предприятие под именем "Юзер"
9. Попробуйте изменить константы
10. Запустить 1С:Предприятие под именем "Администратор"
11. Заполните константу "ВерНом" периодической информацией :
    - дата: 01.01.2002  значение:1
    - дата: 10.01.2002  значение:2
    - дата: 01.02.2002  значение:3
    - дата: 13.02.2002  значение:4
   Подсказка: меняйте рабочую дату в меню сервис->параметры.
11.Cоздайте обработку "ВерПросм", которая будет выводить значение
   версии "ВерИмя" на вводимую дату
   Входящее значение: дата на которую требуется определить версию
   Результат: номер версии на указанную дату
11.Cоздайте обработку "ВерРед", которая будет изменять
   значение константы "ВерИмя" для указанной даты:
   Входящее значение: дата на которую требуется установить версию
                      номер версии
   Результат: изменение константы "ВерИмя"

Что Вы об этом думаете?

Заранее благодарен,
Андрей
"
Ответ:
Не буду врать, задание я глубоко не прорабатывал и возможны неточности в формулировках.
В принципе имеется язык ( в нашем случае руки и клавиатура), чтобы спросить.
И мне кажется, что ограничивать ученика рамками названий и типов (видов) данных
не совсем верно.
Программирование - процесс творческий, и не хотелось бы его загонять в шаблон.
Иначе потом в реальной задаче человек будет искать или натыкаться на знакомые
названия и у него будет складываться неточное представление об их назначении.
Во всяком случае, я убедился, что по крайней мере один человек соображает хорошо
и меня все же понял. А что не понял - разобрался сам по моей наводке.
Будем надеяться, что изучают 1С вместе с нами сообразительные люди.
Кстати, сообразительные никогда не гнушаются задать вопрос, и это правильно.
Не так ли?

По просьбе Андрея излагаю свою структуру учебной базы.
Каталог базы - "Учебная конфигурация"
Идентификатор конфигурации оставил стандартный - "Задача"
Константы -
"Константа1" Тип "Строка" длина 10 - периодическая
"Константа2" тип "Строка" длина 10 - не периодическая
Интерфейсы -
"Главный" - главный
"Подчиненный" - подчиненный
Наборы прав -
"Главный" - полные права
"Подчиненный" - пока полные права, кроме записи и чтения наших констант, а также
использования нашей обработки.
Пользователи -
"Трутень" - интерфейс главный, права главные
"Пчелка" - интерфейс подчиненный, права подчиненные
Создана обработка "УправлениеПериодическими".
На ее форме кнопка "Выполнить" переименована в "Обновить".
Ее процедура "Выполнить()" переименована в "Обновить()".
На форму брошена таблица с именем "таблица". Под ней указана в формуле процедура
"ПриИнициализации()", которая вызывается при щелчках на таблице.
Добавлена кнопка "Удалить" и под ней Процедура "Удаление()".
Добавлена кнопка "Добавить" и под ней процедура "Добавление()".
Дальше текст модуля формы:
____________________________________________________
Перем пери,ПромДата;

//*******************************************

Процедура Обновить()
        //Заполняем таблицу значениями периодического реквизита
    таблица.Очистить();
        таблица.НоваяКолонка("Дата","Дата",,,,,,);
        таблица.НоваяКолонка("Значение","Строка",10,,,,,);
        пери.ИспользоватьОбъект("Константа1");
        пери.ВыбратьЗначения();
        Пока пери.ПолучитьЗначение()=1 Цикл
                таблица.НоваяСтрока();
                таблица.Дата = пери.ДатаЗнач;
                таблица.Значение = пери.Значение;
        КонецЦикла;
КонецПроцедуры

Процедура ПриИнициализации()
        Если таблица.ТекущаяКолонка()="Дата" Тогда
                //щелкнули по колонке "Дата"
                ПромДата = таблица.Дата;
                ВвестиДату(ПромДата,"Введите новую дату для значения");
                Если ПромДата<>таблица.Дата Тогда
                        пери.НайтиЗначение(таблица.Дата,0);
                        пери.ДатаЗнач = ПромДата;
                        пери.Записать(); //записали на новую дату
                        пери.НайтиЗначение(таблица.Дата,0);
                        пери.Удалить(); //удалили на старую дату
                        таблица.Дата = ПромДата;
                КонецЕсли;
        ИначеЕсли таблица.ТекущаяКолонка()="Значение" Тогда
                //щелкнули по колонке "Значение"
                ПромЗначение = таблица.Значение;
                ВвестиСтроку(ПромЗначение,"Введите новое значение",10);
                Если ПромЗначение <> таблица.Значение Тогда
                        пери.НайтиЗначение(таблица.Дата,0);
                        пери.Значение = ПромЗначение;
                        пери.Записать();
                        таблица.Значение = ПромЗначение;
                КонецЕсли;
        КонецЕсли;
КонецПроцедуры

Процедура Удаление()
        пери.НайтиЗначение(таблица.Дата,0);
        пери.Удалить();
        таблица.УдалитьСтроку(таблица.ТекущаяСтрока());
КонецПроцедуры

Процедура Добавление()
        ВвестиДату(ПромДата,"Введите дату для нового значения");
        номСтр = 0;
        Если таблица.НайтиЗначение(ПромДата,номСтр,"Дата")=1 Тогда
                Предупреждение("На указанную дату уже имеется значение!");
                Возврат;
        КонецЕсли;
        пери.ДатаЗнач = ПромДата;
        пери.Значение = "";
        пери.Записать();
        Обновить(); //перерисовываем таблицу
КонецПроцедуры

пери = СоздатьОбъект("Периодический");
____________________________________________________________________

Объект "пери" можно было создать в предопределенной процедуре "ПриОткрытии",
но мне было в лом писать две лишних строчки, тем более что так тоже работает.
"пери" и "ПромДата" объявлены как доступные всему модулю, т.к. значения "пери"
кочуют из процедуры в процедуру, а "ПромДата" было лень инициализировать каким-нибудь
значением в процедуре "Добавить" (перед использованием переменных в процедурах
они должны быть объявлены или инициализированы значением, во избежание ошибки.
Исключение составляют переменные, которые объявляются в скобках некоторых предопределенных
процедур для их нужд, они уже чем-то инициализированы при вызове, но об этом
позже).
Переменную "таблица" объявлять не нужно, так как она уже объявлена и присутствует
на форме обработки.

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

Ну вот вроде и всё сказал на сегодня.

Пишите мне о том, что вы хотели бы знать, но стеснялись спросить :)
Приветствуются все предложения, пожелания, а также ругательства в мой адрес.

Только хочу предупредить, что во избежание недоразумений ваши письма должны иметь
явное указание на разрешение или запрещение публикации их в рассылке.
По умолчанию считается, что письмо публиковать разрешено.
Если вы в теле письма указали адрес, я буду его тоже указывать.
Но специально из реквизитов письма адрес извлекаться не будет.
Это нормально и общепринято. Не так ли?
Впрочем, как известно, известные люди имеют в своем использовании больше денежных
знаков...
Так что решать вам, светиться или отсиживаться.

До встречи, господа!

Написать ведущему krug@tula.net
Рассылки Subscribe.Ru
1С: грабли, камни и бриллианты

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное