egerLESHIK
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Есть две ТЗ данные из которых сливаются в третью. Однако в одной ТЗ из двух первых количество строк превышает чем во второй (из тех же двух), поэтому по нижепреведенному коду не попадает в третью ТЗ, а сообщает ошибкой типа: "Номер за пределами значения!" А нужно чтобы вносились данные из первой ТЗ, а если во втрой ТЗ уже строка с данными отсутствует, тогда то ли создать новую с нулевыми значениями, чтобы она внеслась параллельно со строкой с данными из первой таблицы, то ли я не знаю что там еще можно сделать... Впрочем сам код: Цитата: Процедура ИзмЗагрДанные() Если АнПрКа.КоличествоСтрок()>0 Тогда Если Вопрос("Удалить все строки табличной части документа?","Да+Нет")="Да" Тогда АнПрКа.УдалитьСтроки(); КонецЕсли; КонецЕсли; ТЗЭксп.Свернуть("НомерСтр,НомерЧека,Наименование,Цена,ПризнакТМЦ,УчНалКвТМЦ,Артикул","ФактКолво"); ТЗИмпЧ.Свернуть("НомерЧека,Тип,ДатаЧека,КодЭкка,НомерСтр,Артикул,Цена,Сумма","ФактКолво"); Для сч=1 по ТЗЭксп.КоличествоСтрок() Цикл ТЗИмпЧ.ПолучитьСтрокуПоНомеру(сч); ТЗЭксп.ПолучитьСтрокуПоНомеру(сч); АнПрКа.НоваяСтрока(); //заполняем строку новой таблицы АнПрКа.НаимЭксп=ТЗЭксп.Наименование; АнПрКа.АртЭксп=ТЗЭксп.Артикул; АнПрКа.КТЭксп=ТЗЭксп.НомерСтр; АнПрКа.КвоЭксп=ТЗЭксп.ФактКолво; АнПрКа.ЦенаЭксп=ТЗЭксп.Цена; АнПрКа.СуммаЭксп=ТзЭксп.ФактКолво*ТЗЭксп.Цена; АнПрКа.АртИмп=ТЗИмпЧ.Артикул; АнПрКа.КТимп=ТЗИмпЧ.НомерСтр; АнПрКа.КвоИмп=ТЗИмпЧ.ФактКолво; АнПрКа.ЦенаИмп=ТЗИмпЧ.Цена; АнПрКа.СуммаИмп=ТЗИмпЧ.ФактКолво*ТЗИмпЧ.Цена; АнПрКа.КвоРазн=АнПрКа.КвоЭксп-АнПрКа.КвоИмп; АнПрКа.СуммаРазн=АнПрКа.СуммаЭксп-АнПрКа.СуммаИмп; // АнПрКа.КонтрЦена=АнПрКа.СуммаРазн/АнПрКа.КвоРазн; КонецЦикла; АнПрКа.Сортировать("КТЭксп,НаимЭксп,АртЭксп",); КонецПроцедуры | А вот что собственно выдает, если количество строк по таблице ТЗЭксп больше, чем в ТЗИмпЧ: Цитата: ТЗИмпЧ.ПолучитьСтрокуПоНомеру(сч); {Обработка.ИмпортДанныхКА.Форма.Модуль(702)}: Номер за пределами значения! | Немного переделал код теперрь добавляет строки с пустыми значениями, однако при сортировкепустые строки выводит в самом начале перед заполнеными строками, а нужно, чтобы выводило в конце - после запоолненых строк. Добавленный код выделен полужирным шрифтом. Цитата: Процедура ИзмЗагрДанные() Если АнПрКа.КоличествоСтрок()>0 Тогда Если Вопрос("Удалить все строки табличной части документа?","Да+Нет")="Да" Тогда АнПрКа.УдалитьСтроки(); КонецЕсли; КонецЕсли; ТЗЭксп.Свернуть("НомерСтр,НомерЧека,Наименование,Цена,ПризнакТМЦ,УчНалКвТМЦ,Артикул","ФактКолво"); ТЗИмпЧ.Свернуть("НомерЧека,Тип,ДатаЧека,КодЭкка,НомерСтр,Артикул,Цена,Сумма","ФактКолво"); Для сч=1 по ТЗЭксп.КоличествоСтрок() Цикл ТЗИмпЧ.ПолучитьСтрокуПоНомеру(сч); ТЗЭксп.ПолучитьСтрокуПоНомеру(сч); АнПрКа.НоваяСтрока(); //заполняем строку новой таблицы АнПрКа.НаимЭксп=ТЗЭксп.Наименование; АнПрКа.АртЭксп=ТЗЭксп.Артикул; АнПрКа.КТЭксп=ТЗЭксп.НомерСтр; АнПрКа.КвоЭксп=ТЗЭксп.ФактКолво; АнПрКа.ЦенаЭксп=ТЗЭксп.Цена; АнПрКа.СуммаЭксп=ТзЭксп.ФактКолво*ТЗЭксп.Цена; АнПрКа.АртИмп=ТЗИмпЧ.Артикул; АнПрКа.КТимп=ТЗИмпЧ.НомерСтр; АнПрКа.КвоИмп=ТЗИмпЧ.ФактКолво; АнПрКа.ЦенаИмп=ТЗИмпЧ.Цена; АнПрКа.СуммаИмп=ТЗИмпЧ.ФактКолво*ТЗИмпЧ.Цена; Е с л и Т З И м п Ч . К о л и ч е с т в о С т р о к ( ) < Т З Э к с п . К о л и ч е с т в о С т р о к ( ) Т о г д а Т З И м п Ч . Н о в а я С т р о к а ( с ч ) ; А н П р К а . А р т И м п = 0 ; А н П р К а . К Т и м п = 0 ; А н П р К а . К в о И м п = 0 ; А н П р К а . Ц е н а И м п = 0 ; А н П р К а . С у м м а И м п = 0 ; К о н е ц Е с л и ; АнПрКа.КвоРазн=АнПрКа.КвоЭксп-АнПрКа.КвоИмп; АнПрКа.СуммаРазн=АнПрКа.СуммаЭксп-АнПрКа.СуммаИмп; // АнПрКа.КонтрЦена=АнПрКа.СуммаРазн/АнПрКа.КвоРазн; КонецЦикла; АнПрКа.Сортировать("КТЭксп,НаимЭксп,АртЭксп",); КонецПроцедуры | |