Имя: Пароль:
1C
1C 7.7
v7: Признак, что сотрудник уже был выгружен в Эксель
0 листопад
 
12.05.14
22:44
Данные по сотруднику выгружаются в Эксель (только из спр.Сотрудники). В спр.Сотрудники добавлен реквизит - флаг "Признак". В процедуре ПриЗаписи(), он устанавливается равным 1, т.е. при любом изменении в спр.Сотрудники Признак=1.
Как предусмотреть обнуление этого Признака, если сотрудник уже был выгружен в Эксель? Подскажите идею. Т.е. задача состоит в том, чтобы при последующей выгрузке сотрудников в Эксель, выгружались не все сотрудники, а только у кого были какие-то изменения в спр.Сотрудники (для этого ПриЗаписи() ставим Пизнак=1). А вот как теперь реализовать обнуление этого Признака?
1 Волшебник
 
модератор
12.05.14
22:48
заведи план обмена
2 Фокусник
 
12.05.14
22:48
(0) при очередной выгрузке элемента присвоить реквизиту 0 и записать в базу.
А что есть выгрузка в Эксель?
3 miki
 
12.05.14
22:48
спр.Сотрудники.Признак=0;
спр.Сотрудники.Записать();
(с)кэп
4 фобка
 
12.05.14
22:50
(1) в семерке нет) здесь очень простой и странный вопрос и не менее странный ответ: чтобы при выгрузке обнулить признак элемента его надо тупо обнулить
5 Мигало
 
12.05.14
22:50
ВыгрузитьСотрудникаВXLS();

спр.Сотрудники.Признак=0;
спр.Сотрудники.Записать();

(с) дважды кэп
6 spectre1978
 
12.05.14
22:50
(1) на семерке?
7 листопад
 
12.05.14
22:51
(3) Наоборот, ПриЗаписи():
спр.Сотрудники.Признак=1;
спр.Сотрудники.Записать();

Признак установлен в 1. Выгружаем в Эксель сотрудника. А как теперь этот признак поставить в ноль?
8 фобка
 
12.05.14
22:51
А у него признак при записи ставится - ну тогда используй локальную переменную которую ты будешь заполнять только при открытии и условие на нее при записи
9 miki
 
12.05.14
22:53
(7)В ПриЗаписи() нет нужды обращаться к реквизиту через объект, достаточно просто выставить значение в 1.
Покажи код выгрузки в эксель.
10 miki
 
12.05.14
22:55
(8)имхо, ты был прав как раз в (4).
11 spectre1978
 
12.05.14
22:56
(7) так же, как ставили в 1, только вместо 1 ноль.
12 листопад
 
12.05.14
23:00
(2), (9) Выгрузка в Эксель:

Процедура ВыгрузитьСотрудников()
    
Попытка
x=СоздатьОбъект("Excel.Application");
Исключение
    Сообщить(ОписаниеОшибки(),"!!!");
    Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
    Возврат;
КонецПопытки;

x.Workbooks.Add();   //книга
x.WorkSheets(1).Cells(1,1).Value="TAB_NOMER";                                        
x.WorkSheets(1).Cells(1,2).Value="FIO";                        
x.Worksheets(1).Cells(1,3).Value="ROZHD_DATA";                        
x.WorkSheets(1).Cells(1,4).Value="POL";                                
x.WorkSheets(1).Cells(1,7).Value="INN";                            
x.WorkSheets(1).Cells(1,8).Value="PFR";                                
x.WorkSheets(1).Cells(1,9).Value="LIC_SCHET";                    

x.Worksheets(1).Name = ИмяФайла;

Сотрудники = СоздатьОбъект("Справочник.Сотрудники");

Сотрудники.ВыбратьЭлементы(1);
    
ИтераторСотр = 1;

Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл

    Если Сотрудники.ЭтоГруппа() + Сотрудники.ПометкаУдаления() <> 0 тогда
    Продолжить;
КонецЕсли;

ИтераторСотр = ИтераторСотр + 1;


    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,1).Value        = "'"+Сотрудники.Код;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,2).Value        = "'"+Сотрудники.Наименование;  
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,3).Value        = "'"+Формат(Сотрудники.ДатаРождения,"ДФ=dd.MM.yyyy");
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,4).Value        = "'"+Сотрудники.Пол;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,7).Value        = "'"+Сотрудники.ИНН;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,8).Value        = "'"+Сотрудники.СтраховойНомерПФР;
    x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,9).Value        = "'"+Сотрудники.НомерЗарплатногоСчета;
    
    КонецЦикла;


x.Quit();

Сообщить("Выгрузка завершена", "!");    

КонецПроцедуры
13 Фокусник
 
12.05.14
23:00
(7) "Выгружаем в Эксель сотрудника"
Что имеется ввиду под выгрузкой, конкретно?
14 Фокусник
 
12.05.14
23:02
(12) перед КонецЦикла нужно добавить:
Сотрудники.Признак = 0;
Сотрудники.Записать();
15 фобка
 
12.05.14
23:02
(9) ну да единичка только модуле формы ставится, призаписи() ее процедура. Давно клюшки не щупал
16 miki
 
12.05.14
23:05
(14)именно так, только автору не поможет, всё равно проверки на Признак=1 в его коде нет.
17 фобка
 
12.05.14
23:06
(16) а это уже будет следующим вопросом))
18 листопад
 
12.05.14
23:07
(16) Это я допишу ))) Надеюсь )))
19 КонецЦикла
 
12.05.14
23:22
УРБД есть?
20 Torquader
 
13.05.14
20:35
Я бы на вашем месте просто заглянул в файл Excel, чтобы увидеть - есть ли там сотрудник или нет, так как всё равно есть вероятность, что его оттуда удалят.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан