Делаю перенос с 7.7 в 8.2. с БУХ в БУХ (знаю, надо пользоваться типовой обработкой. Но тут много индивидуального)
При формировании документа "Прием на работу в организацию" в 8.2. мне надо получать с спр.Сотрудники (7.7.) значение "Дата увеличения з/п" - ДатаБазыИндекса;
Тест такой:
спр - тут мы уже получили с 7.7 записи справочника и обрабатываем их...
спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
СпрИ = Спр.ТекущийЭлемент();
Если СпрИ.ЭтоГруппа() = 1 Тогда
Продолжить;
Иначе
сотр = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(СпрИ.Наименование).Ссылка;
НовСтр = Док.РаботникиОрганизации.Добавить();
НовСтр.ДатаПриема = СпрИ.ДатаПриема;
НовСтр.Сотрудник = Сотр;
.....
Вобщем подскажите как мне получить нужные значения . Заранее спасибо
ні.
стоп я вже запутався . я в 7.7 взагалі не працював . тобто так виходить що він реквізит форми
а що у 8.2 немає реквізитів форми - є
з коду довідника "Сотрудники" в 7.7:
1. спочатку ДатаБазыИндекса прив`язуються до ДатыПриема
Процедура ИзмДатаПриема()
Если Выбран() = 0 Тогда
ДатаБазыИндекса = ДатаПриема;
КонецЕсли;
КонецПроцедуры
Процедура СохранитьДатаБазыИндекса()
Если дСтараяДатаНачаларасчетаИндексации = ДатаБазыИндекса Тогда
Возврат;
КонецЕсли;
Если Выбран() = 0 Тогда
Записать();
КонецЕсли;
Если ПустоеЗначение(ДатаБазыИндекса) = 1 Тогда
ДатаБазыИндекса = глДатаНачалаРасчетаИндексации
КонецЕсли;
Спр = СоздатьОбъект("Справочник.Сотрудники");
Спр.НайтиЭлемент(ТекущийЭлемент());
Спр.ПризнакИзмененияДоходаДляИндексации.Установить(НачМесяца(ДатаБазыИндекса),1);
Спр = "";
КонецПроцедуры
Процедура ПриОткрытии()
СохранениеПериодическихРеквизитов(2, "*");
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Основной","Общие");
Форма.Закладки.ДобавитьЗначение("Зарплата","Данные по з/п");
Форма.Закладки.ДобавитьЗначение("Паспорт","Паспортные данные");
Форма.Закладки.ДобавитьЗначение("Налоговые","Налоговые данные");
Форма.ИспользоватьСлой("Основной, Общий",2);
Активизировать("Фамилия",0);
Если Выбран() = 1 Тогда
НачФирма = Фирма;
КонецЕсли;
Если ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
ДатаБазыИндекса = глДатаНачалаРасчетаИндексации;
Иначе
ДатаБазыИндекса = глПрочитатьДатуИзмененияДоходаДляИндексации(ТекущаяДата(),"ПризнакИзмененияДоходаДляИндексации",ТекущийЭлемент());
ДатаБазыИндекса = Макс(ДобавитьМесяц(ДатаБазыИндекса, -1), глДатаНачалаРасчетаИндексации)
КонецЕсли;
дСтараяДатаНачаларасчетаИндексации = ДатаБазыИндекса;
УстДоступность();
КонецПроцедуры
ось ключові стрічки
ДатаБазыИндекса = глПрочитатьДатуИзмененияДоходаДляИндексации(ТекущаяДата(),"ПризнакИзмененияДоходаДляИндексации",ТекущийЭлемент());
ДатаБазыИндекса = Макс(ДобавитьМесяц(ДатаБазыИндекса, -1), глДатаНачалаРасчетаИндексации)
Я так зрозумів, що це все потрібно для розрахунку індексації. Вона нараховується через два місяці після прийому співробітника:
...ДатаБазыИндекса = ДатаПриема
дСтараяДатаНачаларасчетаИндексации = ДатаБазыИндекса....,
...ДатаБазыИндекса = ДатаПриема
если нужно запускать функцию для выдачи Искомой даты. Нужные параметры : 1.ПризнакИзмененияДоходаДляИндексации - 0/1 получаем. 2. дата тоже есть. 2.текущий элемент(спрИ) тоже есть.
Подскажите как мне заставить выполнять нужную функцию .. ( к справочнику в 7.7 я попадаю так:
ТекСправочникИ = "Сотрудники";
спр = БазаИ.CreateObject("Справочник."+ТекСправочникИ);
Варианта2
1.Выгружаем справочник из 7 а в 8 загружаем
2.По ОЛЕ - пишем 7-й запрос с получением даты изменения
2,5. Можно поиграться с EvalExpr() (в 7 написать функцию с Экспорт)
вдогонку
V7 = Новый COMобъект("V77.Application");
СпрНом = V7.CreateObject("Справочник.Номенклатура");
СпрЦены = V7.CreateObject("Справочник.Цены");
Периодический = V7.CreateObject("Периодический");
....
....
Периодический.ИспользоватьОбъект("Цена",СпрЦены);
Периодический.ВыбратьЗначения();
Пока Периодический.ПолучитьЗначение() > 0 Цикл
//В цикл не входит хотя в 1с7 4 раза изменялась цена
Строка = СписокНовыхЦен.Добавить();
Строка.Дата = Периодический.ДатаЗнач;
Строка.Цена = Периодический.Значение;
КонецЦикла;
зразу вибачаюсь, якщо нісенітниця, бо розумію проблему лише дуже абстрактно :
може тимчасово створити для об'єкту реквізит, промоделювати ситуацію розрахунку з присвоєнням значення реквізиту (тобто фізичному полю). а вісімки уже просто забрати готовеньке....
в 8 нужно заполнить регистр сведений ПараметрыРасчетаИндексации
to sava1
регистр сведений ПараметрыРасчетаИндексации заполнен уже только не тем чем надо. Там стоят даты приема. а у нас есть более поздние даты Индексации ЗП
вот еще мучаюсь так:
Подключить();
//
//
//ТекСправочникИ = "Сотрудники";
Сообщить("______________________________");
Сообщить("Приказ о приёме");
ТовОле = БазаИ.CreateObject("Справочник.Сотрудники");
ТовОле.ВыбратьЭлементы();
Пока ТовОле.ПолучитьЭлемент()=1 Цикл
СпрИ = ТовОле.ТекущийЭлемент();
Если СпрИ.ЭтоГруппа()= 1 ИЛИ СпрИ.ПометкаУдаления() = 1 Тогда
Продолжить;
КонецЕсли;
// Пометка = Спри.ПризнакИзмененияДоходаДляИндексации.Получить(ДатаОстатков);
//Если Пометка = 0 Тогда
//Пометка = "0";
//Иначе Пометка = "1";
//КонецЕсли;
ДатаЗП = БазаИ.EvalExpr("глПрочитатьДатуИзмененияДоходаДляИндексации("+ "20110102,ПризнакИзмененияДоходаДляИндексации"+","+Спри.Наименование+")");// тут точно ошибка бо СПРИ.Наименование идет как Иванов В.В.
// и 1с не понимает что такое "В."
//как вариант: я окончательно запутался ))
ДатаБазыИндекса = глПрочитатьДатуИзмененияДоходаДляИндексации(ТекущаяДата(),"ПризнакИзмененияДоходаДляИндексации",ТекущийЭлемент());
Функция глПрочитатьДатуИзмененияДоходаДляИндексации(НП, ИмяРеквизита, Объект = "") Экспорт
Что общего в 7 и 8 у Сотрудников (Код,Наименование,ИНН) - ?
ДатаБазыИндекса = глПрочитатьДатуИзмененияДоходаДляИндексации(ТекущаяДата(),"ПризнакИзмененияДоходаДляИндексации",ТекущийЭлемент());
у 7.7 присвоїться, а з 8 тягнуть...
і взагалі, для чого тоді тягнути, якщо це реквізит довідника Фірми? В сотрудниках його не бачу.
У каждого свой справочник...
А по-делу - проще всего: в 7 выбираем в ТЗ (ИНН,Дата).Сохраняем тз в файл.
в 8 - парсим файл,синхронизируем по ИНН, добавляем запись в РС
в справочнике Фирмы там стоит базовый период - а в карточках сотрудников там разные ( и зачастую последние) данные.
вот еще думаю реквизит ПризнакИзмененияДоходаДляИндексации он у нас периодический булевый а в его истории хранится даты ( последняя как раз та что мне надо ...)
думаю надо читать эту историю и забирать последнее значение. только вот в теории понимаю, а на практике вообще ничего не могу слепить ((.
Точно! Я только код ваша, вторую, начала тянуть, куда ваша дата записывается.Читается-читается, ваша история, можно взять. Сори, да в сотрудниках есть тоже реквизит.
Во второй части кода есть. Записывается ваша дата в историю Признака, хотела сказать.
Есть в синтакс-помощнике папка Периодический. Там есть ВыбратьЗначения(), ПолучитьЗначение(). Но по-Хорошему последнее нужно.
Атрибут ДАтаЗнач, еще ОбратныйПорядок использовать
такс .. если честно не понял как вы получили. можете для тех кто в танке объяснить ..
когда я делаю через
Сотр= V7.CreateObject("Справочник.Сотрудники");
Периодический = V7.CreateObject("Периодический");
....
....
Периодический.ИспользоватьОбъект("ПризнакИзмененияДоходаДляИндексации",Сотр);
Периодический.ВыбратьЗначения();
Пока Периодический.ПолучитьЗначение() > 0 Цикл
вот похожий синтаксиз.
П = СоздатьОбъект("Периодический");
П.ИспользоватьОбъект("НомерЛистаКассовойКниги",Касса);
П.ВыбратьЗначения(НачалоГода, КонГода(НачалоГода));
Если П.ПолучитьЗначение() = 1 Тогда
Если П.ДатаЗнач = НачалоГода Тогда
ЛистовЗаГод = П.Значение;
Иначе
П.Удалить();
КонецЕсли;
Пока П.ПолучитьЗначение() = 1 Цикл
П.Удалить();
КонецЦикла;
КонецЕсли;
пасиб.. уже и я что то тоже получил )))). щас буду вытягивать ..
Все. получил что надо было. всем спасибо за помощь! особенно Домовик`у и Sava1 за коды и наводки )).
"не присвоїться - хіба у тих, що відкриватимемо вручну. Хоча, можливо, ви мали на увазі - присвоєння обробкою smile.gif."
Mister-x, так, у випадку довідника Фірми -відкрити ручками.)) у випадку "Сотрудники" була одна кучерява ідея: в обробці використати в циклі ОткрытьФорму(Спр.ТЕкущийЭлемент()), там в ПриОткрытии() все розраховується. ну і статусВозврата(0),
але Запис змін...... коли форма відкрита, то до обєкту не підступишся. і в процедурі не пропишеш.
Тому ваш спосіб - перепрописати розрахунки в самій обробці.
Але в даному випадку -є дані в періодичному реквізиті.
А вообще, например в ЗиК, ДатаБазыИндекса для РАСЧЕТА индексации может получаться по двум ссылкам, или в спр.Сотр или в Штатном. Тоесть на опр. дату для сотрудника эта дата может быть дата приема, а для его штатной единицы(повысили оклады) Дата повышения. Актуальной будет считаться макс.
Нужно знать принцип расчета индексации той конф-ции в которую грузите, тоесть 8, возможно там все реализовано по другой схеме, и привязка идет к нескольким объектам, вернее характеристикам объектов(Сотр и Штатное в 7).
В теме искали дату увелич. зарплаты.
на свій кучерявий спосіб:
є спосіб записати зміни роботи процедури ПриОткрытии() в довіднику Сотрудники
В ПриОткрытии() дописати форма.Закрыть(), а Записать() вызвать в процедурі приЗакрытии() формы.
Тільки треба очки закрити, коли обробка буде виконуватись )))
або ви не перевіряли, або маєте на увазі щось інше.
Працює.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua