Пример одного пакета запроса, который вычисляет актуальное значение северной надбавки на заданный момент

Пример одного пакета запросов для конфигурации 1С Зарплата и Управление персоналом 2.5 для 1С Предприятия 8.2, который вычисляет актуальное значение северной надбавки на заданный момент.

Параметры запроса :
ГоловнаяОрганизация, ДатаСреза.
На выходе запроса — таблица из двух колонок :
Физлицо, АктуальныйПроцентСевернойНадбавки.

Шкалы северной надбавки в таблицах базы данных 1С пока нет, поэтому я явно задаю шкалу в отдельной временной таблице ИсходнаяШкалаНадбавок (а не читаю из какой-либо таблицы базы данных).

Для простоты восприятия запроса я «сшиваю» в запросе необходимый минимум таблиц, и потому регистр сведений ПлановыеНачисленияРаботниковОрганизаций не анализируется. То есть, вычисляется только процентное значение северной надбавки (исходя из шкалы и данных о северном стаже), а запланирована ли северная надбавка для данного физического лица — запрос «не знает».

Текст запроса :

 
Читать далее

Рубрика: Программное обеспечение | 4 комментария

На свежую голову задачи решаются быстрее

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

Рубрика: Жизнь, Программное обеспечение | Оставить комментарий

Программист и озарение свыше

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

Рубрика: Жизнь, Программное обеспечение | Оставить комментарий

Передача таблицы значений в качестве параметра запроса com-соединению с 1С Предприятием 8.2

Обогатил свою компетенцию, научившись передавать таблицу значений в качестве параметра запроса com-соединению с 1С Предприятием 8.2.
Изначально думал, что я это делать умею, и никаких подвохов от задачи не ждал.
Однако передача конструктору ОписаниеТипов массива допустимых типов с единственным значением Тип(«Строка») привела к ошибке выполнения удалённого запроса «Тип не может быть выбран в запросе» в момент выполнения запроса.
Стал пытаться изменить типизацию таблицы, заменив Тип(«Строка») на что-то другое. Первая мысль была — вызвать эту функцию Тип() в контексте com-соединения. Однако на этом пути меня ждало полное разочарование.
Долго пытался понять, почему у com-соединения 1С Предприятием 8.2 нет метода Тип(), Type() или чего-то подобного. Потратив битый час, так и не разобрался, почему…
Стал рыскать в поисках информации по интернету, как народ передаёт таблицу значений в качестве параметра запроса com-соединению с 1С Предприятием 8.2. Просмотрев пару статей, наткнулся на крошечную заметку, где в конструкторе ОписаниеТипов нет вызова этой функции Тип(), а есть просто строка с именем типа (то есть, аргумент функции Тип). Попробовал опустить вызов Тип(), оставив вместо вызова функции её аргумент. Помогло!
Дальше получил ошибку в запросе «нельзя сравнивать поля неограниченной длины и несовместимые типы» и стал разбираться с квалификаторами строки. Квалификатор строки в вызове конструктора ОписаниеТипов стоит на втором месте, на первом месте квалификатор числа был опущен. Оказывается, в com-соединении так делать нельзя. Поставил квалификатор строки на первое место, и мой запрос заработал!
Итак, описать типизированную таблицу значений для передачи com-соединению можно так :

КвалифСтроки = СоединениеС_ЗУП.NewObject(«КвалификаторыСтроки», 20);
ДопустимыеТипы = СоединениеС_ЗУП.NewObject(«ОписаниеТипов», «Строка», КвалифСтроки);
ТаблицаПараметровЗУП.Колонки.Добавить(«УпрКод_Склада», ДопустимыеТипы);
ТаблицаПараметровЗУП.Колонки.Добавить(«УпрКод_Фирмы», ДопустимыеТипы);

Вот на эти 4 строки я потратил около часа, чтобы мой запрос в удалённой базе заработал так, как мне нужно. Причём до самого конца я не был уверен, что то, что я хочу, вообще возможно, и уже мысленно продумывал пути обхода этого неожиданного препятствия.

Рубрика: Обучение, Программное обеспечение | Метки: , , , | 4 комментария

1С Предприятие 8.2. Пример получения в запросе всех подразделений с учётом иерархии

.

// получает все запрещенные к премированию подразделения с учетом иерархии

Функция ПолучитьВсеЗапрещенныеПодразделения() Экспорт

МВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос();

Запрос.МенеджерВременныхТаблиц = МВТ;

// сначала получим сырые данные

Запрос.Текст = «ВЫБРАТЬ

|   опЗапретПремированияПодразделенийСрезПоследних.СУчетомИерархии,

|   опЗапретПремированияПодразделенийСрезПоследних.ПодразделениеОрганизации

|ПОМЕСТИТЬ ЗапрещенныеПодразделения1

|ИЗ

|   РегистрСведений.опЗапретПремированияПодразделений.СрезПоследних(&ДатаСреза, Организация = &Организация) КАК опЗапретПремированияПодразделенийСрезПоследних

|ГДЕ

|   НЕ опЗапретПремированияПодразделенийСрезПоследних.ПремированиеРазрешено»;

Запрос.УстановитьПараметр(«Организация», Организация);

Запрос.УстановитьПараметр(«ДатаСреза», КонецДня(ДатаКонца));

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Выборка.Следующий();

// получим количество записей временной таблицы

КолВоЗаписей1 = Выборка.Количество;

КолВоЗаписей2 = 0;

НомерЦикла1 = 1;

// затем напишем циклический запрос, в котором будут меняться номера вложенных таблиц

// всё время результат будем объединять с исходной таблицей (без совпадений!)

Запрос.Текст = «ВЫБРАТЬ

|   ЗапрещенныеПодразделения.СУчетомИерархии,

|   ПодразделенияОрганизаций.Ссылка КАК ПодразделениеОрганизации

|ПОМЕСТИТЬ ЗапрещенныеПодразделения1

|ИЗ

|   ЗапрещенныеПодразделения0 КАК ЗапрещенныеПодразделения

|       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

|       ПО ЗапрещенныеПодразделения.ПодразделениеОрганизации = ПодразделенияОрганизаций.Родитель

|           И (ЗапрещенныеПодразделения.СУчетомИерархии)

|

|ОБЪЕДИНИТЬ

|

|ВЫБРАТЬ

|   ЗапрещенныеПодразделения.СУчетомИерархии,

|   ЗапрещенныеПодразделения.ПодразделениеОрганизации

|ИЗ

|   ЗапрещенныеПодразделения0 КАК ЗапрещенныеПодразделения»;

// условие выхода из цикла — количество искомых подразделений перестанет расти

Пока КолВоЗаписей1 <> КолВоЗаписей2 Цикл

КолВоЗаписей2 = КолВоЗаписей1;

// циклически заменяем номера вложенных таблиц

Запрос.Текст = СтрЗаменить(Запрос.Текст, «ЗапрещенныеПодразделения» + НомерЦикла1, «ЗапрещенныеПодразделения» + Число(НомерЦикла1 + 1));

Запрос.Текст = СтрЗаменить(Запрос.Текст, «ЗапрещенныеПодразделения» + Число(НомерЦикла1 1), «ЗапрещенныеПодразделения» + НомерЦикла1);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Выборка.Следующий();

// получим количество записей временной таблицы

КолВоЗаписей1 = Выборка.Количество;

НомерЦикла1 = НомерЦикла1 + 1;

КонецЦикла;

// последняя (или предпоследняя!) таблица даст нужный результат, в колонке «ПодразделениеОрганизации»

// последняя таблица имеет номер НомерЦикла1 (он только что был увеличен на 1)

// предпоследняя таблица имеет номер (НомерЦикла1-1)

Запрос.Текст = «ВЫБРАТЬ

|   ЗапрещенныеПодразделения.СУчетомИерархии,

|   ЗапрещенныеПодразделения.ПодразделениеОрганизации

|ИЗ

|   ЗапрещенныеПодразделения0 КАК ЗапрещенныеПодразделения»;

Запрос.Текст = СтрЗаменить(Запрос.Текст, «ЗапрещенныеПодразделения0», «ЗапрещенныеПодразделения» + НомерЦикла1);

Результат = Запрос.Выполнить();

Возврат Результат.Выгрузить().ВыгрузитьКолонку(«ПодразделениеОрганизации»);

КонецФункции // ПолучитьВсеЗапрещенныеПодразделения()

.

Рубрика: Программное обеспечение | Оставить комментарий

Заполнение документов двойным способом (из обработок и из формы самих документов) усложняет доработку

Заполнение документов двойным способом (из обработок и из формы самих документов) усложняет доработку. В ЗУП 2.5.45.3 документ-пачка СЗВ-6-3 заполняется только из формы обработки ПодготовкаДанныхПФР2010. Документ записывается в базу в момент закрытия формы обработки, а не сразу после нажатия кнопки «Сформировать сведения». Всё это усложняет доработку, и вместо сеансовых переменных приходится вводить флажок на форме, который управляет включением-выключением доработки.

Рубрика: Программное обеспечение | Оставить комментарий

УстановитьНовыйНомер() меняет мой параметр сеанса

Отловил в новой платформе 1С Предприятие 8.2.15.294 «забавный» глюк — метод документа УстановитьНовыйНомер() в функции СоздатьСЗВ63() в обработке ПодготовкаДанныхПФР2010 (1С Зарплата и управление персоналом 2.5.45.3) меняет мой параметр сеанса. Предопределенный метод УстановитьНовыйНомер() вызывается для нового создаваемого документа вида СведенияОНачисленномЗаработкеСЗВ63.
До вызова этого метода мой параметр сеанса равен Истина, после вызова — Ложь.
Это происходит лишь во время первого вызова метода УстановитьНовыйНомер(). Если кусок кода выполняется повторно, эффект не наблюдается.

Рубрика: Программное обеспечение | 1 комментарий

Сохранность данных на жёстких дисках. Дефрагментатор Defraggler 2.0

Мой знакомый обратился ко мне за компьютерной помощью. Он пожаловался на периодическое минутное зависание компьютера, в ходе которого компьютер перестаёт реагировать на ввод — только непрерывно горит индикатор жёсткого диска.
После осмотра программной и аппаратной начинки компьютера я решил провести дефрагментацию жёсткого диска.
Загрузил бесплатную программу Defraggler 2.0 и запустил дефрагментацию диска C:
В ходе работы дефрагментатора мой знакомый открывал какие-то окна на компьютере и непроизвольно «поймал» тот самый момент, когда компьютер «завис» на непродолжительное время. В ходе зависания индикатор жёсткого диска горел не переставая.
Я понял, что проблемы с компьютером — не надуманные. Посмотрел SMART-атрибуты, отображаемые программой Defraggler 2.0 и понял, что диск «сыпется». После увиденного нами зависания изменилось (уменьшилось) количество секторов в очереди на REMAP (атрибут 197) и увеличился счётчик неисправимых ошибок (атрибут 187). Причём значение атрибута 187 зашкалило за 4300.
Поскольку Defraggler 2.0 распознал состояние диска как «хорошее», я не стал поднимать тревогу. Мой знакомый был предупреждён о возможном развитии ситуации. Я посоветовал ему последить за дальнейшим изменением значений атрибутов, и если они неуклонно продолжат расти, тогда уже нужно подумать о превентивной замене жёсткого диска.
Проблемный диск — Seagate 750 Gb (3 пластины). SMART-атрибуты показывали 200 суток бесперебойной работы, и около 800 циклов включения-выключения. Диску было примерно 2.5 года, но использовался он довольно интенсивно (обработка массивных фотографий в RAW-формате).
Справедливости ради отмечу, что в том же системном блоке рядом с первым жёстким диском был вставлен точно такой же диск (на который записывались резервные копии информации с первого диска), у него все счётчики сбойных секторов были в норме.

Рубрика: Программное обеспечение | Оставить комментарий

TeamViewer на службе у программиста и бухгалтера

Бесплатная (для некоммерческого использования) программа TeamViewer очень помогает в вопросе взаимодействия программиста 1С и бухгалтера. Особенно когда нужно помочь бухгалтеру в работе с программой 1С. Эта программа позволяет консультанту увидеть рабочий стол удалённого пользователя и управлять рабочим столом : запускать программы, открывать окна, видеть всё происходящее на экране у пользователя.
В отличие от Radmin, эта программа позволяет управлять компьютером, находящимся за NAT-роутером, без специальной настройки роутера. Это достигается за счёт активного исходящего соединения каждого клиента TeamViewer.
Сеансы связи в бесплатной версии TeamViewer длятся 30 минут, после чего связь прерывается и может быть возобновлена вновь.
TeamViewer позволяет просматривать экран пользователя только с его разрешения (в отличие от Radmin). Но зато управление доступно в двух режимах : с разрешения и по паролю.
TeamViewer позволяет объединить сеть управляемых компьютеров в одной учётной записи.
TeamViewer — многоплатформенная программа.

Рубрика: Программное обеспечение | Метки: | Оставить комментарий

Скорость запуска 1С Предприятия 8.2

Оказывается, скорость запуска 1С Предприятия 8.2 и скорость входа в серверные базы можно существенно увеличить, если … дефрагментировать каталог временных файлов в профиле пользователя на клиентском компьютере. Да и вообще, дефрагментировать жёсткий диск полностью (каталог исполняемых файлов, в частности).

Рубрика: Программное обеспечение | Оставить комментарий