Архив метки: кодинг

Число прописью

цифры

цифры

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

Делаем так: устанавливаем режим прописи гривны на нужном языке, применяем функцию Формат(НашеЧисло, “ЧПДС”), из полученной строки вырезаем левую часть до слова “грив”, т.к. могут быть варианты “гривен”, “гривня”, берем без окончания.

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

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

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

Читать далее

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

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

2012-05-07_100838

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

Читать далее

Меню со спецэффектами

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

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

Читать далее

Условия в запросах

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

К примеру, в запросе есть переменная “Субконто”, в ней элементы справочника, есть несколько групп справочника: Группа1, Группа2, и т.п., нужно было дать возможность наложить условие на выбор:

  • Субконто входит в одну из указанных групп: (Субконто В Группа1) ИЛИ (Субконто В Группа2) и т.д.
  • Субконто не входит ни в одну из указанных групп: НЕ(Субконто В Группа1) И НЕ(Субконто В Группа2) …

В ходе экспериментов оказалось, что конструкции запроса:

УСЛОВИЕ ((Субконто В Группа1) ИЛИ (Субконто В Группа2)); – работает

УСЛОВИЕ (НЕ(Субконто В Группа1) И НЕ(Субконто В Группа2)); – не работает, т.е. результат запроса пуст

Вторую конструкцию пришлось реализовывать последовательным наложением условий и в таком варианте все замечательно заработало:

УСЛОВИЕ (НЕ(Субконто В Группа1));

УСЛОВИЕ (НЕ(Субконто В Группа2));

Замечание: для единичного запроса вполне подошла бы конструкция такого вида: УСЛОВИЕ (НЕ(Субконто В СписокГрупп)); где в список групп можно внести нужные группы, но только в моем случае заранее не было известно ни количество запросов, ни количество условий, поэтому пришлось возиться с И/ИЛИ.

Использование регистра сведений

Обнаружил одну, не совсем очевидную, особенность при работе с регистром сведений. Если, к примеру, есть регистр с тремя измерениями и я хочу установить новые значения ресурсов для набора измерений, создаю набор записей, устанавливаю отбор по измерениям, добавляю записи. Если при этом установить отбор, указав не три измерения, а только одно, то создаваемый набор записей заменит собой все уже имеющиеся записи, у которых установлено такое-же значение этого измерения. Т.е. установив неполный отбор по измерениям можно потерять нужные записи в регистре. Чтобы такого не произошло необходимо всегда задавать все значения измерений в отборе и если какое-то измерение нужно задать пустым, то устанавливать в отборе пустое значение. Также нужно помнить, что у периодического регистра в отборе присутствует измерение “Период”.

Математика в коде 1С

Конечно, не часто, но попадаются задачи, где необходимо использовать математические функции, например корень числа или тригонометрические синусы с косинусами. Встроенный язык 1С:Предприятия на такие вещи обделен, однако, можно воспользоваться доступным в среде Windows языком VBScript.

Для вычисления выражений с функциями на VBScript необходимо в коде 1С создать объект “MSScriptControl.ScriptControl”, свойство “Language” установить в “VBScript” и потом вызвать метод “Eval” которому в качестве аргумента передается строка с вычисляемым выражением.

Пример вычисления косинуса числа:

2011-06-20_102606 Читать далее

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

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

Читать далее

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

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

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

Читать далее

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

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

Читать далее