Дополнительные виды расчета не учитываются в расчетной базе основных видов расчета

Ситуация, которая повергла меня в шок.

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

Так вот — я обнаружил, что в ЗУП 2.5.49.1 при расчёте районного коэффициента (с комментарием) фактическая расчетная база не включила в себя сумму персональной надбавки, которая «сидит» в этом же документе (начисления зарплаты работникам организаций) на закладке Дополнительные начисления.

Но если поместить записи с персональной надбавкой в любой другой документ, отличный от того, в котором рассчитывается районный коэффициент, то расчёт районного коэффициента производится верно, т.к. расчётная база по факту включает в себя сумму персональной надбавки.

По-моему, это явная ошибка.

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

Как покупать в магазинах Юлмарт по второй колонке (цена постоянного покупателя)

Открыть свой мини-бизнес не просто, а очень просто! Зарабатывайте на партнёрских программах там, где Вы тратите деньги.

Пример такой партнёрской программы : как купить товар по второй колонке Юлмарт (ulmart.ru). Суть такой партнёрской программы состоит в следующем : Вы регистрируетесь в магазине Юлмарт как постоянный покупатель (для этого достаточно при регистрации указать промо-код 2358192), получаете свой промо-код для скидки. Этот код раздаёте людям, заинтересованным в покупках в магазине Юлмарт. Люди делают покупки, Вы получаете процент от XXL-бонуса от их покупок. При этом покупаемые товары могут быть разными : флешки, компьютеры, ноутбуки, электронные книги, стиральные машины, кондиционеры.

Понятно, что вложений такой бизнес не требует. Нужно только быть активным в раздаче своего партнёрского кода. Ну, а отдачу такой бизнес приносит только в виде отоваривания бонусов (т.е. в виде реальных денежных скидок) при покупках товаров в том же Юлмарте. Что при условии периодических закупок в Юлмарте означает экономию реальных денег.

Рубрика: Реклама | Метки: , , , , | Оставить комментарий

Названия полей таблиц баз данных 1С, подключенных к хранилищу, могут отличаться друг от друга

Сегодня выяснил интересную вещь.
Если составлять описание таблиц и полей данных 1С, как они хранятся в реальной базе данных, то несмотря на то, что две базы 1С подключены к одному и тому же хранилищу (и у них совпадают метаданные вплоть до идентификаторов), в реальных таблицах базы данных могут быть расхождения в наименовании полей таблиц.
Реальный, живой пример : базы ЗиУП, подключенные к хранилищу.

Сравнение таблиц для справочника Сотрудники организаций :

разница в наименованиях полей таблиц базы данных 1С

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

По всей видимости, отличия эти вызваны тем, что в период, когда были добавлены отличающиеся поля, конфигурации обеих баз данных обновлялись не через хранилище и не через поддержку (т.е. не централизованно), а путём сравнения — объединения с файлом новой версии конфигурации (кустарно).

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

Ошибка проверки данных XDTO : Структура объекта не соответствует типу

Дали задание : прочитать XML-файл и закачать его в 1C. XML-схему не дали.
Создал XDTO-пакет с требуемыми типами, проверил логику структуры. Вроде сходится.
Стал закачивать данные — получил ошибку :
Проверка дополнительного свойства:
форма: Элемент
имя: Begin
по причине:
Ошибка проверки данных XDTO : Структура объекта не соответствует типу

Здесь Begin — синоним (локальное имя) первого свойства считываемого XML-документа.
Решил зайти с другой стороны : а каким 1С хочет видеть мой объект в файле?
Выкачал пробный объект (с установленным свойством Begin) в файл и обратил внимание, что имя XML-документа в файле всегда соответствует имени типа, как оно задано в конфигураторе (в файле «REPORT», а у меня — «ОтчетОПродажеБилетов»).
Задать синоним, чтобы 1С поняла, что тип ОтчетОПродажеБилетов в файле содержится в XML-документе «REPORT», не получается!
Пришлось пожертвовать понятным именем («ОтчетОПродажеБилетов») типа головного объекта, считываемого из файла, и переименование ОтчетОПродажеБилетов в REPORT решило проблему. Остальные объекты переименовывать не пришлось — для них синонимы отработали как положено.

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

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

Пример одного пакета запросов для конфигурации 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. Документ записывается в базу в момент закрытия формы обработки, а не сразу после нажатия кнопки «Сформировать сведения». Всё это усложняет доработку, и вместо сеансовых переменных приходится вводить флажок на форме, который управляет включением-выключением доработки.

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