Царьков Валерий
http://warenic.narod.ru/
Нарушение целостности данных в компоненте РАСЧЕТ.
С этой особенностью компоненты РАСЧЕТ я столкнулся совершенно случайно.Жила-была база ЗиК первой редакции. И вот наступил новый 2003 год. Подготовили и сдали все отчеты, настала пора переходить на вторую редакцию. Процесс перехода описывать не стану, все прошло относительно неплохо. Проработали полгода - все нормально. Так дернули-ж черти перенести базу с DBF на SQL. После простой выгрузки/загрузки данных пропали некоторые записи журнала расчетов и отменилось проведение нескольких документов. Из чего следовало, что резервное копирование методом выгрузки данных, проводимое регулярно, не имеет смысла, т.к. не обеспечивает 100% отката!
Причину мне подсказали на форуме: "Территория 1С". Это - результат перехода с первой редакции, где документ Кадровое перемещение принадлежал к компоненте расчет.
Я решил проверить. Оказалось, что при выключении флажка Бухгалтерский учет или Оперативный учет
система проверяет наличие проведенных документов и не позволяет записать изменения,
а Расчет - выключай на здоровье! При загрузке записи журнала расчетов оказывались привязанными к "непроводному" документу и просто удялялись, а сам документ делался непроведенным.
Глюки с вытеснением расчетов.
Интересненькое дельце. Отпускаем работника в отпуск в межрасчетный период. Месяц закрываем, переходим на следуюжий. Отзываем работника из отпуска. В журнале все нормально, записи об отпуске отсторнировались и ввелись заново (по другую дату включительно). Теперь оформляем оплату по среднему и... Сторнирующая запись об отпуске вытесняет оплату по среднему! Если перепровести начисление зарплаты, то за этот период (со дня фактического выхода по дату окончания отпуска согласно первого варианта приказа) встанет оплата по окладу (по табелю)! Еще чудесатее!
Избежать этой ситуации можно, переписав модуль проведения документа Приказ на оплату по среднему заработку.
Вместо: ЖрнЗарплата.ВвестиРасчет(Сотрудник, ВвводимыйВР, Начало, Окончание, 0);
необходимо использовать:
ЖрнЗарплата.Новая();
ЖрнЗарплата.ВидРасч=ВвводимыйВР;
ЖрнЗарплата.Объект=Сотрудник;
ЖрнЗарплата.ДатаНачала=Начало;
...
ЖрнЗарплата.Записать();
Осталось предусмотреть, что Начало и Окончание могут быть из разных периодов, тогда придется ввести более одной записи, учитывающих начало и окончание каждого периода.
Неожиданное закрытие программы.
Подобная штука получилась совершенно
случайно: поместил на форму таблицу значений и при открытии решил закрепить
первую колонку. И программу я в этом плане тоже понимаю: требую сделать того,
чего еще не описано (ни одна колонка еще не была добавлена). Но эффект мне
понравился. Как оказалось, это работает и в случае программного создания
объекта Таблица значений.
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.Фиксировать(0 ,1 )
Препарируем план счетов.
План счетов хранится в таблице 1SACCS. Счета можно вводить как в ркжиме "Конфигуратор", так и в режиме "Предприятие". Редактировать счета можно только в том режиме, в котором они были введены. Во втором случае, счета доступны для редактирования в режиме "Предприятие", что не всегда хорошо.
А возможно ли счета, введенные в режиме "Предприятие" видеть в "Конфигураторе"?
Попробуем разобраться. Введем пару счетов. Вот так они выглядят в талице 1SACCS
А вот так выглядит план счетов в файле конфигурации 1Cv7.MD
MDID = F - это как раз "15". Т.е. записи, введенные в режиме "Конфигуратор" прописываются и в конфигурацию. Таким образом, если счета введены в режиме "Предприятие", мы не имеем возможности их видеть в конфигураторе (т.к. будет отображаться информация не из 1SACCS, а из 1Cv7.MD). Зато наоборот - можно. Поле MDID = 0 - значит счет введен в режиме "Предприятие". Если мы ручками поменяем это значение, то пользователи больше не смогут их править.
Побеждаем ограничение длины неопределенного типа.
В таблице под неопределенный тип отводится 23 знака. Если нужна строка большей длины, тогда вносим еще один атрибут типа строка нужной длины.
Процедура ПриЗаписи()
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 цикл
ДопРеквизит=Строка(НеопределенныйРеквизит);
...
Процедура ПриОткрытии()
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 цикл
Если ТипЗначенияСтр(НеопределенныйРеквизит)="Строка" тогда
НеопределенныйРеквизит=ДопРеквизит;
...
Общие справочники.
Эта проблема периодически возникает почти у всех. Допустим, Вы ведете несколько информационных баз (допустим: товарный учет в - "Торговле", бухгалтерский - в "Бухгалтерии"). Часть справочников (например: "Контрагенты" и "Расчетные счета контрагентов")
должны быть одинаковыми. Однако, не очень-то хочется дублировать информацию
и заморачиваться с синхронизацией.
Однако есть таки способ сделать общими справочники, при условии полного совпадения их внутренней структуры. Т.е. не только структура полей, но и их идентификаторы.
Для этого достаточно прописать в файле словаря 1Cv7.DD полный путь к таблицам справочников SCxxx.dbf, уникальности 1SUIDCTL.dbf, длинные строки (если используются такие реквизиты) 1SBLOB.dbf и 1SCONST.DBF (т.к. в нем содержатся периодические реквизиты), но могут возникнуть сложности с константами (т.к. константы тоже содержаться в этом-же файле).
Начать дискуссию