Перем ЭлементТовар; //Перем Закладки; //Перем v77 Экспорт; //Отправить в Глобальный модуль Перем СтрСтатус, КаталогV77, СписокВидовДок, СпрПодмена;//, СписокПодмен; //Можно конечно же захерачить все списки в один - "Список", //но нас интересует быстродействие, а не красивость ;-) //Перем СпКонтрагенты, СпДоговоры, СпБанковскиеСчета, СпБанки; //Перем СпНоменклатура, СпВидыНоменклатуры, СпВалюты, СпОКЕИ; //Перем СпСтавкиНДС, СпСтавкиНП; //** Перем СпДокументы; //Перем СсылкиДок77; Перем СписокПерепроведенных; Функция ПолучитьВремяДокументаЧислом(Док) Перем Ч,М,С; //Док.ПолучитьВремя(Ч,М,С); //Такая конструкция почему-то не работает Время=Док.ПолучитьВремя(); Ч=Число(Сред(Время,1,2)); М=Число(Сред(Время,4,2)); С=Число(Сред(Время,7,2)); Возврат 3600*Ч+60*М+С; КонецФункции //ПолучитьВремяДокументаЧислом() Процедура УстановитьВремяДокументаЧислом(Док,Знач Сек) Перем Ч,М,С; Ч=Цел(Сек/3600); Сек=Сек-Ч*3600; М=Цел(Сек/60); С=Сек-М*60; Док.УстановитьВремя(Ч,М,С); КонецПроцедуры //УстановитьВремяДокументаЧислом() //Времянка Процедура ВыправитьВремя() Для Х=1 По Журнал.КоличествоСтрок() Цикл Журнал.ПолучитьСтрокуПоНомеру(Х); Журнал.ТекущаяСтрока(Х); Док=Журнал.Док; Док77=Журнал.Док77; Если (Док.Выбран()=1) И (Док77.Выбран()=1) Тогда //Если время отличается - исправим Время=ПолучитьВремяДокументаЧислом(Док); Время77=ПолучитьВремяДокументаЧислом(Док77); // Если Время<>Время77 Тогда ДокВР=СоздатьОбъект("Документ"); ДокВР.НайтиДокумент(Док); Проведен=ДокВР.Проведен(); Если Проведен=1 Тогда ДокВР.СделатьНеПроведенным() КонецЕсли; УстановитьВремяДокументаЧислом(ДокВР,Время77); ДокВР.Записать(); Если Проведен=1 Тогда ДокВР.Провести() КонецЕсли; //Обработаем счета-фактуры Если Док77.Вид()="Реализация" Тогда //Проверим есть ли уже Счет-фактура ДокСФ=СоздатьОбъект("Документ"); GUID=СтрЗаменить(ДокВР.Документ77,",","_"); Если ДокСФ.ВыбратьПоЗначению(,,"Документ77",GUID)=1 Тогда Пока ДокСФ.ПолучитьДокумент()=1 Цикл ТекДок=ДокСФ.ТекущийДокумент(); ВремяМакс=3600*23+60*59+59+1; Время=Время77+1; Если Время>=ВремяМакс Тогда Время=Время77; КонецЕсли; ПроведенСФ=ДокСФ.Проведен(); Если ПроведенСФ=1 Тогда ДокСФ.СделатьНеПроведенным() КонецЕсли; УстановитьВремяДокументаЧислом(ДокСФ,Время); ДокСФ.Записать(); Если ПроведенСФ=1 Тогда ДокСФ.Провести() КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; // КонецЕсли; КонецЕсли; КонецЦикла; Предупреждение("ВСЁ"); КонецПроцедуры //ВыправитьВремя() //Времянка Процедура Статус(Стр) Состояние(Стр); СтрСтатус=Стр; Форма.Обновить(); КонецПроцедуры //Статус() //Функция ПолучитьЧисло77(Число77) // Возврат Число(Строка(Число77)) //КонецФункции //ПолучитьЧисло77() //Процедура ЗанестиСсылкиСпр(Список,Спр,Элемент77) // Список.ДобавитьЗначение(Спр.ТекущийЭлемент(),v77.ЗначениеВСтрокуВнутр(Элемент77)); // Если Элемент77.ПометкаУдаления()=1 Тогда // Спр.Удалить(0) // КонецЕсли; //КонецПроцедуры //ЗанестиСсылкиСпр() Функция ЕстьРеквизитШапки77(ИмяРеквизита,Вид) Если ПустоеЗначение(ИмяРеквизита)=1 Тогда Возврат 0 ИначеЕсли v77.Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран()=1 Тогда Возврат 1 ИначеЕсли ПустоеЗначение(Вид)=1 Тогда Возврат 0 ИначеЕсли v77.Метаданные.Документ(Вид).РеквизитШапки(ИмяРеквизита).Выбран()=1 Тогда Возврат 1 Иначе Возврат 0 КонецЕсли; КонецФункции //ЕстьРеквизитШапки77() Функция СтрПеречисление77(Перечисление77) Попытка //Возврат v77.Метаданные.Перечисление(Перечисление77.Вид()).Значение(Перечисление77.ПорядковыйНомер()).Представление() Возврат v77.Метаданные.Перечисление(Перечисление77.Вид()).Значение(Перечисление77.Идентификатор()).Представление() Исключение Возврат "" КонецПопытки; КонецФункции //СтрПеречисление77() Функция НазваниеДок77(Док77) Если ПустоеЗначение(Док77)=1 Тогда Возврат("") КонецЕсли; Вид=Док77.Вид(); Если (ЕстьРеквизитШапки77("КодОперации",Вид)=1) И(Найти("/ПКО/РКО/СтрокаВыпискиПриход/СтрокаВыпискиРасход/РеализацияРозница/","/"+Вид+"/")=0) Тогда Возврат СтрПеречисление77(Док77.КодОперации) ИначеЕсли ЕстьРеквизитШапки77("ВидОперации",Вид)=1 Тогда Стр=""; Если Вид="РеализацияРозница" Тогда Если Док77.ОблагаетсяЕНВД=1 Тогда Стр=" (ЕНВД)" КонецЕсли; ИначеЕсли Вид="ВводОстатковТМЦ" Тогда Если (Док77.Склад.РозничныйСклад=1)И(Док77.ВидОперации=v77.Перечисление.ВидыОперацийПоВводуОстатков.ОстаткиТМЦ) Тогда Стр=" (розница)" КонецЕсли; КонецЕсли; Возврат СтрПеречисление77(Док77.ВидОперации)+Стр Иначе Возврат Док77.ПредставлениеВида() КонецЕсли; КонецФункции //НазваниеДок77() Функция СуммаДок77(Док77) Перем Результат, СуммаНДС, СуммаНП; Результат =0; СуммаНДС =0; СуммаНП =0; Если ПустоеЗначение(Док77)=1 Тогда Возврат "" КонецЕсли; Вид=Док77.Вид(); РеквСумма=v77.Метаданные.Документ(Вид).РеквизитШапки("Сумма"); Если (Вид="СчетФактураВыданный") ИЛИ (Вид="СчетФактураПолученный") Тогда Если (Док77.ДокОснование.Выбран()=1) И (Док77.КоличествоСтрок()=0) Тогда Возврат (СуммаДок77(Док77.ДокОснование)); КонецЕсли; КонецЕсли; Если РеквСумма.Выбран()=1 Тогда Результат=Док77.Сумма Иначе // Если Вид="ВводОстатковТМЦ" Тогда // Если v77.Перечисление.ВидыОперацийПоВводуОстатков.ОстаткиРеализованныхТоваров=Док77.ВидОперации Тогда // Результат=Док77.Итог("ПродСтоимость"); // Иначе // Результат=Док77.Итог("СуммаРуб"); // КонецЕсли; // Иначе РеквСумма=v77.Метаданные.Документ(Вид).РеквизитТабличнойЧасти("Сумма"); Если РеквСумма.Выбран()=1 Тогда Если РеквСумма.ИтогПоКолонке=1 Тогда Результат=Док77.Итог("Сумма"); КонецЕсли; Иначе РеквСумма=v77.Метаданные.Документ(Вид).РеквизитТабличнойЧасти("СуммаРуб"); Если РеквСумма.Выбран()=1 Тогда Если РеквСумма.ИтогПоКолонке=1 Тогда Результат=Док77.Итог("СуммаРуб"); КонецЕсли; КонецЕсли; КонецЕсли; // КонецЕсли; РеквСуммаНДС=v77.Метаданные.Документ(Вид).РеквизитТабличнойЧасти("СуммаНДС"); Если РеквСуммаНДС.Выбран()=1 Тогда Если РеквСуммаНДС.ИтогПоКолонке=1 Тогда СуммаНДС=Док77.Итог("СуммаНДС"); КонецЕсли; КонецЕсли; РеквСуммаВклНДС=v77.Метаданные.Документ(Вид).РеквизитШапки("СуммаВклНДС"); Если РеквСуммаВклНДС.Выбран()=1 Тогда Результат=Результат+?(Док77.СуммаВклНДС=1,0,СуммаНДС); КонецЕсли; РеквСуммаНП=v77.Метаданные.Документ(Вид).РеквизитТабличнойЧасти("СуммаНП"); Если РеквСуммаНП.Выбран()=1 Тогда Если РеквСуммаНП.ИтогПоКолонке=1 Тогда СуммаНП=Док77.Итог("СуммаНП"); КонецЕсли; КонецЕсли; РеквСуммаВклНП=v77.Метаданные.Документ(Вид).РеквизитШапки("СуммаВклНП"); Если РеквСуммаВклНП.Выбран()=1 Тогда Результат=Результат+?(Док77.СуммаВклНП=1,0,СуммаНП); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции //СуммаДок77() //Функция ПолучитьВалюту(Спр77) // Список=СпВалюты; Вид="Справочник."+Спр77.Вид(); // // Если Спр77.Выбран()=0 Тогда Возврат ПолучитьПустоеЗначение(Вид) КонецЕсли; // Элемент77=Спр77.ТекущийЭлемент(); // Элемент=Список.Получить(v77.ЗначениеВСтрокуВнутр(Элемент77)); // Если ПустоеЗначение(Элемент)=0 Тогда Возврат Элемент КонецЕсли; // // Спр=СоздатьОбъект(Вид); // Код=Элемент77.Код; // Если Спр.НайтиПоКоду(Код)=0 Тогда // Спр.Новый(); // Спр.Код =Элемент77.Код; // Спр.Наименование =Элемент77.Наименование; // Спр.ПолнНаименование=Элемент77.ПолнНаименование; // Спр.ИмяФайлаПрописи =Элемент77.ИмяФайлаПрописи; // Спр.Записать(); // //Периодические реквизиты //// ПериодическийРеквизит("Курс",Спр.ТекущийЭлемент(),Элемент77); //// ПериодическийРеквизит("Кратность",Спр.ТекущийЭлемент(),Элемент77); // КонецЕсли; // ЗанестиСсылкиСпр(Список,Спр,Элемент77); // Возврат Спр.ТекущийЭлемент(); //КонецФункции //ПолучитьВалюту() //Функция ВалютаДок77(Док77) // Вид=Док77.Вид(); // Если (Вид="ЗаписьКнигиПокупок")ИЛИ(Вид="ЗаписьКнигиПродаж")ИЛИ(Вид="ПлатежноеПоручение")ИЛИ(Вид="ВводОстатковКассаБанкПодотчетник") // ИЛИ (Вид="ВводОстатковПокупателя")ИЛИ(Вид="ВводОстатковПоставщика")ИЛИ(Вид="ВводОстатковТМЦ") Тогда // Возврат "руб." // ИначеЕсли ЕстьРеквизитШапки77("Валюта",Вид)=1 Тогда // Возврат Док77.Валюта.Наименование; // Иначе // Возврат ""; // КонецЕсли; //КонецФункции //ВалютаДок77() //Функция (Вид,Код) // Если Метаданные.Справочник(Вид).ТипКода="Текстовый" Тогда // Метаданные.Справочник(Вид).ДлинаКода // КонецЕсли; //КонецФункции // Функция ПодменитьКонтрагента(Спр77,Дата77) Если Спр77.Выбран()=1 Тогда Если СпрПодмена.НайтиПоКоду(Число(Спр77.Код))=1 Тогда ЗаменитьНа=СпрПодмена.ЗаменитьНа.Получить(Дата77); Если ЗаменитьНа.Выбран()=1 Тогда Возврат ЗаменитьНа; //.ТекущийЭлемент() КонецЕсли; КонецЕсли; КонецЕсли; Возврат ПолучитьПустоеЗначение("Справочник."+Спр77.Вид()); КонецФункции //ПодменитьКонтрагента() Процедура Пометить() Для Х=1 По Журнал.КоличествоСтрок() Цикл Журнал.ПолучитьСтрокуПоНомеру(Х); Если Число(Журнал.Док77.Контрагент.Код)<>КодКонтрагента77 Тогда Продолжить КонецЕсли; Журнал.ТекущаяСтрока(Х); Журнал.Пометка=1; КонецЦикла; КонецПроцедуры //Пометить() Процедура СнятьПометки() Для Х=1 По Журнал.КоличествоСтрок() Цикл Журнал.ПолучитьСтрокуПоНомеру(Х); Если Журнал.Док.Выбран()=1 Тогда Журнал.Пометка=2 Иначе Журнал.Пометка=0 КонецЕсли; КонецЦикла; КонецПроцедуры //СнятьПометки() Функция ИнформацияДок77(Док77) Если ПустоеЗначение(Док77)=1 Тогда Возврат("") КонецЕсли; Вид=Док77.Вид(); Если (Вид="СтрокаАвансОтчетаТМЦ")ИЛИ(Вид="СтрокаАвансОтчетаОплата")ИЛИ(Вид="СтрокаАвансОтчетаПрочее") Тогда Возврат Док77.ФизЛицо.Наименование ИначеЕсли (Вид="ЧекККМ")ИЛИ(Вид="ОтчетККМ") Тогда Возврат Док77.Касса.Наименование ИначеЕсли Вид="ПеремещениеТМЦ" Тогда Возврат "с """+Док77.Склад.Наименование+""" на """+Док77.СкладПолучатель.Наименование+"""" ИначеЕсли (Вид="ИнвентаризацияТМЦ")ИЛИ(Вид="ПереоценкаРозница") Тогда Возврат Док77.Склад.Наименование ИначеЕсли Вид="Доверенность" Тогда Возврат Док77.ДоверенноеЛицо.Наименование ИначеЕсли Вид="КомплектацияТМЦ" Тогда Возврат Док77.Комплект.Наименование ИначеЕсли Вид="ПеремещениеДенегБанк" Тогда Возврат Док77.БанковскийСчет.Наименование ИначеЕсли Вид="ПеремещениеДенегКасса" Тогда Возврат Док77.КассаПолучатель.Наименование // ИначеЕсли Вид="Сторно" Тогда Возврат Док77.СторнируемыйДокумент;** // ИначеЕсли (Вид="ОприходованиеТМЦ")ИЛИ(Вид="СписаниеТМЦ") Тогда Возврат Док77.Счет ** ИначеЕсли (Вид="ПКО")ИЛИ(Вид="РКО") Тогда Если (Док77.КодОперации=v77.Перечисление.КодыОпераций.ВозвратПодотчетныхСумм) ИЛИ (Док77.КодОперации=v77.Перечисление.КодыОпераций.ВыдачаПодотчет) ИЛИ (Док77.КодОперации=v77.Перечисление.КодыОпераций.ВыдачаПодотчетВал) Тогда Возврат Док77.ФизЛицо.Наименование; // ИначеЕсли (Док77.КодОперации=v77.Перечисление.КодыОпераций.Прочее) Тогда Возврат Док77.Счет; ** Иначе Спр=ПодменитьКонтрагента(Док77.Контрагент,Док77.ДатаДок); Если Спр.Выбран()=1 Тогда Возврат Спр.Наименование Иначе Возврат Док77.Контрагент.Наименование КонецЕсли; КонецЕсли; ИначеЕсли (Вид="СтрокаВыпискиПриход")ИЛИ(Вид="СтрокаВыпискиРасход") Тогда //Если (Док77.КодОперации=v77.Перечисление.КодыОпераций.Прочее) Тогда Возврат Док77.Счет; ** //Иначе Возврат Док77.Контрагент.Наименование //КонецЕсли; ИначеЕсли ЕстьРеквизитШапки77("Контрагент",Вид)=1 Тогда Спр=ПодменитьКонтрагента(Док77.Контрагент,Док77.ДатаДок); Если Спр.Выбран()=1 Тогда Возврат Спр.Наименование Иначе Возврат Док77.Контрагент.Наименование КонецЕсли; Иначе Возврат "" КонецЕсли; КонецФункции //ИнформацияДок77() Процедура ЖурналВыбрать() Если Журнал.ТекущаяСтрока()>0 Тогда Если (Журнал.ТекущаяКолонка()="Сумма") ИЛИ (Журнал.ТекущаяКолонка()="О") Тогда Если Журнал.Док.Выбран()=1 Тогда ОткрытьФорму(Журнал.Док) КонецЕсли; Иначе Х=Журнал.Пометка; Если Х=2 Тогда Если Вопрос("Документ уже принят. Принять заново? ","Да+Нет",60)="Да" Тогда Журнал.Пометка=1; КонецЕсли; Возврат; КонецЕсли; Если (Журнал.Иконка77=3) И (Х=0) Тогда //Помечен на удаление в базе источник Если Вопрос("Документ помечен на удаление. Вы хотите принять его? ","Да+Нет",60)="Да" Тогда Журнал.Пометка=1; КонецЕсли; Возврат; КонецЕсли; Журнал.Пометка=?(Х=0,1,0); КонецЕсли; КонецЕсли; КонецПроцедуры //ЖурналВыбрать() Функция ДокВид77(Док77) Вид=""; Х=СписокВидовДок.НайтиЗначение(Док77.Вид()); Если Х>0 Тогда СписокВидовДок.ПолучитьЗначение(Х,Вид); Возврат "Документ."+Вид Иначе Сообщить("Функция ДокВид77: неизвестный вид: "+Док77.Вид()); Возврат "Документ" КонецЕсли; КонецФункции //ДокВид77() Функция ПолучитьДокПоGUID(Док77) Док=СоздатьОбъект("Документ"); Если Док.ВыбратьПоЗначению(,,"Документ77",v77.ЗначениеВСтрокуВнутр(Док77.ТекущийДокумент()))=1 Тогда //Надеемся что документ всего один!!! Но всё же проконтролируем это. Х=0; Пока Док.ПолучитьДокумент()=1 Цикл ТекДок=Док.ТекущийДокумент(); // Сообщить("Ошибка на документе: "+ТекДок.Вид()+" №"+ТекДок.НомерДок+" от "+ТекДок.ДатаДок,"!!!"); Х=Х+1 КонецЦикла; Если Х<>1 Тогда Сообщить("!!!ВНИМАНИЕ!!! Обнаружены документы с одинаковыми GUID. Срочно сообщить Мазанову. (Функция ПолучитьДокПоGUID)","!!!"); Сообщить("Ошибка на документе: "+ТекДок.Вид()+" №"+ТекДок.НомерДок+" от "+ТекДок.ДатаДок,"!!!"); //Вызовем ошибку - и остановимся. ХХХ=СоздатьОбъект("Ошибка"); КонецЕсли; Возврат ТекДок КонецЕсли; Возврат ПолучитьПустоеЗначение(ДокВид77(Док77)) КонецФункции //ПолучитьДокПоGUID() Функция ПолучитьСуммуДок(ТекДок) Док=СоздатьОбъект("Документ"); Док.НайтиДокумент(ТекДок); Док.ИспользоватьЖурнал("Общий",0); Возврат Док.Графа("Сумма"); КонецФункции //ПолучитьСуммуДок() Функция ПометкаДокумента(Док77,Док) Если Док.Выбран()=1 Тогда Возврат 2 ИначеЕсли Док77.Проведен()=1 Тогда Возврат 1 КонецЕсли; Возврат 0 КонецФункции //ПометкаДокумента() Процедура Обновить() //Мазанов //Если (ДатаНач>='01.01.2007') ИЛИ (ДатаКон>='01.01.2007') Тогда // Предупреждение("Эта обработка не годится для 2007 года!!!",60); // Возврат; //КонецЕсли; Если ПустоеЗначение(v77)=1 Тогда Если глИнициализация77()=0 Тогда v77=0; Возврат; КонецЕсли; КонецЕсли; Журнал.УдалитьСтроки(); СписокПерепроведенных.УдалитьВсе(); Статус("Идет получение списка документов. Ждите ..."); //Сперва получим список перепроведеных документов Спр77=v77.CreateObject("Справочник.ПерепроведенныеДокументы"); Спр77.ВыбратьЭлементыПоРеквизиту("флБух",1,0,0); Пока Спр77.ПолучитьЭлемент()=1 Цикл Если Спр77.ПометкаУдаления()=1 Тогда Продолжить КонецЕсли; Док77=Спр77.Документ; //Проверим: нужен нам этот документ или нет Вид=Док77.Вид(); НомерДок=Док77.НомерДок; Если СписокВидовДок.Принадлежит(Вид)=0 Тогда Продолжить ИначеЕсли (Вид="ПКО") И (Лев(НомерДок,3)<>"ПК-") Тогда Продолжить ИначеЕсли (Вид="РКО") И (Лев(НомерДок,3)<>"РК-") Тогда Продолжить КонецЕсли; Если Док77.Контрагент.флНеВыгружать.Получить(Док77.ДатаДок)=1 Тогда Продолжить КонецЕсли; //Документ нужен - пометим его для приема Журнал.НоваяСтрока(); Журнал.Иконка77=?(Док77.ПометкаУдаления()=1,3,1+Док77.Проведен()); Док=ПолучитьДокПоGUID(Док77); // Журнал.Пометка=1; //Принимаем всегда Журнал.Пометка=2; //Отключил по просьбе Зерниной (12/01/2009) Если Док.Выбран()=1 Тогда Журнал.Иконка=?(Док.ПометкаУдаления()=1,3,1+Док.Проведен()); Журнал.Сумма=ПолучитьСуммуДок(Док); Журнал.О="О"; //Проконтролируем номер документа (04/01/2007) Если Док.НомерДок77<>Док77.НомерДок Тогда Сообщить("У документа "+Док77.ДатаДок+" "+Док77.ПредставлениеВида()+" №"+Док77.НомерДок+" изменился номер (был "+Док.НомерДок77,"!!!"); Журнал.Пометка=1; //Принимаем всегда КонецЕсли; КонецЕсли; Журнал.Док=Док; Журнал.Документ=НазваниеДок77(Док77.ТекущийДокумент()); Журнал.НомерДок=Док77.НомерДок; Журнал.ДатаДок=Док77.ДатаДок; Журнал.Время=Док77.ПолучитьВремя(); Журнал.Сумма77=СуммаДок77(Док77.ТекущийДокумент()); Журнал.Разница=Журнал.Сумма77-Журнал.Сумма;//разница Журнал.Информация="(перепроведен) "+ИнформацияДок77(Док77.ТекущийДокумент()); Журнал.Док77=Док77.ТекущийДокумент(); Состояние(""+Журнал.ДатаДок+" "+Журнал.Документ+" №"+Журнал.НомерДок); СписокПерепроведенных.ДобавитьЗначение(v77.ЗначениеВСтрокуВнутр(Док77.ТекущийДокумент())); КонецЦикла; //теперь обработаем "просто" документы Док77=v77.CreateObject("Документ"); Док77.ВыбратьДокументы(ДатаНач,ДатаКон); Пока Док77.ПолучитьДокумент()=1 Цикл //Проверим есть ли этот документ в СписокПерепроведенных //Проверим: нужен нам этот документ или нет Вид=Док77.Вид(); НомерДок=Док77.НомерДок; Если СписокВидовДок.Принадлежит(Вид)=0 Тогда Продолжить ИначеЕсли (Вид="ПКО") И (Лев(НомерДок,3)<>"ПК-") Тогда Продолжить ИначеЕсли (Вид="РКО") И (Лев(НомерДок,3)<>"РК-") Тогда Продолжить КонецЕсли; Если СписокПерепроведенных.Принадлежит(v77.ЗначениеВСтрокуВнутр(Док77.ТекущийДокумент()))=1 Тогда //уже есть в списке. пропустим Продолжить КонецЕсли; Если КодКонтрагента77>0 Тогда //Если в поле КодКонтрагента77 не пустое значение - то берем только по нему //фильтруем только по контрагенту с кодом КодКонтрагента77 Если Число(Док77.Контрагент.Код)<>КодКонтрагента77 Тогда Продолжить КонецЕсли; КонецЕсли; Если Док77.Контрагент.флНеВыгружать.Получить(Док77.ДатаДок)=1 Тогда Продолжить КонецЕсли; Журнал.НоваяСтрока(); Журнал.Иконка77=?(Док77.ПометкаУдаления()=1,3,1+Док77.Проведен()); Док=ПолучитьДокПоGUID(Док77); Журнал.Пометка=ПометкаДокумента(Док77,Док); Если Док.Выбран()=1 Тогда Журнал.Иконка=?(Док.ПометкаУдаления()=1,3,1+Док.Проведен()); Журнал.Сумма=ПолучитьСуммуДок(Док); Журнал.О="О"; //Проконтролируем номер документа (04/01/2007) Если Док.НомерДок77<>Док77.НомерДок Тогда Сообщить("У документа "+Док77.ДатаДок+" "+Док77.ПредставлениеВида()+" №"+Док77.НомерДок+" изменился номер (был "+Док.НомерДок77,"!!!"); Журнал.Пометка=1; //Принимаем всегда КонецЕсли; КонецЕсли; Журнал.Док=Док; Журнал.Документ=НазваниеДок77(Док77.ТекущийДокумент()); Журнал.НомерДок=Док77.НомерДок; Журнал.ДатаДок=Док77.ДатаДок; Журнал.Время=Док77.ПолучитьВремя(); Журнал.Сумма77=СуммаДок77(Док77.ТекущийДокумент())*Док77.Курс; Журнал.Информация=ИнформацияДок77(Док77.ТекущийДокумент()); Журнал.Док77=Док77.ТекущийДокумент(); Журнал.Разница=Журнал.Сумма77-Журнал.Сумма; Состояние(""+Журнал.ДатаДок+" "+Журнал.Документ+" №"+Журнал.НомерДок); КонецЦикла; Статус(""); Активизировать("Журнал"); КонецПроцедуры //Обновить() //Тут начинается перенос справочников и прочей херни Функция ПолучитьРодителя(Элемент77) Вид="Справочник."+Элемент77.Вид(); Родитель77=Элемент77.Родитель.ТекущийЭлемент(); Если Родитель77.Выбран()=0 Тогда Возврат ПолучитьПустоеЗначение(Вид) КонецЕсли; //Родитель=Список.Получить(v77.ЗначениеВСтрокуВнутр(Родитель77)); //Если ПустоеЗначение(Родитель)=0 Тогда Возврат Родитель КонецЕсли; Спр=СоздатьОбъект(Вид); Код=Родитель77.Код; Если Спр.НайтиПоКоду(Код)=0 Тогда Спр.НоваяГруппа(); Попытка Спр.Родитель=ПолучитьРодителя(Родитель77); Исключение Сообщить("Функция: ПолучитьРодителя(). Вид="+Вид+" Код="+Код,"!!!"); //Вызовем ошибку - и остановимся. ХХХ=СоздатьОбъект("Ошибка"); КонецПопытки; Спр.Код =Код; Спр.Наименование=Родитель77.Наименование; Попытка Спр.Комментарий=Родитель77.Комментарий Исключение КонецПопытки; Спр.Записать(); КонецЕсли; //ЗанестиСсылкиСпр(Список,Спр,Родитель77); Возврат Спр.ТекущийЭлемент() КонецФункции //ПолучитьРодителя() //Не используется (так надо) //Функция ПолучитьДоговор(Спр77,Владелец) // Список=СпДоговоры; Вид="Справочник."+Спр77.Вид(); // // Если Спр77.Выбран()=0 Тогда Возврат ПолучитьПустоеЗначение(Вид) КонецЕсли; // Элемент77=Спр77.ТекущийЭлемент(); // Элемент=Список.Получить(v77.ЗначениеВСтрокуВнутр(Элемент77)); // Если ПустоеЗначение(Элемент)=0 Тогда Возврат Элемент КонецЕсли; // // Спр=СоздатьОбъект(Вид); // Код=Элемент77.Код; // Если Спр.НайтиПоКоду(Код)=0 Тогда // Спр.Новый(); // Спр.Владелец =Владелец; // Спр.Родитель =ПолучитьРодителя(Список,Элемент77); // Спр.Код =Элемент77.Код; // Спр.Наименование =Элемент77.Наименование; // Спр.ВалютаДоговора =ПолучитьВалюту(Элемент77.ВалютаВзаиморасчетов); // Спр.ОплатаДоговора =?(Спр.ВалютаДоговора.Код="810",1,2); // // Стр="Основной вид договоров"; // СпрВидДог=СоздатьОбъект("Справочник.ВидыДоговоров"); // Если СпрВидДог.НайтиПоНаименованию(Стр,0,1)=0 Тогда // СпрВидДог.Новый(); // СпрВидДог.Наименование=Стр; // СпрВидДог.Записать(); // КонецЕсли; // // Спр.ВидДоговора =СпрВидДог.ТекущийЭлемент(); ////Сообщить("Код="+Спр.Код); // Спр.Записать(); // КонецЕсли; // ЗанестиСсылкиСпр(Список,Спр,Элемент77); // Возврат Спр.ТекущийЭлемент(); //КонецФункции //ПолучитьДоговор() Функция ПолучитьКонтрагента(Спр77,Дата77) //Подменим контрагента Спр=ПодменитьКонтрагента(Спр77,Дата77); Если Спр.Выбран()=1 Тогда // сообщить(Спр.ТекущийЭлемент()); Возврат Спр.ТекущийЭлемент(); КонецЕсли; //Список=СпКонтрагенты; Вид="Справочник."+Спр77.Вид(); Если Спр77.Выбран()=0 Тогда Возврат ПолучитьПустоеЗначение(Вид) КонецЕсли; Элемент77=Спр77.ТекущийЭлемент(); //Элемент=Список.Получить(v77.ЗначениеВСтрокуВнутр(Элемент77)); //Если ПустоеЗначение(Элемент)=0 Тогда Возврат Элемент КонецЕсли; Спр=СоздатьОбъект(Вид); Код=Элемент77.Код; Если Спр.НайтиПоКоду(Код)=0 Тогда Если Элемент77.ЭтоГруппа()=1 Тогда Спр.НоваяГруппа(); Спр.Родитель =ПолучитьРодителя(Элемент77); Спр.Код =Код; Спр.Наименование =Элемент77.Наименование; Спр.Записать(); Иначе Спр.Новый(); Спр.Родитель =ПолучитьРодителя(Элемент77); Спр.Код =Код; Спр.Наименование =Элемент77.Наименование; ВидЮрФизЛицо=Элемент77.ЮрФизЛицо.Вид(); Если ВидЮрФизЛицо="ЮрЛица" Тогда Спр.ВидКонтрагента=Перечисление.ВидыКонтрагентов.Организация ИначеЕсли ВидЮрФизЛицо="ФизЛица" Тогда Спр.ВидКонтрагента=Перечисление.ВидыКонтрагентов.ЧастноеЛицо ИначеЕсли ВидЮрФизЛицо="СвоиЮрЛица" Тогда Спр.ВидКонтрагента=Перечисление.ВидыКонтрагентов.ДочернееОбщество КонецЕсли; Спр.ПолнНаименование =Элемент77.ЮрФизЛицо.ПолнНаименование; Спр.ЮридическийАдрес =глПредставлениеАдреса(Элемент77.ЮрФизЛицо.ЮрАдрес); Спр.ПочтовыйАдрес =глПредставлениеАдреса(Элемент77.ЮрФизЛицо.ФактАдрес); Спр.Телефоны =Элемент77.ЮрФизЛицо.Телефоны; Спр.ИНН =Элемент77.ЮрФизЛицо.ИНН; Спр.Записать(); //Раньше было так ////перенесем подчиненные справочники //Спр.ОсновнойДоговор =ПолучитьДоговор(Элемент77.ОсновнойДоговор,Спр.ТекущийЭлемент()); //А неперь так СпрДог=СоздатьОбъект("Справочник.Договоры"); СпрДог.ИспользоватьВладельца(Спр.ТекущийЭлемент()); СпрДог.Новый(); СпрДог.Наименование="Основной договор"; //Спр.ВалютаДоговора=ПолучитьВалюту(Элемент77.ВалютаВзаиморасчетов); СпрДог.ОплатаДоговора=1; Стр="Основной вид договоров"; СпрВидДог=СоздатьОбъект("Справочник.ВидыДоговоров"); Если СпрВидДог.НайтиПоНаименованию(Стр,0,1)=0 Тогда СпрВидДог.Новый(); СпрВидДог.Наименование=Стр; СпрВидДог.Записать(); КонецЕсли; СпрДог.ВидДоговора=СпрВидДог.ТекущийЭлемент(); СпрДог.АвтоОбработкаНДС=1; СпрДог.Записать(); Спр.ОсновнойДоговор=СпрДог.ТекущийЭлемент(); Спр.Записать(); КонецЕсли; КонецЕсли; //ЗанестиСсылкиСпр(Список,Спр,Элемент77); Возврат Спр.ТекущийЭлемент(); КонецФункции //ПолучитьКонтрагента() Процедура ЗаписатьПровести(Док,Док77) Попытка Док.Записать(); Время77=ПолучитьВремяДокументаЧислом(Док77); УстановитьВремяДокументаЧислом(Док,Время77); Док.Записать(); // Если Док77.ПометкаУдаления()=1 Тогда // Док.Удалить(0) // Иначе //проводим всегда Стр=""+Док.ДатаДок+" "+Док.ПредставлениеВида()+" №"+Док.НомерДок; Статус("Проведение документа: "+Стр); Если Док.Провести()=0 Тогда Сообщить("!!!НЕ ПРОВЕЛСЯ!!! "+Стр,"!!!"); КонецЕсли; // КонецЕсли; Исключение Сообщить("Не удалось записать документ "+Док.ДатаДок+" "+Док.Вид()+" №"+Док.НомерДок); Док.Записать(); КонецПопытки КонецПроцедуры //ЗаписатьПровести() Функция ПолучитьДокумент(Док77,Знач Док) Если Док77.Выбран()=0 Тогда Попытка Возврат ПолучитьПустоеЗначение(ДокВид77(Док77)) Исключение Возврат ПолучитьПустоеЗначение() КонецПопытки; КонецЕсли; Если Док.Выбран()=0 Тогда Новый=1; Иначе Новый=0; ТекДок=Док; Док=СоздатьОбъект("Документ"); Док.НайтиДокумент(ТекДок); Если Док.Проведен()=1 Тогда Док.СделатьНеПроведенным() ИначеЕсли Док.ПометкаУдаления()=1 Тогда Док.СнятьПометкуУдаления() КонецЕсли; Попытка Док.УдалитьСтроки() Исключение КонецПопытки; КонецЕсли; Если Новый=1 Тогда Док=СоздатьОбъект(ДокВид77(Док77)); Док.Новый(); Док.ДатаДок=Док77.ДатаДок; Док.УстановитьНовыйНомер(""); КонецЕсли; //Перенесем общие реквизиты Док.ДатаДок =Док77.ДатаДок; Док.НомерДок77 =Док77.НомерДок; Контрагент =ПолучитьКонтрагента(Док77.Контрагент,Док77.ДатаДок); Док.Комментарий ="["+Док77.НомерДок+"] "+?(Док77.Контрагент.Код<>Контрагент.Код,"("+Док77.Контрагент.Наименование+") ","")+Док77.Комментарий; Попытка Док.ВерсияОбъекта=Константа.НомерРелиза Исключение КонецПопытки; Курс =Док77.Курс; Попытка Док.Курс=1 Исключение КонецПопытки; Док.Документ77 =v77.ЗначениеВСтрокуВнутр(Док77.ТекущийДокумент()); //GUID Вид=Док77.Вид(); Если Вид="ПоступлениеТМЦ" Тогда //Шапка Док.Контрагент =Контрагент; Док.Договор =Док.Контрагент.ОсновнойДоговор; //Док.ДатаНомерСчетаФактуры =Формат(Док.ДатаДок,"Д")+" №"+глПреобразоватьНомерДок(Док.НомерДок); Док.ДатаНомерСчетаФактуры =Формат(Док.ДатаДок,"Д")+" №XYZ"; Док.МестоХранения =глЗначениеПоУмолчанию("ОсновнойСклад"); Док.ВидПоступления =11; //на оптовый склад Док.ЗачитыватьАванс =1; Док.ВариантРасчетаНалогов =Константа.ОсновнойВариантРасчетаНалогов; Если Константа.ОрганизацияЯвляетсяПлательщикомНДС=Нет Тогда Док.НДСвключатьВСтоимость=1 КонецЕсли; //Док.ДокументОснование =ПолучитьДокумент(Док77.ДокОснование); //вызываем себя рекурсивно Док.НомерДокВходящий =Док77.НомерДокВходящий; Док.ДатаДокВходящий =Док77.ДатаДокВходящий; Док.ТипЦен =глЗначениеПоУмолчанию("ОсновнаяЦенаПриобретения"); //Табличная часть Х=0; //Количество - нужно для переноса в свернутом виде Док77.ВыбратьСтроки(); Пока Док77.ПолучитьСтроку()=1 Цикл Х=Х+(Док77.Количество*Док77.Коэффициент); КонецЦикла; //Попробуем отделить мух от котлет НДС=Док77.Итог("СуммаНДС")*Курс; НП=Док77.Итог("СуммаНП")*Курс; Всего=(Док77.Итог("Сумма")+?(Док77.СуммаВклНП=1,0,НП)+?(Док77.СуммаВклНДС=1,0,НДС))*Курс; Сумма=Всего-?(Док.ВариантРасчетаНалогов.СуммаВключаетНП=1,0,НП)-?(Док.ВариантРасчетаНалогов.СуммаВключаетНДС=1,0,НДС); //делаем всего одну строку Док.НоваяСтрока(); Док.Товар =ЭлементТовар; Док.Количество =Х; Док.Цена =Сумма/?(Х=0,1,Х); Док.Сумма =Сумма; Док.НДС =НДС; Док.НП =НП; Док.Всего =Всего; ЗаписатьПровести(Док,Док77); ИначеЕсли Вид="Реализация" Тогда //Шапка Док.Контрагент =Контрагент; Док.Договор =Док.Контрагент.ОсновнойДоговор; Док.МестоХранения =глЗначениеПоУмолчанию("ОсновнойСклад"); Док.ВидОтгрузки =11; Док.ЗачитыватьАванс =1; Док.ВариантРасчетаНалогов=Константа.ОсновнойВариантРасчетаНалоговОтгрузки; Док.РасчетныйСчет =глЗначениеПоУмолчанию("ОсновнойБанковскийСчет"); Если Док.МестоХранения.Выбран()=1 Тогда Док.ТипЦен=Док.МестоХранения.ТипЦен КонецЕсли; //Табличная часть Х=0; //Количество - нужно для переноса в свернутом виде Док77.ВыбратьСтроки(); Пока Док77.ПолучитьСтроку()=1 Цикл Х=Х+(Док77.Количество*Док77.Коэффициент); КонецЦикла; //Попробуем отделить мух от котлет НДС=Док77.Итог("СуммаНДС")*Курс; НП=Док77.Итог("СуммаНП")*Курс; Всего=(Док77.Итог("Сумма")+?(Док77.СуммаВклНП=1,0,НП)+?(Док77.СуммаВклНДС=1,0,НДС))*Курс; Сумма=Всего-?(Док.ВариантРасчетаНалогов.СуммаВключаетНП=1,0,НП)-?(Док.ВариантРасчетаНалогов.СуммаВключаетНДС=1,0,НДС); //делаем всего одну строку Док.НоваяСтрока(); Док.Товар =ЭлементТовар; Док.Количество =Х; Док.Цена =Сумма/?(Х=0,1,Х); Док.Сумма =Сумма; Док.НДС =НДС; Док.НП =НП; Док.Всего =Всего; //Вклинился //Рег77=v77.CreateObject("Регистр.Продажи"); //Рег77.ВыбратьДвиженияДокумента(Док77.ТекущийДокумент()); //Себестоимость77=0; //Количество77=0; //Пока Рег77.ПолучитьДвижение() = 1 Цикл // Себестоимость77=Себестоимость77+Рег77.Себестоимость; // Количество77=Количество77+Рег77.Количество; //КонецЦикла; //Док.Комментарий="("+Окр(Док.Цена-((Себестоимость77*27.5)/1.18)/Количество77,2)+") "+Док.Комментарий; Док.Комментарий="("+Док.Цена+") "+Док.Комментарий; //Конец вклейки ЗаписатьПровести(Док,Док77); //Создадим Счет-фактуру //Проверим есть ли уже Счет-фактура ДокСФ=СоздатьОбъект("Документ"); GUID=СтрЗаменить(Док.Документ77,",","_"); Если ДокСФ.ВыбратьПоЗначению(,,"Документ77",GUID)=1 Тогда //Документ существует. //Надеемся что документ всего один!!! Но всё же проконтролируем это. Х=0; Пока ДокСФ.ПолучитьДокумент()=1 Цикл ТекДок=ДокСФ.ТекущийДокумент(); Х=Х+1 КонецЦикла; Если Х<>1 Тогда Сообщить("!!!ВНИМАНИЕ!!! Обнаружены документы с одинаковыми GUID у счетов фактур. Срочно сообщить Мазанову.","!!!"); //Вызовем ошибку - и остановимся. ХХХ=СоздатьОбъект("Ошибка"); КонецЕсли; ДокСФ.НайтиДокумент(ТекДок); Если ДокСФ.Проведен()=1 Тогда ДокСФ.СделатьНеПроведенным() ИначеЕсли ДокСФ.ПометкаУдаления()=1 Тогда ДокСФ.СнятьПометкуУдаления() КонецЕсли; ДокСФ.УдалитьСтроки() Иначе //Новый=1; ДокСФ=СоздатьОбъект("Документ.СчетФактура"); ДокСФ.Новый(); ДокСФ.УстановитьНовыйНомер(""); КонецЕсли; ДокОсн=Док.ТекущийДокумент(); //Перенесем общие реквизиты ДокСФ.ДатаДок =ДокОсн.ДатаДок; //ДокСФ.НомерДок77 =ДокОсн.НомерДок; ДокСФ.Комментарий =ДокОсн.Комментарий; ДокСФ.ВерсияОбъекта =Константа.НомерРелиза; ДокСФ.Курс =ДокОсн.Курс; ДокСФ.Документ77 =GUID; ДокСФ.НДСпоСтавкеНольПроцентов=0; ДокСФ.ОтключитьНП =1; ДокСФ.СчетАкциза =1; ДокСФ.ОтключитьАкциз =1; ДокСФ.Аванс =0; ДокСФ.ТипЦен =ДокОсн.ТипЦен; ДокСФ.Контрагент =ДокОсн.Контрагент; ДокСФ.Договор =ДокОсн.Договор; ДокСФ.ВариантОтправки =1; ДокСФ.Грузоотправитель =ПолучитьПустоеЗначение(); ДокСФ.Грузополучатель =ДокОсн.Контрагент; Если ПустоеЗначение(ДокОсн.Грузополучатель)=0 Тогда ДокСФ.Грузополучатель=ДокОсн.Грузополучатель КонецЕсли; Если ПустоеЗначение(ДокОсн.Грузоотправитель)=0 Тогда ДокСФ.ВариантОтправки=0; ДокСФ.Грузоотправитель=ДокОсн.Грузоотправитель; КонецЕсли; Если Константа.МетодОпределенияВыручки.Получить(ДокСФ.ДатаДок)=глПоОтгрузке Тогда ДокСФ.СчетНДС=1 Иначе ДокСФ.СчетНДС=2 КонецЕсли; ДокСФ.ДокументОснование =ДокОсн; //Табличную часть ДокОсн.ВыбратьСтроки(); Пока ДокОсн.ПолучитьСтроку()=1 Цикл ДокСФ.НоваяСтрока(); ДокСФ.НазначитьТип("Товар","Справочник.Номенклатура"); ДокСФ.Товар =ДокОсн.Товар; ДокСФ.Счет =СчетПоКоду("90.3"); ДокСФ.НазначитьТип("Субконто1",ДокСФ.Счет.ВидСубконто(1)); ДокСФ.НазначитьТип("Субконто2",ДокСФ.Счет.ВидСубконто(2)); ДокСФ.НазначитьТип("Субконто3",ДокСФ.Счет.ВидСубконто(3)); ДокСФ.Субконто1 =ДокСФ.Товар.ВидНоменклатуры; СтавкаНДС =ДокСФ.Товар.СтавкаНДС.Получить(ДокСФ.ДатаДок); ДокСФ.Субконто2 =СтавкаНДС; Кол =?(ДокОсн.Количество=0,1,ДокОсн.Количество); НДС =ДокОсн.НДС; НП =ДокОсн.НП; Всего =ДокОсн.Всего; Если (Цел(СтавкаНДС.Ставка)=СтавкаНДС.Ставка) ИЛИ (ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС=0) Тогда Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНП=1 Тогда Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС=0 Тогда Цена=(Всего-НП)/Кол Иначе Цена=(Всего-НДС-НП)/Кол КонецЕсли; Иначе Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС=0 Тогда Цена=ДокОсн.Цена Иначе Цена=(Всего-НДС)/Кол КонецЕсли; КонецЕсли; Сумма=Всего-НДС-НП; Иначе Цена=(Всего-НП)/Кол; Сумма=Всего-НП; КонецЕсли; Если Цел(СтавкаНДС.Ставка)=СтавкаНДС.Ставка Тогда Всего=Сумма+НДС; Иначе Всего=Сумма; КонецЕсли; ДокСФ.Количество=Кол; ДокСФ.Цена =Цена; ДокСФ.СтавкаНДС =СтавкаНДС; ДокСФ.НДС =НДС; ДокСФ.Сумма =Сумма; ДокСФ.Всего =Всего; КонецЦикла; ДокСФ.Записать(); //Получим время документа числом Время1=ПолучитьВремяДокументаЧислом(ДокОсн); Время2=3600*23+60*59+59+1; Время=Время1+1; Если Время>=Время2 Тогда Время=Время1; КонецЕсли; //Установим время документа числом УстановитьВремяДокументаЧислом(ДокСФ,Время); ДокСФ.Записать(); Если ДокСФ.Провести()=0 Тогда Стр=""+ДокСФ.ДатаДок+" "+ДокСФ.ПредставлениеВида()+" №"+ДокСФ.НомерДок; Сообщить("!!!НЕ ПРОВЕЛСЯ!!! "+Стр,"!!!"); КонецЕсли; ИначеЕсли Вид="ПКО" Тогда //Шапка Док.ПринятоОт =Док77.ПринятоОт; Док.Основание =""; //Док77.Основание; Док.Приложение =Док77.Приложение; Стр=СтрПеречисление77(Док77.КодОперации); Если Стр="Оплата от покупателя" Тогда Док.КоррСчет=СчетПоКоду("62.1"); Док.НазначитьТип("Субконто1","Справочник.Контрагенты"); Док.Субконто1=Контрагент; Док.НазначитьТип("Субконто2","Справочник.Договоры"); Док.Субконто2=Док.Субконто1.ОсновнойДоговор; СтрДДС="Поступления от покупателей"; ИначеЕсли Стр="Возврат от поставщика" Тогда Док.КоррСчет=СчетПоКоду("60.1"); Док.НазначитьТип("Субконто1","Справочник.Контрагенты"); Док.Субконто1=Контрагент; Док.НазначитьТип("Субконто2","Справочник.Договоры"); Док.Субконто2=Док.Субконто1.ОсновнойДоговор; СтрДДС="Оплата поставщику"; ИначеЕсли Стр="Возврат от подотчетника" Тогда Док.КоррСчет=СчетПоКоду("71.1"); Док.НазначитьТип("Субконто1","Справочник.Сотрудники"); СтрДДС="Выдача под авансовый отчет"; Сообщить("ПКО №"+Док.НомерДок+" от "+Док.ДатаДок+" (Выдача под авансовый отчет)","!!!"); ИначеЕсли Стр="Розничная выручка" Тогда СтрДДС=""; Сообщить(Стр+" (Пока не работает)","!!!"); ИначеЕсли Стр="Розничная выручка (ЕНВД)" Тогда СтрДДС=""; Сообщить(Стр+" (Пока не работает)","!!!"); ИначеЕсли Стр="Прочее" Тогда //Тогда брать из Счет и коррсчет СтрДДС=""; Сообщить(Стр+" (Пока не работает)","!!!"); Сообщить("ПКО №"+Док.НомерДок+" от "+Док.ДатаДок+" (Прочее)","!!!"); КонецЕсли; Док.ФормироватьПроводки=1; //Док.Количество= Док.Сумма =Док77.Сумма*Док77.Курс; Док.СтавкаНП =глБезНалога("НП"); Док.УчитыватьНП =0; Док.УказатьНП =0; //Рассчитаем НП Если Док.УчитыватьНП=0 Тогда Док.НП=0; Иначе РасчетнаяСтавкаНП=Док.СтавкаНП.Ставка/(100+Док.СтавкаНП.Ставка); Док.НП=Док.Сумма*РасчетнаяСтавкаНП; КонецЕсли; Док.СтавкаНДС =глЗначениеПоУмолчанию("ОсновнаяСтавкаНДС"); //Рассчитаем НДС СуммаБезНП=Док.Сумма-Док.НП; РасчетнаяСтавкаНДС=Док.СтавкаНДС.Ставка/(100+?(Цел(Док.СтавкаНДС.Ставка)=Док.СтавкаНДС.Ставка,Док.СтавкаНДС.Ставка,0)); Док.НДС=СуммаБезНП*РасчетнаяСтавкаНДС; Док.УказатьНДС =1; Док.Валютный =1; //Док.Валюта = Спр=СоздатьОбъект("Справочник.ДвиженияДенежныхСредств"); Спр.НайтиПоНаименованию(СтрДДС,0,1); Док.ДвижениеДенежныхСредств=Спр.ТекущийЭлемент(); Если Док77.ДокОснование.Выбран()=1 Тогда Док.ДокументПоставки=ПолучитьДокПоGUID(Док77.ДокОснование.ТекущийДокумент()); КонецЕсли; //Док.КурсОплаты //Док.РозничнаяВыручка //Док.ТорговаяТочка Док.НомерЧекаККМ=0; ЗаписатьПровести(Док,Док77); ИначеЕсли Вид="РКО" Тогда //Шапка Док.Выдать =Док77.Выдать; Док.Основание =""; //Док77.Основание; Док.Приложение =Док77.Приложение; Стр=СтрПеречисление77(Док77.КодОперации); Если Стр="Оплата поставщику" Тогда Док.КоррСчет=СчетПоКоду("60.1"); Док.НазначитьТип("Субконто1","Справочник.Контрагенты"); Док.Субконто1=Контрагент; Док.НазначитьТип("Субконто2","Справочник.Договоры"); Док.Субконто2=Док.Субконто1.ОсновнойДоговор; СтрДДС="Оплата поставщику"; ИначеЕсли Стр="Возврат покупателю" Тогда Док.КоррСчет=СчетПоКоду("76.5"); Док.НазначитьТип("Субконто1","Справочник.Контрагенты"); Док.Субконто1=Контрагент; Док.НазначитьТип("Субконто2","Справочник.Договоры"); Док.Субконто2=Док.Субконто1.ОсновнойДоговор; СтрДДС="Поступления от покупателей"; ИначеЕсли Стр="Выдача подотчетнику" Тогда Док.КоррСчет=СчетПоКоду("71.1"); Док.НазначитьТип("Субконто1","Справочник.Сотрудники"); СтрДДС="Выдача под авансовый отчет"; Сообщить("РКО №"+Док.НомерДок+" от "+Док.ДатаДок+" (Выдача под авансовый отчет)","!!!"); ИначеЕсли Стр="Прочее" Тогда //Тогда брать из Счет и коррсчет СтрДДС=""; Сообщить(Стр+" (Пока не работает)","!!!"); Сообщить("РКО №"+Док.НомерДок+" от "+Док.ДатаДок+" (Прочее)","!!!"); КонецЕсли; Док.Сумма =Док77.Сумма*Док77.Курс; //Док.Количество Док.ПоДокументу =Док77.ПоДокументу; Док.ФормироватьПроводки =1; Док.Валютный =1; //Док.Валюта Спр=СоздатьОбъект("Справочник.ДвиженияДенежныхСредств"); Спр.НайтиПоНаименованию(СтрДДС,0,1); Док.ДвижениеДенежныхСредств=Спр.ТекущийЭлемент(); //Док.ДокументПоставки //Док.КурсОплаты //Док.НомерЧекаККМ ЗаписатьПровести(Док,Док77); ИначеЕсли Вид="ВозвратПоставщику" Тогда //Шапка Док.Контрагент =Контрагент; Док.Договор =Док.Контрагент.ОсновнойДоговор; Док.МестоХранения =глЗначениеПоУмолчанию("ОсновнойСклад"); Док.ВидОтгрузки =13; Док.ЗачитыватьАванс =1; Док.ВариантРасчетаНалогов=Константа.ОсновнойВариантРасчетаНалоговОтгрузки; Док.РасчетныйСчет =глЗначениеПоУмолчанию("ОсновнойБанковскийСчет"); //Пошаманим с основанием ДокОсн77=Док77.ДокОснование; Если ДокОсн77.Выбран()=1 Тогда Док.ДокументПоступления=ПолучитьДокПоGUID(ДокОсн77); Если Док.ДокументПоступления.Выбран()=1 Тогда Док.ТипЦен=Док.ДокументПоступления.ТипЦен; КонецЕсли; Иначе Если Док.МестоХранения.Выбран()=1 Тогда Док.ТипЦен=Док.МестоХранения.ТипЦен КонецЕсли; КонецЕсли; //Док.Грузоотправитель= //Док.Грузополучатель= //Табличная часть Х=0; //Количество - нужно для переноса в свернутом виде Док77.ВыбратьСтроки(); Пока Док77.ПолучитьСтроку()=1 Цикл Х=Х+(Док77.Количество*Док77.Коэффициент); КонецЦикла; //Попробуем отделить мух от котлет НДС=Док77.Итог("СуммаНДС")*Курс; НП=Док77.Итог("СуммаНП")*Курс; Всего=(Док77.Итог("Сумма")+?(Док77.СуммаВклНП=1,0,НП)+?(Док77.СуммаВклНДС=1,0,НДС))*Курс; Сумма=Всего-?(Док.ВариантРасчетаНалогов.СуммаВключаетНП=1,0,НП)-?(Док.ВариантРасчетаНалогов.СуммаВключаетНДС=1,0,НДС); //делаем всего одну строку Док.НоваяСтрока(); Док.Товар =ЭлементТовар; Док.Количество =Х; Док.Цена =Сумма/?(Х=0,1,Х); Док.Сумма =Сумма; Док.НДС =НДС; Док.НП =НП; Док.Всего =Всего; ЗаписатьПровести(Док,Док77); ИначеЕсли Вид="ВозвратОтПокупателя" Тогда //Шапка Док.Контрагент =Контрагент; Док.Договор =Док.Контрагент.ОсновнойДоговор; Док.ДатаНомерСчетаФактуры =""; Док.МестоХранения =глЗначениеПоУмолчанию("ОсновнойСклад"); Док.ВидПоступления =13; Док.ЗачитыватьАванс =1; Док.ВариантРасчетаНалогов =Константа.ОсновнойВариантРасчетаНалогов; Если Константа.ОрганизацияЯвляетсяПлательщикомНДС=Нет Тогда Док.НДСвключатьВСтоимость=1 КонецЕсли; //Пошаманим с основанием ДокОсн77=Док77.ДокОснование; Если ДокОсн77.Выбран()=1 Тогда Док.ДокументОснование=ПолучитьДокПоGUID(ДокОсн77); Если Док.ДокументОснование.Выбран()=1 Тогда Док.ТипЦен=Док.ДокументОснование.ТипЦен; КонецЕсли; Иначе Док.ТипЦен=глЗначениеПоУмолчанию("ОсновнаяЦенаПриобретения"); КонецЕсли; //Док.НомерДокВходящий =Док77.НомерДокВходящий; //Док.ДатаДокВходящий =Док77.ДатаДокВходящий; //Табличная часть Х=0; //Количество - нужно для переноса в свернутом виде // ВсегоСтоимость=0; Док77.ВыбратьСтроки(); Пока Док77.ПолучитьСтроку()=1 Цикл Х=Х+(Док77.Количество*Док77.Коэффициент); // ВсегоСтоимость=ВсегоСтоимость+Док77.Себестоимость; КонецЦикла; //Попробуем отделить мух от котлет НДС=Док77.Итог("СуммаНДС")*Курс; НП=Док77.Итог("СуммаНП")*Курс; Всего=(Док77.Итог("Сумма")+?(Док77.СуммаВклНП=1,0,НП)+?(Док77.СуммаВклНДС=1,0,НДС))*Курс; Сумма=Всего-?(Док.ВариантРасчетаНалогов.СуммаВключаетНП=1,0,НП)-?(Док.ВариантРасчетаНалогов.СуммаВключаетНДС=1,0,НДС); //делаем всего одну строку Док.НоваяСтрока(); Док.Товар =ЭлементТовар; Док.Количество =Х; Док.Цена =Сумма/?(Х=0,1,Х); Док.Сумма =Сумма; Док.НДС =НДС; Док.НП =НП; Док.Всего =Всего; ВсегоСтоимость=Сумма; //Всего-?(Док.ВариантРасчетаНалогов.СуммаВключаетНДС=1,НДС,0)-?(Док.ВариантРасчетаНалогов.СуммаВключаетНП=1,НП,0); Док.ВсегоСтоимость=ВсегоСтоимость; Док.Стоимость=ВсегоСтоимость/?(Х=0,1,Х); Док.ВсегоСтоимостьНУ=ВсегоСтоимость; Док.СтоимостьНУ=Док.Стоимость; ЗаписатьПровести(Док,Док77); Иначе Сообщить("Неизвестный вид документа: "+Вид,"!!!"); КонецЕсли; //Документ уже записан и проведен //Если документ был перепроведен - то надо почистить справочник "ПерепроведенныеДокументы" в базе источник Если СписокПерепроведенных.Принадлежит(v77.ЗначениеВСтрокуВнутр(Док77.ТекущийДокумент()))=1 Тогда Попытка Спр77=v77.CreateObject("Справочник.ПерепроведенныеДокументы"); Спр77.НайтиПоРеквизиту("Документ",Док77.ТекущийДокумент(),1); Спр77.флБух=0; Спр77.Записать(); //Если флБух и флМаг равны 0 - удалим элемент Если (Спр77.флБух=0) И (Спр77.флМаг=0) Тогда Спр77.Удалить() КонецЕсли; Исключение Сообщить("Не удалось поставить флаг в справочнике <ПерепроведенныеДокументы> у документа: "+Док77.ПредставлениеВида()+" №"+Док77.НомерДок+" от "+Док77.ДатаДок,"!!!"); КонецПопытки; КонецЕсли; //Поставим флаг "Выгрузки" в базе источник Попытка Д77=v77.CreateObject("Документ"); Д77.НайтиДокумент(Док77.ТекущийДокумент()); Д77.флБух=1; Д77.Записать(); Исключение Сообщить("Не удалось поставить флаг у документа: "+Док77.ПредставлениеВида()+" №"+Док77.НомерДок+" от "+Док77.ДатаДок,"!!!"); КонецПопытки; Возврат Док.ТекущийДокумент() КонецФункции //ПолучитьДокумент() Процедура Принять() Если ДатаНач<'01.01.2007' Тогда Предупреждение("Нельзя выбирать такой период"); Возврат; КонецЕсли; //Мазанов //Если (ДатаНач>='01.01.2007') ИЛИ (ДатаКон>='01.01.2007') Тогда // Предупреждение("Эта обработка не годится для 2007 года!!!",60); // Возврат; //КонецЕсли; Если ПустоеЗначение(v77)=1 Тогда Если глИнициализация77()=0 Тогда v77=0; Возврат; КонецЕсли; КонецЕсли; Если Журнал.КоличествоСтрок()=0 Тогда Обновить(); Если Журнал.КоличествоСтрок()=0 Тогда Предупреждение("Нет документов для приёма. ",60); Возврат КонецЕсли; КонецЕсли; Статус("Перенос документов"); Для Х=1 По Журнал.КоличествоСтрок() Цикл Журнал.ПолучитьСтрокуПоНомеру(Х); Если Журнал.Пометка<>1 Тогда Продолжить КонецЕсли; Журнал.ТекущаяСтрока(Х); //Покажем красные часики Журнал.Пометка=4; Док=Журнал.Док; //на случай перезаписи документа Док77=Журнал.Док77; Стр=""+Док77.ДатаДок+" "+Док77.ПредставлениеВида()+" №"+Док77.НомерДок; Статус(Стр); Док=ПолучитьДокумент(Док77,Док); Если Док.Выбран()=1 Тогда Журнал.Иконка=?(Док.ПометкаУдаления()=1,3,1+Док.Проведен()); Журнал.Сумма=ПолучитьСуммуДок(Док); Журнал.О="О"; КонецЕсли; Журнал.Док=Док; //Покажем галочку зеленую Журнал.Пометка=3; КонецЦикла; Статус("Перенос документов завершен"); КонецПроцедуры //Принять() Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки) Форма.ИспользоватьСлой(ЗначениеЗакладки,2) КонецПроцедуры //ПриВыбореЗакладки() Процедура ПриОткрытии() //Сделаем необходимые проверки //1) В справочнике "Контрагенты" тип кода должен быть числовой и длина кода 8, Если Метаданные.Справочник("Контрагенты").ТипКода="Текстовый" Тогда Сообщить("В справочнике <Контрагенты> тип кода не числовой.","!!!"); СтатусВозврата(0); Возврат; ИначеЕсли Метаданные.Справочник("Контрагенты").ДлинаКода<>8 Тогда Сообщить("В справочнике <Контрагенты> длина кода не 8.","!!!"); СтатусВозврата(0); Возврат; КонецЕсли; // а также должны быть общие реквизиты документа Если Метаданные.ОбщийРеквизитДокумента("Документ77").Выбран()=0 Тогда Сообщить("В конфигурации отсутствует общий реквизит документов <Документ>.","!!!"); СтатусВозврата(0); Возврат; КонецЕсли; Если Метаданные.ОбщийРеквизитДокумента("НомерДок77").Выбран()=0 Тогда Сообщить("В конфигурации отсутствует общий реквизит документов <НомерДок77>.","!!!"); СтатусВозврата(0); Возврат; КонецЕсли; //2) Проверка элемента "Товар продукты" в справочнике "Номенклатура" Наименование="Товар (продукты)"; Спр=СоздатьОбъект("Справочник.Номенклатура"); Если Спр.НайтиПоНаименованию(Наименование,0,1)=0 Тогда Спр.Новый(); Спр.ИспользоватьДату('01.01.2007',1); Спр.Наименование=Наименование; Спр.ТипТовара=Перечисление.ТипыТоваров.ПокупныеИзделия; Спр.ПолнНаименование=Наименование; СпрВН=СоздатьОбъект("Справочник.ВидыНоменклатуры"); Если СпрВН.НайтиПоНаименованию("Товары",0,1)=0 Тогда СпрВН.Новый(); СпрВН.Наименование="Товары"; СпрВН.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Товар; СпрВН.Записать(); КонецЕсли; Спр.ВидНоменклатуры=СпрВН.ТекущийЭлемент(); Спр.ЕдиницаИзмерения=глЗначениеПоУмолчанию("ОсновнаяЕдиницаИзмерения"); Если Константа.ОсновнойВариантОтпускнойЦены=Перечисление.ВариантыОтпускныхЦен.БезНП Тогда Спр.ПорядокХраненияОтпускнойЦены=2; ИначеЕсли Константа.ОсновнойВариантОтпускнойЦены=Перечисление.ВариантыОтпускныхЦен.ВключаяНП Тогда Спр.ПорядокХраненияОтпускнойЦены=3; Иначе Спр.ПорядокХраненияОтпускнойЦены=1; КонецЕсли; Спр.СтавкаНДС =глЗначениеПоУмолчанию("ОсновнаяСтавкаНДС"); Спр.СтавкаНП =глЗначениеПоУмолчанию("ОсновнаяСтавкаНП"); Спр.ТипНоменклатуры=Перечисление.ТипыНоменклатуры.Товар; Спр.СтранаПроисхожд =1; Спр.Записать(); Сообщить("В справочник <Номенклатура> добавлен элемент <Товар (продукты)>","I"); КонецЕсли; ЭлементТовар=Спр.ТекущийЭлемент(); // Предупреждение("Пока не работает! ",60); // СтатусВозврата(0); КонецПроцедуры //ПриОткрытии() Процедура ПриЗакрытии() //Если ПустоеЗначение(v77)=0 Тогда // Если Вопрос("Отключиться от базы ""CD Land""?","Да+Нет",60)="Да" Тогда // v77=0 // КонецЕсли; //КонецЕсли; СохранитьЗначение("флОтладка", флОтладка); СохранитьЗначение("флМонопольно", флМонопольно); КонецПроцедуры //ПриЗакрытии() Процедура УдалитьДокументыЗаПериод() Статус("Удаление документов за период с "+ДатаНач+" по "+ДатаКон); НачатьТранзакцию(); Док=СоздатьОбъект("Документ"); Док.ВыбратьДокументы(ДатаНач,ДатаКон); Пока Док.ПолучитьДокумент()=1 Цикл Состояние(Шаблон("[Док]")); Док.Удалить(1) КонецЦикла; ЗафиксироватьТранзакцию(); Статус(""); КонецПроцедуры //УдалитьДокументыЗаПериод() Процедура Проведение() Док=СоздатьОбъект("Документ"); Док.ВыбратьДокументы(ДатаНач,ДатаКон); Пока Док.ПолучитьДокумент()=1 Цикл Если Док.ПометкаУдаления()=1 Тогда Продолжить КонецЕсли; Если Док.Проведен()=1 Тогда Продолжить КонецЕсли; Сообщить(""+Док.ДатаДок+" "+Док.НомерДок+" "+Док.ПредставлениеВида()); Попытка Док.Провести() Исключение КонецПопытки; КонецЦикла; Сообщить("ВСЁ"); КонецПроцедуры //Проведение() Процедура ПометитьВсе() // Если ПустоеЗначение(v77)=1 Тогда // Если глИнициализация77()=0 Тогда // v77=0; // Возврат; // КонецЕсли; // КонецЕсли; // // Если Журнал.КоличествоСтрок()=0 Тогда // Обновить(); // Если Журнал.КоличествоСтрок()=0 Тогда // Предупреждение("Нет документов для приёма. ",60); // Возврат // КонецЕсли; // КонецЕсли; // Для Х=1 По Журнал.КоличествоСтрок() Цикл Журнал.ПолучитьСтрокуПоНомеру(Х); Если Журнал.Док77.Проведен()=1 Тогда Журнал.ТекущаяСтрока(Х); Журнал.Пометка=1; КонецЕсли; КонецЦикла; // Принять(); // Проведение(); КонецПроцедуры //Пометить() Процедура ФильтрНаВидыДокументов() СписокВидовДок.ОтметитьЗначения(0,"Фильтр по виду документов",0,60); КонецПроцедуры //ФильтрНаВидыДокументов() //СсылкиДок77=СоздатьОбъект("Справочник.СсылкиДок77"); СписокПерепроведенных=СоздатьОбъект("СписокЗначений"); ДатаНач=ТекущаяДата(); ДатаКон=ТекущаяДата(); //ДатаНач='29.12.2007'; //ДатаКон='29.12.2007'; Журнал.НоваяКолонка("Иконка77",,,,"",4); Журнал.НоваяКолонка("Иконка",,,,"",4); Журнал.НоваяКолонка("Пометка",,,,"",4); Журнал.НоваяКолонка("Документ","Строка",,,"Документ",30,,); Журнал.НоваяКолонка("НомерДок","Строка",,,"Номер",11,,); Журнал.НоваяКолонка("ДатаДок","Дата",,,"Дата",10,,); Журнал.НоваяКолонка("Время","Строка",,,"Время",8,,); Журнал.НоваяКолонка("Сумма77","Число",15,2,"Сумма",12,"Ч015.2.'",2); Журнал.НоваяКолонка("Сумма","Число",15,2,"Сумма",12,"Ч015.2.'",2); Журнал.НоваяКолонка("Разница","число",15,2,"Разница",12,"Ч015.2.'",2); Журнал.НоваяКолонка("О","Строка",,,"",3,,); //Отображается "О" если есть документ Журнал.НоваяКолонка("Информация","Строка",,,"Информация",25,,); Журнал.НоваяКолонка("Док"); Журнал.НоваяКолонка("Док77"); Журнал.ВидимостьКолонки("Док,Док77",0); Журнал.ВыводитьПиктограммы("Иконка77",1); Журнал.ВыводитьПиктограммы("Иконка",1); Журнал.ВыводитьПиктограммы("Пометка",5); Журнал.Фиксировать(0,2); //Список соответствий видов в базе источник и базе приемник СписокВидовДок=СоздатьОбъект("СписокЗначений"); СписокВидовДок.ДобавитьЗначение("ПКО", "ПриходныйОрдер"); СписокВидовДок.ДобавитьЗначение("РКО", "РасходныйОрдер"); СписокВидовДок.ДобавитьЗначение("ПоступлениеТМЦ", "ПоступлениеТоваров"); СписокВидовДок.ДобавитьЗначение("ВозвратОтПокупателя", "ПоступлениеТоваров"); СписокВидовДок.ДобавитьЗначение("Реализация", "РасходнаяНакладная"); СписокВидовДок.ДобавитьЗначение("ВозвратПоставщику", "РасходнаяНакладная"); флОтладка =ВосстановитьЗначение("флОтладка"); флМонопольно =ВосстановитьЗначение("флМонопольно"); СпрПодмена=СоздатьОбъект("Справочник.Подмена");