Архив для категории: ‘Программирование’
При программирование вывода сообщений пользователю в 1С:Предприятие 8 в случае, если в одной строке сообщения нужно вывести одновременно большое количество данных, то запись процедуры «Сообщить()» на встроенном языке 1С становиться слишком перенасыщено знаками » (кавычка) и + (плюс), и читается неудобно. Для более удобной записи вывода сообщения пользователю можно воспользоваться альтернативной функцией форматированного вывода сообщения, где запись выводимой строки делается в формате:
СообщитьФ("Параметр1 = %1, Параметр2 = %2", ЗначениеПараметра1, ЗначениеПараметра2)
Если значения параметров: Параметр1 = 10, а Параметра2 = «8-ка», то результатом работы данной функции будет вывод сообщения пользователю:
Параметр1 = 10, Параметр2 = 8-ка
Исходный код функции: Читать далее… »
1 Комментарий
Подмена понятий выражается в том, что при назначении имени объектам конфигурации, имя объекта не совпадает или явно противоречит с сутью объекта.
В данном случае под объектом конфигурации нужно понимать не объект базы данных, а именно любой объект самой конфигурации которому программист может дать имя при разработке системы (как сами объекты конфигурации, так и имена переменных, процедур, функций и т.д.).
Возможные варианта подмены понятий:
- Абстрагирование (когда назначается абстрактное имя. Например что-то типа «ALFA01»)
- Сокращение наименования и аббревиатуры (Примеры: РеализТовУсл, РТУ)
- Ложное назначение имени (когда присваиваемое имя прямо противоречит сути объекта)
Например |
SelectОТОБРАЗИТЬ> |
Объект суть которого есть цена, называется как сумма.
Объект суть которого есть склад (или место хранения), называется Контрагент.
|
Читать далее… »
1 Комментарий
Что имеется ввиду:
При создании доработок в существующих документах, а также при создании новых документов достаточно часто возникает задача — «обратиться к результатам проведения документа» и что-то с ними сделать.
Две наиболее распространенные задачи |
SelectОТОБРАЗИТЬ> |
- В документе заполнить реквизит используя рассчитанные при проведении данные. Например: заполнить в перемещении реквизит «Сумма по себестоимости»
- Распечатать документ, при этом отобразив информацию из результатов проведения
|
При выполнении таких разработок часто возникает соблазн — так сказать «не усложнять» свою работу по разработке документа, а пойти по простому пути — для получения данных проведения — еще раз скопировать часть кода, которая выполняется при расчете данных проведения документа.
Читать далее… »
Оставить комментарий
Что имеется ввиду (я думаю все знают):
Во всех типовых конфигурациях 1С (да и не только в типовых) в документах есть возможность указывать коэффициент пересчета из количества документа в количество в котором товар числиться на складе. Это может быть как прямое указание коэффициента (по умолчанию он равен 1), так и косвенное, когда указывается единица измерения в документе отличная от единицы измерения хранения остатков на складе.
К чему приводит не соблюдение этого правила
Если, при программирование дополнительных настроек, которые вынуждены брать данные из документов (это могут быть отчеты, изменения в схемах проведениях документов и т.д.) — забыть провести пересчет из количества документа к количеству в единице хранения
Читать далее… »
Оставить комментарий
Что имеется ввиду:
Когда Вы договариваетесь с заказчиком о том как будет работать Ваша доработка, Вы всегда обговариваете некоторый набор ограничений, при которых доработка будет работать.
Пример |
SelectОТОБРАЗИТЬ> |
- Договорились о том, что документ будет проводиться по новому с такого-то числа
- При формировании отчета договорились, что заказчик должен обязательно указывать даты начала и даты окончания отчета. Если заказчик хочет получить отчет за весь период, то он выбирает дату начала = ‘01.01.2001’, а дату окончания = ТекущаяДата()
|
Как правильно поступать в случае договоренностей (ограничений)
Впишите в программный код — проверки, что пользователь правильно использует Вашу доработку
Пример |
SelectОТОБРАЗИТЬ> |
- При попытке сохранить документе, выдайте сообщение о том, что с документом можно работать с такого-то числа
- При попытке построения отчета — если указаны пустые даты, то проведите трансформация пустых дат к тем договоренностям, которые обсуждали с заказчиком (например стройте отчет в котором дата начала = ‘01.01.2001’, а дата окончания = ТекущаяДата()
|
Что не стоит делать при вставке «ограничений по договоренности»
В примере с построением отчета — не желательно выдавать сообщение о том, что пользователь «не прав» и что он должен указать определенные параметры. Ведь мы строим систему, которая облегчает жизнь пользователя, а не требует от него нажимать как можно больше кнопок. Поэтом если известно, что по умолчанию мы строим отчет за весь период — просто проведем преобразование периода.
К чему приводит отсутствие фиксирования договоренностей в программном коде
Все очень просто: пока с Вашей доработкой работает конкретно тот человек, которому Вы рассказывали про то, какие есть ограничения с доработкой — то всё хорошо и человек «правильно» пользуется Вашими доработки. Но как только человек со стороны пользователя передает Ваши доработки в руки другого человека (в рамках или не в рамках компании-заказчика) то часто он забывает о том, что в системе есть «ограничения по договоренностям» и не рассказывает другому человеку про эти договоренности.
Даже если Вы при разработке учли договоренности в документации, то для нового человека может быть очень много документации и он может просто не обратить внимание, при прочтении документации на то, что ограничения — существенны.
И вот тогда начинается потеря как времени пользователей — они не могут правильно построить отчет, видят не те данные и т.д., так и Вашего времени — поскольку начинают пользователи требовать от программиста внимания, чтобы он исправил эти ошибки!
Примерно как это может происходит рассказано тут.
2 Комментариев
Дело было вечером, делать было есть чего.
Но позвонил заказчик и говорит: Помнишь мы с тобой дорабатывали документ, а теперь отчеты у нас не правильно строятся. Интересно — ведь тестировал собственноручно аж на двух документах 🙂
Постановка задачи и описание сделанного решения |
SelectОТОБРАЗИТЬ> |
А задача была следующая:
нужно было чтоб при перемещении малоценных активов (МЦ) создавалась новая партия МЦ и в этой партии отражался новое ответственное лицо. А ответственное лицо — это реквизит партии.
Было принято решение, что мы создаём автоматически новую партию и при первой записи документа записываем её в новый реквизит документа перемещения.
....
Если Не ЗначениеЗаполнено(ПартияПеремещения) Тогда
ПартияПеремещения = СоздатьНовуюПартию();
Иначе
ЗаполнитьПараметрыПартии(ПартияПеремещения);
КонецЕсли;
....
За одно ставим все реквизиты новой партии так как указал пользователь в документе Перемещение.
Потом пользователь в отчёте делал группировку в отчете по реквизиту партии Ответственное лицо и видел кто за что отвечает
|
А теперь при перепроведении документов меняется картина в отчете по ответственным лицам — кардинально: То Петя отвечает за кастрюли и молотки, то вдруг кастрюли и молотки «перепрыгивают» на Васю, и это только после перепроведения документа перемещения никак не связанного с Петей.
Читать далее… »
Оставить комментарий
Если программист вообще не определил переменную перед использованием
Сходу написал вот так вот:
Если МояПеременная = 5 Тогда
То тут все понятно: при попытке или сохранить модуль или запустить модуль в котором переменная не определена — 1С выдаст понятную ошибку.
Но вот если программист написал примерно вот такой код
Функция МояФункция(ПараметрФункции)
Если ПараметрФункции = 1 Тогда
А = 100;
КонецЕсли;
Возврат А;
КонецФункции //МояФункция
И особенно если почти всегда данная функция вызывается с параметром = 1, то тогда при отладке система будет работать без ошибок.
Однако если однажды получиться так, что «ПараметрФункции» не совпадет с 1, то тогда А будет не определено — и что получиться в результате работы программы — совершенно не известно.
Читать далее… »
Оставить комментарий
Опишу более подробно, что имеется ввиду, к чему это приводит и как написать правильно:
Постановка задачи |
SelectОТОБРАЗИТЬ> |
Попросил как-то заказчик программиста сделать отчет, отчет по клиентам.И попросил вывести в отчет дополнительную информацию о клиенте.
А дополнительная информация находиться в другом справочнике.
В этом втором справочнике клиенты хранятся не как ссылка, а просто так — текстом (ну так написал другой программист — ранее). И сказал при этом заказчик, что да — у нас во втором справочнике есть всегда все клиенты из основного справочника….
|
Написал программист отчет, вот с таким кусочком кода:
....
СпрПараметров = Справочники.Контрагенты.НайтиПоНаименованию(СпрКонтрагентов.Наименование);
Параметр1 = СпрПараметров.Параметр1;
Параметр2 = СпрПараметров.Параметр2;
....
И всё хорошо, заработал отчет, и пользовался им (отчетом) заказчик долго-долго — а ж целых 6 месяцев…..
Лирика |
SelectОТОБРАЗИТЬ> |
Но взял заказчик на работу нового менеджера и попросил его новых клиентов так-же добавлять в справочник параметров клиентов.
А компьютер, который выдали менеджеру — бы не простой, а так сказать — «с изюминкой», у него по умолчанию была выставлена иностранная раскладка на клавиатуре 🙂
Добавил менеджер нового клиента в справочник дополнительных параметров, но вот не задача: забыл он переключить раскладку на клавиатуре 🙁 а клиента звали Саратов И.В. и вписал он первую букву — не русскую С, а предательскую — иностранную C.
Смотрит — что-то не то набирается на экране, но первая буква правильная…..
Вот взял он и исправил все на русский язык, кроме первой буквы (ну зачем же ей менять, она и так красивая).
А исходный — то клиент назывался на русскую букву С….
|
И перестал работать отчет… и начал выдавать странные ошибки….
Читать далее… »
Оставить комментарий

Программный текст:
всегда нужно проверять что в знаменателе не получится ноль, для того чтоб программа не выдавала критическую ошибку. Это должна быть именно проверка, а не использование конструкции Попытка … Исключение.
Запросы:
опять же всегда нужно проверка что в знаменателе не получится ноль!
использовать конструкцию Выбор
Анекдот |
SelectОТОБРАЗИТЬ> |
Этой ночью, Люся, мы с тобой будем делать то, чего делать нельзя!..
— На ноль делить, что ли?
|
1 Комментарий