Архив метки: конфигуратор

Как ограничить пользователя одним сеансом

В восьмой версии 1С нет штатного способа ограничить пользователя использованием только одного сеанса, это сделано потому что теперь при необходимости система может создавать от имени пользователя дополнительные сеансы в которых выполняются какие-то вспомогательные обработки. Например, когда формируется отчет, обработка данных происходит в фоновом задании, которое видно в списке активных пользователей отдельной строкой. С другой стороны это дает возможность пользователям открывать окно приложения несколько раз, на одном или разных компьютерах. Чтобы бороться с этим нужно применять программные методы. Читать далее

Оформление строк табличной части документа

Часто для улучшения информативности табличной части возникает необходимость как-то выделить важные элементы. Наверное это в первую очередь от того, что человек воспринимает визуальную информацию быстрее и легче. Особенно это актуально для девушек-бухгалтеров, как вы думаете, что им легче понять — то, что в поле «Процент изменения цены» стоит число «-2.035» или то, что поле цена окрашено в зеленый цвет?

Для решения этой задачи в 1С 8.2, в управляемых формах, присутствует элемент формы — «Условное оформление». Чтобы его найти нужно в конструкторе формы выделить самый верхний элемент дерева «Форма», в списке свойств справа в разделе «Оформление» будет пункт «УсловноеОформление». При нажатии на ссылку возле пункта, откроется окно настроек, в нем очень просто разобраться — необходимо указать способ оформления, т.е. цвет фона, текста, шрифт и так далее, затем указать поля, которые нужно оформить и условие, при выполнении которого будет применено оформление.

Читать далее

Настройка Универсального отчета

Сегодня подвернулась интересная задачка – нужно было разобраться с отчетом, построенным на базе универсального. Загвоздка вот в чем (смотреть картинку):

2012-05-07_100838

В отчете присутствует поле “К-во продаж”, которое отражает количество раз, которое товар встречался в группировке, т.е. количество раз, которое он был продан. Это видно особенно хорошо, когда отчет сформирован по документам. Проблема – нет общего итога (справа внизу). Покрутив немного в конструкторе запросов разные варианты я пришел к выводу, что это поле система не воспринимает как числовое и не желает его суммировать, но почему-то только в общий итог, т.к. итоги по группировкам прекрасно работают.

Читать далее

Оставляем только числа

С последними нововведениями в учете в стандартных конфигурациях оказалась востребованной возможность программы автоматически очищать строку символов от знаков, не являющихся цифрами: в новой налоговой накладной, в печатной форме, выводятся номера телефонов, для этих номеров предусмотрены 10 клеток, в которые вносятся цифры, по одной в каждую клетку. Как правило, в справочнике, номера телефонов записаны так, как это обычно принято – с разделением на код в скобках и номер, часто номер разделен на группы через тире. Когда номер телефона выводится на печатную форму программа просто берет подряд первые 10 символов из строки с номером и расставляет символы по клеткам. Можно, конечно, сказать пользователям, чтобы привели все номера в базе к виду без скобок тире и прочих ненужных символов, но тогда в других местах, где удобнее было-бы читать “нормальный” номер будет выводится уже исправленный и неудобочитаемый.

Читать далее

Отладка кода: НДС в УТП

12971069114KVyP2Необычная проблема недавно попалась в УТП (конфигурация “Управление торговым предприятием” для Украины, платформа 8.2) – при формировании проводок в приходном документе проводка взаиморасчетов с контрагентом выполнялась с зачетом аванса, т.е. как второе событие, а проводка НДС как первое событие. В результате задваивалась сумма на дебете счета 6442, вместо того, чтобы появиться в кредите. Я рассматривал проблему “по-программерски”, изнутри, поэтому какие настройки в самой программе привели к такому положению не знаю, расскажу только, где увидеть причину.

В модуле проведения документа расчеты событий во взаиморасчетах и в учете НДС производятся отдельно и используются разные регистры, поэтому и стала возможной такая проблема. Расчет движений по НДС выполняется в общем модуле “НалоговыйУчет”, если вы ведете обычный учет, без пропорционального распределения, то последовательность в алгоритме расчета приведет вас к процедуре ДвиженияПоРегистрамНалоговогоУчетаУпрощенныйНалоговыйУчет(). Кстати, отслеживать последовательность выполнения команд в модуле очень легко: если запустить из конфигуратора сеанс предприятия в режиме отладки (клавиша F5), то находясь в коде, клавишей F9 можно ставить точки останова – теперь при выполнении модуля в указанной точке программа остановится и можно будет просмотреть содержимое переменных. Если в тексте модуля вызывается какая-либо процедура, клавишей F12 можно перейти к ней и так далее по цепочке.

Читать далее

Как отредактировать документ если этого нельзя делать

2011-06-03_213924Часто в учетных программах требуется разграничение прав пользователей и при этом обычно есть пользователи, которым, например, разрешено вводить новые документы, но запрещено редактировать уже введенные. К примеру, продавцы в отделе продаж оформляют расходные накладные на клиентов в течении рабочего дня, но не могут изменить накладную, которая введена вчера. Такие ограничения в 1С:Предприятии версии 7.7 накладываются программно, т.е. в модулях формы и документа добавляются команды проверки условий и разрешается или нет запись, проведение и т.д. Связано это прежде всего с тем, что на уровне конфигурации, в наборе прав пользователя возможен запрет на доступ к проведенным документам но нельзя наложить такой запрет по условию – только если в документе указан контрагент с каким-то признаком или если документ введен какое-то число дней назад. И так обстоит со всеми остальными ограничениями. Поэтому, когда требуется определить гибкие условия доступа пользователей к объектам программы, приходится всё делать программными обработками при наступлении нужных событий – записи, открытия или проведения документа, элемента справочника, журнала.

Читать далее

Произвольный запрос в списке справочника

Сегодня рассказ о том, как я боролся с очень занимательной штукой в 1С 8.2: формирование списка справочника по произвольному запросу. Что это такое? Раньше, в версии 7.7, когда нужно было в списке справочника отобразить вычисляемое поле, например цену из подчиненного справочника или остаток, мы вставляли в поле списка функцию, которая динамически вычислялась при выводе строк. Это жутко тормозило вывод строк, особенно при работе в сети. Теперь у разработчика есть возможность описать для списка справочника запрос, который будет определять состав списка и, самое главное, запрос будет выполнен на сервере перед выдачей списка клиенту. В этом запросе как раз и есть возможность вставлять вычисляемые поля.

Читать далее

Из формы на сервер и обратно

naklienteКазалось-бы, простая задача – в строке документа есть несколько реквизитов: Артикул, Вес, Размер, при изменении которых они должны сохраняться в реквизитах справочника, элемент которого выбран в этой-же строке. Т.е. получается, что пользователь не редактирует элемент справочника, а система это делает за него. Всё было-бы просто, если бы речь не шла об 1С версии 8.2, и вот почему – в 8.2 операции записи элементов могут выполняться только на сервере и не могут выполняться в форме, открытой на клиенте.

Читать далее

Как обхитрить документ

Вчера столкнулся с необходимостью программно ввести акт оказания услуг на основании счета-фактуры в стандартной Бухгалтерии для Украины. Сначала было принялся писать обработку заполнения по очереди всех реквизитов, но вспомнил, что в форме документа описана стандартная процедура ВводНаОсновании() и решил использовать ее. В отличии от восьмой версии, в семерке нельзя обратиться к процедурам, описанным в форме документа как к методам объекта, поэтому приходится немного хитрить.

Можно придумать разные варианты, приведу один для примера. Создаю объект “Документ.ОказаниеУслуг”, создаю новый документ, в поле Заказ у вновь созданного объекта ввожу документ, на основании которого будет выполнено заполнение, т.е. ссылку на счет, записываю, чтобы создался объект данных, и теперь даю команду открыть форму этого вновь созданного документа с параметром “Авто”.

2010-09-02_084614

Здесь использована процедура ОткрытьФормуМодально(), чтобы исполнение кода не пошло дальше, а дождалось закрытия открытой формы документа. Теперь в модуль формы документа нужно вставить обработку переданного параметра:

2010-09-02_084948Т.е. вставленная при вызове ОткрытьФормуМодально() переменная или какое-либо значение  теперь доступно в форме документа как Форма.Параметр. Осталось в процедуре ВводНаОсновании() добавить команды записи и закрытия формы:

2010-09-02_085310Они расположены непосредственно перед завершением процедуры. Вот собственно и всё. Аналогичным образом можно организовать программный вызов печати документа.

Как испортить базу данных и потом вернуть ее к жизни

Если вы не спец в работе с базами 1С, то можете при обновлении допустить простую ошибку: вместо того, чтобы запустить процедуру объединения (при которой система анализирует различия в структуре данных), заменяете файл конфигурации новым, просто записывая его поверх старого. Наиболее велик соблазн поступить таким образом в случае с локальной базой в файловом варианте, т.е. когда все данные хранятся в файлах DBF. Вот на таком примере и расскажу, что бывает и как это исправить.

Итак, после замены файла 1cv7.md новым вариантом при запуске 1С:Предприятия видим примерно такое сообщение: «Codebase error, Unrecognised Field Name…»

2010-08-26_102803

И за ним например такое: «Нарушена структура данных таблицы …»

2010-08-26_103233 Читать далее