1. Вступительное слово
Сразу пишу о том, что мне приводилось больше работать с компонентой "Расчет",меньше с "Бухгалтерский учет", вообще не приводилось с "Оперативныйучет". Поэтому здесь будет описана работа с первой компонентой, а непо всем сразу. Прошу сразу прощения у поклонников Торговли и Бухгалтерии.
С интеграцией с другими программами я также мало знакома - практически небыло практики. В основном я знаю интеграцию работы 1С с 1С, когда нужно былоданные из одной конфигурации перенести в другую. 1С с Lotus Notes на нашем предприятии была интеграция, когда нужно былодве базы в разных программах поддерживать в актуальном состоянии. Делалосьэто через коммутатор Lotus Notes. Рассказать более подробно также не могу.SQLя только видела на компьютере у заказчика, созданием новой базы и подключениемзанимались специальные люди. Я только смотрела через плечо. Поэтому здесьречь будет вестись только чисто по программированию внутри 1С.
2. Что не следует делать в 1С:Конфигурации
2.1. ТекущаяЗапись()
Выдержки из помощника:
Эта процедура вовсе не хочет работать в Модуле документа. Ее можно использоватьвне контекста захвата Журнала расчета (вне модуля проведения документа, делающегозаписи в журнал расчетов), то есть в Модуле формы (в модулях документа документов,принадлежащих бухгалтерскому учету и оперативному учету, я не проверяла).
2.2. ВвестиПерерасчет() / ВвестиПерерасчетНаОсновании()
Выдержки из Помощника:
У фирмы 1С в типовой комплексной конфигурации я нашла серьезный "ляп",который пришлось переделывать. Вот следующий код, который записан в модуледокумента (в модуле проведения) "Приказ по отпуску". Работает оннеправильно:
ЖрнЗарплата.ВыбратьЗаписиПоОбЪекту(Сотрудник,НТП,ЖрнЗарплата.КонецТекущегоПериода());
Пока ЖрнЗарплата.ПолучитьЗапись()=1љ Цикл
Если (ЖрнЗарплата.Перерасчет=0) и
ЖрнЗарплата.Видрасч=ВидРасчета.ПрофВзносы) Тогда
љљљљљљљљљљљ ЖрнЗарплата.ВвестиПерерасчетНаОсновании(Докум)
љљљљљљљљљљљ КонецЕсли;
КонецЦикла;
В итоге не на все записи, на которые было нужно, вводились перерасчеты. Одна или две записи обязательно оказывались пропущенными. При запуске той же процедуры в отладчике "сЪеденные" записи оказывались в журнале. Узнать, в чем здесь ошибка, было практически невозможно, так как отладчик отрабатывал свое, программа свое.
Дело оказалось в следующем:
При создании выборки ("ВыбратьЗаписиПоОбЪекту") в обЪекте "ЖрнЗарплата" типа "ЖурналРасчетов.Зарплата" помещалось определенное количество записей. При вызове процедуры "ВвестиПерерасчетНаОсновании" позиционирование в выборке смещалось вперед, в результате чего некоторые записи в выборке просто-напросто пропускались. Отчего можно сделать вывод, что нельзя совмещать процедуры перебора записей в выборке и внесение изменения в обЪект учета, по которому делалась эта выборка.
Путь решения:
//процедура составления списка записей, по котрым нужно вводить перерасчет
СписокЗаписей=СоздатьОбЪект("СписокЗначений");
љљљљљљљљљљљ СписокЗаписей.ДобавитьЗначение(ЖрнЗарплата.ТекущаяЗапись());
КонецЕсли;
//процедура ввода перерасчетов
Для м=1 По СписокЗаписей.РазмерСписка() Цикл
љљљљљљљљљљљ ЖрнЗарплата.НайтиЗапись(СписокЗаписей.ПолучитьЗначение(м));
љљљљљљљљљљљ ЖрнЗарплата.ВвестиПерерасчетНаОсновании(Докум);
Причем здесь есть одно "Но". См. п. 2.1. Метод "ТекущаяЗапись()"не работает в Модуле документа, поэтому процедуру - получение списка записей,по которым нужно ввести перерасчет, следует поместить перед проведением вмодуль формы и вызывать ее до момента вызова процедуры "Провести()",переменную "СписокЗаписей" сделать глобальной (то есть, описатьв глобальном модуле в признаком "Экспорт"), чтобы в Модуле документаможно было получить к ней доступ. остальное остается без изменений.
2.3. УдалитьЗапись()
Неравильным будет следующий код:
ЖрнЗарплата=СоздатьОбЪект("ЖурналРасчетов.Зарплата");
ЖрнЗарплата.ВыбратьЗаписиПоДокументу(Докум);
Пока ЖрнЗарплата.ПолучитьЗапись()=1 Цикл
љљљљљљљљљљљ ЖрнЗарплата.УдалитьЗапись();
Тут опять же (см. п. 2.2.) совмещены две операции: перебор элементов выборке и удаление записей из нее. Следует разнести эти две процедуры, используя список значений. Секрет ошибки кроется в том, что при удалении записи из выборки, позиция смещается не на предыдущую, а на следующую за удаляемой. При вызове метода "ПолучитьЗапись", позиционирование "прыгает" через одну запись, которую нужно удалить. Получается, что вместо 20 удаляемых записей, удаленных оказывается ровно в два раза меньше, то есть 10.
Решение в следующем коде:
//процедура создания списка удаляемых записей
//процедура удаления записей
2.4. ВвестиРасчет() / ЗаписатьРасчет() / ВвестиРасчетНаОсновании() / ЗаписатьРасчетНаОсновании()
Если вы их запишете в Модуле расчета, то глубоко об этом пожалеете. При отмене"рассчитанности" записи в журнале исчезают все записи, которые быливведены расчетом, в модуле которого записаны эти(а) процедуры(а).
Поэтому совет: используйте эту процедуру в Модуле документа.
3. Что не следует делать в 1С:Предприятии
3.1. Непосредственное удаление (Сервис -> Параметры -> Закладка"Общие")
Его обычно запрещают в конфигураторе и открывают на этапе отладки ввода данных,чтобы удаление элементов справочника или документов происходило быстрее безвхода в монопольный режим и запуска "Удаление помеченных обЪектов".Непосредственное удаление могут делать только опытные пользователи (пишущиепрограмму) и только в том случае, если они уверены, что на удаляемом элементеничего не завязано (нет на него ссылок из других обЪектов). В конце разработкипрограммы в конфигураторе запрещают выставлять признак "Непосредственноеудаление" и это приемлемо везде и считается ошибкой делать иначе.
3.2. Число цифр года (Сервис -> Параметры -> Закладка "Общие")(Совет)
Некоторые пользователи любят выставлять число цифр года в "2",чтобы вместо четырех цифр набирать всего две (быстрее). Я советую ставитьчисло цифр года "4", чтобы не искать документ, записанный на 2000год (00 год) в документах за 1900 год (тоже 00 год). Иногда 1С понимает набранныйгод, как 2000, но бывает, что запись года получается в 1900 (обычно за этоотвечает "Год начала рабочего столетия" в (Сервис -> Параметры-> Закладка "Общие")). Почему сбивается рабочее столетие, я незнаю. Но все-таки лучше в таких случаях подстраховаться.
Дина Рачевская www.vesnushka.vov.ru Dina_Rachevskaya@tut.by ICQ UIN: 85247474 ® Клерк.Ру