Доброго времени суток.
Конфа: Бухгалтерский учет для Украины 7.7 (7.70.289)
Существует следующая задача - в расходных накладных за период с июля по октябрь поменять единицу измерения с ящиков на кг. для одного контрагента. Как это правильно сделать? Входить в каждую расходку и менять вручную или есть автоматизированный способ?
Есть, как не быть, Экстрепс с диска ИТС - там много всего. Правда, задача непонятна.
Просто поменять? Или пересчитать количество? или еще и сумму?
Можно с другой стороны зайти - в чем накосячили?
Та ни в чем не накосячили, просто в главный офис нужна информация, а им единица измерения нужна килограммы...
Скорее всего нужно ещё и пересчитать всё.
А при пересчёте ничего не нарушится?
Тогда доки лучше не трогать.
В офис нужно отправлять отчет, он строится в основных(базовых?) единицах. Тогда непонятно, почему проблема только с одним Контром.
Им только один контрагент нужен. Я через обработку экспорта данных формирую ДБФ-ки, потом через навигатор удаляю всех ненужных контрагентов и отправляю им. Но в наших расходках стоят ящики, а им нужны килограммы...
Выгружайте в Ексель, легче править и пересчитывать.
Документы-то уже Контру выданы... и с пересчетом гемор.
А у ТМЦ какая стоит Базовая единица? - базовую тоже менять нельзя без перепроведения. Болотистая ситуация(
Может, лучше доработать Обработку выгрузки? Добавить в нее пересчет в нужную единицу, а заодно фильтр по Контрагентам(шоб лишнего
не выгружало)?
Эксель - да, но если на той стороне импорт из дбф... результат правки в Эксель может оказаться не в жилу
Перем Каталог, ТМЦКод, КонтраКод;
Перем Запрос, ТекстЗапроса;
Перем СписокКонтра, СписокТМЦ;
// =====================
Процедура ВыбратьКаталог()
ФС.ВыбратьКаталог(Каталог,"Выберите каталог");
Слэш = Сред(Каталог,СтрДлина(Каталог),1);
Если Слэш <> "\" Тогда
Каталог = Каталог + "\";
КонецЕсли;
КонецПроцедуры
// =====================
Процедура СоздатьДБ(ДБ,ИмяФайла)
ДБ.ДобавитьПоле("COD_ID","S",15,0);
ДБ.ДобавитьПоле("COD_WORKS","S",2,0);
ДБ.ДобавитьПоле("COD_SCL","S",20,0);
ДБ.ДобавитьПоле("KONTRAGENT","S",24,0);
ДБ.ДобавитьПоле("DATA","D",6,0);
Если Сред(ИмяФайла,5,3) = "OUT" Тогда
ДБ.ДобавитьПоле("PART_NUMB","S",15,0);
ДБ.ДобавитьПоле("ARTIKUL_GP","S",12,0);
КонецЕсли;
ДБ.ДобавитьПоле("ARTIKUL_SR","S",12,0);
ДБ.ДобавитьПоле("NUMBER_DOC","S",15,0);
ДБ.ДобавитьПоле("COD_OPL","N",1,0);
ДБ.ДобавитьПоле("PRICE_1C","N",20,7);
ДБ.ДобавитьПоле("KOL_VO","N",20,7);
ИмяФайла = Каталог + ИмяФайла;
ДБ.СоздатьФайл(ИмяФайла);
Если ДБ.Открыта() = 0 Тогда
ДБ.ОткрытьФайл(ИмяФайла);
КонецЕсли;
КонецПроцедуры
// =====================
Процедура Заполнить(ДБ,ТМЦ)
ДБ.Добавить();
ДБ.COD_ID = СокрЛП(Сред(Запрос.УникальныйКод.ПолучитьПозицию(),20))+"/"+Запрос.НомерСтроки;
ДБ.УстановитьЗначениеПоля("COD_WORKS",Префикс);
//Если (Лев(Запрос.НомерДокумента,2) = "УС") или (Лев(Запрос.НомерДокумента,2) = "ОУ") Тогда
// ДБ.УстановитьЗначениеПоля("COD_SCL","99");
// КодОплаты = 2;
//Иначе
ДБ.УстановитьЗначениеПоля("COD_SCL",Запрос.КодМестаХр.ПолныйКод());
КодОплаты = 1;
//КонецЕсли;
ДБ.УстановитьЗначениеПоля("DATA",Запрос.ДатаДокумента);
Если Запрос.УникальныйКод.Вид() = "Перемещение" Тогда
КодОплаты = 0;
ДБ.KONTRAGENT = Префикс+"__111111"+Префикс;
ИначеЕсли Запрос.Контрагент.Вид() = "Сотрудники" Тогда
ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__ПОД_ОТЧЕТ");
Иначе
Попытка
Если ПустоеЗначение(Запрос.Контрагент.Артикул) = 1 Тогда
Если СписокКонтра.НайтиЗначение(Запрос.Контрагент) = 0 Тогда
СписокКонтра.ДобавитьЗначение(Запрос.Контрагент);
КонецЕсли;
ДБ.УстановитьЗначениеПоля("KONTRAGENT",0);
Иначе
ДБ.УстановитьЗначениеПоля("KONTRAGENT",Запрос.Контрагент.Артикул);
КонецЕсли;
Исключение
ДБ.УстановитьЗначениеПоля("KONTRAGENT",0);
КонецПопытки
КонецЕсли;
Если (Запрос.УникальныйКод.Вид() = "ВозвратнаяНакладная") или (Запрос.УникальныйКод.Вид() = "ВозвратПоставщику") Тогда
КодОплаты = 4;
КонецЕсли;
ДБ.COD_OPL = КодОплаты;
ДБ.УстановитьЗначениеПоля("NUMBER_DOC",Запрос.НомерДокумента);
Если (ТМЦ.Вид() = "НеоборотныеАктивы") или (ТМЦ.Вид() = "Инвестиции") Тогда
ДБ.ARTIKUL_SR = "ОП"+Префикс+"ОДОС01";
ИначеЕсли ТМЦ.Вид() = "БланкиСтрогойОтчетности" Тогда
ДБ.ARTIKUL_SR = "ОП"+Префикс+"ОДКТ01";
ИначеЕсли ПустоеЗначение(ТМЦ.Артикул) = 1 Тогда
Если СписокТМЦ.НайтиЗначение(ТМЦ) = 0 Тогда
СписокТМЦ.ДобавитьЗначение(ТМЦ);
КонецЕсли;
ДБ.УстановитьЗначениеПоля("ARTIKUL_SR",0);
Иначе ДБ.УстановитьЗначениеПоля("ARTIKUL_SR",ТМЦ.Артикул);
КонецЕсли;
Если Запрос.УникальныйКод.Вид() = "Перемещение" Тогда
ДБ.KOL_VO = Запрос.Колво;
ИначеЕсли Запрос.Цена + Запрос.Колво = 0 Тогда
ДБ.УстановитьЗначениеПоля("PRICE_1C",Запрос.Сумма);
ДБ.УстановитьЗначениеПоля("KOL_VO",1);
ИначеЕсли Запрос.Цена = 0 Тогда
ДБ.PRICE_1C = Запрос.Сумма/Запрос.Колво;
ДБ.KOL_VO = Запрос.Колво;
ИначеЕсли Запрос.Колво = 0 Тогда
ДБ.PRICE_1C = Запрос.Цена;
ДБ.KOL_VO = 1;
Иначе
ДБ.УстановитьЗначениеПоля("PRICE_1C",Запрос.Цена);
ДБ.УстановитьЗначениеПоля("KOL_VO",Запрос.Колво);
КонецЕсли;
ДБ.Записать();
КонецПроцедуры
// ===============================
Процедура Сформировать()
СписокКонтра = СоздатьОбъект("СписокЗначений");
СписокТМЦ = СоздатьОбъект("СписокЗначений");
ДБ = СоздатьОбъект("XBase");
ДБ.ДобавитьПоле("FIRM","S",120,0);
ДБ.ДобавитьПоле("DATE1","D",6,0);
ДБ.ДобавитьПоле("DATE2","D",6,0);
ИмяФайла = Каталог+"IMP_INFO.dbf";
ДБ.СоздатьФайл(ИмяФайла);
Если ДБ.Открыта() = 0 Тогда
ДБ.ОткрытьФайл(ИмяФайла);
КонецЕсли;
Фирма = СоздатьОбъект("Справочник.Фирмы");
Фирма.ВыбратьЭлементы();
Пока Фирма.ПолучитьЭлемент() > 0 Цикл
ДБ.Добавить();
ДБ.FIRM = Фирма.ПолнНаименование;
ДБ.DATE1 = ВыбНачПериода;
ДБ.DATE2 = ВыбКонПериода;
ДБ.Записать();
КонецЦикла;
ДБ.ЗакрытьФайл();
// ----------------------------
ДБ = СоздатьОбъект("XBase");
ДБ.ДобавитьПоле("ARTIKUL","S",12,0);
ДБ.ДобавитьПоле("NAME","S",120,0);
ИмяФайла = Каталог+"IMP_TMC.dbf";
ДБ.СоздатьФайл(ИмяФайла);
Если ДБ.Открыта() = 0 Тогда
ДБ.ОткрытьФайл(ИмяФайла);
КонецЕсли;
ТМЦ = СоздатьОбъект("Справочник.ТМЦ");
ТМЦ.ПорядокНаименований();
ТМЦ.ВыбратьЭлементы();
Пока ТМЦ.ПолучитьЭлемент() > 0 Цикл
Если (ТМЦ.ЭтоГруппа() = 1) или (ТМЦ.ПометкаУдаления() = 1) Тогда
Продолжить;
КонецЕсли;
Если Новые = 1 Тогда
Если Число(ТМЦ.Код) < ТМЦКод Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ДБ.Добавить();
Если ПустоеЗначение(ТМЦ.Артикул) = 1 Тогда
ДБ.УстановитьЗначениеПоля("ARTIKUL",0);
Иначе ДБ.УстановитьЗначениеПоля("ARTIKUL",ТМЦ.Артикул);
КонецЕсли;
ДБ.УстановитьЗначениеПоля("NAME",ТМЦ.Наименование);
ДБ.Записать();
КонецЦикла;
ТМЦ.Новый();
ТМЦКод = Число(ТМЦ.Код);
ДБ.ЗакрытьФайл();
// ----------------------------
ДБ = СоздатьОбъект("XBase");
ДБ.ДобавитьПоле("KONTRAGENT","S",24,0);
ДБ.ДобавитьПоле("GRUPPA","S",2,0);
ДБ.ДобавитьПоле("NAME","S",120,0);
ИмяФайла = Каталог+"IMP_KONT.dbf";
ДБ.СоздатьФайл(ИмяФайла);
Если ДБ.Открыта() = 0 Тогда
ДБ.ОткрытьФайл(ИмяФайла);
КонецЕсли;
Контра = СоздатьОбъект("Справочник.Контрагенты");
Контра.ПорядокНаименований();
Контра.ВыбратьЭлементы();
Пока Контра.ПолучитьЭлемент() > 0 Цикл
Если (Контра.ЭтоГруппа() = 1) или (Контра.ПометкаУдаления() = 1) Тогда
Продолжить;
КонецЕсли;
Если Новые = 1 Тогда
Если Число(Контра.Код) < КонтраКод Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ДБ.Добавить();
Попытка
Если ПустоеЗначение(Контра.ЕДРПОУ) = 1 Тогда
ДБ.УстановитьЗначениеПоля("KONTRAGENT",0);
Иначе ДБ.УстановитьЗначениеПоля("KONTRAGENT",Контра.ЕДРПОУ);
КонецЕсли;
Исключение
ДБ.УстановитьЗначениеПоля("KONTRAGENT",0);
КонецПопытки;
ДБ.УстановитьЗначениеПоля("GRUPPA",0);
ДБ.УстановитьЗначениеПоля("NAME",Контра.ПолнНаименование);
ДБ.Записать();
КонецЦикла;
Контра.Новый();
КонтраКод = Число(Контра.Код);
ДБ.ЗакрытьФайл();
// ----------------------------
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
//|Давалка = Документ.ПриходнаяНакладная.ДавальческоеСырье, Документ.ВозвратПоставщику.ДавальческоеСырье;
//|Ответка = Документ.ПриходнаяНакладная.НаОтветХранение, Документ.РасходнаяНакладная.ОтветХранение;
//|По281 = Документ.РасходнаяНакладная.По281;
|УникальныйКод = Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.РасходнаяНакладная.ТекущийДокумент, Документ.ВозвратнаяНакладная.ТекущийДокумент, Документ.ВозвратПоставщику.ТекущийДокумент, Документ.Перемещение.ТекущийДокумент;
|НомерДокумента = Документ.ПриходнаяНакладная.НомерДок, Документ.РасходнаяНакладная.НомерДок, Документ.ВозвратнаяНакладная.НомерДок, Документ.ВозвратПоставщику.НомерДок, Документ.Перемещение.НомерДок;
|ДатаДокумента = Документ.ПриходнаяНакладная.ДатаДок, Документ.РасходнаяНакладная.ДатаДок, Документ.ВозвратнаяНакладная.ДатаДок, Документ.ВозвратПоставщику.ДатаДок, Документ.Перемещение.ДатаДок;
|КодМестаХр = Документ.ПриходнаяНакладная.МестоХранения, Документ.РасходнаяНакладная.МестоХранения, Документ.ВозвратнаяНакладная.МестоХранения, Документ.ВозвратПоставщику.МестоХранения,Документ.Перемещение.МестоХранения;
|НовыйКодМестаХр = Документ.Перемещение.НовоеМестоХранения;
|НомерСтроки = Документ.ПриходнаяНакладная.НомерСтроки, Документ.РасходнаяНакладная.НомерСтроки, Документ.ВозвратнаяНакладная.НомерСтроки, Документ.ВозвратПоставщику.НомерСтроки, Документ.Перемещение.НомерСтроки;
|ТМЦ = Документ.ПриходнаяНакладная.ТМЦ, Документ.РасходнаяНакладная.ТМЦ, Документ.ВозвратнаяНакладная.ТМЦ, Документ.ВозвратПоставщику.ТМЦ, Документ.Перемещение.ТМЦ;
|Счет = Документ.Перемещение.Счет;
|НовыйТМЦ = Документ.Перемещение.Стало;
|СталоСчет = Документ.Перемещение.СталоСчет;
|Контрагент = Документ.ПриходнаяНакладная.Контрагент, Документ.РасходнаяНакладная.Контрагент, Документ.ВозвратнаяНакладная.Контрагент, Документ.ВозвратПоставщику.Контрагент;
|Цена = Документ.ПриходнаяНакладная.ЦенаБезНДС, Документ.РасходнаяНакладная.ЦенаБезНДС, Документ.ВозвратнаяНакладная.ЦенаБезНДС, Документ.ВозвратПоставщику.ЦенаБезНДС;
|Колво = Документ.ПриходнаяНакладная.Кво, Документ.РасходнаяНакладная.Кво, Документ.ВозвратнаяНакладная.Кво, Документ.ВозвратПоставщику.Кво, Документ.Перемещение.Кво;
|Сумма = Документ.ПриходнаяНакладная.СуммаБезНДС, Документ.РасходнаяНакладная.СуммаБезНДС, Документ.ВозвратнаяНакладная.СуммаБезНДС, Документ.ВозвратПоставщику.СуммаБезНДС, Документ.Перемещение.СуммаУчБезНДС;
|Группировка НомерДокумента;
|Группировка НомерСтроки;
//|Условие (Давалка = 0);
//|Условие (Ответка = 0);
|"
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
ДБ = СоздатьОбъект("XBase");
СоздатьДБ(ДБ,"IMP_IN.dbf");
ДБР = СоздатьОбъект("XBase");
СоздатьДБ(ДБР,"IMP_OUT.dbf");
Пока Запрос.Группировка(1) = 1 Цикл
Состояние("Приход/Расход: "+Запрос.НомерДокумента+" "+Запрос.ДатаДокумента);
Пока Запрос.Группировка(2) = 1 Цикл
Если ПустоеЗначение(Запрос.ТМЦ) = 1 Тогда
Продолжить;
КонецЕсли;
Ном = Запрос.УникальныйКод.Вид();
Если Ном = "Перемещение" Тогда
Если ((Запрос.КодМестаХр.Тип <> МОЛы) И (Запрос.НовыйКодМестаХр.Тип <> МОЛы))
И ((Запрос.КодМестаХр.ВидСклада = Розничный) Или (Запрос.НовыйКодМестаХр.ВидСклада = Розничный)) Тогда
Если Запрос.ТМЦ.Вид()="ТМЦ" Тогда
Ц = Запрос.ТМЦ.Цена_Розн.Получить(Запрос.ДатаДокумента);
КонецЕсли;
Если Ц = 0 Тогда
Если Запрос.НовыйТМЦ.Вид()="ТМЦ" Тогда
Ц = Запрос.НовыйТМЦ.Цена_Розн.Получить(Запрос.ДатаДокумента);
КонецЕсли;
КонецЕсли;
Иначе Ц = Запрос.Сумма/?(Запрос.Колво = 0,1,Запрос.Колво);
КонецЕсли;
Если Запрос.Счет.Забалансовый = 0 Тогда
Заполнить(ДБР,Запрос.ТМЦ);
ДБР.УстановитьЗначениеПоля("PART_NUMB",0);
ДБР.УстановитьЗначениеПоля("ARTIKUL_GP",0);
ДБР.PRICE_1C = Ц;
ДБР.Записать();
КонецЕсли;
Если Запрос.СталоСчет.Забалансовый = 0 Тогда
Заполнить(ДБ,Запрос.НовыйТМЦ);
ДБ.COD_SCL = Запрос.НовыйКодМестаХр.ПолныйКод();
ДБ.PRICE_1C = Ц;
ДБ.Записать();
КонецЕсли;
ИначеЕсли (Ном = "ПриходнаяНакладная") или (Ном = "ВозвратнаяНакладная") Тогда
Если Запрос.ТМЦ.Счет.Забалансовый = 0 Тогда
Заполнить(ДБ,Запрос.ТМЦ);
КонецЕсли;
ИначеЕсли (Запрос.ТМЦ.Счет.Забалансовый = 0) Тогда
Заполнить(ДБР,Запрос.ТМЦ);
ДБР.УстановитьЗначениеПоля("PART_NUMB",0);
ДБР.УстановитьЗначениеПоля("ARTIKUL_GP",0);
ДБР.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
// ----------КАЛЬКУЛЯЦИИ-------------
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|УникальныйКод = Документ.КалькуляцияДавалки.ТекущийДокумент, Документ.КалькулДавалкиГотовПрод.ТекущийДокумент;
|НомерДокумента = Документ.КалькуляцияДавалки.НомерДок, Документ.КалькулДавалкиГотовПрод.НомерДок;
|ДатаДокумента = Документ.КалькуляцияДавалки.ДатаДок, Документ.КалькулДавалкиГотовПрод.ДатаДок;
// |Свое = Документ.КалькуляцияДавалки.Свое, Документ.КалькулДавалкиГотовПрод.Свое;
|КодМестаХр = Документ.КалькуляцияДавалки.МестоХранения, Документ.КалькулДавалкиГотовПрод.МестоХранения;
|КодМестаХрПрод = Документ.КалькулДавалкиГотовПрод.МестоХраненияПродукции;
|НомерСтроки = Документ.КалькуляцияДавалки.НомерСтроки;
|ТМЦ = Документ.КалькуляцияДавалки.Затрата;
|Продукция = Документ.КалькулДавалкиГотовПрод.Продукция, Документ.КалькуляцияДавалки.Продукция;
|КолвоПрод = Документ.КалькулДавалкиГотовПрод.КвоПродукции;
|Отход1 = Документ.КалькулДавалкиГотовПрод.ВидОтходов;
|КолвоОтход1 = Документ.КалькулДавалкиГотовПрод.КвоОтходГотПрод;
|Колво = Документ.КалькуляцияДавалки.КвоБаз;
|Сумма = Документ.КалькуляцияДавалки.СуммаНач;
|Функция СуммаПрод = Сумма (Сумма);
|Группировка НомерДокумента;
|Группировка НомерСтроки;
// изменено
// |Условие (Свое = 1);
|"
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1) = 1 Цикл
Состояние("Калькуляция "+Запрос.ДатаДокумента);
Если Запрос.УникальныйКод.Вид() = "КалькулДавалкиГотовПрод" Тогда
ДБ.Добавить();
ДБ.COD_ID = СокрЛП(Сред(Запрос.УникальныйКод.ПолучитьПозицию(),20))+"/"+Запрос.НомерСтроки;
ДБ.COD_WORKS = Префикс;
ДБ.COD_SCL = Запрос.КодМестаХрПрод.ПолныйКод();
ДБ.KONTRAGENT = Префикс+"__111112"+Префикс;
ДБ.DATA = Запрос.УникальныйКод.ДокОснование.ДатаДок;
Если ПустоеЗначение(Запрос.Продукция.Артикул) = 1 Тогда
ДБ.ARTIKUL_SR = 0;
Иначе ДБ.ARTIKUL_SR = Запрос.Продукция.Артикул;
КонецЕсли;
ДБ.NUMBER_DOC = Запрос.УникальныйКод.ДокОснование.НомерДок;
ДБ.COD_OPL = 0;
ДБ.PRICE_1C = Запрос.УникальныйКод.ДокОснование.Итог("СуммаНач")/(Запрос.КолвоПрод+Запрос.КолвоОтход1);
ДБ.KOL_VO = Запрос.КолвоПрод;
ДБ.Записать();
Для К = 1 По 1 Цикл
КвоОтх = Запрос.ПолучитьАтрибут("КолвоОтход"+СокрЛП(Строка(К)));
ВидОтх = Запрос.ПолучитьАтрибут("Отход"+СокрЛП(Строка(К)));
Если КвоОтх <> 0 Тогда
ДБ.Добавить();
ДБ.COD_ID = СокрЛП(Сред(Запрос.УникальныйКод.ПолучитьПозицию(),20))+"/"+Запрос.НомерСтроки;
ДБ.COD_WORKS = Префикс;
ДБ.COD_SCL = Запрос.КодМестаХр.ПолныйКод();
ДБ.KONTRAGENT = Префикс+"__111112"+Префикс;
ДБ.DATA = Запрос.УникальныйКод.ДокОснование.ДатаДок;
Если ПустоеЗначение(ВидОтх.Артикул) = 1 Тогда
ДБ.ARTIKUL_SR = 0;
Иначе ДБ.ARTIKUL_SR = ВидОтх.Артикул;
КонецЕсли;
ДБ.NUMBER_DOC = Запрос.УникальныйКод.ДокОснование.НомерДок;
ДБ.COD_OPL = 0;
ДБ.PRICE_1C = Запрос.УникальныйКод.ДокОснование.Итог("СуммаНач")/(Запрос.КолвоПрод+Запрос.КолвоОтход1);
ДБ.KOL_VO = КвоОтх;
ДБ.Записать();
КонецЕсли;
КонецЦикла;
Иначе
Пока Запрос.Группировка(2) = 1 Цикл
Если Запрос.НомерСтроки < 1 Тогда
Продолжить;
КонецЕсли;
ДБР.Добавить();
ДБР.COD_ID = СокрЛП(Сред(Запрос.УникальныйКод.ПолучитьПозицию(),20))+"/"+Запрос.НомерСтроки;
ДБР.COD_WORKS = Префикс;
ДБР.COD_SCL = Запрос.КодМестаХр.ПолныйКод();
ДБР.COD_OPL = 0;
ДБР.KONTRAGENT = Префикс+"__111112"+Префикс;
ДБР.DATA = Запрос.ДатаДокумента;
ДБР.PART_NUMB = Запрос.НомерДокумента;
Если ПустоеЗначение(Запрос.Продукция.Артикул) = 1 Тогда
ДБР.ARTIKUL_GP = 0;
Иначе ДБР.ARTIKUL_GP = Запрос.Продукция.Артикул;
КонецЕсли;
ДБР.NUMBER_DOC = Запрос.НомерДокумента;
Если Запрос.ТМЦ.Вид()="ТМЦ" Тогда
Если ПустоеЗначение(Запрос.ТМЦ.Артикул) = 1 Тогда
ДБР.ARTIKUL_SR = 0;
Иначе ДБР.ARTIKUL_SR = Запрос.ТМЦ.Артикул;
КонецЕсли;
Если Запрос.Колво = 0 Тогда
ДБР.PRICE_1C = 0;
ДБР.KOL_VO = 0;
Иначе
ДБР.PRICE_1C = Запрос.Сумма/Запрос.Колво;
ДБР.KOL_VO = Запрос.Колво;
КонецЕсли;
КонецЕсли;
ДБР.Записать();
КонецЦикла;
КонецЕсли;
КонецЦикла;
ДБ.ЗакрытьФайл();
ДБР.ЗакрытьФайл();
// ----------------------------
// ТекстЗапроса =
// "Период с ВыбНачПериода по ВыбКонПериода;
// |Обрабатывать НеПомеченныеНаУдаление;
// |ОбрабатыватьДокументы Проведенные;
// |УникальныйКод = Документ.БанковскаяВыписка.ТекущийДокумент, Документ.ПриходныйКассовый.ТекущийДокумент, Документ.РасходныйКассовый.ТекущийДокумент;
// |НомерДокумента = Документ.БанковскаяВыписка.НомерДок, Документ.ПриходныйКассовый.НомерДок, Документ.РасходныйКассовый.НомерДок;
// |ДатаДокумента = Документ.БанковскаяВыписка.ДатаДок, Документ.ПриходныйКассовый.ДатаДок, Документ.РасходныйКассовый.ДатаДок;
// |Счет = Документ.БанковскаяВыписка.Счет;
// |Номер = Документ.БанковскаяВыписка.НомерСтроки,Документ.ПриходныйКассовый.НомерПО,Докуме
нт.РасходныйКассовый.НомерРО;
// |ДляВалюты = Документ.БанковскаяВыписка.СчетУчета;
// |ПлюсМинусБанка = Документ.БанковскаяВыписка.ПриходРасход;
// |Субконто = Документ.БанковскаяВыписка.Субконто, Документ.ПриходныйКассовый.Субконто, Документ.РасходныйКассовый.Субконто;
// |Заказ = Документ.БанковскаяВыписка.Заказ, Документ.ПриходныйКассовый.Заказ, Документ.РасходныйКассовый.Заказ;
// |Сумма = Документ.БанковскаяВыписка.СуммаСНДС, Документ.ПриходныйКассовый.СуммаВал, Документ.РасходныйКассовый.СуммаВал;
// |Содержание = Документ.БанковскаяВыписка.Содержание, Документ.ПриходныйКассовый.Примечание, Документ.РасходныйКассовый.Примечание;
// |Группировка НомерДокумента;
// |Группировка Номер;
// |"
//;
// // Если ошибка в запросе, то выход из процедуры
// Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
// Возврат;
// КонецЕсли;
//
// ДБ = СоздатьОбъект("XBase");
// ДБ.ДобавитьПоле("COD_ID","S",15,0);
// ДБ.ДобавитьПоле("COD_WORKS","S",2,0);
// ДБ.ДобавитьПоле("DAT_OPL","D",6,0);
// ДБ.ДобавитьПоле("COD_OPL","N",1,0);
// ДБ.ДобавитьПоле("KONTRAGENT","S",24,0);
// ДБ.ДобавитьПоле("NUM_DOC","S",15,0);
// ДБ.ДобавитьПоле("NAL_BEZN","S",6,0);
// ДБ.ДобавитьПоле("SUMMA","N",20,7);
// ДБ.ДобавитьПоле("COMMENT","S",120,0);
// ИмяФайла = Каталог + "IMP_OPL.dbf";
// ДБ.СоздатьФайл(ИмяФайла);
// Если ДБ.Открыта() = 0 Тогда
// ДБ.ОткрытьФайл(ИмяФайла);
// КонецЕсли;
// Пока Запрос.Группировка(1) = 1 Цикл
// Состояние("Оплата: "+Запрос.НомерДокумента+" "+Запрос.ДатаДокумента);
// Ном = Лев(Запрос.НомерДокумента,2);
// Если (Ном = "БВ") и (Запрос.ДляВалюты.Код = "312") Тогда
// Продолжить;
// КонецЕсли;
// Пока Запрос.Группировка(2) = 1 Цикл
// ДБ.Добавить();
// ДБ.УстановитьЗначениеПоля("COD_WORKS",Префикс);
// ДБ.УстановитьЗначениеПоля("DAT_OPL",Запрос.ДатаДокумента);
// Если Найти(Строка(Запрос.Заказ),"Возврат") <> 0 Тогда
// ДБ.COD_OPL = 4;
// ИначеЕсли Найти(Строка(Запрос.Заказ),"накл.") <> 0 Тогда
// ДБ.COD_OPL = 1;
// ИначеЕсли ((Найти(Строка(Запрос.Заказ),"фактура") <> 0) или (Найти(Строка(Запрос.Заказ),"слуг") <> 0)) или (Найти(Строка(Запрос.Заказ),"Сч. вход.") <> 0) Тогда
// ДБ.COD_OPL = 2;
// ИначеЕсли Найти(Строка(Запрос.Заказ),"Договор") <> 0 Тогда
// ДБ.COD_OPL = 3;
// Иначе ДБ.COD_OPL = 0;
// КонецЕсли;
// Если Запрос.Счет.Код = "711" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","РС__11111117");
// ИначеЕсли Запрос.Счет.Код = "732" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__КРЕДИТ_ПРОЦЕНТ");
// ИначеЕсли Запрос.Счет.Код = "621" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__КРЕДИТ");
// ИначеЕсли Строка(Запрос.Субконто) = "" Тогда
// Если Запрос.Счет.Код = "6411" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__КАССА");
// Иначе ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__ПРОЧЕЕ");
// КонецЕсли;
// ИначеЕсли Запрос.Субконто.Вид() = "Контрагенты" Тогда
// Если ПустоеЗначение(Запрос.Субконто.Артикул) = 1 Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT",0);
// Иначе ДБ.УстановитьЗначениеПоля("KONTRAGENT",Запрос.Субконто.Артикул);
// КонецЕсли;
// ИначеЕсли Запрос.Субконто.Вид() = "НалогиОтчисления" Тогда
// Если ((Запрос.Счет.Код = "651") или (Запрос.Счет.Код = "652")) или
// ((Запрос.Счет.Код = "653") или (Запрос.Счет.Код = "654"))
// Тогда ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__КАССА");
// Иначе ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__НАЛОГИ");
// КонецЕсли;
// ИначеЕсли Запрос.Субконто.Вид() = "Сотрудники" Тогда
// Если Запрос.Субконто.Код = "" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__ЗАРПЛАТА");
// Иначе ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__ПОД_ОТЧЕТ");
// КонецЕсли;
// ИначеЕсли Запрос.Субконто.Вид() = "НашиДенежныеСчета" Тогда
// Если (Запрос.Субконто.Код = "") или (Запрос.Субконто.Код = "") Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__РОЗНИЦА");
// ИначеЕсли Запрос.Субконто.СчетУчета.Код = "301" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__КАССА");
// ИначеЕсли Запрос.Субконто.СчетУчета.Код = "311" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__БАНК");
// КонецЕсли;
// ИначеЕсли Запрос.Субконто.Вид() = "Кредиты" Тогда
// ДБ.УстановитьЗначениеПоля("KONTRAGENT","ЗТ__КРЕДИТ");
// КонецЕсли;
// ДБ.УстановитьЗначениеПоля("NUM_DOC",Запрос.НомерДокумента);
// Если Ном = "БВ" Тогда
// ДБ.COD_ID = СокрЛП(Сред(Запрос.УникальныйКод.ПолучитьПозицию(),20))+"/"+Запрос.Номер;
// ДБ.УстановитьЗначениеПоля("NAL_BEZN","БЕЗНАЛ");
// Иначе
// ДБ.COD_ID = СокрЛП(Сред(Запрос.УникальныйКод.ПолучитьПозицию(),20));
// ДБ.УстановитьЗначениеПоля("NAL_BEZN","НАЛ");
// КонецЕсли;
// Если (Ном = "ПК") или ((Ном = "БВ") и (Запрос.ПлюсМинусБанка = Перечисление.ПлюсМинус.Плюс)) Тогда
// ДБ.УстановитьЗначениеПоля("SUMMA",Запрос.Сумма);
// Иначе ДБ.УстановитьЗначениеПоля("SUMMA",-(Запрос.Сумма));
// КонецЕсли;
// Если ПустоеЗначение(Запрос.Содержание) = 1 Тогда
// ДБ.УстановитьЗначениеПоля("COMMENT",0);
// Иначе ДБ.УстановитьЗначениеПоля("COMMENT",Запрос.Содержание);
// КонецЕсли;
// ДБ.Записать();
// КонецЦикла;
// КонецЦикла;
// ДБ.ЗакрытьФайл();
Таб = СоздатьОбъект("Таблица");
Если СписокКонтра.РазмерСписка() > 0 Тогда
Таб.ВывестиСекцию("ШапкаКонтра");
Для К = 1 По СписокКонтра.РазмерСписка() Цикл
Таб.ВывестиСекцию("Контра");
КонецЦикла;
КонецЕсли;
Если СписокТМЦ.РазмерСписка() > 0 Тогда
Таб.ВывестиСекцию("ШапкаТМЦ");
Для К = 1 По СписокТМЦ.РазмерСписка() Цикл
Таб.ВывестиСекцию("ТМЦ");
КонецЦикла;
КонецЕсли;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры
// ==================
Процедура ПриЗакрытии()
глСохранитьЗначение("ЭкспортДанных","Каталог",Каталог);
глСохранитьЗначение("ЭкспортДанных","Новые",Новые);
глСохранитьЗначение("ЭкспортДанных","ТМЦКод",ТМЦКод);
глСохранитьЗначение("ЭкспортДанных","КонтраКод",КонтраКод);
КонецПроцедуры
// ==================
Процедура ПриОткрытии()
Каталог = глВосстановитьЗначение("ЭкспортДанных","Каталог");
Новые = глВосстановитьЗначение("ЭкспортДанных","Новые");
ТМЦКод = глВосстановитьЗначение("ЭкспортДанных","ТМЦКод");
КонтраКод = глВосстановитьЗначение("ЭкспортДанных","КонтраКод");
КонецПроцедуры
неужели никто не знает в чем проблема?
Колво = Документ.ПриходнаяНакладная.Кво, Документ.РасходнаяНакладная.Кво, Документ.ВозвратнаяНакладная.Кво, Документ.ВозвратПоставщику.Кво, Документ.Перемещение.Кво;
Вот то ,что попадает в количество. Посмотрите, какой реквизит в выше указанных документах кг.,а который ящики и замените в запросе.
а как узнать, какой реквизит в документе расходной накладной?
В конфигураторе откройте форму документа расходная накладная, найдите в табличной части колонку в которой отображаются килограммы и идентификатор этой колонки и будет нужным реквизитом. Но мне кажется - он и должен был бы быть Кво, так как ящики - это тара. Но может у Вас по другому. Я не знаю как сюда картинку вставить, но Вы и так справитесь-правой кнопкой на Документе расходнаянакладная (в дереве документов конфигурации )=редактировать форму, и ищите колонку в которой у Вас кг. На ней два раза и в окошке свойств поле идентификатор и есьт реквизит который указан в запросе как : Документ.Расходнаяакладная.Кво.
1. это разовая задача?
2. что офис делает с вашей выгрузкой? у них 1С или другая программа?
3. менять в документах ничего не следует. они проведены и закрыты. можно нарушить итоги.
4. запрос обычно строится по БИ. здесь по документам. по документам нормально тоже, но тогда тщательнее нужно все проверки ставить, проведен ли документ, помечен на удаление и тд.
5. исходя из того, что есть... можно пересчитать в самой обработке. вставить такое:
Если Ном="РасходнаяНакладная" Тогда
//Пересчитать Кво и Цену по ед измерения
// КилЗаЯщик - содержит сколько килограмм хранится в одном ящике. допустим 10 килограммов в ящике.
КилЗаЯщик=10;
КолВо=Запрос.КолВо/КилограммЗаЯщик;
Ц = Запрос.Сумма/?(Запрос.Колво = 0,1,Запрос.Колво);
КонецЕсли;
ДБ = СоздатьОбъект("XBase");
СоздатьДБ(ДБ,"IMP_IN.dbf");
ДБР = СоздатьОбъект("XBase");
СоздатьДБ(ДБР,"IMP_OUT.dbf");
Пока Запрос.Группировка(1) = 1 Цикл
Состояние("Приход/Расход: "+Запрос.НомерДокумента+" "+Запрос.ДатаДокумента);
Пока Запрос.Группировка(2) = 1 Цикл
Если ПустоеЗначение(Запрос.ТМЦ) = 1 Тогда
Продолжить;
КонецЕсли;
Ном = Запрос.УникальныйКод.Вид();
Если Ном="РасходнаяНакладная" Тогда
//Пересчитать Кво и Цену по ед измерения
// КилЗаЯщик - содержит сколько килограмм хранится в одном ящике. допустим 10 килограммов в ящике.
КилЗаЯщик=10;
КолВо=Запрос.КолВо/КилограммЗаЯщик;
Ц = Запрос.Сумма/?(Запрос.Колво = 0,1,Запрос.Колво);
КонецЕсли;
Если Ном = "Перемещение" Тогда
Если Ном="РасходнаяНакладная" Тогда
//Пересчитать Кво и Цену по ед измерения
// КилЗаЯщик - содержит сколько килограмм хранится в одном ящике. допустим 10 килограммов в ящике.
КилЗаЯщик=10;
КолВо=Запрос.КолВо/КилЗаЯщик;
Ц = Запрос.Сумма/?(Колво = 0,1,Колво);
КонецЕсли;
Это Вы посмотрели в печатной форме, я не правильно наверное объяснил. Вы открываете расходную накладную и в той части где заполняется товар надо найти нужную колонку. По логике и КвоКг должно было сработать, но видно в модуле печати есть какие то ухищрения. Наверное КвоКГ = рассчитываемое поле или еще как. Килограммы присутствуют и в печатной форме и в самом документе или только когда печатают накладную? Суть Вы уловили, осталось найти эти килограммы
[quote name='Домовик' date='23.11.11, 15:53' post='37380']
4. запрос обычно строится по БИ. здесь по документам. по документам нормально тоже, но тогда тщательнее нужно все проверки ставить, проведен ли документ, помечен на удаление и тд.
[code=1c] Если Ном="РасходнаяНакладная" Тогда
в БИ как раз скорее всего в нужных единицах.
как вариант при записи в ДБФ можно проверять в каких единицах и, если не в килограммах, то пересчитывать по коэфициенту.
да, в документе есть и кг и ящики
Спросите , а Домовик и Алекс перепишут Вам запрос на БИ ? Или Вы это будете делать сами ? Если в д-те есть реквизит кг. и ящ. то я не вижу проблемы исправить запрос, если нет, то переделывать его тоже не нужно, а в существующем ,когда переменной присваиваится кол-во пересчитать, так как это делается в модуле печати расходной. При чем тут БИ хотелось бы знать ?
Когда Вы поменяли Кво на КвоКг - это очень тепло, горячо можно сказать, вот только надо посмотреть что это за реквизит. Не тратте время на дурацкие подсказки - Вы у цели. Напрягитесь и разберитесь сами, иначе Вас так запутают, что придется начинать с начала.
прінт скрином сфоткайте свою накладну в сеансі Підприємство.
тут був мал.
http://pro1c.org.ua/redirect.php?http://piccy.info/view3/2272729/5ee38a20434a500ac06553fb40992106/
А вот в печатной форме есть и ящики и кг
http://pro1c.org.ua/redirect.php?http://piccy.info/view3/2272742/b513f2c82bbf2df6536ddd8c591a9bda/
В печатной форме идет пересчет ящиков в кг. Кво*Коэффициент. Надо и в запросе это учесть. Сейчас найду Ваш запрос и попробую изобразить.
Есть два варианта - изменить запррос:
|Коэф = Документ.ПриходнаяНакладная.Коэффициент, Документ.РасходнаяНакладная.Коэффициент, Документ.ВозвратнаяНакладная.Коэффициент, Документ.ВозвратПоставщику.Коэффициент, Документ.Перемещение.Коэффициент;
|Кол = Документ.ПриходнаяНакладная.Кво, Документ.РасходнаяНакладная.Кво, Документ.ВозвратнаяНакладная.Кво, Документ.ВозвратПоставщику.Кво, Документ.Перемещение.Кво;
|Функция Колво = Сумма(Кол*Коэф);
|Коэф = Документ.ПриходнаяНакладная.Коэффициент, Документ.РасходнаяНакладная.Коэффициент, Документ.ВозвратнаяНакладная.Коэффициент, Документ.ВозвратПоставщику.Коэффициент,
Процедура Заполнить(ДБ,ТМЦ)
...
Если Запрос.УникальныйКод.Вид() = "Перемещение" Тогда
ДБ.KOL_VO = Запрос.Колво*Запрос.Коэф;
ИначеЕсли Запрос.Цена + Запрос.Колво = 0 Тогда
ДБ.УстановитьЗначениеПоля("PRICE_1C",Запрос.Сумма);
ДБ.УстановитьЗначениеПоля("KOL_VO",1);
ИначеЕсли Запрос.Цена = 0 Тогда
ДБ.PRICE_1C = Запрос.Сумма/Запрос.Колво;
ДБ.KOL_VO = Запрос.Колво*Запрос.Коэф;
ИначеЕсли Запрос.Колво = 0 Тогда
ДБ.PRICE_1C = Запрос.Цена;
ДБ.KOL_VO = 1;
Иначе
ДБ.УстановитьЗначениеПоля("PRICE_1C",Запрос.Цена);
ДБ.УстановитьЗначениеПоля("KOL_VO",Запрос.Колво*Запрос.Коэф);
КонецЕсли;
по першому варіанту
закоментувати існуючий рядок
// |КолВо = Документ.ПриходнаяНакладная.Кво, Документ.РасходнаяНакладная.Кво, Документ.ВозвратнаяНакладная.Кво, Документ.ВозвратПоставщику.Кво, Документ.Перемещение.Кво;
// |КолВо = Документ.ПриходнаяНакладная.Кво, Документ.РасходнаяНакладная.Кво, Документ.ВозвратнаяНакладная.Кво, Документ.ВозвратПоставщику.Кво, Документ.Перемещение.Кво;
ОГРОМНОЕ всем СПАСИБО!
Теперь считает кг.
Воспользовался первым способом
|Коэф = Документ.ПриходнаяНакладная.Коэффициент, Документ.РасходнаяНакладная.Коэффициент, Документ.ВозвратнаяНакладная.Коэффициент, Документ.ВозвратПоставщику.Коэффициент, Документ.Перемещение.Коэффициент;
|Кол = Документ.ПриходнаяНакладная.Кво, Документ.РасходнаяНакладная.Кво, Документ.ВозвратнаяНакладная.Кво, Документ.ВозвратПоставщику.Кво, Документ.Перемещение.Кво;
|Функция Колво = Сумма(Кол*Коэф);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua