7.7 Автор документа при импорте из MYSQL

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Vffk, 31 мар 2010.

  1. TopicStarter Overlay
    Vffk
    Offline

    Vffk

    Регистрация:
    31 мар 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Уважаемые знатоки,

    Имею отдельный обработчик, который импортирует накладные из базы данных MySQL. Все работает хорошо, за исключением того, что не могу никак присвоить автора для вновьсозданных документов.

    В 1С новые накладные создаю так:
    Код:
    Процедура Импортировать()
    Строки = базаСписокНакладных.КоличествоСтрок();
    Ошибка = ""; 
    ОшибкаСтатуса1С = "";
    
    Если Строки = 0 Тогда 
    Ошибка = "Список накладных пустой";
    КонецЕсли;
    
    Для x=1 По Строки Цикл
    Статус1С = базаСписокНакладных.ПолучитьЗначение(x,"НаличиеВ1С");
    Если Статус1С = "да" Тогда
    ОшибкаСтатуса1С = "есть";
    КонецЕсли;
    КонецЦикла;
    
    Если ПустоеЗначение(ОшибкаСтатуса1С) = 0 Тогда
    Ошибка = "В списке выбранных накладных находятся ранее сохраненные накладные";
    КонецЕсли;
    
    Если ПустоеЗначение(импортФирма) = 1 Тогда
    Ошибка = "Не выбрана фирма";
    КонецЕсли;
    
    Если ПустоеЗначение(импортСклад) = 1 Тогда
    Ошибка = "Не выбран склад";
    КонецЕсли;
    
    Если ПустоеЗначение(импортВалюта) = 1 Тогда
    Ошибка = "Не выбрана валюта";
    КонецЕсли;
    
    Если ПустоеЗначение(Ошибка) = 0 Тогда
    Сообщить(Ошибка);
    Иначе
    Сообщить("Импортирование накладных");
    дФирма = импортФирма;
    дСклад = импортСклад;
    дВалюта = импортВалюта;
    дКурс = "";
    
    ВременныйДок = СоздатьОбъект("Справочник.Валюты");
    поискЭлемента = ВременныйДок.НайтиПоКоду(импортВалюта.Код);
    Если поискЭлемента = 1 Тогда
    ВременныйДок.ТекущийЭлемент();
    дКурс = ВременныйДок.Курс.Получить(ТекущаяДата());
    КонецЕсли;
    
    Для х=1 По Строки Цикл
    Нр = 0;
    дНомерДокумента = базаСписокНакладных.ПолучитьЗначение(х, "НомерНакладной");
    дДатаДокумента = базаСписокНакладных.ПолучитьЗначение(х, "ДатаОтгрузки");
    дКонтрагент = базаСписокНакладных.ПолучитьЗначение(х, "Код1С");
    дСумма = базаСписокНакладных.ПолучитьЗначение(х, "Сумма");
    дКодНакладной = базаСписокНакладных.ПолучитьЗначение(х, "Идентификатор");
    
    Док = СоздатьОбъект("Документ.Реализация");
    ВременныйДок = СоздатьОбъект("Справочник.Контрагенты");
    Док.Новый();
    
    Док.НомерДок = дНомерДокумента;
    Док.ДатаДок = дДатаДокумента;
    Док.КодОперации = Перечисление.КодыОпераций.Продажа;
    Док.Фирма = дФирма;
    Док.Склад = дСклад;
    
    поискЭлемента = ВременныйДок.НайтиПоКоду(дКонтрагент);
    Если поискЭлемента = 1 Тогда
    ВременныйЭлемент = ВременныйДок.ТекущийЭлемент();
    Док.Контрагент = ВременныйЭлемент; 
    Док.Договор = ВременныйЭлемент.ОсновнойДоговор;
    КонецЕсли;  
    
    Док.ДатаОплаты = дДатаДокумента;
    Док.СуммаВклНДС = дСумма;
    Док.Валюта = дВалюта;
    Док.Курс = дКурс;
    Док.УчитыватьНДС = 1;
    Док.СуммаВклНДС = 0;
    
    МойЗапрос = "SELECT ....";
    
    РекордСет.Open(МойЗапрос);
    ВременныйДок = СоздатьОбъект("Справочник.Номенклатура");
    
    Пока РекордСет.EOF = 0 Цикл
    Док.НоваяСтрока();
    дНоменклатура =  "";
    дЕдиница = "";
    
    поискЭлемента = ВременныйДок.НайтиПоКоду(РекордСет.Fields("code_1c").value);
    Если поискЭлемента = 1 Тогда
    дНоменклатура = ВременныйДок.ТекущийЭлемент();
    Если РекордСет.Fields("doc_type").value = "real" Тогда
    дЕдиница = ВременныйДок.БазоваяЕдиница;
    Иначе 
    дЕдиница = ВременныйДок.ОсновнаяЕдиница;
    КонецЕсли;
    КонецЕсли;
    
    Если РекордСет.Fields("doc_type").value = "metro" Тогда 
    дКоеффициент = РекордСет.Fields("field5").value * РекордСет.Fields("field7").value; 
    дЦена = РекордСет.Fields("field7").value * РекордСет.Fields("field11").value;
    ИначеЕсли РекордСет.Fields("doc_type").value = "real" Тогда 
    дКоеффициент = РекордСет.Fields("field7").value; 
    дЦена = РекордСет.Fields("field7").value * РекордСет.Fields("field11").value;   
    Иначе    
    дКоеффициент = РекордСет.Fields("field7").value; 
    дЦена = РекордСет.Fields("field11").value;   
    КонецЕсли;
    
    
    дКоличество = РекордСет.Fields("field8").value; 	
    дСумма = Окр((дКоличество*дЦена),2,1);
    НДС = РекордСет.Fields("nds").value;
    
    Если НДС = 10 Тогда
    дСтавкаНДС = Перечисление.СтавкиНДС.НДС10;
    Иначе 
    дСтавкаНДС = Перечисление.СтавкиНДС.НДС18;
    КонецЕсли;
    
    дСуммаНДС = Окр(((дСумма * НДС) / 100),2,1);
    
    Док.Номенклатура = дНоменклатура;
    Док.Единица = дЕдиница;
    Док.Количество = дКоличество;
    Док.Коэффициент = дКоеффициент;
    Док.Цена = дЦена;
    Док.Сумма = дСумма; 
    Док.СтавкаНДС = дСтавкаНДС; 
    Док.СуммаНДС = дСуммаНДС;
    
    РекордСет.MoveNext();
    КонецЦикла;	
    РекордСет.close();
    
    Автор = ИмяПользователя();
    Сообщить("Накладная "+дНомерДокумента+ " загружена");
    Док.Записать();
    
    
    КонецЦикла;
    
    КонецЕсли;
    КонецПроцедуры
    
    Извините, если кода слишком много.

    Вообщем поискал по вашему форуму, нашел только эту
    ветку

    Пробовал использовать
    Код:
    Автор = ИмяПользователя();
    
    как в моей процедуре "Импорт", так и в процедуре ПриЗаписи в модуле документа "Реализация".

    Подскажите куда "копать".
  2. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Если это конфа не самописная , то:
    Код:
    Автор=ГлПользователь;
    
    
    если такой переменной нет, то
    Код:
    Спр=СоздатьОбъект("Справочник.Пользователи");
    Спр.НайтиПоКоду(ИмяПользователя());
    Автор=Спр.ТекущийЭлемент();
    
    
  3. TopicStarter Overlay
    Vffk
    Offline

    Vffk

    Регистрация:
    31 мар 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Ув. alp,

    Спасибо за ответ.
    Конфигурация по-моему не самописная - ТИС 9.2
    Вставил ваш код сразу перед тем как записать новый документ:

    Код:
    Док = СоздатьОбъект("Документ.Реализация");
    ВременныйДок = СоздатьОбъект("Справочник.Контрагенты");
    Док.Новый();
    
    *** 
    
    Автор = ГлПользователь; 
    
    Сообщить("Накладная "+дНомерДокумента+ " загружена");
    Док.Записать();
    
    
    к сожалению не помогло. Проверил, что выдает переменная ГлПользователь - выдает видимо ссылку на объект пользователя (в моем случае 9).

    Принципиально ли место, где я указываю "Автора" (до создания документа или после, или перед самой записью)?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Немного ошиблись...
    Надо так
    Код:
    Док = СоздатьОбъект("Документ.Реализация");
    Док.Новый();
    Док.Автор = ГлПользователь; 
    Док.Записать();
    
    
  5. TopicStarter Overlay
    Vffk
    Offline

    Vffk

    Регистрация:
    31 мар 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Да, работает.
    Спасибо!

Поделиться этой страницей