|
Программное создание "Реализация товаров и услуг" | ☑ | ||
---|---|---|---|---|
0
Pr0gLamer
14.11.12
✎
18:15
|
Добрый день! Опыта работы в 8 - нет совсем
Конфигурация - 8.2 Бухгалтерия (2.0.40.7) Необходимо программно создать "Реализация товаров и услуг" и провести При создании интерактивно - проводится замечательно,при программном - пишет "Не списано 56 шт товара 0006 MLHS 17/4*100/38 7.5J h 69.1, счет учета 41.01". Товар на складе есть.Код обработки: ТЗДанных = Новый ТаблицаЗначений; ТЗДанных.Колонки.Добавить("Товар",Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); ТЗДанных.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число")); ТЗДанных.Колонки.Добавить("Единица",Новый ОписаниеТипов("СправочникСсылка.КлассификаторЕдиницИзмерения")); ТЗДанных.Колонки.Добавить("Коэффициент",Новый ОписаниеТипов("Число")); ТЗДанных.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число")); ТЗДанных.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число")); ТЗДанных.Колонки.Добавить("СтавкаНДС",Новый ОписаниеТипов("ПеречислениеСсылка.СтавкиНДС")); ТЗДанных.Колонки.Добавить("СчетУчета",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный")); ТЗДанных.Колонки.Добавить("СчетДоходов",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный")); ТЗДанных.Колонки.Добавить("СчетРасходов",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный")); ТЗДанных.Колонки.Добавить("СчетУчетаНДСПоРеализации",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный")); Путь = ЭлементыФормы.ИмяФайла.Значение; Если ПустаяСтрока(Путь) Тогда Сообщить("Не выбран путь к папке выгрузки!!!"); Возврат; КонецЕсли; ВыбФайл = Новый Файл(Путь); Если НЕ(ВыбФайл.ЭтоКаталог()) Тогда Сообщить("Необходмио выбрать папку с файлами выгрузки,а не отдельный файл!!!"); Возврат; КонецЕсли; НайденныеФайлы = НайтиФайлы(Путь, "*.xls"); Для Каждого Файл Из НайденныеФайлы Цикл Док = ПолучитьCOMОбъект(Файл.ПолноеИмя); КоличествоСтраниц = 1; счСтрок = 0; ВидДокумента = Док.Sheets(1).Cells(1,1).Value; Для ТекНомер = 1 По КоличествоСтраниц Цикл НомерДок = Док.Sheets(ТекНомер).Cells(1,2).Value; ДатаДок = Док.Sheets(ТекНомер).Cells(1,3).Value; Клиент = Док.Sheets(ТекНомер).Cells(2,1).Value; //ВалютаДокумента = Док.Sheets(ТекНомер).Cells(2,2).Value; //**************************************************** КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию(Клиент); Если КонтрагентСсылка.Пустая() Тогда Предупреждение("Не найден контрагент"+". Документ не будет создан!!!"); Возврат; КонецЕсли; ОрганизацияСсылка = Справочники.Организации.НайтиПоКоду("000000001"); Если ОрганизацияСсылка.Пустая() Тогда Предупреждение("Не найдена основная фирма"+". Документ не будет создан!!!"); Возврат; КонецЕсли; СкладСсылка = Справочники.Склады.НайтиПоНаименованию("Основной склад"); Если СкладСсылка.Пустая() Тогда Предупреждение("Не найдена основной склад"+". Документ не будет создан!!!"); Возврат; КонецЕсли; ДоговорСсылка = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор",Истина,,КонтрагентСсылка); СкладСсылка = Справочники.Склады.НайтиПоНаименованию("Основной склад"); Если ДоговорСсылка.Пустая() Тогда Предупреждение("Не найден основной договор"+". Документ не будет создан!!!"); Возврат; КонецЕсли; стрВалютаДокумента = "руб."; //ВСЕГДА рубль ВалютаСсылка = Справочники.Валюты.НайтиПоНаименованию(стрВалютаДокумента,Истина); Если ДоговорСсылка.Пустая() Тогда Предупреждение("Не найдена валюта: "+стрВалютаДокумента); Возврат; КонецЕсли; Для счСтроки = 4 По Док.ActiveSheet.UsedRange.Rows.Count Цикл Код1С = Док.Sheets(ТекНомер).Cells(СчСтроки,1).Value; Количество = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value; стрЕдиница = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value; Коэффициент = Док.Sheets(ТекНомер).Cells(СчСтроки,4).Value; Цена = Док.Sheets(ТекНомер).Cells(СчСтроки,5).Value; Сумма = Док.Sheets(ТекНомер).Cells(СчСтроки,8).Value; стрНомерГТД = Док.Sheets(ТекНомер).Cells(СчСтроки,11).Value; стрСтрана = Док.Sheets(ТекНомер).Cells(СчСтроки,12).Value; //**************************************************** Код1С = Формат(Число(Код1С),"ЧГ=0"); ТоварСсылка = Справочники.Номенклатура.НайтиПоКоду(Код1С); Если ТоварСсылка.Пустая() Тогда Сообщить("Не найден товар с кодом: "+Код1С+". Документ не будет создан!!!"); Возврат; КонецЕсли; Если ТоварСсылка.Пустая() Тогда Иначе ОбъектНоменклатуры = ТоварСсылка.ПолучитьОбъект(); СсылкаСтраны = Справочники.КлассификаторСтранМира.НайтиПоНаименованию(стрСтрана); Если СсылкаСтраны.Пустая() Тогда Иначе ОбъектНоменклатуры.СтранаПроисхождения = СсылкаСтраны; ОбъектНоменклатуры.Записать(); КонецЕсли; СсылкаНомераГТД = Справочники.НомераГТД.НайтиПоКоду(стрНомерГТД); Если СсылкаНомераГТД.Пустая() Тогда ОбъектНомераГТД = Справочники.НомераГТД.СоздатьЭлемент(); ОбъектНомераГТД.Код = СокрЛП(стрНомерГТД); ОбъектНомераГТД.Записать(); ОбъектНоменклатуры.НомерГТД = ОбъектНомераГТД.Ссылка; ОбъектНоменклатуры.Записать(); Иначе ОбъектНоменклатуры.НомерГТД = СсылкаНомераГТД; ОбъектНоменклатуры.Записать(); КонецЕсли; Конецесли; Если СокрЛП(стрЕдиница) = "шт." Тогда ЕдиницаСсылка = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); Иначе ЕдиницаСсылка = Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка(); Конецесли; СтавкаНДССсылка = Перечисления.СтавкиНДС.НДС18; СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"); СчетДоходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"); СчетРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1"); СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03"); НоваяСтрока = ТЗДанных.Добавить(); НоваяСтрока.Товар = ТоварСсылка; НоваяСтрока.Количество = Число(Количество); НоваяСтрока.Единица = ЕдиницаСсылка; НоваяСтрока.Коэффициент = Число(Коэффициент); НоваяСтрока.Цена = Число(Цена); НоваяСтрока.Сумма = Число(Сумма); НоваяСтрока.СтавкаНДС = СтавкаНДССсылка; НоваяСтрока.СчетУчета = СчетУчета; НоваяСтрока.СчетДоходов = СчетДоходов; НоваяСтрока.СчетРасходов = СчетРасходов; НоваяСтрока.СчетУчетаНДСПоРеализации = СчетУчетаНДСПоРеализации; КонецЦикла; КонецЦикла; ТипЦенСсылка = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основная цена продажи"); Если ТипЦенСсылка.Пустая() Тогда Сообщить("Не найден основной тип цен"+". Документ не будет создан!!!"); Возврат; КонецЕсли; //***************************************************** Если СокрЛП(ВидДокумента) = "РасходнаяНакладная" Тогда НовДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); НовДок.Дата = Дата(ДатаДок); НовДок.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия; НовДок.УстановитьНовыйНомер(); //под вопросом НовДок.Организация=ОрганизацияСсылка; НовДок.Склад = СкладСсылка; НовДок.Контрагент = КонтрагентСсылка; НовДок.ДоговорКонтрагента = ДоговорСсылка; НовДок.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически; НовДок.ВалютаДокумента = ВалютаСсылка; НовДок.КурсВзаиморасчетов = 1; НовДок.ТипЦен = ТипЦенСсылка; НовДок.УчитыватьНДС = Истина; НовДок.СуммаВключаетНДС = Ложь; НовДок.БанковскийСчетОрганизации = Справочники.БанковскиеСчета.ПустаяСсылка(); НовДок. //ФормаДока = НовДок.ПолучитьФорму("ФормаДокумента"); //Колонки = ФормаДока.ЭлементыФормы.Товары.Колонки; //Колонки.СтавкаНДС.Видимость = Истина; //Колонки.СуммаНДС.Видимость = Истина; //Н = 0; Для Каждого ТекущаяСтрока Из ТЗДанных Цикл // заполним табличную часть документа, из ТаблицыЗначений НС = НовДок.Товары.Добавить(); НС.Номенклатура = ТекущаяСтрока["Товар"]; НС.Количество = ТекущаяСтрока.Количество; НС.ЕдиницаИзмерения = ТекущаяСтрока.Единица; НС.Коэффициент = ТекущаяСтрока.Коэффициент; НС.Цена = ТекущаяСтрока.Цена; НС.Сумма = ТекущаяСтрока.Сумма; НС.СтавкаНДС = ТекущаяСтрока.СтавкаНДС; НС.СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.ПустаяСсылка(); НС.СчетУчета = ТекущаяСтрока.СчетУчета; НС.СчетДоходов = ТекущаяСтрока.СчетДоходов; НС.СчетРасходов = ТекущаяСтрока.СчетРасходов; НС.СчетУчетаНДСПоРеализации = ТекущаяСтрока.СчетУчетаНДСПоРеализации; НС.Себестоимость = 0; НС.ДокументОприходования = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка(); НС.ПереданныеСчетУчета = ПланыСчетов.Хозрасчетный.ПустаяСсылка(); КонецЦикла; НовДок.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01"); НовДок.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02"); // НовДок.ОтражатьВБухгалтерскомУчете =True; // НовДок.ОтражатьВНалоговомУчете =True; // НовДок.ОтражатьВУправленческомУчете =True; НовДок.Записать(); |
|||
1
Pr0gLamer
14.11.12
✎
18:16
|
Может кто сталкивался - нужно процедуру какаю вызвать аль реквизит не заполнен?
|
|||
2
alex74
14.11.12
✎
18:17
|
а если его программно создать, но не проводить. А потом попытаться провести интерактивно и посмотреть, а почему это он не проводится?
|
|||
3
vmv
14.11.12
✎
18:18
|
(0) обертки-функции сделай для
чтения данных инициализации Тз заполнения тз загрузки тз в тч а так читать сложно, да и глюки постоянно будешь ловить |
|||
4
Конфигуратор1с
14.11.12
✎
18:18
|
(0)Простите, Вам говорили что Вы извращенец?
|
|||
5
Pr0gLamer
14.11.12
✎
18:20
|
(4) по большей части нет.Мой первый код на 8(
|
|||
6
vmv
14.11.12
✎
18:21
|
если эксель файл плоский как фонера, то гуги типовые универсальные обработки - загрузка из табличного документа
|
|||
7
Конфигуратор1с
14.11.12
✎
18:22
|
(5) " ОрганизацияСсылка = Справочники.Организации.НайтиПоКоду("000000001");
Если ОрганизацияСсылка.Пустая() Тогда Предупреждение("Не найдена основная фирма"+". Документ не будет создан!!!"); Возврат; КонецЕсли; СкладСсылка = Справочники.Склады.НайтиПоНаименованию("Основной склад"); Если СкладСсылка.Пустая() Тогда Предупреждение("Не найдена основной склад"+". Документ не будет создан!!!"); Возврат; КонецЕсли; ДоговорСсылка = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор",Истина,,КонтрагентСсылка); СкладСсылка = Справочники.Склады.НайтиПоНаименованию("Основной склад"); Если ДоговорСсылка.Пустая() Тогда Предупреждение("Не найден основной договор"+". Документ не будет создан!!!"); Возврат; КонецЕсли; стрВалютаДокумента = "руб."; //ВСЕГДА рубль ВалютаСсылка = Справочники.Валюты.НайтиПоНаименованию(стрВалютаДокумента,Истина); Если ДоговорСсылка.Пустая() Тогда Предупреждение("Не найдена валюта: "+стрВалютаДокумента); Возврат; КонецЕсли; " - сие выносите на форму и обращаетесь как к реквизитам формы, а не в цикле ищите в справочнике - по факту запрос делаете к базе. |
|||
8
vmv
14.11.12
✎
18:23
|
(5) не важно на чем ты пишешь, код должен быть структирован в процедуры и функции по логике дифференцированных операций.
В вашем случае чтение, заполнение контейнера (тз), загрузка контейнера в объект(документ), запись документа - это и есть логически дифференцированные операции |
|||
9
Конфигуратор1с
14.11.12
✎
18:24
|
(7)+
СтавкаНДССсылка = Перечисления.СтавкиНДС.НДС18; СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"); СчетДоходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"); СчетРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1"); СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03"); - выносите за пределы цикла хотя бы. Зачем ное количество раз определять переменные с постоянным значением? |
|||
10
vmv
14.11.12
✎
18:24
|
искать по наименованию - большая мина если обработка не разовая
|
|||
11
Конфигуратор1с
14.11.12
✎
18:26
|
НовДок.СуммаВключаетНДС = Ложь; - он и так ложь
|
|||
12
Конфигуратор1с
14.11.12
✎
18:26
|
(10)+100500
|
|||
13
Конфигуратор1с
14.11.12
✎
18:27
|
НС.Номенклатура = ТекущаяСтрока["Товар"];
НС.Количество = ТекущаяСтрока.Количество; НС.ЕдиницаИзмерения = ТекущаяСтрока.Единица; НС.Коэффициент = ТекущаяСтрока.Коэффициент; НС.Цена = ТекущаяСтрока.Цена; НС.Сумма = ТекущаяСтрока.Сумма; НС.СтавкаНДС = ТекущаяСтрока.СтавкаНДС; - почитайте такой чудный метод как ЗаполнитьЗначениеСвойств() |
|||
14
Конфигуратор1с
14.11.12
✎
18:27
|
НС.ПереданныеСчетУчета = ПланыСчетов.Хозрасчетный.ПустаяСсылка(); - та же байда что и в (11). Если реквизит не заполнен, значит там и так пустая ссылка
|
|||
15
Конфигуратор1с
14.11.12
✎
18:28
|
В общем, перепишете, тогда дальше будем смотреть чего ему не хватает
|
|||
16
bazvan
14.11.12
✎
18:29
|
(9) счета лучше проставлять экспортной процедуро, также как и раситывать тч
|
|||
17
bazvan
14.11.12
✎
18:31
|
Вообщем на все про все строчек 10 кода
|
|||
18
vmv
14.11.12
✎
18:34
|
(0) что касается проблемы в сабже, то "ошибка" списания скорее всего заключена в двух причинах
1. позиция реристратора(дата+время+гуид ссылки объекта) совсем не та, согласно которой можно увидеть "Товар на складе есть" 2. криво выполняються(очищаьтся) движения для уже созданных |
|||
19
Pr0gLamer
14.11.12
✎
18:35
|
Этот запрос при программном заполнении возвращает пустое дерево значений,а при интерактвном - в нём есть одна строка,от этого дальше и пляшем.Текст взял из "УправлениеЗапасамиПартионныйУчет",функция ПолучитьТаблицуПартийНаСкладах
"ВЫБРАТЬ Остатки.Счет КАК СчетУчета, Остатки.Подразделение КАК Подразделение, Остатки.Субконто1 КАК Номенклатура, &ПустаяДата КАК ДокументОприходованияДата, &ПустаяПартия КАК ДокументОприходования, &ПустаяДата КАК ДокументОтгрузкиДата, &ПустаяОтгрузка КАК ДокументОтгрузки, &ПустойСклад КАК Склад, Остатки.Организация КАК Организация, СУММА(ВЫБОР КОГДА Остатки.КоличествоОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.КоличествоОстатокДт КОНЕЦ) КАК КоличествоПоСкладу, СУММА(ВЫБОР КОГДА Остатки.КоличествоОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.КоличествоОстатокДт КОНЕЦ) КАК Количество, СУММА(ВЫБОР КОГДА Остатки.СуммаОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.СуммаОстатокДт КОНЕЦ) КАК Стоимость, СУММА(ВЫБОР КОГДА Остатки.СуммаНУОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.СуммаНУОстатокДт КОНЕЦ) КАК СтоимостьНУ, СУММА(ВЫБОР КОГДА Остатки.СуммаПРОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.СуммаПРОстатокДт КОНЕЦ) КАК СтоимостьПР, СУММА(ВЫБОР КОГДА Остатки.СуммаВРОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.СуммаВРОстатокДт КОНЕЦ) КАК СтоимостьВР ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментКон, Счет В (&СчетаУчетаН), &ВидыСубконтоН,(Подразделение В (&ФильтрПодразделения) ИЛИ Подразделение ЕСТЬ NULL) И Субконто1 В (&Номенклатура) И Организация В (&Организации)) КАК Остатки СГРУППИРОВАТЬ ПО Остатки.Счет, Остатки.Подразделение, Остатки.Субконто1, Остатки.Организация" |
|||
20
Pr0gLamer
14.11.12
✎
18:36
|
(18) а с этим как бороться?
|
|||
21
vmv
14.11.12
✎
18:41
|
(20) сделать код понятным и понимать, что так
ДатаДок = Док.Sheets(ТекНомер).Cells(1,3).Value; делать нельзя |
|||
22
floody
14.11.12
✎
18:47
|
(20) по заполнению счетов учета и пересчетам строк ТЧ (16)(17) поверь
|
|||
23
dangerouscoder
14.11.12
✎
18:47
|
(20) отладчик отменили? Проверь какие значения в запрос передаются в обоих случаях.
|
|||
24
Pr0gLamer
14.11.12
✎
19:03
|
есть у кого-то пример?
|
|||
25
vmv
14.11.12
✎
19:07
|
(24) те у кого есть - все жадные, поверь
|
|||
26
bazvan
14.11.12
✎
19:09
|
(24) пример чего????
|
|||
27
bazvan
14.11.12
✎
19:09
|
исходные данные какие?
|
|||
28
Pr0gLamer
14.11.12
✎
19:10
|
самое интересное,что если открыть созданный программно документ и в нём прогрвамно осуществить подбор,то он тоже не проведётся
|
|||
29
Pr0gLamer
14.11.12
✎
19:11
|
(26) программного формирования документа,желательно "еализация товаров и услуг"
|
|||
30
Pr0gLamer
14.11.12
✎
19:12
|
(27) выгрузка из 7.7 торговли самописная.Я примерно такой же обрабокой формирую поступление товаров - прекрасно отрабатывает
|
|||
31
bazvan
14.11.12
✎
19:12
|
(29) какие входные данные???
|
|||
32
vmv
14.11.12
✎
19:14
|
(29) тоже пример записи 100500 документов расхода с регистрацией на начало дня?
|
|||
33
prog01
14.11.12
✎
19:15
|
||||
34
vmv
14.11.12
✎
19:15
|
(30) при быстрой продаже программная обработка расход/приход должна быть ювелирно точной в позициях регистрации - подумай над этим и не парь моск
|
|||
35
Pr0gLamer
14.11.12
✎
19:15
|
(31) excel документ вида
Код в базе Кол-во Ед Коэф Цена Сумма без скидки Скидка Сумма СтавкиНДС СуммаНДС ГТД Страна |
|||
36
prog01
14.11.12
✎
19:19
|
ЗагрузкаДанныхИзТабличногоДокумента
итс |
|||
37
prog01
14.11.12
✎
19:23
|
||||
38
Pr0gLamer
14.11.12
✎
19:30
|
спасибо(37)
|
|||
39
bazvan
14.11.12
✎
19:33
|
типа такого
|
|||
40
Pr0gLamer
14.11.12
✎
19:41
|
(39) крачавчик
тебе двойное спасибо |
|||
41
bazvan
14.11.12
✎
19:46
|
(40) я работоспособность не проверял полностью, там смысл накидан.
|
|||
42
Pr0gLamer
14.11.12
✎
20:03
|
(41) собственно результат не поменялся
|
|||
43
bazvan
14.11.12
✎
20:08
|
(42) какой результат???
|
|||
44
Pr0gLamer
14.11.12
✎
20:09
|
Не списано ... ед товара
|
|||
45
bazvan
14.11.12
✎
20:11
|
(44) а интерактивно про водится??? Тоесть ты открываеш созданный документ, нажимаеш провести и он проводится???
|
|||
46
Pr0gLamer
14.11.12
✎
20:15
|
(45) нет
|
|||
47
Pr0gLamer
14.11.12
✎
20:15
|
а если создам полностью интерактивно - тогда да
|
|||
48
bazvan
14.11.12
✎
20:20
|
(46) занчит что то не дозаполнено.
Проверя счета учета, чудес не бывает |
|||
49
Pr0gLamer
15.11.12
✎
12:16
|
Действительно,руки с утра выпрямились,всё заработало)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |