Рассылка закрыта
При закрытии подписчики были переданы в рассылку "В помощь бухгалтеру" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
1С: грабли, камни и бриллианты
Здравствуйте, уважаемые! Вашему взору представлена рассылка "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
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||